Incorporer Python dans une application iPhone

94

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

Comment s'y prend-on? Toutes les discussions existantes (sans surprise) font référence au jailbreaking. (Question plus ancienne: Puis-je écrire des applications iPhone natives en utilisant Python )

Mon objectif ici n'est pas d'écrire une application PyObjC, mais d'écrire une application ObjC standard qui exécute Python en tant que bibliothèque intégrée. Le code Python rappellera ensuite le code Cocoa natif. C'est le modèle «la logique de contrôle est du 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é, car je n'aurai pas besoin de 90% de la bibliothèque standard.

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

Andrew Plotkin
la source

Réponses:

30

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 version.

À savoir, vous allez devoir créer quelque chose comme libPython.a qui peut être lié statiquement à votre application. Une fois que vous avez un .a, qui peut être ajouté au projet Xcode pour vos applications et, à partir de là, il sera lié et signé 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 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 86 . 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, il sera essentiel de le rendre petit.

Pas étonnant non plus que vous ne soyez pas la première personne à vouloir faire cela, mais pas pour iOS. Python a été inséré dans des appareils beaucoup moins capables que ceux qui exécutent iOS. J'ai trouvé un fil avec un tas de liens en cherchant sur Google; cela pourrait être utile .

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

bbum
la source
Merci pour les liens. (J'ai utilisé Python sur Sharp Zaurus pour une version beaucoup plus ancienne de ce projet, mais c'était Python 1.6 et quelqu'un d'autre a fait le packaging ...)
Andrew Plotkin
4
Une fois, j'ai porté Python sur la PSP de Sony; peut-être qu'une partie de l'histoire de Subversion vous aidera. Pas exactement une réponse cependant. ici: python-psp.net/trac
fraca7
22

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

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

Travail en cours

Mise à jour un peu déprimante près de 2 ans plus tard: (copié de README sur github)

Ce projet n'a jamais vraiment fait fonctionner python sur l'iPhone à ma satisfaction, et je ne peux pas recommander de l'utiliser pour un projet sérieux à ce stade.

Le support pyobjc (qui s'avère être beaucoup plus difficile à porter sur iPhone car il repose sur un code plus spécifique à la plate-forme)

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

À ce stade, ce projet est principalement destiné à être un point de départ pour toute personne plus intelligente que moi qui souhaite et peut résoudre les problèmes ci-dessus.

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

cobbal
la source
Merci! Je n'aurai pas la chance de le regarder pendant quelques jours, mais je vais certainement l'essayer bientôt.
Andrew Plotkin le
Si pyobjcest difficile à compiler, est-il faisable à utiliser ctypes? Dans ce cas, cette réponse pourrait être un indice (se rendre compte que ce ne serait que le début d'un travail important et douloureux, mais quand même).
Jacob Oscarson
10

J'ai également lancé un tel projet. Il est livré avec son propre script de compilation simplifié, il n'est donc pas nécessaire de jouer avec autoconf pour obtenir votre bibliothèque statique compilée de manière croisée. Il est capable de créer une bibliothèque statique de Python totalement sans dépendance avec quelques modules communs. Il doit être facilement extensible.

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

Albert
la source
Je ne fais pas fonctionner votre compilescript. Il compile, mais il manque certains modules intégrés comme «-collections». Des idées?
bijan
Je n'ai pas inclus tous les modules C natifs. Modifiez-le simplement.
Albert
Semble daté ... fonctionne uniquement avec iOS 4.3? Pourriez-vous documenter comment faire fonctionner cela avec des versions plus récentes?
ArtOfWarfare
@ArtOfWarfare: Je ne l'ai pas utilisé depuis un moment, pourquoi ne fonctionnerait-il pas avec des versions plus récentes? Peut-être faites un rapport de bogue sur GitHub si vous voyez des problèmes.
Albert