Incorporando Python em um aplicativo para iPhone

94

Portanto, é um novo milênio; A Apple acenou com a mão; agora é legal incluir um interpretador Python em um aplicativo para iPhone (App Store).

Como fazer isso? Toda a discussão existente (sem surpresa) refere-se ao jailbreak. (Pergunta antiga: Posso escrever aplicativos nativos para iPhone usando Python )

Meu objetivo aqui não é escrever um aplicativo PyObjC, mas escrever um aplicativo ObjC normal que execute Python como uma biblioteca incorporada. O código Python então chamará de volta para o código Cocoa nativo. É o padrão "lógica de controle é código Python".

Existe um guia para construir o Python no XCode, para que meu aplicativo para iPhone possa vinculá-lo? De preferência, um Python simplificado, já que não precisarei de 90% da biblioteca padrão.

Provavelmente posso descobrir o threading e a API de extensão Python; Eu fiz isso no MacOS. Mas apenas usando compiladores de linha de comando, não XCode.

Andrew Plotkin
fonte

Respostas:

30

Realmente não importa como você constrói Python - você não precisa construí-lo no Xcode, por exemplo - mas o que importa é o produto dessa construção.

Ou seja, você precisará construir algo como libPython.a que pode ser vinculado estaticamente ao seu aplicativo. Depois de ter um .a, ele pode ser adicionado ao projeto Xcode de seu (s) aplicativo (s) e, a partir daí, será vinculado e assinado como o resto do seu aplicativo.

IIRC (faz um tempo desde que eu construí o python manualmente) o python pronto para usar irá construir um libPython.a (e um monte de outras bibliotecas), se você configurá-lo corretamente.

Claro, seu segundo problema será a compilação cruzada de python para ARM de sua caixa 86 . Python é um projeto baseado em autoconf e autoconf é um pé no saco para compilação cruzada.

Como você afirma corretamente, torná-lo pequeno será crítico.

Também não é surpreendente que você não seja a primeira pessoa a querer fazer isso, mas não para o iOS. Python foi espremido em dispositivos muito menos capazes do que aqueles que executam iOS. Eu encontrei um tópico com vários links ao pesquisar sobre; ele pode ser útil .

Além disso, você pode querer entrar na lista pyobjc-dev . Embora você não esteja visando um aplicativo baseado em PyObjC (o que, aliás, é uma boa ideia - PyObjC tem um longo caminho a percorrer antes de ser compatível com iOS), a comunidade PyObjC tem discutido isso e Ronald, de qualquer um, é provavelmente a pessoa mais experiente nesta área específica. Observe que o PyObjC terá que resolver o problema do Python embutido no iOS antes de portar o PyObjC. Seu pré-requisito é sua exigência, por assim dizer.

bbum
fonte
Obrigado pelos links. (Eu usei Python no Sharp Zaurus para uma versão muito anterior deste projeto, mas era o Python 1.6 e outra pessoa fez o pacote ...)
Andrew Plotkin
4
Certa vez, transportei o Python para o PSP da Sony; talvez um pouco da história do Subversion o ajude. Não é exatamente uma resposta. aqui: python-psp.net/trac
fraca7
22

Coloquei um script muito bruto no github que busca e constrói o python2.6.5 para iPhone e simulador.

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

Trabalho em progresso

Atualização um tanto deprimente quase 2 anos depois: (copiado de README no github)

Para minha satisfação, este projeto nunca colocou o python em execução no iPhone, e não posso recomendar o seu uso para nenhum projeto sério neste estágio.

O que está faltando é o suporte pyobjc (que é muito mais difícil de portar para o iPhone, pois depende de um código mais específico da plataforma)

Também está faltando a capacidade de compilar módulos estaticamente, (todos são atualmente construídos como dylibs que funcionam para desenvolvimento, mas que eu saiba não seria permitido na App Store)

Neste ponto, este projeto pretende ser um ponto de partida para qualquer pessoa mais inteligente do que eu que queira e possa resolver os problemas acima.

Eu realmente gostaria que fosse prático escrever aplicativos inteiramente em Python, mas neste ponto parece impossível.

cobbal
fonte
Obrigado! Não terei a chance de olhar por alguns dias, mas definitivamente tentarei em breve.
Andrew Plotkin,
Se pyobjcfor difícil de compilar, é viável usar ctypes? Nesse caso, essa resposta pode ser uma pista (perceber que seria apenas o início de um trabalho grande e doloroso, mas ainda assim).
Jacob Oscarson
10

Eu também comecei um projeto assim. Ele vem com seu próprio script de compilação simplificado, então não há necessidade de mexer com o autoconf para obter sua biblioteca estática compilada cruzada. Ele é capaz de construir uma biblioteca estática de Python completamente livre de dependências com alguns módulos comuns. Deve ser facilmente extensível.

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

Albert
fonte
Não consigo fazer o seu compilescript funcionar. Ele compila, mas não possui alguns módulos embutidos como '-collections'. Alguma ideia?
bijan
Não incluí todos os módulos C nativos. Apenas modifique.
Albert
Parece datado ... só funciona com iOS 4.3? Você poderia documentar como fazer isso funcionar com versões mais atuais?
ArtOfWarfare
@ArtOfWarfare: Faz algum tempo que não uso, por que não deveria funcionar com versões mais recentes? Talvez faça um relatório de bug no GitHub se você encontrar algum problema.
Albert de