2010-01-30 60 views
3

据我所知,苹果禁止在iPhone上运行Flash,因为苹果公司不希望苹果通过自己的工具提供的运行环境。根据苹果的说法,允许Flash运行时将允许开发人员规避苹果已实施的应用更新策略和其他控制措施。而目前,Adobe并未选择构建工具来静态编译在Flash中创建的应用程序。为什么Apple允许在iPhone上使用.NET,但不能使用Flash?

我的进一步理解是,通过MonoTouch创建的.NET应用程序是静态预编译的,并以本机代码的形式运行iPhone,而在.NET公共语言运行时(CLR)内运行,Apple肯定不允许这样做。由于.NET代码不是在微软的运行时执行,而是在iPhone CPU本身执行,Apple并不抱怨。

我的问题是:

  1. 我是正确,为什么苹果允许在iPhone上的.NET开发的应用程序?

  2. 是否有一家供应商的预编译的本机代码在iPhone上(或者我认为的任何平台)与其他任何平台区分开来?换句话说,MonoTouch生成的本地代码与编译后的Objective C代码生成的本地代码没有什么区别?本地代码的来源是完全不透明的?

+2

这里有一个相当不错的博客文章,为什么闪光灯也不会在它的“正常”的化身上的iPhone/iPod/iPad的出现:http://daringfireball.net/2010/01/apple_adobe_flash – JBRWilkinson 2010-01-31 10:55:55

+0

从什么我明白,它开始和结束电池寿命。 – Dested 2010-03-10 11:35:00

+0

可能值得注意的是,苹果公司提出了改变其开发协议的建议,以扭转这个问题的答案。这个改变将要求所有的应用程序都应该在obj-C/C/C++中“最初编写”。 http://bit.ly/akvgRL所以技术上你仍然可以在.NET或Flash中开发应用程序,但是Apple会拒绝它们。 – fenomas 2010-04-11 05:16:53

回答

19

正如你刚才所说,苹果是不是“允许” .NET来在iPhone上运行 - 应用程序是否在MonoTouch的开发或写在可可或COBOL或什么都无所谓;它只是它编译的内容。它可以用JavaScript编写,并不重要。

如果我用英文写一些东西然后翻译成法文,法文读者可以告诉原文是用英文写的吗?也许,可能不是,这完全取决于翻译的特点,而不是读者。所有苹果公司要求的版本是是用法语编写的。到那时,它没有区别。

这是一个逻辑扩展,理论上你可以编写Flash文件的编译器来创建自包含的iPhone二进制文件。如果在Flash中开发对您来说很重要。 ( 这可能已经或可能不会完成 This has already been done.

+0

我相信Apple *不允许在iPhone上使用.NET应用程序。 – Emilio 2010-01-30 23:33:39

+2

@Emilio不,他们没有。请仔细阅读我的答案。 – 2010-01-30 23:35:03

+0

@Emilio - 问题的第二段解释了为什么Apple *不允许.NET应用程序。一旦编译为本地代码,应用程序就不再是“.NET”了,因为它不需要预先安装的.NET运行时和库。 – 2010-01-30 23:36:31

1

苹果不关心虚拟机在iPhone上运行。它关心的是允许在iPhone上运行外部非AppStore代码。

这就是为什么苹果不会在乎Adobe提出的“Flash Compiler”,它可以制作独立的Flash应用程序。这就是为什么Apple不关心编译后的.NET项目。

回想一下C64仿真器的问题。 Apple只关心捆绑内部BASIC,而模拟器则是虚拟机的完美例子。所有由该VM执行的C64代码都是6502机器码。但是仿真器没有能力从网络下载任意代码并执行它。

这就是Apple所关心的。

+0

<< Apple不关心VM在iPhone上运行。它关心的是允许在iPhone上运行外部非AppStore代码。 >>但为什么Adobe不能编写iPhone Flash虚拟机,并让Flash开发人员通过appstore推出他们的应用程序? – Emilio 2010-01-30 23:43:34

+3

Apple *确实非常关心iPhone上运行的虚拟机。仿真器和虚拟机受到最严格的审查,几乎总是被拒绝。 – 2010-01-30 23:45:59

+0

我想威尔试图说的是,只要所有运行的代码都包含在应用程序包中,并且以后不再添加代码,就允许VM。只要不从互联网上下载内容并渲染它,Adobe就可以免费为iPhone制作一个Flash虚拟机 - 这就是他们已经完成的工作,现在正在与开发人员进行beta测试,这些开发人员将他们的内容捆绑在一起运行时的副本。 – rpetrich 2010-01-31 00:05:04

4

所有MonoTouch所做的都是将Mono代码转化为目标C并将其编译为本地代码,因此一旦编译完成后即使使用Mono也可以“运行”。它实际上是单声道代码的包装,它被翻译成与目标C本地代码和运行时库等价的代码。

它们本身并不是真正的.NET运行时代码。所以根本没有真正的区别!一旦它被编译为本地代码就是了。

+0

@Emilio,这可能是最清楚的答案。 tommieb75提到的这个音译是为什么你仍然需要安装整个iPhone SDK,因为MonoTouch需要访问Objective-C编译器,在将.Net转换为本地Objective-C之后,它只是流程的最后阶段。 Apple不允许将.Net安装到iPhone中,并且他们已经基本上建立了一个禁止安装任何可以独立执行运行时代码到本机API的系统,例如,这只是Flash被排除的原因之一。 – 2010-02-02 02:56:51

+4

这是不正确的,没有Objective-C音译。 MonoTouch将IL预编译为JIT将生成的本机汇编代码。它将它链接到一个本地二进制文件,它也嵌入了部分Mono运行时(但不包括JIT)。该运行时的工作方式与普通的Mono运行时相似,不同之处在于它不使用JITing IL代码,而是使用链接的预编译方法。装配/链接本机二进制文件,代码签名,模拟器和Interface Builder需要Apple SDK。 – 2010-02-05 21:36:02

0

1 - 你几乎是正确的。我不会说苹果公司在平台上“允许”MonoTouch应用程序,他们只是没有公开说任何公开的内容,并且应用程序商店中已经有一些MonoTouch应用程序。这并不意味着他们明天不会阻止他们。

2 - 我对Mono Touch的内部知识不太了解,但我会想象一下,MT应用程序必须具备一些共同特征(它扩大了二进制大小的方式,在某处必须具有一些共同特性),苹果公司可以用它来把它们分开。当然,这可能需要花费大量精力才能带来好处,而且他们可能宁愿花时间在3.2以上。

我认为你对用于开发原生应用的工具与苹果希望在Safari中支持哪种浏览器插件之间的区别感到困惑。完全不同的概念。我认为你应该阅读John Gruber's recent piece,以获取关于为什么Flash可能永远不会在iPhone或iPad上的非常全面的理论。

0

看来,很快你就可以直接从闪存制作原生的iPhone应用程序。

http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/

这将是有趣知道这些应用程序的性能,但对于一般媒体/市场/业务领域,我觉得这是一个很大的应用程序究竟是如何会去。

相关问题