MonoTouch现在被禁止在iPhone上使用吗?

时间:2010-04-08 23:02:27

标签: iphone xamarin.ios

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编译的应用程序 - 一个将C#和.NET应用程序编译到iPhone的工具。

这实际上是否禁止将Monotouch用于iPhone?

18 个答案:

答案 0 :(得分:87)

更新 -

  

changed recently。 MonoTouch应该不再与之发生冲突   协议。以下任何陈述都是纯粹的历史性的!

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

  

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

他们甚至进一步锤击它:

  

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

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

答案 1 :(得分:49)

<强>更新

Apple已经(几乎)放弃了iOS的语言和库的所有技术要求,因此 MonoTouch毫无疑问是一个可行的解决方案。请参阅Apple's announcement


这里的大多数人只是想用苹果公司的文件说“是,它被禁止”。嗯,这是我的观点:在这一点上,没有人真的知道MonoTouch是否会被禁止,我会解释原因:

Apple协议版本3(不是最新版本,前一版)明确指出,使用任何其他框架开发Apple以外的应用程序是非法的:

  

3.3.2应用程序本身不能通过任何方式安装或启动其他可执行代码,包括   通过使用插件架构,调用其他框架,其他API或其他方式来限制。   除了解释和运行的代码之外,不能在应用程序中下载或使用解释的代码   Apple的Documented API和内置解释器。 http://adcdownload.apple.com/iphone/iphone_sdk_3.2__final/iphone_sdk_agreement.pdf

