我正在使用Adobe AIR构建iOS和Android应用程序。它在编译时从一个打包到应用程序的目录中加载了许多打包的资产(swf,音频)。我使用IntelliJ IDEA和最新的AIR SDK(13.0.0.83)进行构建。我使用企业证书进行签名,并使用HockeyApp进行分发。除了一个问题,一切都很好:
当我通过USB调试到iOS设备时,我的打包资产正常工作(显示图像,播放音频,没有错误)。
但是:当我打包iOS应用并通过HockeyApp进行部署时,我的图像无法播放,而且我没有音频。奇怪的是,当我加载打包资产时没有错误 - 我的应用程序上有一个调试读数,并报告正确找到文件。我把一些故意不正确的文件名作为测试,并得到了预期的错误,建议应用程序找到文件 - 它只是不显示加载的swfs。另外,如果我打开.ipa,我可以在正确的位置看到所有内容。
编辑 - 忘记添加,我注意到如果我在部署到设备时使用.ipa,并通过HockeyApp部署THAT,一切正常。我能看到的唯一区别是这个是调试版本,所以它试图连接到调试器。我不确定我的应用中发生了什么,有人可以解释它吗?
任何帮助表示感谢。
答案 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。有一些方法可以使它们正常工作,但在我看来,它不值得花时间,特别是因为它们以后很难管理。