限制解除后,关于将 Adobe Air 应用程序部署到 ios 似乎存在很多混乱。在苹果取消限制之前,您必须完成此处记录的流程:http://blogs.adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html。但现在限制已经解除并且 Air 2.7 更新,我们可以在 Flex SDK 中使用与所有 Air 应用程序相同的 ADT 工具。
我的理解是,旧的 iPhone Packager (PFI) 是如何将 ActionScript 代码转换为原生 Objective C 以便被苹果接受的。
如果这是正确的,取消的限制是否意味着 ADT 工具不会转换为目标 C,并且仅在创建 .ipa 应用程序文件时将 AS3 .swf 和 Air 播放器捆绑在一起?
苹果解除限制后,Air部署过程到底发生了什么变化?
如果有人可以向我指出一些有关如何在幕后创建 .ipa 文件的文档,我认为这确实会消除一些混乱。
感谢您的帮助
There seems to be a lot of confusion regarding deploying Adobe Air apps to ios after the restrictions were lifted. Before apple lifted the restrictions you had to go through the process documented here: http://blogs.adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html using the Packager for iPhone. But now that the restrictions have been lifted and the Air 2.7 update we can use the same ADT tool in the flex SDK that we use with all air applications.
My understanding is that the old Packager for iPhone (PFI) some how converted actionscript code into native objective C in order to be accepted by apple.
If that is correct does the restrictions being lifted mean that the ADT tool is not converting to objective C and is only bundling the AS3 .swf and air player together when creating the .ipa app file?
What exactly changed in the Air deployment process after apple lifted its restrictions?
If anyone could point me to some documentation on how the .ipa file is being created behind the scenes I think this would really clear some confusion.
Thanks for the help
发布评论
评论(1)
一切都没有真正改变;苹果刚刚解除了禁令。该禁令不仅针对闪存创建的应用程序,还针对创建任何类型的中间语言或使用虚拟机等的任何工具。PFI 的作用:它实际上使用 LLVM 编译器静态编译 actionscript 3 BYTECODE (不是 AS3 源代码)到本机 ARM 汇编中。因此,本质上,当您部署 IPA 时,它与将 SWF 发布到 exe(如在发布设置中)的想法相同,因为您的 SWF 应用程序和 Flash 虚拟机都捆绑在一起,只不过不是作为 exe里面的代码是x86 ASM,AS3字节码沿着VM执行,它是ARM。 PFI 及其所有类都被简单地合并到 ADT 工具中。 PFI 包含一个 LLVM dll,可通过添加到内部 adobe 版本 ASC 或 Actionscript 编译器的各种 LLVM java 类访问该 DLL。然而,这些 LLVM 类和其他相关类不是开源的,Adobe 可以这样做,尽管 ASC 是开源的,因为它是根据 MPL 或 mozilla 公共许可证获得许可的,该许可证允许在专有的闭源应用程序,无需共享您的更改。
为了证明我告诉你的一切,只需下载新的 Flex SDK,其中包含合并了 PFI 的 ADT,你会发现 LLVM dll 等。此外,你可以反编译 ADT jar 并查看所有 LLVM 类。 LLVM 类(我相信)通过 GlobalOptimizer 类拦截 ASC 字节码,或者至少在当时是这样的......他们可能已经改变了这一点。唯一发生变化的是 Adobe 显然对 PFI(现已合并到 ADT)进行了大量优化。更多信息请参见:
http://blogs. adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html
http://www.leebrimelow.com/?p=2754
更新
这是一篇 Adobe 官方文章,证实了我告诉您的内容:
http://www.adobe.com/devnet/logged_in/abansod_iphone.html。我还应该澄清,我确实过度简化了幕后的流程,并且在我看来我的观点之一是错误的。我猜想 PFI 实际上将 AS3 字节码和 VM 合并到一个不使用 JIT 编译的无缝可执行文件中,因此从技术上来说不是虚拟机?不确定这一点,但上面的文章似乎确实暗示了这一点:
“当您为 iOS 构建应用程序时,最终的二进制文件中没有解释代码,也没有运行时。您的应用程序确实是一个本机 iOS 应用程序。”
Nothing really changed; apple just lifted the ban. The ban wasn't just on flash-created apps, it was on any tool that created any kind of intermediary language or used a virtual machine, etc. What the PFI does: it actually uses the LLVM compiler to statically compile actionscript 3 BYTECODE (not AS3 source) into native ARM assembly. So essentially when you're deploying an IPA it's the same idea as publishing a SWF to an exe (as in the publish settings) in the sense that both your SWF application and the flash virtual machine are bundled together, except instead of being an exe where the code inside is x86 ASM with AS3 bytecode executed along the VM, it's ARM. The PFI and all its classes were simply merged into the ADT tool. The PFI contained a LLVM dll which is accessed through various LLVM java classes that were added to the internal adobe version of the ASC or actionscript compiler. These LLVM classes and other associated classes, however, are not open source, which adobe is allowed to do, even though the ASC is open source because it's licensed under the MPL or mozilla public license, which permits the use of the open source code in proprietary closed source applications without sharing your changes.
For proof of all that I've told you, just download the new flex SDK that includes the ADT with the PFI merged in and you'll find the LLVM dll's etc. Further, you can decompile the ADT jar and see all the LLVM classes. The LLVM classes ( I believe ) intercept the ASC bytecode through the class GlobalOptimizer, or at least it did back in the day... they've probably changed that. The only other thing that has changed is that apparently Adobe has optimized the PFI (now merged into ADT) quite a lot. More info here:
http://blogs.adobe.com/cantrell/archives/2010/09/packager-for-iphone-refresher.html
http://www.leebrimelow.com/?p=2754
Update
Here is an official Adobe article confirming the things I've told you:
http://www.adobe.com/devnet/logged_in/abansod_iphone.html. I also should clarify that I've really over-simplified the process behind the scenes and appear to me mistaken in one of my points. I guess somehow the PFI actually merges the AS3 bytecode and the VM into a single seamless executable that doesn't use JIT compilation, and thus would technically not be a virtual machine? Not sure on that point, but the above article does seem to imply this:
"When you build your application for iOS, there is no interpreted code and no runtime in your final binary. Your application is truly a native iOS app."