尽管情况确实如此(实际上是2.x以来的情况,苹果公司接受的应用程序没有任何问题。例如,所有EA游戏都使用Lua脚本,很多人都在使用iPhone不是原生的外部库。即使iPhone有这些原生API,Apple也不会接受使用不同版本的应用程序的问题,例如SQLite。

我的观点是说“是的,他们现在将被禁止”只是过早地过早。在这一点上唯一明确的事情是,Apple 可能实际上使用它来禁止应用程序。就像他们今天接受违反他们某些规则的应用程序一样,他们可能会继续这样做。

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

最后,未经Apple批准,企业应用程序部署到iPhone,这是MonoTouch的一大市场(我自己开发企业应用程序)。在这一点上,Apple无法禁止MonoTouch用于这些应用程序,这可能足以让MonoTouch保持活力很长时间。

答案 2 :(得分:27)

更新

对3.3.1,3.3.2和3.3.9节的新修改使得MonoTouch(以及所有其他交叉编译器/语言/等)在iPhone上完全可以接受。参见Apple的{{3 }}


announcement似乎并不这么认为。请参阅Miguel和Miguel的tweet。让我们不要在这里反复过度,并说Monotouch已经死了,或者停止使用Monotouch开发,直到所有相关方做出一些澄清。

这就是说,我肯定会开始对苹果采取这种严厉的发展政策。像这样的事情,以及iphone / ipad / touch应用程序批准政策的模糊过程应该让开发人员感到害怕。接下来是什么,他们的许可说明你可以使用的唯一广告平台是iAd?不允许在没有iAd的情况下分发免费应用程序?慢慢提高Apple在应用销售收入中的份额?作为一个被锁定的生态系统中的开发者,我们是一群热水中的青蛙,而苹果正在慢慢地加热。现在是探索其他移动平台的时候了,因为随着它们变得更好,将人们带入Apple平台的主要原因是其他平台上缺少应用程序。

答案 3 :(得分:10)

我花了几个月的时间在Objective C中为一个杀手级iPhone应用程序的想法工作。我的日常工作是C#。当我成为一个可行的替代品时,我下载了MonoTouch C#,并且花了3个月的时间将我的代码转换为iPhone特定的MonoTouch C#。通过切换C#/ Objective C,这让我很生气。

我现在该怎么做才能把它扔掉,重新开始或者放弃!?!

我对Mono家伙感到非常抱歉。这是完全错误的。阻止没有推出产品且没有客户并且停止MonoTouch并且已经在AppStore中批准产品的Adobe是一回事。

为什么有人想要建立一个企业并投资苹果公司,因为他们会在不知不觉或有问题的情况下及时将其全部拿走?

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

答案 4 :(得分:9)

我希望苹果公司因这种荒谬的政策而受到打击。傲慢不具吸引力,通常对企业不利。这是我没有开始iPhone开发的原因之一。

大多数硬件和操作系统提供商都乐于为其平台提供额外的工具和受众群体。苹果公司采取的态度是,它的(脑死亡)工具是城里唯一的游戏。

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

修改

它的编写方式似乎也暗示如果我在目标C / apple翻译器上写了一个.net,那么代码是不可接受的,因为原始代码不是客观的c。这是荒谬的(并且无法执行。)

答案 5 :(得分:7)

新的许可协议明确明确。是的,它将被禁止。

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

iPhone / iPad是苹果新成功的业务,他们将采取一切措施来保持这项业务的增长,也许他们现在不会禁止使用Monotouch应用程序,但谁知道下一步呢?因此,如果你真的对iPhone开发真的感兴趣,而不是做噩梦,你的工作可能会被拒绝。只需切换到XCode,至少会降低您的应用拒绝百分比。因此,我的建议。

答案 6 :(得分:7)

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

禁止所有未使用Obj-C / C ++编写的应用程序,理论上也禁止所有Unity游戏,其中已有大量已在应用程序商店中使用。

This question has also been asked over on the Unity Answers site, and their official answer is:

  

“我们刚刚听说过iPhone OS4.0   和新的服务条款。虽然我们   相信我们完全符合   这些我们现在正在做我们所有的事情   可以通过Apple验证。如   我们确切地知道,我们将会   当然与大家分享这些信息。   我们得到这个时请紧紧抓住   抱了出来。“

有趣的是看到Apple告诉他们的内容。

问题是,肯定会说应用必须以某种语言编写有点用词不当,因为一旦应用程序被编译下来,它总是原生二进制,无论它是怎样的已建成。我的猜测是,他们可以寻找的只是二进制文件中的某种签名来检测它构建的工具。一种有缺陷的方法。

编辑:此博客上的情况有一个有趣的概述:monotouch now dead in the water what does apples new iphone developer agreement mean

答案 7 :(得分:6)

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

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

但这不是Monotouch的意思。 Monotouch就是使用Apple框架编写应用程序 - 但是通过Mono,而不是Objective-C。因此,从这个角度来看,Monotouch所做的事情并不是真正困扰Apple的事情。

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

答案 8 :(得分:5)

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

具有完美的感觉。对我来说听起来像是一个成功的策略。

它还会阻止您使用任何第三方库,而这些第三方库无法保证是在C,C ++或Objective C中开发的。

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

答案 9 :(得分:4)

截至今天,Apple iOS开发人员计划许可证的第3.3.1节现已恢复为旧文本:

  

3.3.1应用程序只能以这种方式使用Documented API   Apple规定,不得使用   或致电任何私人API。

Apple已就许可证更改发布了official statement

这表明现在允许使用MonoTouch。

答案 10 :(得分:4)

加我2美分。阅读本部分之后似乎:(例如,禁止通过中间翻译或兼容性层或工具链接到Documented API的应用程序)没有什么可讨论的。他们毫不含糊地表达了他们。他们不仅禁止使用MonoTouch和Unity3d,而且还禁止使用Titanium Framework。但是,在阅读this文章后,我发现自己真的很困惑。 我不熟悉美国法律,但它是合法的吗?我的意思是,他们不打破一些反垄断法吗?

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

答案 11 :(得分:3)

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

答案 12 :(得分:2)

This google docs spreadsheet有一长串受新协议影响的应用。一些值得注意的,在appstore中为其类别排名第一:

  • 专卖
  • Lemonade Tycoon
  • Skee ball
  • 定居者
  • Zombieville

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

答案 13 :(得分:2)

o许多应用程序在最近几天内已经被单声道和统一的帮助所接受,而我也使用它以及obj-c,因为协议的公告和更改,所以GO图,...想到了好的ol'WTF。它似乎是一个双极储钱罐。

另外,最后一款Unity Game GiantMOTO,即热门新游戏 - 昨天,在其大屏幕上的装载屏幕上显示了POWERED BY UNITY。所以,所有猜想,假设等都是真的出门了。它可能会说新版本中的所有内容肯定都没有强制执行。 montouch是唯一一个完全暴露iPhone API并使用XCode完全构建到obj-c的开发平台。

答案 14 :(得分:1)

Mono应用程序通常会编译为字节码,这将需要JIT(及时)编译来运行它们,因此需要.Net框架或Mono框架。但是,在iOS和Android的情况下,Mono应用程序编译为本机代码。因此,在Apple眼中,没有第三个,Apple永远不会禁止Mono。因此,您可以随意使用MonoTouch进行开发并分发您的应用程序。为了进一步确保您,AppStore上有各种Mono应用程序(包括游戏和应用程序)已经存在了很长时间。

答案 15 :(得分:1)

闪光灯崩溃之后几个月,Monotouch和Unity的表现非常明显。

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

Monotouch将代码编译为原生二进制文件,没有“图层”。它们指的是某些东西,如.NET运行时,Java JVM或Flash运行时。

答案 16 :(得分:1)

协议中所有blob的简短回答是

通过将程序限制为几种语言,Apple基本上可以自拔:

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

他们故意限制你可以使用哪些工具来开发iPhone,这几乎肯定会让他们陷入严重的困境。我相信社区的一大块人只会退出iPhone开发并迁移到Windows Mobile,Symbian,Android或Maemo等不同的平台,这些平台是完全开放的 - 您可以在LOLCODE中自由编写应用程序。

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

tl;博士:苹果公司基本上是采取这一行动而自首。

答案 17 :(得分:1)

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

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