V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
spikedingo
V2EX  ›  程序员

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

  •  
  •   spikedingo · 2022-12-17 19:59:22 +08:00 · 2309 次点击
    这是一个创建于 497 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 童鞋有没有类似的经验,如果能给到帮助,愿意有偿求助!

    9 条回复    2023-03-07 11:36:58 +08:00
    ChrisFreeMan
        1
    ChrisFreeMan  
       2022-12-17 20:30:56 +08:00   ❤️ 1
    看起来是 node 的编译工具 https://github.com/nodejs/node-gyp 的问题,调用了系统的 python3 ?
    spikedingo
        2
    spikedingo  
    OP
       2022-12-17 20:34:46 +08:00
    @ChrisFreeMan 我们的 mac 包是在 github actions 上进行编译的,请问这个有办法改善吗
    ChrisFreeMan
        3
    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
        4
    showme1121  
       2022-12-17 21:42:29 +08:00   ❤️ 1
    _Py_Initialize 这个符号, 在针对产物进行字段检索的时候, 应该是可以检索出来的吧? 能否想办法把写歌字段替换掉。
    另外你列的第四点, 已经正常迭代了 N 个版本之后被审核 ban 掉这在苹果这边还是一个比较普遍的事情
    wdlth
        5
    wdlth  
       2022-12-17 22:53:11 +08:00   ❤️ 1
    你用的 bigint-buffer 和 electron-deeplink 两个组件都依赖了 node-bindings ,应该是把 node 用的动态库也打包进去了……

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

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

    就是在封装 asar 前把那两个组件里面的 build/node_gyp_bins/python3 这个目录删掉。
    x250881478
        9
    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 名字
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   916 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:56 · PVG 03:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.