iPhone现已禁止MonoTouch吗?[关闭]


155

约翰·格鲁伯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到iPhone编译器。这也禁止使用MonoTouch编译的应用程序,该工具可将C#和.NET应用程序编译到iPhone。

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


4
我不知道这会合法地将苹果和现有的monotouch开发人员留在哪里。现有的单点触控应用会怎样?
PeteT

2
@ petebob796:如果要将新内容放入iTunes Connect,则需要接受此新许可证,但是我怀疑它们会否从先前提交的商店中提取东西。但是,他们可能会使用不是基于4.0的,但以前尚未提交过的新应用来强制执行此操作。但是,就像App Store中的任何东西一样,我们只需要拭目以待!
杰森·可可

1
显然,该协议是根据保密协议制定的
克里斯·S,2010年

apple.com/pr/library/2010/09/09statement.html aaaaaaaaaathankyooooooooooo让疯狂开始!

2
截至2010年9月9日,此事尚无定论。苹果放宽规则3.3.2foxbusiness.com/markets/2010/09/09/…–
史蒂夫·米切姆

Answers:


88

更新-

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

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

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

他们甚至将其进一步锤击:

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

MonoTouch和Flash CS5-> iPhone转换器非常酷。


7
但是,请参阅twitter.com/migueldeicaza/status/11844609073,他们将如何从本机应用程序识别出MonoTouch应用程序?
Mauricio Scheffer

9
苹果又来了。用一个很棒的设备,干净的图形界面,漂亮的触摸界面吸引我们……但是……除非有Mac,否则我们将停止开发任何东西,除非它是对象C / C / C ++,否则我们将停止为其开发任何东西。我的意思是,如果Microsoft出现并说“不,除非您使用C语言,否则不能在Windows中开发任何东西-不,您不能再使用.NET框架”,我们所有人都会怎么想。
彼得2010年

33
这对我来说毫无意义。根据该协议,如果您使用Flash编写了一个应用程序,然后手动翻译为Objective-C,则听起来好像违反了该协议(因为它不是在Objective-C中“最初编写”的)。
迈克尔·迈尔斯

3
@John:我认为他们“禁止”本机应用程序的次数减少了-而是他们的新操作系统的API围绕Silverlight / XNA展开,这是受支持的处理方式。我还没有看到任何可以强制执行的事情,即您不能在Microsoft的许可协议中向Silverlight编译器编写Java(或任何其他语言)。
罗恩·沃霍里奇

3
在这一切发生之前,我们正在开发的产品仅限于iPhone / iPad(关心Android等)和MonoTouch。现在,我们已经重新考虑,现在将根据需要成为Obj-C,但是我们也将确保第一天也将提供Android和WinPhone支持。企业无法承受行为的不确定性,因此Apple采取了与他们想要的相反的做法-使开发人员寻找跨平台解决方案,而不仅仅是Apple。做得好。
mj2008'4

49

更新:

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


这里的大多数人只是想用苹果这个词来表示“是的,它被禁止”。好吧,这是我的观点:在这一点上,没有人真的知道是否要禁止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开始实际上就是这种情况,但是Apple接受完全做到这一点的应用程序没有任何问题。例如,所有EA游戏都使用Lua脚本,并且很多人使用外部库即使iPhone具有这些本机API,Apple仍然可以轻松地接受具有不同版本的应用程序,例如SQLite。

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

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

最后,未经Apple批准,企业应用程序已部署到iPhone,这是MonoTouch的一个巨大市场(我自己开发企业应用程序)。在这一点上,Apple不可能禁止MonoTouch用于那些应用程序,这可能足以使MonoTouch长期存活。


除最后一部分外,我一般都同意您的意见-Apple可以轻松地说,现有应用程序的将来更新必须移植到本机Objective-C。
Kendall Helmstetter Gelner 2010年

好吧,即使将应用程序移植到Obj-C,它们最初都是用另一种语言编写的,所以从技术上讲,它们仍然是非法的。这就是为什么这些规则实际上没有任何意义的原因。他们可能会在最终版本4.0之前的后续版本中将其清除。
Eduardo Scoz

3
以前的语言根本没有禁止框架。它明确表示,它禁止的是启动可执行代码,并列出了框架作为一种可能的实现方式的示例。您发布的语言不会影响单一类型应用程序或Flash应用程序,也不会影响任何其他不会在运行时尝试解释的预编译二进制文件。
fenomas 2010年

27

更新:

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


Miguel似乎并不这么认为。请参阅推文和Miguel的回复。在这里不要过度反应,说Monotouch已经死了,或者在有关各方做出一些澄清之前停止使用Monotouch进行开发。

