对于一个客户端,我开发了一个使用Cordova (PhoneGap)
作为用户界面的iOS + Android
应用程序。现在,作为这个应用程序的更新,我正试图添加一个用Haxe编写的游戏。最初的游戏是为Flash target
编写的,但我已经更新了它,使其与Android and iOS
的C++
目标一起工作。
在Android上很容易将其与使用活动的Cordova
应用程序集成(Haxe部分作为单独的活动运行),但我在iOS上实现类似的结果时遇到了一些麻烦。
到目前为止,我已经尝试在我的项目中包含所有hxcpp
生成的代码(在相同的方式,NME设置XCode项目,当你做"NME构建ios"),我调用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.'
我认为这可能与SDL有关,它是Haxe用于图形的。根据我的理解,SDL需要从应用程序的主函数运行,这与Cocoa产生了冲突,也需要从主函数运行。
有什么简单的方法吗?我已经查看了hxcpp源代码,但无法找到UIApplication
相关代码,或SDL的任何入口代码。
嗯,我在谷歌上搜索了一些关于Haxe的信息。我所理解的是Haxe将为您生成一个完整的应用程序,这意味着它包括main函数。这就是错误发生的原因。
你可以通过调用两次UIApplicationMain函数来模拟这个问题。
在我看来,你必须从Haxe产生的源代码文件中删除关于UIApplicationMain的代码。
cordova能够被集成为更大的应用程序的一部分
遇到了同样的问题。
http://devgirl.org/2012/11/15/embed-cordovaphonegap-in-your-native-ios-app/这篇文章会有所帮助
你实际上不创建一个新项目,而是通过ios的webview嵌入到一个webview中,cordova作为一个子视图