现在 iPhone 上禁止 MonoTouch 了吗?

John Gruber最近的一篇文章指出,以下法律术语:

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.

修订如下:

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

并作出以下观察:

我对这种新语言的理解是,交叉编译器是被禁止的,比如 Adobe 即将发布的 Flash Professional CS5中的 Flash-to-iPhone 编译器。该法案还禁止使用 MonoTouch 编译应用程序。 MonoTouch 是一个编译 C # 和。NET 应用程序到 iPhone。

这是否实际上禁止在 iPhone 上使用 Monotouch?

12442 次浏览

更新 -

这个 最近变了.MonoTouch 不应该再与 以下任何声明纯属历史性陈述!

是的,从他们的许可协议中可以很清楚地看出,如果原始应用程序是用 C # 编写的,那么它就违反了许可协议:

... 应用程序必须是在 Objective-C,C,C + + 中的 最初的作品,或者由 iPhone OS WebKit 引擎执行的 JavaScript..。

他们甚至更进一步:

禁止通过中间翻译、兼容层或工具链接到文档化 API 的应用程序

有点扫兴,MonoTouch 和 Flash CS5-> iPhone 转换器非常酷。

根据许可协议,MonoTouch 应用程序显然不能在 AppStore 中使用。

然而,更有趣的问题是,他们将在哪个框架/应用程序上执行它?他们还必须编写自动化测试来检查应用程序是否是本地编写的,因为批准应用程序的人没有时间/技能来为每一个应用程序进行测试。这些应用程序不会贴上“使用 MonoTouch/Flash”的标签。

新的许可协议明确规定了这一点。所以,是的,它将被禁止。

建议,如果你真的想为 iPhone 开发,试试 XCode。如果您已经熟悉 Java 或 C # 或更好的 C + + ,那么学习 Objective-C 并不困难。

IPhone/iPad 是苹果新的成功业务,他们会尽一切努力保持这个业务的增长,也许他们现在不会禁止 Monotouch 应用,但谁知道下一步会怎样呢?因此,如果你真的对 iPhone 开发感兴趣,不要做噩梦,担心你的工作可能会被拒绝。只要切换到 XCode,至少可以降低应用程序的拒绝率。所以,我的建议是。

这个谷歌文档电子表格 列出了一长串将受到新协议影响的应用程序。一些值得注意的是,它们在应用程序商店的分类中排名第一:

  • 大富翁
  • 柠檬水大亨
  • 滑雪球
  • 那些移民
  • 僵尸城

其中一个有趣的插曲是《玩具总动员》。

我希望苹果公司因为这个荒谬的政策而受到打击。傲慢并不吸引人,而且通常不利于生意。这是我没有开始 iPhone 开发的原因之一。

大多数硬件和操作系统提供商都乐于拥有额外的工具和读者来编写他们的平台。苹果的立场是,它的(脑死亡的)工具是唯一的游戏。

1984年的“老大哥”广告越来越有意义。

剪辑

它的写作方式似乎也暗示着,如果我写了一个。Net 对目标 C/apple 翻译器说,由于原始代码不是目标 C,所以代码是不可接受的。这是荒谬的(而且无法强制执行)

我花了几个月的晚上在 Objective C 中为一个杀手级的 iPhone 应用程序想点子,我的日常工作是 C # 。当 MonoTouch C # 成为一个可行的替代品时,我下载了它,并且花了3个月的时间将我的代码转换成 iPhone 专用的 MonoTouch C # 。这让我从 C #/Objective C 切换过来,不至于发疯。

我现在该怎么办,扔掉一切,重新开始,还是放弃! ? !

我真为 Mono 的人感到难过。这是完全错误的。阻止还没有发布产品的 Adobe 和没有客户的 MonoTouch 是一回事,阻止那些已经在 AppStore 上发布产品并且已经获得批准的 MonoTouch 也是一回事。

为什么会有人想要建立一个企业并投资苹果公司,而他们会在一瞬间收回这一切,而不需要负责任或有疑问?

显然,苹果的开发者和客户关心他们和他们的产品是一条单行道。

对于协议中所有这些问题的简短回答是 是的

苹果基本上是在搬起石头砸自己的脚,把程序限制在几种语言之内:

  • C-由于它的低级性质,这些天来它并不真正适合于应用程序开发。它现在主要是一种系统编程语言。
  • C + +-这使得射击你的手机变得更加困难,但是当它发生的时候,它是用火箭筒。除了 Qt,C + + 中没有任何完整的应用程序框架可以使用(而且 Qt 还不支持 iPhone)。
  • Objective-C-这是苹果发明的,当然会得到支持。
  • 运行在 WebKit 中的 JavaScript ——基本上是一个 Web 应用程序。

