根据我的理解,Apple已禁止iPhone上的Flash运行时,因为Apple不希望使用Apple提供的替代运行时环境来通过他们自己的工具。据Apple称,允许Flash运行时允许开发人员规避Apple已实施的应用程序更新策略和其他控制措施。目前,Adobe还没有选择构建工具来静态编译在Flash中创建的应用程序。
我的进一步理解是,通过MonoTouch创建的.NET应用程序是静态预编译的,并且作为本机代码而不是在.NET公共语言运行时(CLR)中运行,而苹果肯定不会这样做。由于.NET代码不是在Microsoft的运行时执行,而是在iPhone CPU上执行,Apple并没有抱怨。
我的问题是:
我是否正确为什么Apple允许在iPhone上使用.NET开发的应用程序?
iPhone(或我认为的任何平台)上的一个供应商的预编译本机代码是否与其他代码区别开来?换句话说,MonoTouch生成的本机代码是否与编译后的Objective C代码生成的本机代码无法区分?原生代码的来源是否完全不透明?
答案 0 :(得分:19)
正如你刚才所说,Apple并没有“允许”在iPhone上运行.NET - 无论应用程序是用MonoTouch开发的,还是用Cocoa或COBOL编写的,或者无关紧要;它只对它编译的内容很重要。它可以用JavaScript编写,并不重要。
如果我用英文写一些东西然后将其翻译成法语,法国读者可以说原始版本是用英文写的吗?也许,可能不是,这完全取决于翻译的特点,而不是读者。所有Apple要求的是您提供的版本他们是用法语编写的。到目前为止,它没有任何区别。
这个的逻辑扩展是理论上可以为Flash文件编写一个编译器来创建自包含的iPhone二进制文件。如果在Flash中开发对您来说很重要。 (这可能已经或可能没有完成 This has already been done.)
答案 1 :(得分:4)
MonoTouch所做的就是将Mono代码音译为目标C并将其编译为本机代码,因此一旦编译完成,即使使用Mono也能“运行”。它实际上是单声道代码的包装器,它被转换为等效的目标C本机代码和运行时库。
它们本身并不是.NET运行时代码。所以没有真正可区别的差异!一旦它被编译为本机代码即可。
答案 2 :(得分:1)
Apple并不关心VM在iPhone上的运行情况。它关心允许在iPhone上运行外部非appstore代码。
这就是为什么Apple不关心Adobe提出的制作独立Flash应用程序的“Flash编译器”的原因。这就是为什么Apple不关心编译的.NET项目。
回想一下C64仿真器的问题。 Apple只关心它捆绑了内部BASIC,但仿真器是VM的完美示例。该VM正在执行的所有C64代码都是6502机器代码。但是模拟器缺乏从网络下载任意代码并执行它的能力。
这就是Apple关心的问题。
答案 3 :(得分:0)
1 - 你非常正确。我不会说苹果“允许”平台上的MonoTouch应用程序,他们只是没有公开表达任何内容,并且应用程序商店中已经有一些MonoTouch应用程序。并不意味着明天他们不会开始阻止他们。
2 - 我对Mono Touch的内部结构并不了解,但我认为MT应用程序必须具备一些共同特征(它扩展二进制大小的方式,在那里必须有一些共性) Apple可以用来将它们单独输出。当然,这可能需要花费极大的努力才能获得很少的好处,而且他们可能宁愿花时间来获得3.2以及更远的能力。
我认为您对用于开发本机应用程序的工具与Apple希望在Safari中支持哪种浏览器插件之间的差异感到困惑。完全不同的概念。我想你应该阅读John Gruber's recent piece一个非常全面的理论,解释为什么Flash可能永远不会出现在iPhone或iPad上。
答案 4 :(得分:0)
似乎很快您就可以直接从Flash制作本机iPhone应用程序了。
http://labs.adobe.com/technologies/flashcs5/appsfor_iphone/
了解这些应用程序的性能会很有趣,但对于通用媒体/营销/业务部门而言,我认为这正是许多应用程序的发展方向。
答案 5 :(得分:0)
看看这里,苹果
是Adobe,而不是为各种OS /设备开发Flash的Apple。 Adobe一直无法为iOS设备开发出令人满意的Flash。