专栏名称: Python编程
人生苦短,我用 Python !关注 Python 编程技术和运用。分享 Python 相关技术文章、开发工具资源、热门信息等。
目录
相关文章推荐
卓奇365食品网  ·  兰州科技职业学院食堂被指使用预制菜,校方:严 ... ·  17 小时前  
发展北京  ·  支援合作先锋 | ... ·  昨天  
发展北京  ·  支援合作先锋 | ... ·  昨天  
51好读  ›  专栏  ›  Python编程

Python程序因一个字符串被苹果App Store封杀?开发者:审核规则太黑了!

Python编程  · 公众号  · 互联网安全 科技自媒体  · 2024-07-24 11:37

主要观点总结

近日,一些Python开发者在将应用程序升级到Python 3.12版本后,遇到苹果App Store审核不通过的问题。经过排查,发现是因为Python 3.12中包含了“itms-services”字符串,苹果App Store的审核规则会自动拒绝包含此字符串的应用程序。此事引发了开发者对苹果审核机制的讨论和争议。

关键观点总结

关键观点1: 问题起因

一位名为Eric Froemling的开发者在GitHub上分享了他在使用Python 3.12版本后,应用程序因包含“itms-services”字符串而被苹果App Store拒绝的经历。

关键观点2: 问题的调查与解决

经过排查,发现问题的根源在于Python 3.12标准库中的Urllib解析器包含了与itms-services相关的代码,导致苹果App Store的自动审核程序捕捉到这一点,即使应用程序从未使用过itms-services:// URL也是如此。

关键观点3: CPython核心开发者的观点

CPython核心开发者对此事提出了不同的解决方案,包括将“符合应用程序商店要求”作为CPython的设计目标,并在分发时通过生成打包应用程序的工具进行必要的补丁。

关键观点4: 苹果的审核机制

事件引发了对苹果审核机制透明度的讨论。许多开发者认为苹果的审核机制不透明,容易导致开发者在遇到问题时需要花费大量时间和精力进行Debug。

关键观点5: 解决方案的进展

CPython核心开发者Keith-Magee提交了一个实现--with-app-store-compliance选项的PR,以解决因字符串导致App被App Store拒之门外的问题。这个选项可以用于在构建时删除与itms-services相关的代码,以便通过苹果审核。


正文

本文经授权转自公众号CSDN(ID:CSDNnews)

整理 | 苏宓

只因升级一下编程语言的版本,就导致开发的应用被拒、审核不通过、上架不了应用商店,这种鲜少发生的事情如今正在一些 Python 开发者身上上演。

近日,据外媒 LWN 报道,一些开发者在将他们的应用程序中使用的 Python 版本从 3.11 升级到 3.12 版本后,重新提交到苹果 App Store 时,遭到了苹果审核团队的拒绝。

这也引起了许多开发者的关注。那么,问题究竟出在 Python 3.12 还是苹果审核团队?

1、一个字符串导致 App 审核失败

回看事情经过,起因是一位名为 Eric Froemling 的开发者在 GitHub  Python 仓库的 issue 中分享了他的遭遇,其表示:

这并不是一个传统意义上的 bug,但我最近经历了一场磨难。我的应用在苹果的 App Store(具体是 Mac App Store)上更新之后,因为我将使用的 Python 版本从 3.11 更新到 3.12,导致更新被拒绝了。

起初,Eric Froemling 也并不明白此前可以正常上架的应用程序,为什么做了一下迭代后就不可以了。与此同时,App Store 审核团队在拒绝 Eric Froemling 的 App 时也没有直接说明原因,只冰冷地回复一句 「我们无法为您提供更多信息」。

几经折腾, Eric Froemling 终于忍无可忍,向苹果团队提交了一份申诉邮件,苹果这才给他一定的提示:

根据指南 2.5.2 条 ——性能——软件要求

应用程序安装或启动了可执行代码。具体来说,该应用程序使用 itms-services URL 方案安装应用程序。

