Встраивание 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 с некоторыми общими модулями. Это должно быть легко расширяемым.