他们故意限制你可以用来开发 iPhone 的工具,这几乎肯定会给他们带来严重的麻烦。我相信社区中有相当一部分人会退出 iPhone 开发,转而使用 Windows Mobile、 Symbian、 Android 或 Maemo 等完全开放的平台——你可以在 LOLCODE 自由编写应用程序。

除了可能为开发者制造 iPhone 垃圾之外,它还给了 Adobe 一个甜蜜的吻: 苹果公司故意在 iPad 上屏蔽 Flash,现在他们也在 iPhone 上屏蔽 Flash。这个数字是 AdobeFlash 的 CS5最大的特性是在 iPhone 上部署 Flash 应用程序。

苹果这一举动基本上是在搬起石头砸自己的脚。

更新:

对3.3.1、3.3.2和3.3.9章节的新修改使 MonoTouch (以及所有其他跨编译器/语言等)在 iPhone 上完全可以接受。请参阅苹果公司的声明


米格尔似乎不这么认为。看 推特和 Miguel 的 回应。让我们不要在这里反应过度,说 Monotouch 已经死了,或者停止开发 Monotouch,直到所有相关各方作出一些澄清。

也就是说,我肯定会因为苹果如此严厉的开发政策而对其施加压力。诸如此类的事情,以及 iphone/ipad/touch 应用程序的模糊审批政策,应该会让开发者感到恐惧。接下来是什么,他们的许可证规定你唯一可以使用的广告平台是 iAd?不允许在没有 iAd 的情况下发布免费应用程序?缓慢提高苹果在应用程序销售收入中的份额?作为生态系统封闭的开发者,我们就像热水锅里的青蛙,而苹果公司正在慢慢加热。现在是探索其他移动平台的时候了,因为随着它们变得越来越好,吸引人们使用苹果平台的主要原因是缺乏其他平台上的应用程序。

更新:

苹果公司(几乎)已经放弃了所有对 iOS 语言和库的技术要求,所以 MonoTouch 无疑是一个可行的解决方案。请参阅 苹果公司的声明


这里的大多数人只是简单地按照苹果的文件说“是的,它被禁止了”。好吧,这是我的观点: 在这一点上,没有人真正知道 MonoTouch 是否会被禁止,我将解释为什么:

苹果协议第3版(不是最新版本,是之前的版本)明确规定,使用苹果提供的框架以外的任何其他框架开发应用程序都是非法的:

3.3.2应用程序本身不得以任何方式安装或启动其他可执行代码,包括 通过使用插件架构、调用其他框架、其他 API 或其他方式来实现。 除了解释和运行的代码之外,不能在应用程序中下载或使用任何解释的代码 苹果公司的文档化 API 和内置的解释器。 < a href = “ http://adcdownload.Apple.com/iphone/iphone _ sdk _ 3.2 _ _ final/iphone _ sdk _ Agreement. pdf”rel = “ norefrer”> http://adcdownload.Apple.com/iphone/iphone_sdk_3.2__final/iphone_sdk_agreement.pdf

