【问题标题】:Running Haxe from iOS app – hxRunLibrary() error从 iOS 应用程序运行 Haxe – hxRunLibrary() 错误
【发布时间】:2013-04-16 21:41:26
【问题描述】:

对于一个客户,我开发了一个iOS + Android 应用程序,使用Cordova (PhoneGap) 作为用户界面。现在,作为这个应用程序的更新,我正在尝试添加一个用 Haxe 编写的游戏。最初该游戏是为Flash target 编写的,但我已对其进行了更新以与Android and iOSC++ 目标一起使用。

在 Android 上,使用活动很容易将其与 Cordova 应用程序集成(Haxe 部分作为单独的活动运行),但在 iOS 上实现类似结果时遇到了一些麻烦。

到目前为止,我已尝试将所有hxcpp 生成的代码包含在我的项目中(与 NME 在您执行“nme build ios”时设置 XCode 项目的方式相同),我正在调用 hxRunLibrary()我希望游戏运行时的代码。

问题是hxRunLibrary() 似乎想要创建自己的UIApplication 实例,但由于我的主应用程序已经在运行一个实例而失败并出现以下错误:

*** Assertion failure in void UIApplicationInstantiateSingleton(Class)(), /SourceCache/UIKit_Sim/UIKit-2380.17/UIApplication.m:2037
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'

我认为这可能与 Haxe 用于图形的 SDL 有关。据我了解,SDL 需要从应用程序的主函数运行,这与 Cocoa 发生冲突,也需要从主函数运行。

有什么简单的方法可以解决这个问题吗?我查看了 hxcpp 源代码,但找不到 UIApplication 相关代码或任何 SDL 的入口代码。

也许有人可以为我指明正确的方向。谢谢!

【问题讨论】:

    标签: ios haxe nme hxcpp


    【解决方案1】:

    好吧,我已经用谷歌搜索了一些关于 Haxe 的信息。我的理解是,Haxe 将为您提供完整的应用程序。这意味着它包括主要功能。这就是发生错误的原因。

    你可以通过两次调用 UIApplicationMain 函数来模拟问题。

    在我看来,你必须从 Haxe 生成的源代码文件中删除有关 UIApplicationMain 的代码。

    【讨论】:

      【解决方案2】:

      cordova 能够集成为更大的应用程序的一部分

      遇到了同样的问题。

      http://devgirl.org/2012/11/15/embed-cordovaphonegap-in-your-native-ios-app/ 这篇文章会有所帮助

      您实际上并没有创建一个新项目,而是通过 ios webview 将其嵌入到 webview 中,cordova 充当子视图。

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 2012-05-21
        • 2016-06-18
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        相关资源
        最近更新 更多