macOS商店拒绝了Electron应用的上架

macOS商店拒绝了Electron应用的上架
最新回答
苍山有井名为空

2024-04-29 20:57:06

macOS商店拒绝Electron应用上架的主要原因是Electron使用的Chromium内核调用了苹果私有API(如CAContext),而苹果近期扩大了自动审查范围,导致相关应用被拒。以下是具体分析:

图:Electron社区关于应用被拒的讨论

核心原因:私有API调用
  • CAContext问题:Chromium在macOS上有两种渲染模式,其中CAContext(CARemoteLayer)是苹果未公开的私有API。该API虽能解决IOSurface模式的性能问题(如降低GPU功耗),但违反了苹果的审核规则。
  • 审查范围扩大:苹果近期更新了自动审查机制,覆盖了Electron使用的Chromium内核中的私有API调用,导致所有基于Electron开发的应用(包括5.x、6.x、7.x及8.x开发版)均受影响。
技术背景:渲染模式冲突
  • IOSurface模式:苹果允许的渲染方式,但性能较差且功耗高。
  • CAContext模式:Chromium工程师通过逆向工程发现,可显著提升性能,但该API未公开。自Chromium 40(2015年)起,此模式被集成到代码库中,导致依赖Chromium的Electron应用默认调用私有API。
修复进展与局限性
  • 修复尝试:Electron作者Cheng Zhao已发起PR(如
    electron/electron#20965
    ),移除对私有API的调用。
  • 版本合入情况

    4.x、5.x、6.x版本已合入修复,但性能下降明显。

    7.x、8.x版本尚未合入,需等待后续更新。

  • 当前选择

    使用低版本Electron(如6.x)并接受性能损失。

    等待高版本修复合入,但时间不确定。

    切换至非Electron技术栈(如原生开发或React Native)。

图:Electron修复PR及版本合入状态

替代方案建议
  • 短期方案:若急需上架,可临时使用已修复的低版本Electron(如6.x),但需测试性能是否满足需求。
  • 长期方案

    监控Electron社区修复进度,等待高版本(7.x/8.x)合入。

    评估其他跨平台框架(如Flutter、Tauri),避免依赖Chromium内核。

    开发原生macOS应用,彻底规避私有API问题。

总结

macOS商店拒绝Electron应用的核心矛盾在于苹果对私有API的严格限制Chromium内核的默认调用。目前修复方案尚未完善,开发者需在性能、上架时间和技术栈之间权衡。建议持续关注Electron官方更新,或提前规划技术迁移路径。