38 votes

Exécution de Haxe depuis une application iOS - erreur hxRunLibrary()

Pour un client, j'ai développé un iOS + Android en utilisant Cordova (PhoneGap) pour l'interface utilisateur. Maintenant, comme une mise à jour de cette application, je suis en train d'essayer d'ajouter un jeu qui a été écrit en Haxe. A l'origine, le jeu a été écrit pour le Flash target mais je l'ai mis à jour pour qu'il fonctionne avec le système de gestion de l'information. C++ les cibles pour Android and iOS .

Sur Android, il a été facile d'intégrer cette fonction à l'application Cordova en utilisant des activités (la partie Haxe s'exécute en tant qu'activité séparée), mais j'ai du mal à obtenir un résultat similaire sur iOS.

Jusqu'à présent, j'ai essayé d'inclure tous les hxcpp dans mon projet (de la même manière que NME configure le projet XCode lorsque vous faites "nme build ios"), et j'appelle hxRunLibrary() de mon code quand je veux que le jeu s'exécute.

Le problème est que hxRunLibrary() semble vouloir créer son propre UIApplication qui échoue avec l'erreur suivante, puisque mon application principale exécute déjà une instance :

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

Je pense que cela pourrait avoir quelque chose à voir avec SDL, que Haxe utilise pour les graphiques. D'après ce que j'ai compris, SDL doit être exécuté à partir de la fonction principale de l'application, ce qui crée un conflit avec Cocoa qui doit également être exécuté à partir de la fonction principale.

Existe-t-il un moyen simple de contourner ce problème ? J'ai regardé dans les sources de hxcpp, mais je n'ai pas pu trouver la fonction UIApplication ou tout autre code d'entrée pour SDL.

Peut-être quelqu'un pourrait-il m'indiquer la bonne direction. Merci.

3voto

user3571842 Points 11

Eh bien, j'ai cherché quelques informations sur Haxe. Ce que j'ai compris, c'est que Haxe produira une application complète pour vous, ce qui signifie qu'elle inclut la fonction principale. C'est pour cela que l'erreur se produit.

Et vous pouvez simuler le problème en invoquant la fonction UIApplicationMain deux fois .

A mon avis, vous devez supprimer le code concernant UIApplicationMain du fichier de code source produit par Haxe.

1voto

Dnaso Points 556

Cordova a la capacité d'être intégré dans le cadre d'une application plus vaste.

a rencontré le même problème.

http://devgirl.org/2012/11/15/embed-cordovaphonegap-in-your-native-ios-app/ cet article vous aidera

vous ne créez pas réellement un nouveau projet, mais vous l'intégrez dans une webview via la webview ios et cordova agit comme une subview.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X