2010-09-11 4 views
86

C'est donc un nouveau millénaire; Apple a agité la main; Il est maintenant légal d'inclure un interpréteur Python dans une application iPhone (App Store).Intégration de Python dans une application iPhone

Comment va-t-on faire cela? Toute la discussion existante (sans surprise) fait référence au jailbreak. (Ancienne question: Can I write native iPhone apps using Python)

Mon but ici n'est pas d'écrire une application PyObjC, mais d'écrire une application ObjC régulière qui exécute Python en tant que bibliothèque intégrée. Le code Python rappelle alors le code Cocoa natif. C'est le motif "logique de contrôle est le code Python".

Existe-t-il un guide pour intégrer Python dans XCode afin que mon application iPhone puisse le lier? De préférence un Python dépouillé, puisque je n'aurai pas besoin de 90% de la librairie standard.

Je peux probablement comprendre le threading et l'API Python-extension; Je l'ai fait sur MacOS. Mais seulement en utilisant des compilateurs en ligne de commande, pas XCode.

+0

http://itunes.apple.com/us/app/ipython/id485729872?ls=1&mt=8 – chown

+0

avez-vous réussi à le faire? – Ali

Répondre

27

Peu importe comment vous construisez Python - vous n'avez pas besoin de le construire dans Xcode, par exemple - mais ce qui compte, c'est le produit de cette construction. En d'autres termes, vous aurez besoin de construire quelque chose comme libPython.a qui peut être lié statiquement dans votre application. Une fois que vous avez un .a, cela peut être ajouté au projet Xcode pour votre application (s) et, à partir de là, il sera lié et signé comme le reste de votre application. IIRC (il a été un peu de temps depuis que j'ai construit python à la main) le python out-of-the-box va construire un libPython.a (et un tas d'autres bibliothèques), si vous le configurez correctement.

Bien sûr, votre deuxième problème sera la compilation croisée de python pour ARM à partir de votre boîte . Python est un projet basé sur autoconf et autoconf est une douleur dans le cul pour la compilation croisée.

Comme vous le dites correctement, le rendre petit sera critique.

Pas étonnant non plus, c'est que vous n'êtes pas la première personne à vouloir faire cela, mais pas pour iOS. Python a été coincé dans des appareils beaucoup moins capables que ceux qui fonctionnent sous iOS. J'ai trouvé un fil avec un tas de liens quand googler sur; il might be useful.

En outre, vous souhaiterez peut-être rejoindre la liste pyobjc-dev. Même si vous ne ciblez pas une application basée sur PyObjC (ce qui est une bonne idée, btw - PyObjC a encore un long chemin à parcourir avant que iOS ne soit plus convivial), la communauté PyObjC en a discuté et Ronald, de n'importe qui, est probablement la personne la mieux informée dans ce domaine particulier. Notez que PyObjC devra résoudre le problème de Python intégré sur iOS avant le portage de PyObjC. Leur condition préalable est votre exigence, pour ainsi dire.

+0

Merci pour les liens. (J'ai utilisé Python sur Sharp Zaurus pour une * beaucoup * version antérieure de ce projet, mais c'était Python 1.6 et quelqu'un d'autre a fait le packaging ...) –

+4

Une fois j'ai porté Python sur la PSP de Sony; peut-être que l'histoire de Subversion vous aidera peut-être. Pas exactement une réponse cependant. ici: http://www.python-psp.net/trac/ – fraca7

21

J'ai mis un script très grossier sur github qui récupère et construit python2.6.5 pour iPhone et simulateur.

http://github.com/cobbal/python-for-iphone

Travaux en cours

mise à jour Un peu déprimant près de 2 ans plus tard: (copié à partir README sur github)

Ce projet ne fut jamais vraiment python en cours d'exécution sur l'iPhone à mon satisfaction, et je ne peux pas recommander de l'utiliser pour un projet sérieux à ce stade.

Plus particulièrement manquante est le soutien PyObjC (qui se révèle être beaucoup plus difficile au port pour iPhone car il repose sur le code plus spécifique à la plateforme)

Il manque également est la possibilité de compiler statiquement modules, (tous sont actuellement construit comme dylibs qui travaille pour le développement, mais à ma connaissance ne serait pas autorisé dans l'App Store)

à ce stade, ce projet est principalement destiné à être un point de départ pour quelqu'un plus intelligent que moi qui veut et peut s'attaquer aux problèmes ci-dessus. Je voudrais vraiment qu'il soit pratique d'écrire des applications entièrement en Python, mais à ce stade, il semble impossible.

+0

Merci! Je n'aurai pas l'occasion de le regarder pendant quelques jours, mais je vais certainement l'essayer bientôt. –

+0

Si 'pyobjc' est difficile à compiler, est-il possible d'utiliser' ctypes'? Dans ce cas [http://stackoverflow.com/a/1490644/288672], la réponse pourrait être un indice (réalisant que ce serait juste le début d'un travail important et douloureux, mais quand même). –

9

J'ai également commencé un tel projet. Il est livré avec son propre script de compilation simplifié, il n'est donc pas nécessaire de déranger avec autoconf pour obtenir votre bibliothèque statique compilée croisée. Il est capable de construire une bibliothèque statique complètement indépendante de Python avec des modules communs. Il devrait être facilement extensible.

https://github.com/albertz/python-embedded/

+0

Je ne reçois pas votre compilescript pour fonctionner. Il compile, mais manque de certains modules intégrés comme '-collections'. Des idées? – bijan

+0

Je n'ai pas inclus tous les modules C natifs. Juste le modifier. – Albert

+0

Semble daté ... fonctionne uniquement avec iOS 4.3? Pourriez-vous documenter comment faire fonctionner cela avec des versions plus récentes? – ArtOfWarfare

Questions connexes