求教如何与 apple store 审核斗智斗勇

2022-12-17 19:59:22 +08:00
 spikedingo

mac 软件连续两个版本都被 apple store 以

Guideline 2.5.1 - Performance - Software Requirements Your app uses or references the following non-public or deprecated APIs:

Info

• Contents/Resources/app.asar.unpacked/node_modules/bigint-buffer/build/node_gyp_bins/python3/_Py_Initialize

• Contents/Resources/app.asar.unpacked/node_modules/electron-deeplink/build/node_gyp_bins/python3/_Py_Initialize

这个理由驳回了,说是编译出来的包被他们检测用到了 _Py_Initialize 这个方法不符合规范

目前我有这几个问题: 1.我在代码包括 node modules 里完全搜索不到这些方法的使用,不知道为何会被审核反馈使用

2.很多提示有问题的依赖都是一些其他依赖的内部依赖,我没办法直接去升级或者替换

3.还有几个依赖是十分核心的依赖,几乎没有办法去替换

4.我们已经发布了至少十几个版本,直到这个版本才被告知有这些问题

求教万能的 v2 童鞋有没有类似的经验,如果能给到帮助,愿意有偿求助!

2542 次点击
所在节点    程序员
9 条回复
ChrisFreeMan
2022-12-17 20:30:56 +08:00
看起来是 node 的编译工具 https://github.com/nodejs/node-gyp 的问题,调用了系统的 python3 ?
spikedingo
2022-12-17 20:34:46 +08:00
@ChrisFreeMan 我们的 mac 包是在 github actions 上进行编译的,请问这个有办法改善吗
ChrisFreeMan
2022-12-17 20:45:02 +08:00
我就不负责任的猜一下,你们的应用应该是违反了 App Store 的沙盒应用( App sandbox )的规范,解决的办法应该是检查一下 electron app 是否正确打包,以及替换掉那些调用外部接口的包,现在 electron 的官方打包工具应该是 electron-forge. 顺便看一下官方文档的 https://www.electronjs.org/docs/latest/tutorial/mac-app-store-submission-guide 这个说明,里面有 app sandbox 规范的链接.详细的我就不清楚了,等一下其他的大佬吧。
showme1121
2022-12-17 21:42:29 +08:00
_Py_Initialize 这个符号, 在针对产物进行字段检索的时候, 应该是可以检索出来的吧? 能否想办法把写歌字段替换掉。
另外你列的第四点, 已经正常迭代了 N 个版本之后被审核 ban 掉这在苹果这边还是一个比较普遍的事情
wdlth
2022-12-17 22:53:11 +08:00
你用的 bigint-buffer 和 electron-deeplink 两个组件都依赖了 node-bindings ,应该是把 node 用的动态库也打包进去了……

https://github.com/nodejs/node-gyp/issues/2713
我看有人通过把文件删除来解决
spikedingo
2022-12-18 18:30:58 +08:00
@wdlth 请问删文件是对打包出来的 package 再做删文件操作吗?这块不是很理解,感谢指教
spikedingo
2022-12-18 18:31:54 +08:00
@showme1121 谢谢回复,写字段替换掉是针对最终产物?请问有没有相关的文章或者案例可以指导如何这样做?
wdlth
2022-12-18 19:33:40 +08:00
@spikedingo 可以参考页面下面几个的解决方式,比如这个:

https://github.com/siphomateke/deezer/pull/23/files

就是在封装 asar 前把那两个组件里面的 build/node_gyp_bins/python3 这个目录删掉。
x250881478
2023-03-07 11:36:58 +08:00
参照你们的回复, 自己弄了个方法, 去除 node-pty 生成的 node_gyp_bins 文件夹
electron-builder 配置项里的 afterPack:
afterPack: async (pack) => {
const dir = join(pack.appOutDir, 'PhpWebStudy.app/Contents/Resources')
const optdefault = { env: process.env, cwd: dir }
if (!optdefault.env['PATH']) {
optdefault.env['PATH'] =
'/opt:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'
} else {
optdefault.env[
'PATH'
] = `/opt:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:${optdefault.env['PATH']}`
}
execSync('asar e app.asar app', optdefault)
execSync('rm -rf app/node_modules/node-pty/build/node_gyp_bins', optdefault)
execSync('rm -rf app.asar', optdefault)
execSync('asar pack app app.asar', optdefault)
execSync('rm -rf app', optdefault)
console.log('afterPack handle end !!!!!!')
return true
}
里面的 PhpWebStudy 换成自己的 app 名字

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/903187

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX