2013-04-16 13 views
38

Dla klienta opracowałem aplikację iOS + Android, korzystającą z interfejsu użytkownika Cordova (PhoneGap). Teraz, jako aktualizacja tej aplikacji, próbuję dodać grę, która została napisana w Haxe. Oryginalnie gra została napisana dla Flash target, ale zaktualizowałem ją do pracy z obiektami C++ dla Android and iOS.Uruchamianie aplikacji Haxe z iOS - hxRunLibrary() błąd

Na Androidzie łatwo było zintegrować to z aplikacją Cordova za pomocą działań (część Haxe działa jako osobne działanie), ale mam pewne problemy z uzyskaniem podobnego wyniku na iOS.

Do tej pory starałem się uwzględnić cały wygenerowany kod hxcpp w moim projekcie (w ten sam sposób, w jaki NME konfiguruje projekt XCode po wykonaniu polecenia "nme build ios"), a następnie wywołuję kod hxRunLibrary() z mojego kodu, gdy Chcę, aby gra działała.

Problemem jest to, że hxRunLibrary() wydaje chcą stworzyć własną UIApplication instancji, który nie powiedzie się z powodu następującego błędu, ponieważ moim głównym aplikacja jest już uruchomiona instancję:

*** 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.' 

myślę, że może to mieć coś wspólnego z SDL, które Haxe używa do grafiki. Z tego, co rozumiem, SDL musi wynikać z głównej funkcji aplikacji, która stworzyła konflikt z Cocoa, który również musi być uruchamiany z głównej funkcji.

Czy istnieje prosty sposób obejścia tego? Sprawdziłem źródła hxcpp, ale nie udało mi się znaleźć kodu związanego z kodem UIApplication ani kodu dostępu do SDL.

Być może ktoś mógłby wskazać mi właściwy kierunek. Dzięki!

Odpowiedz

3

Cóż, przesłałem mi kilka informacji o Haxe. Rozumiem, że Haxe z dumą przygotuje dla ciebie kompletną aplikację, co oznacza, że ​​zawiera główną funkcję. Właśnie dlatego wystąpił błąd.

Możesz symulować problem, dwukrotnie wywołując funkcję UIApplicationMain.

Moim zdaniem, musisz usunąć kod o UIApplicationMain z pliku kodu źródłowego wyprodukowanego przez Haxe.

Powiązane problemy