Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

На самом деле неважно, как вы создаете 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. Их предварительным условием является ваше требование как бы.

Ответ 2

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

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

Незавершенное производство

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

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

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

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

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

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

Ответ 3

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

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