Встраивание Python в приложение для iPhone

Так что это новое тысячелетие; Apple махнула рукой; теперь разрешено включать интерпретатор Python в приложение для iPhone (App Store).

Как можно это сделать? Все существующие обсуждения (неудивительно) относятся к джейлбрейку. (Старый вопрос: можно ли писать нативные приложения для iPhone с использованием Python)

Моя цель здесь не в том, чтобы написать приложение PyObjC, а в том, чтобы написать обычное приложение ObjC, которое запускает Python как встроенную библиотеку. Затем код Python перезвонит нативному коду какао. Это шаблон "логика управления - это код Python".

Есть ли руководство по созданию Python в XCode, чтобы мое приложение для iPhone могло связать его? Желательно урезанный Python, так как мне не понадобится 90% стандартной библиотеки.

Я, наверное, могу понять API потоков и Python-расширений; Я сделал это на MacOS. Но только с использованием компиляторов командной строки, а не XCode.

3 ответа

На самом деле не имеет значения, как вы собираете Python - вам не нужно, например, создавать его в XCode - но что важно, так это продукт этой сборки.

А именно, вам нужно будет создать что-то вроде libPython.a, которое может быть статически связано с вашим приложением. Когда у вас есть.a, его можно добавить в проект Xcode для вашего приложения, и оттуда он будет связан и подписан так же, как и все остальное ваше приложение.

IIRC (с тех пор, как я собрал python вручную), готовый python создаст libPython.a (и кучу других библиотек), если вы настроите его правильно.

Конечно, вашей второй проблемой будет кросс-компиляция Python для ARM из вашей 86-й версии. Python - это проект, основанный на autoconf, а autoconf - трудная задача для кросс-компиляции.

Как вы правильно заявите, сделать его маленьким будет критично.

Неудивительно, что вы не первый, кто хочет сделать это, но не для iOS. Python был втиснут в устройства, гораздо менее способные, чем те, которые работают под iOS. Я нашел ветку с кучей ссылок, когда гуглял; это может быть полезно.

Также вы можете присоединиться к списку pyobjc-dev. Хотя вы не ориентируетесь на приложение на основе PyObjC (что, кстати, является хорошей идеей - PyObjC еще предстоит пройти долгий путь, прежде чем он станет дружественным для iOS), сообщество PyObjC обсуждает это и Рональда, кого угодно, вероятно, самый знающий человек в этой конкретной области. Обратите внимание, что PyObjC должен будет решить проблему встроенного Python для iOS перед портированием PyObjC. Их обязательным условием является ваше требование как бы.

Я написал очень грубый скрипт на github, который выбирает и собирает python2.6.5 для iPhone и симулятора.

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

Работа в процессе

Несколько удручающее обновление почти 2 года спустя: (скопировано из README на github)

К моему удовлетворению, в этом проекте никогда не было запущено python на iPhone, и я не могу рекомендовать использовать его для какого-либо серьезного проекта на данном этапе.

В частности, отсутствует поддержка pyobjc (портирование на iPhone оказывается намного сложнее, поскольку оно опирается на более специфичный для платформы код)

Также отсутствует возможность статической компиляции модулей (все они в настоящее время собраны в виде dylibs, которые работают для разработки, но, насколько мне известно, не будут допущены в App Store)

На данный момент этот проект предназначен для того, чтобы стать отправной точкой для тех, кто умнее меня, кто хочет и может решить вышеуказанные проблемы.

Я действительно хотел бы, чтобы было практично писать приложения полностью на Python, но на данный момент это кажется невозможным.

Я тоже начал такой проект. Он поставляется с собственным упрощенным скриптом компиляции, поэтому нет необходимости возиться с autoconf, чтобы получить кросс-скомпилированную статическую библиотеку. Он может создать полностью независимую статическую библиотеку Python с некоторыми общими модулями. Это должно быть легко расширяемым.

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

Другие вопросы по тегам