话虽如此,我肯定会开始对苹果这样严苛的发展政策大加指责。诸如此类的事情以及作为iphone / ipad / touch应用程序批准政策的模糊过程应该引起开发人员的恐惧。接下来,他们的许可证表明您唯一可以使用的广告平台是iAd?不允许在没有iAd的情况下分发免费应用?慢慢提高苹果在应用销售收入中的份额?作为处于封闭生态系统中的开发人员,我们就像是一锅热水里的青蛙,而苹果公司正在慢慢提高热量。现在是时候探索其他移动平台了,因为随着它们变得越来越好,吸引人们使用Apple平台的主要因素是缺乏其他平台上的应用程序。


4
+1(尤其是用于“探索其他平台”)
蒂姆(Tim

2
+1,尽管我希望从这些链接获得更多。“不”不是很清楚,是吗?微博是祸害。
Dan Rosenstark 2010年

去探索,我坚持使用苹果。我有2台Mac和一个开发人员许可证,我很乐意今年续签,这样我就可以继续开发。爱它还是离开它,但不要为此而哭泣。那就去买一台Mac吧……
kirk.burleson

10

我花了几个月的时间在Objective C中研究一款杀手级iPhone应用程序的想法。我的日常工作是C#。当它成为可行的替代方案时,我下载了MonoTouch C#,并花了3个月的时间将我的代码转换为iPhone专用的MonoTouch C#。这使我不致因从C#/ Objective C切换而发疯。

我现在该怎么办,将其全部丢弃,然后重新开始或放弃!?!

我为Mono家伙感到非常抱歉。这是完全错误的。阻止尚未发布产品且没有客户的Adobe和阻止已批准并已在AppStore中批准产品的MonoTouch是一回事。

为什么有人会立即建立一个业务并向苹果投资而又不承担任何责任或疑问的情况下立即将其全部撤消呢?

显然,Apple的开发人员和客户关心他们及其产品是一条必经之路。


Monotouch在应用商店中没有经过批准的产品-应用商店中有很多使用Mono编写的应用。两者之间有很大的不同,因为要考虑的应用程序很多,而不仅仅是一个。
Kendall Helmstetter Gelner 2010年

// @ Kendall Helmstetter Gelner:你错了。应用商店中有MonoTouch应用。
Tim Scott

4
@Tim Scott,他是说...哦,算了。
Dan Rosenstark 2010年

1
但是,您必须考虑Adobe将其Adobe编译器投入的开发时间。苹果公司让他们知道这已经超过一年了,并在最后一刻将其拿走了。他们花费了数百万的开发时间并损失了销售。
PeteT

@Tim:那些应用程序中有多少是由Monotouch人开发的?再读一遍我说的话。@yar:感谢您尝试解释。
Kendall Helmstetter Gelner 2010年

9

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

大多数硬件和OS提供商都乐于拥有更多工具和受众群体来编写其平台。苹果公司的立场是,它的(braindead)工具是市面上唯一的游戏。

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

编辑

它的编写方式似乎还暗示着,如果我向目标C / apple转换器编写了.net,则该代码是不可接受的,因为原始代码不是目标c。那太荒谬了(而且无法执行)。


2
什么是傲慢的部分?您是否认为他们这样做是因为他们认为自己的代码更简洁?
bpapa 2010年

3
您是说这不是自负吗?
蒂姆(Tim)2010年

4
@bpapa傲慢不仅限于技术问题-它还涵盖了业务视图。他们自负是因为他们认为自己可以摆脱它,并且这是可以接受的行为。仅仅因为它可能是一种“商业策略”,并不意味着您可以免于被称为愚蠢和自大。
蒂姆(Tim)2010年

3
实际上,他们将“摆脱困境”,因为iPhone OS设备将继续取得巨大的成功,并且开发人员将继续为其开发,并且新的开发人员也将加入其中。几年前,我做出了选择,我可以坐下来苦苦思考如何无法在iPhone上进行Java开发,或者可以学习Cocoa Touch并制作iPhone应用程序。不要后悔我的决定。
bpapa 2010年

5
@Ben Um,不,这很重要,因为苹果是老大哥……这很讽刺。
蒂姆(Tim)2010年

7

Unity也是基于Mono的,并且作为一个相当大的商业产品,我想这是一个我们尚未听说的问题。

从理论上说,禁止所有不是用Obj-C / C ++编写的应用程序也将禁止所有Unity游戏,其中在应用商店中已经有大量的此类游戏。

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

“我们刚刚听说过iPhone OS4.0和新的服务条款。虽然我们相信我们已完全遵守这些条款,但我们现在正在尽一切努力让Apple对此进行验证。只要我们确切知道,我们当然会与所有人共享该信息。请在我们提出疑问之前,请紧紧握住。”

看看苹果告诉他们的事情很有趣。

问题是,肯定地说必须某种语言编写应用程序有点用词不当,因为一旦将应用程序编译下来,无论它是如何构建的,它始终都是本地二进制文件。我的猜测是,他们所能寻找的只是二进制文件中的某种签名,以检测其所使用的工具。有缺陷的方法。

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


7

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

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

iPhone / iPad是苹果公司新的成功业务,他们将为保持业务​​增长而做任何事情,也许他们现在不会禁止Monotouch应用程序,但是谁知道下一步该怎么做?因此,如果您对iPhone开发人员真的很感兴趣,而不是做噩梦,可能只是拒绝您的工作。只需切换到XCode,至少这会降低您的应用拒绝率。因此,我的建议。


18
不是很难。使用monotouch的任何人都已经知道ObjectiveC。与现代语言相比,Objective C的开发非常糟糕。
詹姆斯·摩尔

3
@jamesmoorecode:太糟糕了+1
abatishchev 2010年

1
是的,我花时间学习Obj-c和所有Cocoa Touch API,所以以Apple希望的方式编写本机应用程序对我来说不是问题。就是为什么当我可以使用MonoTouch更快地完成并与WP7和Silverlight为浏览器和桌面应用程序共享“业务逻辑”(而不是用户界面)时,为什么要这样做?
2010年

4
有一个原因是Appstore上的许多应用程序经常崩溃:Objective-C。甚至像digg.com之类的知名人士
Chris S

2
我今天早上在火车上学习了obj c,这并不难-但是很臭-这是一种冗长而古老的语言-我宁愿用T-SQL ASCII语言编写iPhone应用程序。

6

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

我同意网上发布的其他观点,即Apple试图防止应用程序商品化-也就是说,越来越多的应用程序使用框架生成,这些框架生成的应用程序可以在多个设备上运行。

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

我仍然认为开发人员最好使用他们正在使用的平台的本地语言编写代码,因为当您不引入可能存在抽象阻抗不匹配的系统时,通常情况会更加顺畅-Cocoa框架都是为从Objective-C,当您习惯使用Objective-C的哲学时,它们才最有意义。但我确实希望苹果公司在允许使用MonoTouch方面表现出色。


1
拒绝我进行理性分析的人都会被开发者所深恶痛绝,这只是让您知道(其定义是编写针对所有永恒的Windows Mobile 6.5移动应用程序)。我的意思是,与我争辩,但为什么出于不被禁止的原因投票?为什么不试着理解苹果在做什么,而不是在点燃第一把火炬时就加入干草叉和火炬旅?
Kendall Helmstetter Gelner'4

同意Kendal,+ 1表示平衡。
si618

+1合理的论点
法案

1
+1为弱者和他的不同观点。每当我与团体中的所有群众作对时,我都会以投票方式接受投票,直到被迫删除该职位。
kirk.burleson

5

苹果公司所说的是,您现在都必须使用1980年的语言来开发自己的竞争产品,以击败最先进的移动应用程序。

很有道理。在我看来,这是一个制胜法宝。

这也使您无法使用任何不能保证以直接C,C ++或Objective C开发的第三方库。

因此,基本上,这意味着您不能购买Unity等Games API。


2
考虑到smalltalk-80比c#领先大约十二年……
Stephan Eggermont

毫无疑问,您知道Objective C基本上是带有一些SmallTalk扩展的C。
AnthonyLambert

4

只需加上我的2美分。看来在阅读了这一部分之后:(例如,禁止通过中间翻译或兼容性层或工具链接到Documented API的应用程序)没有什么要讨论的。他们明确表达了他们的意思。他们不仅禁止MonoTouch和Unity3d,而且似乎也禁止Titanium Framework。然而,看完之后这个文章,我发现自己真的很困惑。我不熟悉美国法律,但是合法吗?我的意思是,他们不是在违反一些反垄断法吗?

除了所有这些,我无法理解他们的动机。我认为,它们不仅会部分失去开发商的兴趣,还将失去开发商的尊重。


4

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

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

苹果已经发布了有关许可证变更的正式声明

这表明现在可以使用MonoTouch。


+1用于包括实际内容,而不仅仅是链接或声明。
davidtbernal,2010年

3

Mono团队的目标之一是通过MonoTouch / Moonlight将Silverlight移植到iPhone上以进行跨平台开发。这有点像将Flash移植到iPhone。还有一种Monodroid可以帮助我们移植应用程序,而且,每当有人说“ Android”时,Apple都会运行amonk :-)恕我直言,如果Apple通过新协议以Adobe为目标,那么他们也以Novel为目标。我们可能正在猜测并且有一个NDA,但是我们许多人在该平台上投入了大量时间,因此我们需要弄清楚情况。我们不能等待明年夏天讨论这个问题。例如,一个朋友请我帮助他的公司为客户设计MonoTouch应用程序的原型。新协议仅影响App Store的发行吗?内部分配又如何呢?