即使是这样(而且从2.x 开始就是这样,苹果接受这样做的应用程序也没有任何问题。例如,所有 EA 游戏都使用 Lua 脚本,而且很多很多人使用的外部库并不是 iPhone 本地的。即使 iPhone 拥有这些原生 API,苹果在接受不同版本的应用程序(如 SQLite)时也从未遇到过问题。

我的观点是,现在说“是的,他们将被禁止”实在是太早了。目前唯一清楚的是,苹果 可以实际上就是利用这一点来禁止应用程序的。就像他们今天接受的应用程序违反了他们的一些规则,他们可能会继续这样做。

还有一个事实是有几百个(或者可能几千个?)商店中运行 Mono 的应用程序,苹果需要接受这些应用程序的更新。使用 Mono (和 Lua)创建的主要应用程序有数百万的销售额,我怀疑他们会退还给每个用户。

最后,未经苹果批准,企业级应用程序就被部署到 iPhone 上,这是 MonoTouch 所面临的一个巨大市场(我自己开发企业级应用程序)。目前苹果还没有办法禁止 MonoTouch 在这些应用程序中使用,这可能足以让 MonoTouch 继续存在很长一段时间。

我认为需要强烈考虑的是苹果的动机。

我同意网上发布的其他观点,即苹果正试图阻止应用程序的商品化——也就是说,越来越多的应用程序使用框架编写,这些框架生成的应用程序可以在多种设备上运行。

但 Monotouch 不是这样的。Monotouch 完全是使用 Apple 框架来编写应用程序——但是通过 Mono,而不是 Objective-C。所以从这个角度来看,Monotouch 所做的并不会真正困扰苹果。

我仍然认为开发人员最好使用他们正在使用的平台的本地语言来编写,因为当你没有引入可能有抽象阻抗不匹配的系统时,事情通常会变得更加顺利—— Cocoa 框架都是从 Objective-C 构建的,当你习惯 Objective-C 的哲学时,它们是最有意义的。但我确实希望苹果能够允许 MonoTouch 的使用。

Mono 团队的一个目标是通过 MonoTouch/Moonlight 将 Silverlight 移植到 iPhone 上,用于跨平台开发。这有点像将 Flash 移植到 iPhone 上。也有 Monodroid 帮助我们移植应用程序,你知道,每当有人说“ Android”时,苹果就会大发雷霆: ——恕我直言,如果苹果的新协议是针对 Adobe 的,那么他们的目标也是小说。我们可能正在推测,有一个保密协议,但我们很多人投入了很多时间在这个平台上,所以我们需要让情况明确。我们不能等到明年夏天再讨论这件事。例如,我的一个朋友要求我帮助他的公司为一个客户制作 MonoTouch 应用程序的原型。新协议是否只影响 App Store 的发行?内部分销呢?

我只是加了两分钱。看来,在阅读这部分: (例如,禁止通过中间翻译或兼容层或工具链接到文档化 API 的应用程序)没有什么可讨论的。他们已经明确地表达了这些意思。他们不仅禁止 MonoTouch 和 Unity3d,似乎还禁止 钛架。然而,在阅读了 这个的文章后,我发现自己真的很困惑。 我不熟悉美国的法律,但它是合法的吗? 我的意思是,他们不是违反了一些反垄断法吗?

除了这些,我不明白他们的动机。我认为,他们不仅会部分失去开发人员的兴趣,还会失去开发人员的尊重。

苹果公司所说的是,你们现在必须使用1980年代的语言来开发你们的竞争对手,打败最先进的移动应用程序... ..。

完全说得通,我觉得这是个制胜策略。

它还阻止您使用任何第三方库,您不能保证这些库是直接用 C、 C + + 或 Objective C 开发的。

所以基本上这意味着你不能购买像 Unity 这样的游戏 API。

在过去的几天里,许多应用程序已经在 monotouch 和 Unity 的帮助下被接受,而我也在使用它和 obj-c,因为协议的宣布和变化,所以去图形,... ... 好的 ol’卧槽浮现在我的脑海中。这似乎是一个双极储蓄罐。

另外,最新的 UNITY 游戏 GiantMOTO,在昨天的热门新游戏之下,在它的启动画面上,用大字体装载,由 UNITY 驱动。所以,所有的猜测,假设,等等,真的是出门。它可能会说,所有在新版本,它当然不是强制执行。Montouch 是 FULLY 公开 iPhone API 并使用 XCode 将 COMPLETELY 构建到 obj-c 中的唯一开发平台。

现在是 Flash 崩溃后的几个月,很明显 Monotouch 和 Unity 做得很好。

根据 禁止通过中间翻译、兼容层或工具链接到文档化 API 的应用程序

Monotouch 将代码编译成一个本地二进制文件,没有“层”。他们指的是。NET 运行时,JavaJVM 或 Flash 运行时。

截至今天,苹果 iOS 开发者许可证的3.3.1条款已经恢复为旧文本:

3.3.1应用程式只可以文件化 API 的方式使用 由苹果公司规定,不得使用 或调用任何私人 API。

苹果公司已经发布了一个关于许可证变更的 官方声明

这将表明现在允许使用 MonoTouch。

Mono 应用程序通常会编译成字节码,这就需要 JIT (及时)编译来运行它们。需要网络框架或 Mono 框架。但是,对于 iOS 和 Android,Mono 应用程序编译成本机代码。因此,在苹果眼里,没有第三个 分层,苹果永远不会禁止 Mono。所以你可以随意使用 MonoTouch 开发和分发你的应用程序。为了进一步确保这一点,AppStore 上有各种 Mono 应用程序(包括游戏和应用程序) ,这些应用程序已经存在很长时间了。