21

Apple 的 iOS 开发者指南指出:

3.3.2 — 应用程序本身不得以任何方式安装或启动其他可执行代码,包括但不限于通过使用插件架构、调用其他框架、其他 API 或其他方式。除了由 Apple 的文档化 API 和内置解释器解释和运行的代码外,不得在应用程序中下载或使用任何解释代码。

假设允许在运行时下载数据(例如 XML 和图像,或游戏级别描述)(我的印象是?),我想知道他们在“数据”和“代码”之间划清界限。想象一个应用程序向用户提供交互式“演示”(例如调查)的场景。演示文稿不断添加到服务器,并且不同的用户可以使用不同的演示文稿,因此它们不能成为初始应用程序下载的一部分(这将是重点)。它们以 XML 格式描述,但是是交互式的,它们可能包含这种类型的条件分支(以伪形式显示以举例说明):

<options id="Gender">
    <option value="1">Male</option>
    <option value="2">Female</option>
</options>

<branches id="Gender">
    <branch value="1">
        <image src="Man" /> 
    </branch>
    <branch value="2">
        <image src="Woman" /> 
    </branch>
</branches>

当此 XML 在应用程序中被解释和“播放”时,上述内容将分两步呈现。首先显示一个选择屏幕,用户可以在其中单击两个选项(“男性”或“女性”)中的任何一个。接下来,将根据上一步中的选择[动态下载]并显示图像。

现在,从这里,很容易想象附加的标签,描述进一步的逻辑。例如,可以添加包含标签:

<loop count="3">

    <options... />
    <branches... />

</loop>

当然,这里的结果是选择屏幕/图像屏幕对将依次呈现三遍。

或者想象一些描述游戏关卡的格式。将其视为被动“数据”可能是很自然的,但如果它包括,比如说,用户可以通过的几个门道,并附有各种触发器、陷阱和点等 - 这与使用脚本(或者,实际上,解释代码) - 描述执行序列、选项及其条件响应?

假设数据的解释引擎已经存在于应用程序中,并且此类“演示文稿”只能在应用程序中使用(不能创建或编辑),这将如何违反 Apple 的 iOS 指南?从这个意义上说,XML 基本上不构成脚本语言吗(解释语言中的任何程序都不能用 XML 描述)?

如果专有脚本语言(参考上面使用的 XML)被严格沙盒化(他们怎么知道?)并且不能以任何方式访问操作系统(但能够下载内容 - 例如调查或游戏级别 - 动态以及上传结果 - 答案或分数 - 到创作服务器)?

线路在哪里?

4

7 回答 7

5

更新至 WWDC 2017

现在明确允许以下提到的 Codea 等编程工具下载代码。App Store 指南目前说(强调我的):

2.5.2应用程序应在其捆绑包中自包含,不得在指定容器区域外读取或写入数据,也不得下载、安装或执行代码,包括其他应用程序。旨在教授、开发或测试可执行代码的应用程序可以在有限的情况下下载代码,前提是此类代码不用于其他目的。此类应用程序必须使应用程序提供的源代码完全可供用户查看和编辑。

还有一条推文引用了有关宽松条款的更多细节。

原来的

您的解释下载是否允许用户编写无限循环或递归?

Apple 允许使用 Javascript,因为它们提供解释器并且可以杀死您的代码。我有一种感觉,我读过它有 10 秒的限制,但我在网站上搜索了几分钟就找不到它。(是的,我自己设定的写答案的超时时间开始了。)

如果您所做的是声明性的并且不允许在解释器中出现明显的循环,我认为您是非常安全的。

我也会避免在 Apple 可见的任何描述(包括公开讨论)中使用“解释器”一词。也许“解析器”会更安全。

Codea 已经在他们的 Lua 环境中滑过这些定义的边缘,无法下载代码。他们不得不删除将新包下载为“.codea”文件的功能。

于 2013-11-21T06:05:21.227 回答
4

基于 3.3.2,他们可以为此拒绝应用程序。然而,更可怕的是,你可以创建应用程序,让它获得批准,让它被许多用户下载和使用,然后苹果可以从商店下架应用程序。

你有没有发布过你描述的应用程序?

于 2015-02-18T05:57:00.387 回答
1

指南与 App Review 团队的实际做法之间存在重大差异。

现行指南规定:

2.7 以任何方式或形式下载代码的应用程序将被拒绝

2.8 安装或启动其他可执行代码的应用程序将被拒绝

因此,对解释代码的旧禁令已经消失,取而代之的是对可能被视为 IDE 或自我修改的应用程序的禁令。

然而在实践中,有许多应用程序可以做到这一点,因此理论和实践之间存在差异。

于 2013-09-13T22:52:39.123 回答
1

你应该看看 Apple在 iOS7 中启用了什么。现在允许在您的应用程序中下载和运行 JavaScript。

于 2013-10-25T16:23:07.027 回答
0

我只能告诉你的是,我已经发布了使用 XML 在应用程序中编写行为脚本的产品,Apple 一直都在批准它们。

于 2013-09-26T08:20:07.827 回答
0

我认为 Apple 的意思是您的应用程序不应依赖于另一个模块、编译产品或可执行文件才能工作,这些模块将从网站/服务器下载,并且编译的附加组件未经 Apple 审查。

基本上,当我问类似的问题时,他们告诉我类似:“如果您的应用程序将下载另一个可执行编译代码,例如 ftp 下载器、密钥解密工具或此类未经我的 Apple 批准的东西。您可以下载数据或不代表应用程序的文件(例如 XML、HTML、PDF 文件、图像)。

于 2013-01-29T02:41:06.157 回答
0

“代码”和“数据”之间的差异概念之前已经在 SO 上讨论过。请看这个答案:https ://stackoverflow.com/a/642476/200696

从 Apple 的角度来看,这项禁令阻止了应用商店中未经审查的可执行内容。创建一个经过 Apple 批准的程序,然后下载更改预先批准的行为的可执行内容将是微不足道的。

于 2013-08-12T17:16:00.157 回答