苹果为什么不和Mono家伙好好谈谈,而是让他们放弃对Droid的支持....
AnthonyLambert 2010年

1
@tony为什么他们会放弃对更加开放的平台的支持
PeteT

2

此Google文档电子表格包含受新协议影响的应用程序的清单。一些值得注意的类别在应用商店中排名第一:

  • 垄断
  • 柠檬水大亨
  • 溜冰球
  • 定居者
  • 僵尸维尔

有趣的杂物之一是玩具总动员。


1
新协议涵盖了所有版本的操作系统,而不仅仅是4.0。
Philippe Leybaert

好点,我忘记了您必须在网站上签署新协议
Chris S

2

o在过去的几天内,借助monotouch和unity编写的许多应用程序已被接受,而自协议的宣布和更改以来,我也正在使用它以及obj-c,因此GO图,...很好我想到了ol'WTF。看来是双极储钱罐。

另外,最新的Unity Game GiantMOTO还在“热门新游戏-昨天”之下,在其启动屏幕上以大写字母onLoad加载,由UNITY供电。因此,所有的猜想,假设等实际上都是不可能的。它可能说了所有新版本中的内容,但肯定没有执行。montouch是唯一完全公开iPhone API并使用XCode将COMPLETELY内置到obj-c中的开发平台。


