2010-09-11 14 views
86

To nowe tysiąclecie; Apple machnął ręką; teraz jest dozwolone dołączanie interpretera w języku Python do aplikacji iPhone (App Store).Osadzanie Pythona w aplikacji na iPhone'a

Jak to zrobić? Cała dyskusja (nieoczekiwanie) odnosi się do jailbreakingu. (Starsze pytanie: Can I write native iPhone apps using Python)

Moim celem nie jest napisanie aplikacji PyObjC, ale napisanie zwykłej aplikacji ObjC, która uruchamia Pythona jako bibliotekę osadzoną. Następnie kod Pythona oddzwoni do natywnego kodu Cocoa. To "logika kontrolna to wzorzec kodu Pythona".

Czy jest jakiś przewodnik po tworzeniu Pythona w XCode, aby moja aplikacja iPhone mogła go połączyć? Preferowany jest uproszczony Python, ponieważ nie będę potrzebował 90% standardowej biblioteki.

Prawdopodobnie znajdę wątek i API rozszerzające Pythona; Zrobiłem to na MacOS. Ale tylko przy użyciu kompilatorów wiersza poleceń, a nie XCode.

+0

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

+0

nie udało ci się to zrobić? – Ali

Odpowiedz

27

Nie ma znaczenia, jak zbudujesz Pythona - na przykład nie musisz go budować w Xcode - ale to, co ma znaczenie, jest produktem tej kompilacji.

Mianowicie, trzeba będzie zbudować coś w rodzaju libPython.a, które może być statycznie połączone z aplikacją. Po dodaniu pliku .a, który można dodać do projektu Xcode dla aplikacji, stamtąd będzie on połączony i podpisany, podobnie jak reszta aplikacji.

IIRC (minęło trochę czasu, odkąd ręcznie zbudowałem pytona), gotowy python zbuduje libPython.a (i kilka innych bibliotek), jeśli skonfigurujesz go poprawnie.

Oczywiście, twoim drugim problemem będzie kompilowanie kompilatora pythona dla ARM ze skrzynki . Python jest projektem opartym na autoconfie, a autoconf to ból w tyłku do kompilacji krzyżowej.

Zgodnie z tym, co napisałeś poprawnie, sprawienie, by było małe, będzie miało kluczowe znaczenie.

Nie jest też niespodzianką, że nie jesteś pierwszą osobą, która chce to zrobić, ale nie dla systemu iOS. Python został ściśnięty w urządzenia o wiele mniej wydajne niż te, które działają na iOS. Znalazłem wątek z wiązką linków podczas wyszukiwania w Google; to might be useful.

Możesz również dołączyć do listy pyobjc-dev. Podczas gdy nie kierujesz się do aplikacji opartej na PyObjC (która, przy okazji, jest dobrym pomysłem - PyObjC ma dużo do zrobienia, zanim będzie przyjazny dla iOS), społeczność PyObjC omawia to i Ronalda, każdego, jest prawdopodobnie najbardziej kompetentną osobą w tym konkretnym obszarze. Pamiętaj, że PyObjC będzie musiał rozwiązać problem z Pythonem na iOS przed przeniesieniem PyObjC. Ich wstępnym warunkiem jest twoje wymaganie.

+0

Dzięki za linki. (Użyłem Pythona na Sharpie Zaurusie dla * znacznie * wcześniejszej wersji tego projektu, ale to był Python 1.6 i ktoś inny zrobił to opakowanie ...) –

+4

Raz portowałem Pythona do PSP Sony; może trochę historii Subversion ci pomoże. Niezupełnie jednak odpowiedź. tutaj: http://www.python-psp.net/trac/ – fraca7

21

Włożyłem bardzo szorstki skrypt na github, który pobiera i buduje python2.6.5 na iPhone'a i symulator.

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

w toku

Nieco przygnębiające Aktualizuj prawie 2 lata później: (skopiowane z README na github)

Ten projekt nigdy nie został pyton działa na iPhone do mojego satysfakcja, i nie mogę polecić użycia go na żadnym poważnym projekcie na tym etapie.

Przede wszystkim brakuje PyObjC wsparcie (która okazuje się być o wiele trudniejsze do portu na iPhone, ponieważ opiera się na więcej danej platformy kod )

brakuje także jest możliwość statycznie skompilować moduły (wszyscy są obecnie budowane jako dylibs który pracuje dla rozwoju, ale do mojego wiedzy nie będą mogły w App Store)

w tym momencie ten projekt jest przede wszystkim ma być punktem wyjścia dla ktoś mądrzejszy ode mnie, którzy chce i może rozwiązać powyższe problemy.

Naprawdę chciałbym, aby pisanie aplikacji w całości w Pythonie było praktyczne, ale w tym momencie wydaje się niemożliwe.

+0

Dzięki! Nie będę miał okazji spojrzeć na to przez kilka dni, ale na pewno spróbuję tego wkrótce. –

+0

Jeśli 'pyobjc' jest trudny do skompilowania, czy możliwe jest użycie' ctypes'? W takim przypadku odpowiedź [ta] (http://stackoverflow.com/a/1490644/288672) może być wskazówką (uświadomienie sobie, że to dopiero początek dużej i bolesnej pracy, ale nadal). –

9

Rozpocząłem również taki projekt. Jest dostarczany z własnym uproszczonym skryptem kompilacji, więc nie ma potrzeby robienia bałaganu za pomocą autoconf, aby uzyskać skompilowaną bibliotekę statyczną. Jest w stanie zbudować całkowicie niezależną bibliotekę statyczną Pythona z pewnymi wspólnymi modułami. Powinien być łatwy do rozszerzenia.

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

+0

Nie dostaję twojego kompilatora do pracy. Kompiluje, ale brakuje niektórych wbudowanych modułów takich jak "-kolekcje". Jakieś pomysły? – bijan

+0

Nie uwzględniłem wszystkich natywnych modułów C. Po prostu go zmodyfikuj. – Albert

+0

Wydaje się, że ... działa tylko z iOS 4.3? Czy możesz udokumentować, jak sprawić, by działało z nowszymi wersjami? – ArtOfWarfare

Powiązane problemy