2010-09-11 19 views
86

Así que es un nuevo milenio; Apple ha agitado su mano; ahora es legal incluir un intérprete de Python en una aplicación de iPhone (App Store).Incrustar Python en una aplicación de iPhone

¿Cómo se puede hacer esto? Toda la discusión existente (como era de esperar) se refiere a jailbreaking. (Pregunta anterior: Can I write native iPhone apps using Python)

Mi objetivo aquí no es escribir una aplicación PyObjC, sino escribir una aplicación ObjC normal que ejecute Python como una biblioteca incrustada. El código de Python devolverá la llamada al código de Cocoa nativo. Es el patrón "lógica de control es código Python".

¿Existe alguna guía para incorporar Python en XCode, para que mi aplicación de iPhone pueda vincularlo? Preferiblemente un Python simplificado, ya que no necesitaré el 90% de la biblioteca estándar.

Probablemente pueda averiguar el enhebrado y la API de extensión de Python; Lo he hecho en MacOS. Pero solo usando compiladores de línea de comandos, no XCode.

+0

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

+0

hicieron se las arregló para hacer esto? – Ali

Respuesta

27

Realmente no importa cómo construyes Python, no necesitas construirlo en Xcode, por ejemplo, pero lo que sí importa es el producto de esa compilación.

A saber, vas a necesitar construir algo como libPython.a que pueda vincularse estáticamente en tu aplicación. Una vez que tenga una .a, puede agregarla al proyecto de Xcode para su (s) aplicación (es) y, a partir de ahí, se vinculará y firmará igual que el resto de su aplicación.

IIRC (ha pasado un tiempo desde que construí python a mano), la versión de fábrica de python construirá una libPython.a (y muchas otras librerías), si la configura correctamente.

Por supuesto, su segundo problema será la compilación cruzada de python para ARM desde su casilla . Python es un proyecto basado en autoconf y autoconf es un problema para la compilación cruzada.

Como dices correctamente, hacerlo pequeño será fundamental.

No es sorprendente, tampoco, que no sea la primera persona que quiera hacer esto, pero no para iOS. Python ha sido exprimido en dispositivos mucho menos capaces que aquellos que ejecutan iOS. Encontré un hilo con un montón de enlaces cuando busqué en Google; es might be useful.

Además, es posible que desee unirse a la lista pyobjc-dev. Si bien no tiene como objetivo una aplicación basada en PyObjC (que, por cierto, es una buena idea, PyObjC tiene un largo camino por recorrer antes de que sea compatible con iOS), la comunidad PyObjC ha estado discutiendo esto y Ronald, de cualquiera, es probablemente la persona más informada en esta área en particular. Tenga en cuenta que PyObjC tendrá que resolver el problema de Python en iOS incrustado antes de portar PyObjC. Su requisito previo es su requisito, por así decirlo.

+0

Gracias por los enlaces. (Utilicé Python en Sharp Zaurus para * mucho * versión anterior de este proyecto, pero eso fue Python 1.6 y alguien más hizo el empaque ...) –

+4

Una vez porté Python a la PSP de Sony; tal vez parte del historial de Subversion te ayude. Sin embargo, no es exactamente una respuesta. aquí: http://www.python-psp.net/trac/ – fraca7

21

He puesto una secuencia de comandos muy aproximada en github que recupera y construye python2.6.5 para iPhone y simulador.

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

Trabajo en curso

actualización algo deprimente casi 2 años después: (copiado de README en github)

Este proyecto nunca realmente pitón se ejecuta en el iPhone a mi satisfacción, y no puedo recomendar su uso para cualquier proyecto serio en esta etapa.

Lo más notable es que falta es el apoyo PyObjC (que resulta ser mucho más difícil de puerto para iPhone, ya que se basa en más código específico de la plataforma)

También falta la capacidad para compilar estáticamente módulos, (todo Actualmente están construido como dylibs que trabaja para el desarrollo, pero que yo sepa no se permitiría en la App Store)

en este punto, este proyecto es principalmente destinado a ser un punto de partida para cualquier persona más inteligente que yo, que quiere y puede abordar los problemas anteriores.

Realmente me gustaría que fuera práctico escribir aplicaciones completamente en Python, pero en este punto parece imposible.

+0

¡Gracias! No tendré la oportunidad de verlo por unos días, pero definitivamente lo intentaré pronto. –

+0

Si 'pyobjc' es difícil de compilar, ¿es factible usar' ctypes'? En ese caso, [este] (http://stackoverflow.com/a/1490644/288672) la respuesta podría ser una pista (darse cuenta de que sería el comienzo de un trabajo grande y doloroso, pero aún así). –

9

También comencé un proyecto de este tipo. Viene con su propio script de compilación simplificado por lo que no hay necesidad de perder el control con autoconf para obtener su biblioteca estática compilada cruzada. Es capaz de construir una biblioteca estática de Python completamente libre de dependencias con algunos módulos comunes. Debe ser fácilmente extensible.

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

+0

No consigo que el compilescript funcione. Compila, pero carece de algunos módulos integrados como '-collections'. ¿Algunas ideas? – bijan

+0

No incluí todos los módulos C nativos. Solo modifícalo. – Albert

+0

Parece fechado ... ¿solo funciona con iOS 4.3? ¿Podría documentar cómo hacer que esto funcione con más versiones actuales? – ArtOfWarfare

Cuestiones relacionadas