稍作解释,itms-services URL 方案是苹果公司提供的一种用于分发和安装 iOS 应用程序的方式,通常用于分发不在 App Store 上发布的应用,如企业内部应用或测试版应用。它允许用户通过点击一个链接直接在他们的 iOS 设备上安装应用程序,而无需通过 App Store。

以下是一个基本的 itms-services URL 结构:

itms-services://?action=download-manifest&url=https://example.com/manifest.plist

其中:

  • itms-services://:这是 URL 方案,用于告诉 iOS 设备这是一个应用安装请求。

  • ?action=download-manifest:指定要执行的操作,这里是下载应用的清单文件。

  • url=https://example.com/manifest.plist:指定清单文件(manifest file)的 URL,清单文件包含应用的详细信息,包括应用包的下载地址。

经过大量的排查, Eric Froemling 发现违规文件是 Lib/urllib/parse.py(Python 标准库的 Urllib 解析器)及其关联的 .pyc 。在 Python 3.12 代码中,似乎添加了一个“itms-services”字符串,而苹果 App Store 似乎正在扫描这个字符串,并自动拒绝包含它的任何内容(Eric Froemling 称至少在他的案例中是这样)。

最终,Eric Froemling 从他的 Python 代码中删除该字符串后,更新后的 App 终于通过了审核,成功上架 App Store。

2、引发争议的苹果审核及反馈规则

令 Eric Froemling 郁闷的其实并非是“itms-services”字符串埋下的“坑”,而是苹果 App Store 的审核规则。

他表示,“当苹果公司最终告诉我,Lib/urllib/parse.py 及其关联的 .pyc 是有问题的文件时,此时追踪到底发生了什么并不难。现在回想起来,我感到很沮丧,我没有想到早点通过 Python 本身对 itms-services 进行全文搜索,也没有偶然发现其他人遇到这种情况。”

众所周知,相比写代码,Debug 才是让很多开发者头疼的问题,正因此,也才有了前几日我们报道过的“ 调查 7 年的 Bug 时,花费了三个月时间来排查,最终只修改了一 代码 事件的发生。

时下, Eric Froemling 耗费了大量的精力进行 Debug,只删除了一个字符串就解决问题,在不少开发者看来,「其实本可以通过苹果透明的审核机制来避免的,然而现实就是,苹果的审核机制不透明」。

3、CPython 核心开发者:App Store 审核规则既偏执又难以捉摸!

对此,CPython 核心开发者 Russell Keith-Magee 在看到 Eric Froemling 提交的 issue 后,随即发布了 一篇《处理与 App Store 审核流程不兼容的问题》文章,把这个事情单独拧出来说了一遍。

Russell Keith-Magee 称,这个问题也 为 CPython 核心开发团队提出了一个有趣的哲学问题: 我们愿意为适应 App Store 审核流程付出多大努力?

Russell Keith-Magee 解释称,之所以发生这种情况,问题在于苹果公司的 macOS App Store 会自动拒绝任何包含 itms-services 字符串的应用程序。 苹果的 macOS 商店分发的软件是经过沙盒处理的, 经过沙盒处理的应用程序禁止使用带有 itms-services 方案的 URL。

苹果的自动审查程序会捕捉到 urllib 解析器中处理这些 URL 的代码,即使相关 应用程序从未使用过 itms-services:// URL 也是如此。标准库中就有这样的代码,因此应用程序会被拒。

对字符串进行一些轻度混淆似乎可以避免这一问题。 不过,这并不能保证永远都能解决这个问题,而且可能会引发混乱,也不能保证这将是我们需要解决的唯一一个应用程序验证问题」,Russell Keith-Magee 说,「虽然现在引发问题的是一个 macOS 应用,但类似的 App Store 自动审核流程也存在于 iOS、Android 和微软平台应用商店中。 苹果的审核无疑是其中最......偏执和高深莫测的......,它们的验证和验收流程完全不透明」







请到「今天看啥」查看全文