96 votes

Intégrer Python dans une application iPhone

C'est donc le nouveau millénaire ; Apple a fait un signe de la main ; il est désormais légal d'inclure un interpréteur Python dans une application iPhone (App Store).

Comment s'y prendre ? Toutes les discussions existantes (sans surprise) font référence au jailbreak. (Question plus ancienne : Puis-je écrire des applications iPhone natives à l'aide de Python ? )

Mon but ici n'est pas d'écrire une application PyObjC, mais d'écrire une application ObjC normale qui utilise Python comme bibliothèque intégrée. Le code Python fera ensuite appel au code Cocoa natif. C'est le modèle "la logique de contrôle est du code Python".

Existe-t-il un guide permettant d'intégrer Python dans XCode, afin que mon application iPhone puisse y être reliée ? De préférence un Python dépouillé, puisque je n'aurai pas besoin de 90% de la bibliothèque standard.

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

0 votes

30voto

bbum Points 124887

La façon dont vous construisez Python n'a pas vraiment d'importance - vous n'avez pas besoin de le construire dans Xcode, par exemple - mais ce qui compte, c'est le produit de cette construction.

En fait, vous allez avoir besoin de construire quelque chose comme libPython.a qui peut être lié statiquement à votre application. Une fois que vous avez un .a, vous pouvez l'ajouter au projet Xcode de votre/vos application(s) et, à partir de là, il sera lié et signé tout comme le reste de votre application.

IIRC (cela fait un moment que je n'ai pas construit python à la main) le python prêt à l'emploi construira une libPython.a (et un tas d'autres bibliothèques), si vous le configurez correctement.

Bien sûr, le deuxième problème sera la compilation croisée de python pour ARM à partir de votre fichier 86 boîte. Python est un projet basé sur autoconf et autoconf est un casse-tête pour la compilation croisée.

Comme vous le dites à juste titre, il est essentiel que le projet soit de petite taille.

Il n'est pas non plus surprenant que vous ne soyez pas la première personne à vouloir faire cela, mais pas pour iOS. Python a été intégré dans des appareils beaucoup moins performants que ceux qui exécutent iOS. J'ai trouvé un fil de discussion avec un tas de liens en faisant une recherche sur Google ; il s'agit de pourrait être utile .

Vous pouvez également rejoindre le pyobjc-dev liste. Bien que vous ne visiez pas une application basée sur PyObjC (ce qui, en passant, est une bonne idée - PyObjC a un long chemin à parcourir avant d'être compatible avec iOS), la communauté PyObjC a discuté de ce sujet et Ronald, parmi tous les autres, est probablement la personne la plus compétente dans ce domaine particulier. Notez que PyObjC devra résoudre le problème du Python embarqué sur iOS avant de porter PyObjC. Leur condition préalable est votre exigence, pour ainsi dire.

0 votes

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

4 votes

J'ai déjà porté Python sur la PSP de Sony ; peut-être qu'une partie de l'histoire de Subversion vous aidera. Ce n'est pas exactement une réponse, mais ici : python-psp.net/trac

22voto

cobbal Points 37900

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 quelque peu déprimante presque 2 ans plus tard : (copié de README sur github)

Ce projet n'a jamais vraiment permis de faire fonctionner python sur l'iPhone à mon avis. satisfaction, et je ne peux pas recommander son utilisation pour tout projet sérieux à ce stade.

L'absence la plus notable est le support de pyobjc (qui s'avère être beaucoup plus important que le support de pyobjc). difficile à porter sur l'iPhone car il repose sur du code plus spécifique à la plateforme)

Il manque également la possibilité de compiler statiquement des modules (tous sont actuellement construits en tant que dylibs qui fonctionne pour le développement, mais à ma mais à ma connaissance ne serait pas autorisé dans l'App Store)

A ce stade, ce projet est surtout destiné à servir de point de départ pour pour toute personne plus intelligente que moi qui veut et peut s'attaquer aux problèmes ci-dessus.

J'aimerais vraiment qu'il soit pratique d'écrire des applications entièrement en Python, mais à ce stade, cela semble impossible.

0 votes

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

0 votes

Si pyobjc est difficile à compiler, est-il envisageable d'utiliser ctypes ? Dans ce cas este pourrait être un indice (en réalisant que ce ne serait que le début d'un travail important et douloureux, mais quand même).

12voto

Alexander Points 129

J'ai réussi à compiler python pour ios. Voici l'échantillon - http://ompldr.org/vNjVteQ/pytesr3.zip

10voto

Albert Points 12642

J'ai également lancé un tel projet. Il est livré avec sa propre compilation simplifiée script, il n'y a donc pas besoin de s'embrouiller avec autoconf pour obtenir votre bibliothèque statique compilée en croix. Il est capable de construire une bibliothèque statique complètement sans dépendance de Python avec quelques modules communs. Il devrait être facilement extensible.

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

0 votes

Je n'arrive pas à faire fonctionner votre compilateur. Il compile bien, mais il lui manque certains modules intégrés comme '-collections'. Une idée ?

0 votes

Je n'ai pas inclus tous les modules C natifs. Il suffit de le modifier.

0 votes

Il semble daté... ne fonctionne qu'avec iOS 4.3 ? Pourriez-vous documenter comment faire pour que cela fonctionne avec des versions plus récentes ?

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