Menyematkan Python di aplikasi iPhone

94

Jadi ini milenium baru; Apple telah melambaikan tangan mereka; sekarang legal untuk menyertakan penerjemah Python di aplikasi iPhone (App Store).

Bagaimana cara melakukan ini? Semua diskusi yang ada (tidak mengejutkan) mengacu pada jailbreaking. (Pertanyaan lama: Bisakah saya menulis aplikasi iPhone asli menggunakan Python )

Tujuan saya di sini bukan untuk menulis aplikasi PyObjC, tetapi untuk menulis aplikasi ObjC biasa yang menjalankan Python sebagai pustaka tertanam. Kode Python kemudian akan memanggil kembali ke kode Cocoa asli. Ini adalah pola "logika kontrol adalah kode Python".

Apakah ada panduan untuk membuat Python dibangun di XCode, sehingga aplikasi iPhone saya dapat menautkannya? Lebih disukai Python yang dipreteli, karena saya tidak membutuhkan 90% dari pustaka standar.

Saya mungkin bisa mengetahui threading dan Python-extension API; Saya telah melakukannya di MacOS. Tetapi hanya menggunakan kompiler baris perintah, bukan XCode.

Andrew Plotkin
sumber

Jawaban:

30

Tidak masalah bagaimana Anda membuat Python - Anda tidak perlu membuatnya di Xcode, misalnya - tetapi yang penting adalah produk dari build itu.

Yaitu, Anda perlu membangun sesuatu seperti libPython.a yang dapat ditautkan secara statis ke aplikasi Anda. Setelah Anda memiliki .a, itu dapat ditambahkan ke proyek Xcode untuk aplikasi Anda dan, dari sana, itu akan ditautkan dan ditandatangani seperti aplikasi Anda lainnya.

IIRC (sudah lama sejak saya membuat python dengan tangan) python out-of-the-box akan membangun libPython.a (dan banyak pustaka lain), jika Anda mengkonfigurasinya dengan benar.

Tentu saja, masalah kedua Anda adalah python kompilasi silang untuk ARM dari kotak 86 Anda . Python adalah proyek berbasis autoconf dan autoconf adalah kesulitan untuk kompilasi silang.

Saat Anda menyatakan dengan benar, menjadikannya kecil akan sangat penting.

Tidak mengherankan, jika Anda bukan orang pertama yang ingin melakukan ini, tetapi tidak untuk iOS. Python telah dimasukkan ke dalam perangkat yang jauh lebih tidak mampu daripada yang menjalankan iOS. Saya menemukan utas dengan banyak tautan saat mencari di Google; itu mungkin berguna .

Selain itu, Anda mungkin ingin bergabung dengan daftar pyobjc-dev . Meskipun Anda tidak menargetkan aplikasi berbasis PyObjC (yang, btw, adalah ide yang bagus - PyObjC memiliki jalan panjang sebelum menjadi ramah iOS), komunitas PyObjC telah mendiskusikan hal ini dan Ronald, siapa pun, mungkin orang yang paling berpengetahuan di bidang ini. Perhatikan bahwa PyObjC harus menyelesaikan masalah Python yang disematkan pada iOS sebelum melakukan porting PyObjC. Prasyarat mereka adalah kebutuhan Anda.

bbum
sumber
Terima kasih untuk tautannya. (Saya menggunakan Python di Sharp Zaurus untuk versi yang jauh lebih awal dari proyek ini, tapi itu adalah Python 1.6 dan orang lain yang membuat kemasannya ...)
Andrew Plotkin
4
Saya pernah mem-porting Python ke PSP Sony; mungkin beberapa sejarah Subversion akan membantu Anda. Bukan jawaban yang tepat. di sini: python-psp.net/trac
fraca7
22

Saya telah memasang skrip yang sangat kasar di github yang mengambil dan membangun python2.6.5 untuk iPhone dan simulator.

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

Pekerjaan sedang dalam proses

Pembaruan yang agak menyedihkan hampir 2 tahun kemudian: (disalin dari README di github)

Proyek ini tidak pernah benar-benar membuat python berjalan di iPhone sesuai kepuasan saya, dan saya tidak dapat merekomendasikan menggunakannya untuk proyek serius apa pun pada tahap ini.

Yang paling hilang adalah dukungan pyobjc (yang ternyata jauh lebih sulit untuk di-porting ke iPhone karena bergantung pada lebih banyak kode khusus platform)

Yang juga hilang adalah kemampuan untuk menyusun modul secara statis, (semua saat ini dibuat sebagai dylib yang berfungsi untuk pengembangan, tetapi sepengetahuan saya tidak akan diizinkan di App Store)

Pada titik ini, proyek ini sebagian besar dimaksudkan sebagai titik awal bagi siapa pun yang lebih pintar dari saya yang ingin dan dapat mengatasi masalah di atas.

Saya benar-benar berharap praktis untuk menulis aplikasi sepenuhnya dengan Python, tetapi pada titik ini tampaknya tidak mungkin.

cobbal
sumber
Terima kasih! Saya tidak akan memiliki kesempatan untuk melihatnya selama beberapa hari, tetapi saya pasti akan segera mencobanya.
Andrew Plotkin
Jika pyobjcsulit dikompilasi, apakah layak digunakan ctypes? Dalam hal ini, jawaban ini mungkin menjadi petunjuk (menyadari bahwa ini hanyalah awal dari pekerjaan yang besar dan menyakitkan, tetapi tetap saja).
Jacob Oscarson
10

Saya juga memulai proyek seperti itu. Itu datang dengan skrip kompilasi yang disederhanakan sendiri sehingga tidak perlu dipusingkan dengan autoconf untuk mendapatkan perpustakaan statis terkompilasi silang Anda. Ia mampu membangun pustaka statis bebas ketergantungan Python dengan beberapa modul umum. Ini harus mudah dikembangkan.

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

Albert
sumber
Saya tidak mendapatkan compilescript Anda untuk bekerja. Ia mengkompilasi, tetapi kekurangan beberapa modul bawaan seperti '-collections'. Ada ide?
bijan
Saya tidak menyertakan semua modul C asli. Modifikasi saja.
Albert
Sepertinya tanggal ... hanya bekerja dengan iOS 4.3? Bisakah Anda mendokumentasikan cara membuatnya berfungsi dengan versi yang lebih baru?
ArtOfWarfare
@ArtOfWarfare: Sudah lama tidak menggunakannya, mengapa tidak berfungsi dengan versi yang lebih baru? Mungkin membuat laporan bug di GitHub jika Anda melihat masalah.
Albert