1

从许可协议中可以明显看出,AppStore上绝对不允许MonoTouch应用程序。

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


1
我想这将是一个自动化的过程。我猜想monotouch和Flash编译器会在转换中留下常见的代码模式,这些模式可以从编译后的代码中进行统计选择。
PeteT

3
是的,如果苹果使用某种自动化流程,他们肯定会找到转换模式。但是这项政策从适用上是荒谬的。我的意思是Obj-C很脏。我真的很喜欢MonoTouch提供的功能。
Shoaib Shaikh,2010年

@Shoaib当然同意这是荒谬的,并且会将许多开发人员转移到android和Windows Phone上,这在某种程度上有利于竞争。
PeteT

1

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

通过将程序限制在几种语言中,Apple基本上是在自发自足。

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

他们故意限制了可以为iPhone开发的工具,这几乎肯定会给他们带来严重的麻烦。我敢肯定,社区中很大一部分人将退出iPhone开发,并迁移到完全开放的Windows Mobile,Symbian,Android或Maemo等平台上,您可以自由地使用LOLCODE编写应用程序。

除了可能为开发人员带来iPhone垃圾外,它还给Adobe锦上添花:Apple故意阻止iPad上的Flash,现在他们也阻止了iPhone上的Flash。数字是Adobe Flash CS5的最大功能,就是将Flash应用程序部署到iPhone。

tl;博士:苹果公司基本上是通过这一举动向自己射击。


苹果公司首先将自己打了个脚,所有人都说:“由于封闭的架构,苹果公司注定要失败。” 事实证明,用脚拍自己-正如任何一名员工成才顾问会告诉你的-通常是一个好策略。
Dan Rosenstark 2010年

是的,继续屏住呼吸,让这个庞大的社区退出iPhone开发!
kirk.burleson

Objective-C并不是Apple真正发明的,只是像LLVM和BSD的相同部分一样被采用:)
Emil Marashliev

1

现在距离闪存崩溃已经有几个月了,很明显,Monotouch和Unity的表现还不错。

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

Monotouch将代码编译为本地二进制文件,没有“层”。他们指的是诸如.NET运行时,Java JVM或Flash运行时之类的东西。


它说关于文档化的API。因此,我认为您是否编译到本机库都没关系
vodkhang 2010年

关键是,您需要购买Mac才能为iPhone开发。这不仅适用于Java和Flash,而且适用于Mono,因为Mono使您可以在Windows / Linux计算机上进行开发。但是与Java或Flash不同,mono可能使用不多,因此它们不在乎。
Stefan Steiger,2010年

1

Mono应用程序通常会编译为字节码,而后者需要JIT(及时)编译才能运行它们,因此需要.Net框架或Mono框架。但是,对于iOS和Android,Mono应用程序会编译为本地代码。因此,在苹果看来,没有第三,苹果将永远不会禁止Mono。因此,您可以随时使用MonoTouch进行开发并分发您的应用程序。为确保您进一步发展,AppStore上已有很长一段时间的各种Mono应用程序(包括游戏和应用程序)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.