Incorporamento di Python in un'app per iPhone


94

Quindi è un nuovo millennio; Apple ha agitato la mano; ora è legale includere un interprete Python in un'app per iPhone (App Store).

Come si fa a farlo? Tutta la discussione esistente (non sorprende) si riferisce al jailbreak. (Domanda precedente: posso scrivere app native per iPhone utilizzando Python )

Il mio obiettivo qui non è scrivere un'app PyObjC, ma scrivere una normale app ObjC che esegue Python come libreria incorporata. Il codice Python richiamerà quindi il codice Cocoa nativo. È il modello "la logica di controllo è codice Python".

Esiste una guida per creare Python in XCode, in modo che la mia app per iPhone possa collegarlo? Preferibilmente un Python ridotto al minimo, poiché non avrò bisogno del 90% della libreria standard.

Probabilmente riesco a capire il threading e l'API di estensione Python; L'ho fatto su MacOS. Ma solo usando compilatori da riga di comando, non XCode.


Risposte:


30

Non importa come costruisci Python - non hai bisogno di crearlo in Xcode, per esempio - ma ciò che conta è il prodotto di quella build.

Vale a dire, dovrai creare qualcosa come libPython.a che può essere collegato staticamente alla tua applicazione. Una volta che hai un .a, questo può essere aggiunto al progetto Xcode per le tue applicazioni e, da lì, sarà collegato e firmato proprio come il resto della tua app.

IIRC (è passato un po 'di tempo da quando ho costruito python a mano) il python pronto all'uso costruirà un libPython.a (e un mucchio di altre librerie), se lo configuri correttamente.

Ovviamente, il tuo secondo problema sarà la compilazione incrociata di Python per ARM dalla tua casella 86 . Python è un progetto basato su autoconf e autoconf è una seccatura per la compilazione incrociata.

Come affermi correttamente, renderlo piccolo sarà fondamentale.

Non sorprende nemmeno che tu non sia la prima persona a volerlo fare, ma non per iOS. Python è stato compresso in dispositivi molto meno capaci di quelli che eseguono iOS. Ho trovato un thread con un mucchio di link mentre cercavo su Google; che potrebbe essere utile .

Inoltre, potresti voler unirti alla lista pyobjc-dev . Anche se non stai prendendo di mira un'applicazione basata su PyObjC (che, a proposito, è una buona idea - PyObjC ha ancora molta strada da fare prima che sia compatibile con iOS), la comunità di PyObjC ha discusso di questo e Ronald, di chiunque, è probabilmente la persona più esperta in questa particolare area. Nota che PyObjC dovrà risolvere il problema di Python incorporato su iOS prima di eseguire il porting di PyObjC. Il loro prerequisito è il tuo requisito, per così dire.


Grazie per i link. (Ho usato Python su Sharp Zaurus per una versione molto precedente di questo progetto, ma quello era Python 1.6 e qualcun altro ha fatto la confezione ...)
Andrew Plotkin

4
Una volta ho portato Python sulla PSP di Sony; forse un po 'della storia di Subversion ti aiuterà. Non esattamente una risposta però. qui: python-psp.net/trac
fraca7

22

Ho messo uno script molto approssimativo su GitHub che recupera e compila python2.6.5 per iPhone e simulatore.

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

Lavori in corso

Aggiornamento un po 'deprimente quasi 2 anni dopo: (copiato da README su GitHub)

Questo progetto non ha mai fatto funzionare Python su iPhone con mia soddisfazione e non posso raccomandare di usarlo per nessun progetto serio in questa fase.

In particolare manca il supporto pyobjc (che risulta essere molto più difficile da portare su iPhone poiché si basa su un codice più specifico della piattaforma)

Manca anche la possibilità di compilare staticamente i moduli, (tutti sono attualmente costruiti come dylibs che funzionano per lo sviluppo, ma per quanto ne so non sarebbero consentiti nell'App Store)

A questo punto questo progetto è principalmente pensato per essere un punto di partenza per chiunque sia più intelligente di me che vuole e può affrontare i problemi di cui sopra.

Vorrei davvero che fosse pratico scrivere app interamente in Python, ma a questo punto sembra impossibile.


Grazie! Non avrò la possibilità di guardarlo per qualche giorno, ma lo proverò sicuramente presto.
Andrew Plotkin

Se pyobjcè difficile da compilare, è possibile utilizzarlo ctypes? In tal caso questa risposta potrebbe essere un indizio (rendendosi conto che sarebbe solo l'inizio di un lavoro ampio e doloroso, ma comunque).
Jacob Oscarson

10

Ho anche avviato un progetto del genere. Viene fornito con il proprio script di compilazione semplificato, quindi non è necessario scherzare con autoconf per ottenere la libreria statica a compilazione incrociata. È in grado di costruire una libreria statica di Python completamente priva di dipendenze con alcuni moduli comuni. Dovrebbe essere facilmente estensibile.

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


Non riesco a far funzionare il tuo compilescript. Compila, ma manca di alcuni moduli incorporati come "-collections". Qualche idea?
bijan

Non ho incluso tutti i moduli C nativi. Basta modificarlo.
Albert

Sembra datato ... funziona solo con iOS 4.3? Potresti documentare come farlo funzionare con versioni più attuali?
ArtOfWarfare

@ArtOfWarfare: Non lo uso da un po ', perché non dovrebbe funzionare con le versioni più recenti? Forse fai una segnalazione di bug su GitHub se vedi problemi.
Albert
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.