Python程序因一个字符串被苹果App Store封杀?开发者:审核规则太黑了!
创始人
2024-06-29 08:41:59
0

| CSDN(ID:CSDNnews)

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

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

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

一个字符串导致 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。

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

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

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

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

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

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 和微软平台应用商店中。苹果的审核无疑是其中最......偏执和高深莫测的......,它们的验证和验收流程完全不透明」

回归问题本身,这次导致 App 审核不通过的原因是 Python 3.12 中包含了“itms-services”字符串,作为官方如何解决这一问题,Russell Keith-Magee 给出了两个建议:

  1. 新增编程语言设计的目标:将“符合应用程序商店要求”作为 CPython 的设计目标,并整合任何必要的补丁来满足这一要求。这意味着用户不需要进行任何特殊的补丁处理来使 CPython“兼容应用商店”;但这也意味着有时会合并一些丑陋的混淆代码。如果某个时点规则发生变化,可能需要更多的补丁;而如果某个旧规则被移除,我们将没有明确的信号来表明某个特定的混淆代码不再需要。
  2. 把这个视为一个分发问题。开发时,使用 CPython 就正常用,只不过后面要使用生成打包应用程序的工具(如 Briefcase、Py2app、Buildozer 等)负责对 CPython 进行补丁,使其符合应用商店的要求。就 Briefcase 和 Bulldozer 而言,这些工具还会修补和构建自定义 CPython 库。从过往历史上看,这是因为 CPython 并不支持 iOS 和 Android;Python 3.13 版本源码现在无需打补丁即可运行......但如果我们将此视为分发问题,那么打补丁将成为一项持续性要求。

不过,这两种方式也可能会导致两个新问题的出现,Russell Keith-Magee表示:

  • (1) 的方式这也意味着分发的 Python 并不是“官方”的 Python,因为它们已经被修改以供分发;我不知道我们应该如何考虑这是否存在安全或品牌风险。我猜,Linux 发行版在发布 Python 时打的补丁与此类似,也许这并不是一个问题。
  • 对于(2),还有一个额外的问题,即 CPython 是否应该记录它所知道的 App Store 审核的各种限制。

因此,CPython 应该如何处理这种混淆?

对此,另一位 CPython 核心开发者 Alex Gaynor 提出了第三种方案:

灵感来源于我们在 pyca/cryptography 上的经验启发。我们经常收到错误报告,说“你拒绝解析这张证书,虽然它在技术上是无效的,但它是由[某个广泛使用的设备或 CA]签发的”。我们得出的答案是:

一般来说,我们会接受能解决这类问题的 PR,前提是这些 PR 要小,要本地化,而且一般不会太糟糕。但是,在我们合并 PR 之前,需要有人向第三方投诉(如苹果 App Store),并确保他们意识到了这个问题,并表示他们会采取一些措施来解决这个问题。我们接受的任何解决方法都会有一定的时间限制(即我们会在几个版本中删除解决方法)。

这样既能让用户获得良好的 OOTB 体验,又不会让大公司简单地将其怪异问题外部化到 OSS 项目中,从而在两者之间保持平衡。

6 月 20 日,Keith-Magee 写道,他想到了另一种方法:与其混淆源代码(苹果可能会认为这是“试图规避合法的安全审查程序”),不如在构建时添加一个选项,删除我们知道有问题的代码。

Mac 文件夹将包含一个 diff,其中描述了需要应用到源代码树中的改动(在本例中,删除了 parse.py 中对 itms-server URL 的支持;但如果需要,也可以扩展)。

configure 将获得一个 --with-app-store-patch 选项。在大多数平台(包括 macOS)上,该选项默认为禁用,但在 iOS 上会启用。如果启用,它将在构建标准库之前应用补丁。该选项也可以接受一个文件(即,--with-app-store-patch=path/to/patch),这样,如果在特定 Python 版本的维护窗口关闭后,App Store 的规则在未来某个时间发生了变化,发行商仍有一个受支持的选项来提供更新的补丁。

是的,这实质上是复制了分销商可以轻易复制的东西,但它的好处是,CPython 作为一个项目,可以提供一个官方列表,列出 App Store 合规性所需的更改。

这听起来更容易让人接受吗?

最后

最终,结果几天内部思考,Keith-Magee 在 6 月 25 日回复道,「感谢大家的意见,我刚刚提交了#120984(https://github.com/python/cpython/pull/120984)来实现该--with-app-store-compliance 选项」,以此解决因字符串导致 App 被 App Store 拒之门外的事情。他在请求中提到,这个选项可以用于 iOS 和 macOS 以外的平台,但目前没有这样的使用案例。如果一切顺利,它将在 Python 3.13 中可用。

令人沮丧的是,不少开发者反馈,像 Python 这样的自由软件项目不得不浪费时间,想方设法绕过不透明的审查程序,以便开发人员能够为非自由平台编写软件。HN 网友评价道:

不只是苹果公司会玩这种把戏。

试试用 PyInstaller 编译 Python 应用程序,同时开启 Windows Defender 实时扫描(默认设置)。如果没有 Defender 的阻止,你甚至无法编译二进制文件。

同样,尝试在打开 Windows Defender 的情况下运行 PyInstaller 生成的二进制文件。Defender 会说这是恶意程序,不会运行它。

两个主要的操作系统平台都不遗余力地阻止你发布和运行 Python 应用程序,这有点反乌托邦。

在这一次经历中,CPython 核心开发者 Keith-Magee 和其他 CPython 开发者还能果断站出来,其所采取的方法似乎是为 Python 应用程序开发者提供最佳体验的最省事的选择。然而,几乎可以肯定,这不会是最后一次有项目遇到这个问题。

来源:

https://lwn.net/SubscriberLink/979671/4fb7c1827536d1ae/

https://discuss.python.org/t/handling-incompatibilities-with-app-store-review-processes/56011/15

https://news.ycombinator.com/item?id=40815130

相关内容

热门资讯

百镜出道,C位依旧:WAIC顶... 来源:雷科技 如果说 WAIC 2025 是今年 AI 硬件的「集体高考」,那 Rokid Glas...
韩媒:韩国扶持五大联合体开发“... 综合韩联社、《朝鲜日报》和《京乡新闻》等韩媒报道,韩国政府4日正式选定NAVER Cloud、Ups...
录取通知书的“飞驰”之路 7月盛夏,安徽省近50万封承载着无数学子青春梦想与家庭期盼的高考录取通知书,正从四面八方“飞驰”向它...
凡知智造取得恒温核酸扩增分析仪... 金融界2025年8月6日消息,国家知识产权局信息显示,山东凡知智造医药科技有限公司取得一项名为“一种...
原创 离... [撒花] 随着科技的不断发展,“仿人形机器人”也变的越来越成熟了,AI的加持也让这些机器人变的更加智...
当AI化身“全能助手”,人类的... 正在屏幕前玩手机的你 有没有过这样的体验? 遇到不懂的问题 第一反应不是翻书思考 而是脱口而出“嘿 ...
珠海创信电子取得电路板用锡膏检... 金融界2025年8月6日消息,国家知识产权局信息显示,珠海创信电子有限公司取得一项名为“一种电路板用...
NBN Co转投亚马逊柯伊伯计... 来源:C114通信网 C114讯 北京时间8月6日晚间消息(蒋均牧)NBN Co与亚马逊达成协议,通...
石景山这家医院药品有了“电子身... “窗口不用一盒盒扫码吗?取药几乎不用排队,这速度真给力!”在北京大学首钢医院门诊药房,刚取到药的患者...
电力数据“会说话” 点亮智慧新... 本文转自【新华社】 新华社北京8月6日电 《经济参考报》8月6日刊发记者邓林如采写的文章《电力数据“...
国能新疆红沙泉二号矿实现纯电无... 近日,在国家能源集团新疆红沙泉二号露天煤矿(以下简称“红二矿”),58台无人驾驶矿卡正高效运转,其中...
普天科技:致力数据治理领域打造... 金融界8月6日消息,有投资者在互动平台向普天科技提问:公司相关产品或技术有哪些能为人工智能赋能?谢谢...
DeepMind发布Genie... 来源:至顶网 尽管目前还没有人找到通过生成式人工智能赚钱的可靠方法,但这并没有阻止Google D...
【喜讯】骨三科陈美玲在全国竞赛... 8月2日,在全国首届护理AI创新应用技能挑战赛决赛中,我院骨三科陈美玲的作品《创新聚力赋能发展——A...
微信内存一下就少了10G上热搜... 站长之家(ChinaZ.com)8月6日 消息:今日,微博热搜榜上#微信内存一下子就少了10G#的话...
我是宁波技能冠军④丨这些技能高... 前言 从工业设备控制(PLC)、工业机器人系统操作等“硬核”制造能力,到人工智能训练、网络安全等高科...
聚焦人工智能产业链 山东蓄力打... 中新网济南8月6日电 (记者 沙见龙)“这项体系如同人工智能产业的‘中央厨房’,能根据不同行业的差异...
2025未来科学大奖揭晓,他们... 科学之光照亮人类未来。6日,备受关注的2025未来科学大奖揭晓。这个夏天,“高冷”的基础研究再次变得...
为什么CA需要有《电子认证服务... 来源:SSL_SecureSocketLayer 1. CA是什么?—— 数字世界的「信任基石」 C...
2025 年 2 款华为会议记... 现在远程会议越来越多,不管是企业还是个人,都需要能快速整理会议记录的工具。我作为科技产品体验师,选了...