Запуск Haxe из приложения iOS — ошибка hxRunLibrary()

Для клиента я разработал iOS + Android приложение, используя Cordova (PhoneGap) для пользовательского интерфейса. Теперь, в качестве обновления этого приложения, я пытаюсь добавить игру, написанную на Haxe. Изначально игра была написана для Flash target, но я обновил ее, чтобы она работала с C++ целями для Android and iOS.

На Android было легко интегрировать это с приложением Cordova с помощью действий (часть Haxe выполняется как отдельное действие), но у меня возникли проблемы с достижением аналогичного результата на iOS.

До сих пор я пытался включить весь сгенерированный hxcpp код в свой проект (так же, как NME настраивает проект XCode, когда вы выполняете «nme build 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.

Возможно, кто-то может указать мне в правильном направлении. Спасибо!


person Splashdust    schedule 16.04.2013    source источник


Ответы (2)


Ну, я погуглил некоторую информацию о Haxe. Я понял, что Haxe создаст для вас завершенное приложение. Это означает, что оно включает в себя основную функцию. Вот почему ошибка происходит.

И вы можете смоделировать проблему, дважды вызвав функцию UIApplicationMain.

На мой взгляд, вы должны удалить код UIApplicationMain из исходного файла кода, созданного Haxe.

person user3571842    schedule 25.04.2014

Кордова может быть интегрирована как часть более крупного приложения.

столкнулся с той же проблемой.

http://devgirl.org/2012/11/15/embed-cordovaphonegap-in-your-native-ios-app/ эта статья поможет

вы на самом деле не создаете новый проект, вместо этого вы встраиваете его в веб-просмотр через веб-просмотр ios, а Cordova действует как подвид.

person Dnaso    schedule 08.10.2013