【问题标题】:AIR for iOS app behaves differently when packaging compared to testing on deviceAIR for iOS 应用程序在打包时的行为与在设备上测试时的行为不同
【发布时间】:2014-04-15 11:21:18
【问题描述】:

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

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

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

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

我不确定我的应用中实际发生了什么,有人能解释一下吗?

任何帮助表示赞赏。

【问题讨论】:

    标签: ios actionscript-3 intellij-idea air


    【解决方案1】:

    与编译发布的方式相比,您遇到了如何编译调试以进行调试的问题。

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

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

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

    如果这些 SWF 中包含任何代码,则必须将其删除。即使你可以让它工作,Apple 会在他们得知你在做什么时立即拉出你的应用程序(假设他们在审查期间没有发现它,他们会这样做)。如果 SWF 只是资产,我建议将它们分解为 MP3 和 PNG/JPG 文件并在您的应用程序中运行代码,而不是在 SWF 中运行。使用[Embed] 元标记嵌入文件。

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

    【讨论】:

    • 嗨乔希。我应该澄清一下,资产中绝对没有代码。 swf 包含其他人正在制作的动画内容,因此这是为应用程序创建内容的最佳途径。我确实有框架标签(因为应用程序使用这些标签来控制内容) - 我在 Adob​​e 的网站上读到这没关系。
    • 我正在使用框架标签,我舞台上的东西有实例名称,这与这里的发现相匹配 - adamzucchi.com/blog/?p=174。我唯一能想到的另一件事是库中没有为动作脚本导出的东西的限制,但我也没有这样做。令人费解。
    • 标记为正确,因为这些是加载 swf 内容的有效点,通常实际问题是 LoaderContext 问题阻止我将内容拉入(iOS 实际上并没有错误或抱怨,加载过程只是没有发生)。
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2018-12-15
    相关资源
    最近更新 更多