与设备上的测试相比,AIR for iOS应用程序在打包时的行为有所不同

时间:2014-04-15 11:21:18

标签: ios actionscript-3 intellij-idea air

我正在使用Adobe AIR构建iOS和Android应用程序。它在编译时从一个打包到应用程序的目录中加载了许多打包的资产(swf,音频)。我使用IntelliJ IDEA和最新的AIR SDK(13.0.0.83)进行构建。我使用企业证书进行签名,并使用HockeyApp进行分发。除了一个问题,一切都很好:

当我通过USB调试到iOS设备时,我的打包资产正常工作(显示图像,播放音频,没有错误)。

但是:当我打包iOS应用并通过HockeyApp进行部署时,我的图像无法播放,而且我没有音频。奇怪的是,当我加载打包资产时没有错误 - 我的应用程序上有一个调试读数,并报告正确找到文件。我把一些故意不正确的文件名作为测试,并得到了预期的错误,建议应用程序找到文件 - 它只是不显示加载的swfs。另外,如果我打开.ipa,我可以在正确的位置看到所有内容。

编辑 - 忘记添加,我注意到如果我在部署到设备时使用.ipa,并通过HockeyApp部署THAT,一切正常。我能看到的唯一区别是这个是调试版本,所以它试图连接到调试器。

我不确定我的应用中发生了什么,有人可以解释它吗?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

与编译发布版本的方式相比,您遇到了编译调试问题的问题。

在调试中,AIR与应用程序一起安装。您的代码实际上在AIR运行时中作为AS3运行,在本例中,它本质上是Flash的虚拟机。

在发行版中,编译器将您的代码从AS3交叉编译为Objective-C。 Apple不允许在iOS上使用虚拟化语言,因此这是必要的。这就是为什么与调试版本相比,编译版本构建需要更长的时间。

您可能遇到的问题是您无法从外部源加载代码。所有代码在编译时都必须在应用程序中,而不是在任何外部资源中(即使嵌入式SWF也不起作用)。因此,SWF中的任何代码(也称为ABC代码)都将无法执行,并且在大多数情况下会阻止SWF加载。此外,在多个SWF中加载到AIR for iOS中仍然存在一些错误。有时它们根本就不起作用。

如果这些SWF中包含任何代码,则必须才能删除。即使你可以让它发挥作用,苹果也会立即拉你的应用程序,因为他们得到你正在做的事情(假设他们在审查期间没有抓住它,他们会这样做)。如果SWF只是资产,我建议将它们分解为MP3和PNG / JPG文件并在应用程序中运行代码,而不是SWF。使用[Embed]元标记嵌入文件。

在大多数情况下,您应该避免在AIR中使用SWF。有一些方法可以使它们正常工作,但在我看来,它不值得花时间,特别是因为它们以后很难管理。