MonoTouch现在被禁止在iPhone上?

约翰·格鲁伯 ( 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 (eg, 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编译的应用程序 – 这是一个将C#和.NET应用程序编译到iPhone的工具。

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

更新 –

最近这个变了 MonoTouch不应该与协议冲突。 以下任何陈述纯属历史!

是的,从现在的许可协议中可以看出,如果原始应用程序是用C#编写的,那么就会违反许可证:

…应用程序必须最初用 iPhone OS WebKit引擎执行的Objective-C,C,C ++或JavaScript编写…

他们甚至还会再敲一下:

禁止通过中间翻译或兼容性层或工具链接到Documented API的应用程序

一个无赖,MonoTouch和Flash CS5 – > iPhone转换器是非常酷。

更新:

苹果已经放弃了(几乎)iOS语言和库的所有技术要求,所以MonoTouch毫无疑问是一个可行的解决scheme。 看到苹果的公告 。


这里的大多数人只是想用苹果公司的文件来表示“是的,被禁止的”。 那么,这里是我的观点:在这一点上,如果MonoTouch将被禁止,没有人真的有任何想法,我会解释为什么:

苹果协议第3版(不是最新的,前一版)明确表示,使用任何其他框架开发非苹果公司提供的应用程序是非法的:

3.3.2应用程序不得以任何方式自行安装或启动其他可执行代码,包括但不限于通过使用插件架构,调用其他框架,其他API或其他方式。 除了由Apple的Documented API和内置解释器解释和运行的代码外,不得在应用程序中下载或使用解释的代码。 Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.html

即使是这种情况(实际上是2.x版本的情况下,苹果没有任何问题接受应用程序,例如,所有EA游戏使用Lua脚本,许多人使用外部库不是iPhone原生的,即使iPhone有这些原生的API,苹果也从来没有接受过不同版本的应用程序的问题,比如SQLite。

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

在当前运行Mono的商店中,也有数百个(或者可能是几千个)应用程序的事实,而Apple将需要接受这些应用程序的更新。 主要的应用程序与数百万销售使用莫诺(和Lua)创build,我怀疑他们会退还每一个用户。

最后,企业应用程序部署到iPhone没有苹果的批准,这是一个MonoTouch(我自己开发企业应用程序)的大市场。 目前没有办法苹果可以禁止这些应用程序的MonoTouch,这可能足以让MonoTouch保持长久的活力。

更新:

对3.3.1,3.3.2和3.3.9的新修改使得MonoTouch(以及所有其他交叉编译器/语言等)在iPhone上完全可以接受。 看到苹果的公告


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

这就是说,我肯定会开始把这么严酷的发展政策放在苹果身上。 像这样的事情,而iphone / ipad / touch应用程序的批准政策模糊的过程应该让开发人员心生恐惧。 接下来,他们的许可证声明,允许您使用的唯一广告平台是iAd? 不允许没有iAd的免费应用程序的分发? 慢慢提高苹果应用销售收入的份额? 作为一个被locking的生态系统的开发者,我们是一盆热水中的青蛙,而苹果正在慢慢升温。 现在是探索其他移动平台的时候了,因为随着他们变得越来越好,把人们留在苹果平台上的主要原因是缺乏其他平台上的应用程序。

我花了几个月的晚上在Objective C中为一个杀手级的iPhone应用程序的想法工作。我的日常工作是C#。 我下载了MonoTouch C#,当它成为一个可行的替代品,并只花了3个月,我的代码转换为iPhone特定的MonoTouch C#。 这阻止了我从C#/ Objective C切换到疯狂

现在我该怎么办,把它扔掉,重新开始或放弃!

我为那些单声道的人感到非常抱歉。 这显然是错误的。 阻止没有推出产品并且没有客户的Adobe,停止在AppStore上做并且已经批准产品的MonoTouch是一回事。

为什么会有人想要build立一个企业,并投资于苹果,当他们将立即通知而不负责任或疑问?

显然苹果公司的开发者和客户对他们的产品和产品是单向的。

我希望苹果能为这个荒谬的政策而痛下决心。 傲慢并不具吸引力,一般对企业不利。 这是我还没有开始iPhone开发的原因之一。

大多数硬件和操作系统提供商都乐意有更多的工具和读者来写他们的平台。 苹果正在采取的态度,其(braindead)工具是唯一的游戏在镇上。

1984年的“老大哥”广告越来越相关

编辑

写的方式似乎也暗示着,如果我写了一个.net到客观的C /苹果翻译器,代码是不可接受的,因为原来的代码是不客观的。 这是可笑的(而且不可执行)。

Unity也是以Mono为基础的,而且这是一个相当大的商业产品,我想这是一个我们还没有听说过的问题。

禁止所有没有用Obj-C / C ++编写的应用程序理论上会禁止所有的Unity游戏,其中已经有很多应用程序商店。

这个问题也被问及在Unity Answers网站上,他们的正式答案是:

“我们刚刚听说iPhone OS4.0和新的服务条款,虽然我们相信我们完全符合这些要求,但我们现在正尽我们的所能来validation这一点,只要我们确切地知道,我们当然会和大家分享这个信息,请把这件事情告诉我们。

看一下他们被苹果告知的事情有趣。

问题是,肯定地说一个应用程序必须某种语言编写是不恰当的,因为一旦应用程序编译完成,无论它是如何构build的,它总是一个本地二进制文件。 我的猜测是,他们所能find的只是在二进制文件中的某种特征,以检测它是用什么工具构build的。 一个有缺陷的方法。

编辑:这个博客上的情况有一个有趣的概述: monotouch现在死在水中苹果新iphone开发人员协议是什么意思

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

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

iPhone / iPad是苹果新成功的业务,他们将做任何事情来保持这个业务的增长,也许他们现在不会禁止Monotouch应用,但谁知道下一步呢? 所以,如果你真的对iPhone开发感兴趣,而不是做恶梦,那么你的工作可能会被拒绝。 只需切换到XCode,至less可以降低您的应用拒绝百分比。 因此,我的build议。

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

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

但这不是Monotouch的。 Monotouch就是使用Apple框架来编写应用程序 – 但是通过Mono,而不是Objective-C。 所以从这个angular度来看,Monotouch所做的并不是真的会让Apple感到困扰。

我仍然认为,开发人员最好用他们使用的平台的本地语言编写,因为当你不引入可能具有抽象阻抗不匹配的系统时,事情总的来说会更平滑一些 – Cocoa框架都是用来构build的Objective-C,当你习惯了Objective-C的哲学时,它们是最有意义的。 但我确实希望苹果公司放弃使用MonoTouch。

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

理所当然 听起来像是一个胜利的战略对我来说。

它也阻止你使用任何第三方库,你不能保证是直接的C,C ++或Objective C开发的。

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

只要加我2美分。 看来这个部分看起来是这样的:( 例如,通过中间翻译或兼容层或工具链接到Documented API的应用程序是被禁止的) ,没有什么可讨论的。 他们毫不含糊地表示了他们。 不仅他们禁止MonoTouch和Unity3d,他们似乎也禁止了Titanium Framework 。 然而,读完这篇文章后,我发现自己很困惑。 我不熟悉美国的法律,但是合法吗? 我的意思是,他们是不是打破了一些反垄断法?

除此之外,我无法理解他们的动机。 我认为,他们不仅会部分失去开发者的兴趣,也会失去开发者的尊重。

截至今天,苹果iOS开发者计划许可证的第3.3.1节现在已经恢复为旧文本:

3.3.1应用程序只能按照Apple规定的方式使用文档化的API,不得使用或调用任何私有API。

苹果已经发布了许可证变更的官方声明 。

这表明现在可以使用MonoTouch。

Mono团队的一个目标是通过MonoTouch / Moonlight将Silverlight移植到iPhone上进行跨平台开发。 这有点像移植到iPhone的Flash。 还有Monodroid正在帮助我们移植应用程序,你知道,每当有人说“Android”的时候,苹果都会运行amonk :-)恕我直言,如果苹果以新协议为目标,那么他们也是针对Novel的。 我们可能是猜测,有一个NDA,但是我们中的许多人在这个平台上投入了大量的时间,所以我们需要把情况弄清楚。 我们不能等到明年夏天讨论这个问题。 例如,一位朋友曾经问我,帮助他的公司为客户build立一个MonoTouch应用程序的原型。 新的协议是否只影响App Store的发行? 内部分配怎么样?

这个谷歌文档电子表格有一个很长的应用程序列表将受到新协议的影响。 一些值得注意的是他们的类别在appstore中排名第一:

  • 垄断
  • 柠檬水大亨
  • Skee球
  • 定居者
  • Zombieville

其中一个有趣的内容是玩具总动员。

o在过去的几天内,许多应用程序在单点和统一的帮助下已被接受,而我也在使用它以及obj-c,因为在协议的公布和更改中,所以GO GO,…好想起来了。 这似乎是一个双极储蓄银行。

此外,最近在热门新游戏“YESTERDAY”下的Unity Game GiantMOTO也在大屏幕上加载大字,由UNITY供电。 所以,所有的猜想,假设等都是真的在外面。 这可能会说,在新版本中,它肯定不是强制执行的。 而montouch是唯一的开发平台,完全公开iPhone API,并使用XCode完全构build成obj-c。

从许可证协议说,MonoTouch应用程序显然不会被允许在AppStore中。

然而,更有趣的问题是,他们会针对哪个框架/应用程序执行它? 他们还必须编写自动化testing来检查应用程序是否是本机编写的,因为批准应用程序的人员没有时间/技能来为每个应用程序执行此操作。 这些应用程序不会贴上“使用MonoTouch / Flash”的贴纸。

协议中的所有内容的简短答案是肯定的

苹果公司基本上是通过将程序限制为几种语言来实现自己的脚步:

  • C – 由于它的低级特性,它现在不太适合应用程序开发。 目前主要是一种系统编程语言。
  • C ++ – 这使得拍摄手机变得更加困难,但是当它发生的时候,就是用一个火箭筒。 除了Qt之外,在C ++中还没有完整的应用程序框架(而且Qt还不支持iPhone)。
  • Objective-C – 这是苹果发明的,当然会被支持。
  • 在WebKit中运行的JavaScript – 基本上是一个Web应用程序。

他们故意限制你可以使用什么工具开发iPhone,这几乎肯定会让他们陷入严重的麻烦。 我相信一大堆社区会放弃iPhone开发,并迁移到Windows Mobile,Symbian,Android或Maemo等完全开放的不同平台 – 您可以自由地使用LOLCODE编写应用程序。

除了可能让iPhone成为开发者的垃圾之外,它也给了Adobe一个很好的吻:苹果故意从iPad阻挡Flash,现在他们也阻止了iPhone。 数字是Adobe Flash的CS5最大的特色是将Flash应用程序部署到iPhone。

博士:苹果公司基本上是用这一举动在自己的脚下开枪。

现在已经过了几个月的崩溃之后,Monotouch和Unity也相当明显。

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

Monotouch将代码编译成本地二进制文件,没有“图层”。 他们指的是像.NET运行时,Java JVM或Flash运行时这样的一些术语。

单声道应用程序通常会编译为字节码,并且需要JIT(即时编译)来运行它们,因此需要.Net框架或Mono框架。 但是,在iOS和Android的情况下,Mono应用程序编译为本地代码。 所以,在苹果眼里,没有第三 ,苹果决不会禁止单声道。 因此,您可以随意使用MonoTouch进行开发并分发您的应用程序。 为了进一步确保您的AppStore上已经出现很长时间的各种Mono应用程序(包括游戏和应用程序)。