C/C++ из Python (Kivy, ctypes) на iOS
Ранее я писал статьи C/C++ из Python (ctypes), C/C++ из Python (Kivy, ctypes) на Android. В них описывается процесс запуска на Linux и Android. Теперь поговорим как тоже самое сделать на iOS. В этой статье речь пойдет о сборке, необходимых инструментах, механизмах отладки и установки.
Код на C/C++ ни каких изменений не претерпел. Подробнее ознакомиться с описанием кода можно по ссылке на статью приведенной в начале данного материала.
Инструменты сборки
Сборка проводилась на виртуальной машине под управлением Mac OS Ventura 13, собрать на не Mac OS системах не получится. MacBook или iMac у меня нет. Статья по установке mac OS на VMware Workstation.
- Xcode
- Apple Developer
- brew
Xcode & Apple Developer устанавливаем через App Store.
или Xcode через bash:
Доустанавливаем все необходимые пакеты:
clang
Для устройств на архитектуре arm64 (у clang это armv8):
Можно собрать под более старые архитектуры armv6, armv7.
Для эмулятора, архитектура x86_64:
Флаг miphoneos-version-min указывает минимальную поддерживаемую версию iOS. На текущий момент еще поддерживаются iPhone 4s, которые обновляются до 12-ой версии.
Далее из библиотек под разные архитектуры можно собрать одну библиотеку которая будет работать на всех нужных нам архитектурах:
Посмотрим что получилось:
Посмотреть тип библиотеки:
На этом работа с библиотекой на C закончена.
clang++
Для устройств на архитектуре arm64 (у clang это armv8):
Можно собрать под более старые архитектуры armv6, armv7.
Для эмулятора, архитектура x86_64:
Далее из библиотек под разные архитектуры можно собрать одну библиотеку которая будет работать на всех нужных нам архитектурах:
Посмотрим что получилось
Подпись библиотек
Так же необходимо подписать библиотеки, если хотим запустить на телефоне:
Вместо djvu@inbox.ru задать свой Apple ID.
Python
Здесь нам понадобится фреймворк Kivy.
Установка kivy
и сопутствующих пакетов:
Установив kivy приступим к созданию тестовой программы. Создадим папку под нее:
Теперь создадим main.py, это точка запуска нашей программы.
Здесь создается простая графическая программа с одной кнопкой при нажатии которой произойдет закрытие приложения. Основная задача статьи показать как запускать C/C++ библиотеки, результат работы увидим в консоли.
Далее создаем папку под проект Xcode.
Очень важно, исходники проекта и проект Xcode должны находиться в разных невложенных в друг друга папках.
Создаем проект Xcode:
Так же можно установить необходимые python модули:
Удалить ненужные модули:
Первая операция скачивает и собирает все необходимые библиотеки для работы Kivy.
Вторая задает имя проекта Xcode test, toolchain создаст под него папку и добавит к ней префикс -ios. Путь до исходников должен быть полный, к примеру ../ios не будет работать.
Все файлы находящиеся в
/workspace/c_from_python/ctypes/src/python/ios будут взяты в Xcode и собраны в установочном пакете (для Android в buildozer.spec все надо было прописывать). В корне
/workspace/c_from_python/ctypes/src/python/ios обязательно должен быть файл main.py, содержащий запуск программы.
Обновление данных в проекте Xcode:
Теперь открываем проект Xcode:
Подписываем проект и даем уникальное имя:
Выбираем эмулятор/телефон и нажимаем собрать:
Для телефона необходимо подключить AVFAudio.framework в режиме Optional:
Возможные ошибки
- 407 duplicate symbols for architecture arm64 — удалить libfreetype.a в Build Phases->Link Binary With Libraries
Телефон
Эмулятор
Запуск на эмуляторе, приложение стартует автоматически после сборки и получаем следующее — C/C++ отработал без проблем:
Видим следующую картинку:
iPhone 5s
Сразу телефон не дает запустить программу:
Даем разрешение: Настройки->Основные->Управления устройством->Apple Development
Видим аналогичную эмулятору картинку:
Все отработало как надо. Нажатие на кнопку закрывает приложение. Больше оно ни чего не умеет делать 😉
How to Install Packages in Python on MacOS?
To get started with using pip, you should install Python on your system. Make sure that you have a working pip.
Installing Packages in Python on MacOS:
Follow the below steps to install python packages on MacOS:
Step 1: As the first step, you should check that you have a working Python with pip installed. This can be done by running the following commands and the output will be similar to like this:
If the output looks like this, You have a working pip in your environment.
If your output doesn’t look like this then refer to this pip document. It provides guidance on how to install pip within a Python environment that doesn’t have it.
Installing a package
Step 2: To install a package, run the following commands in the terminal:
Note: replace the SomePackage with the package name which you want to install.
By default, pip will fetch packages from Python Package Index, a repository of software for the Python programming language where anyone can upload packages.
Installing a package from Github
Run the following commands:
Upgrade a package:
Use the below command to upgrade an installed package:
Uninstalling Packages
To uninstall a Python package use the below command:
Note: replace the SomePackage with the package name which you want to install.
Как запускать и планировать скрипты Python на iOS
Таким образом, вы автоматизировали что – то с помощью скрипта Python – возможно, проверяя, доступна ли ваша любимая еда – и, возможно, вы запланировали его запуск на вашем компьютере каждый день. Но, возможно, бывают дни, когда вы не используете свой компьютер, но все равно хотите запустить этот скрипт. Разве не было бы здорово, если бы вы могли сделать это на своем iPhone? Ну, хорошая новость: вы можете . Еще лучшая новость: также можно полуавтоматизировать их по местоположению или времени триггеров.
Приложение, необходимое для запуска скриптов Python на iOS
Есть несколько альтернатив, я рекомендую Pythonista 3 . Это не самое дешевое, но, безусловно, самое полезное и многофункциональное приложение. Поскольку это универсальное приложение, вам нужно купить его только один раз, и вы можете редактировать/запускать сценарии на всех своих устройствах через общий доступ к файлам iCloud. Кроме того, с помощью аккуратного расширения оболочки под названием stash вы можете установить любой сторонний модуль через pip.
Загрузка и запуск сценариев
Существуют различные способы открыть или загрузить файл в Pythonista. На самой левой панели:
- вы можете выбрать любой файл из своей библиотеки iCloud
- используйте кнопку Открыть в разделе Внешние файлы, чтобы открыть файлы из других приложений/местоположений
- используйте кнопку + в левом нижнем углу, чтобы создать новый пустой файл сценария
- здесь вы можете написать свой собственный код
- или вставьте код из другого файла
Запустить сценарий так же просто, как нажать кнопку воспроизведения в заголовке панели сценариев.
Приложение, необходимое для планирования
Launch Center Pro – это приложение, которое можно использовать для выполнения задач на основе триггеров местоположения и времени. Самое приятное, что он также может выполнять действия с использованием схемы URL-адресов ios. Это означает, что он может открыть Pythonista и запустить в нем любой скрипт! Вот как это работает:
- Создайте новое действие, нажав кнопку карандаша в правом верхнем углу и нажав на пустой слот. Затем в поле URL используйте следующую логику: pythonista://script.py?action=run Это будет работать script.py , который находится в локальной корневой папке вашего Pythonista.
- Если ваш скрипт находится в папке, то используйте следующую схему: pythonista://Folder/script.py?action=run или pythonista://Folder/Folder 2/script.py?action=run
- Если вы хотите запустить скрипт из библиотеки iCloud, используйте следующую схему: pythonista://Папка/script.py?action=run&root=icloud
После создания нажатие на это действие будет делать именно то, что вы ожидаете: оно откроет Pythonista и мгновенно запустит определенный сценарий.
Планирование
В Центре запуска можно настроить триггеры времени и местоположения. При создании или редактировании действия используйте меню Расписание и Триггеры местоположения . Это довольно самоочевидно, как их использовать. Таким образом, вы можете запланировать запуск сценариев в определенное время рабочего дня или когда вы приходите на работу, выходите из дома и т. Д. Пожалуйста, обратите внимание, что запуск не сможет выполнять какие-либо действия в фоновом режиме без вашего разрешения. Он отобразит уведомление об определенном времени/местоположении, но он выполнит действие только после того, как вы нажмете на уведомление и разблокируете свой телефон. Тем не менее, это довольно аккуратный способ планировать сценарии с вашего iPhone.
Заключительные слова
Опции, описанные в этой статье, не являются бесплатными. Если вы купите как Pythonista, так и Launch Center Pro, это
будет стоить вам $15[Обновление: с тех пор, как я написал эту статью, Launch Center Pro стал freemium. Вам нужно всего лишь заплатить $9,99 за Pythonista ]. Но если вы используете только простые сценарии, это может быть дешевле в долгосрочной перспективе, чем планировать их в веб-сервисах, таких как AWS или Digital Ocean. Кроме того, вы получите очень способный редактор Python, который вы можете использовать на ходу для экспериментов. Со мной не раз случалось, что во время ежедневных поездок на работу мне в голову приходила идея, и я мог сразу же проверить ее на своем телефоне через Pythonista. Это действительно мощный инструмент и очень простой в использовании.Kivy — Создание мобильных приложений на Python
В наши дни каждый разработчик может столкнуться с необходимостью работы над мобильным или веб-приложением на Python. В Python нет встроенных инструментов для мобильных устройств, тем не менее существуют пакеты, которые можно использовать для создания мобильных приложений. Это Kivy, PyQt и даже библиотека Toga от Beeware.
Содержание
Библиотеки являются основными элементами мобильного мира Python. Однако, говоря о Kivy, нельзя игнорировать преимущества данного фреймворка при работе с мобильными приложениями. Внешний вид приложения автоматически подстраивается под все платформы, разработчику при этом не нужно компилировать код после каждой поправки. Кроме того, здесь для создания приложений можно использовать чистый синтаксис Python.
В руководстве будут разобраны следующие темы:
- Работа с виджетами Kivy;
- Планировка UI и лейауты;
- Добавление событий;
- Использование языка KV;
- Создание приложения-калькулятора;
- Упаковка приложения для iOS, Android, Windows и macOS.
Разбор данного руководства предполагает, что читатель знаком с объектно-ориентированным программированием. Для введения в курс дела можете просмотреть статью об Объектно-ориентированном программировании (ООП) в Python 3.
Принципы работы фреймворка Kivy Python
Kivy был создан в 2011 году. Данный кросс-платформенный фреймворк Python работает на Windows, Mac, Linux и Raspberry Pi. В дополнение к стандартному вводу через клавиатуру и мышь он поддерживает мультитач. Kivy даже поддерживает ускорение GPU своей графики, что во многом является следствием использования OpenGL ES2. У проекта есть лицензия MIT, поэтому библиотеку можно использовать бесплатно и вкупе с коммерческим программным обеспечением.
Во время разработки приложения через Kivy создается интуитивно понятный интерфейс (Natural user Interface), или NUI. Его главная идея в том, чтобы пользователь мог легко и быстро приспособиться к программному обеспечению без чтения инструкций.
Kivy не задействует нативные элементы управления, или виджеты. Все его виджеты настраиваются. Это значит, что приложения Kivy будут выглядеть одинаково на всех платформах. Тем не менее, это также предполагает, что внешний вид вашего приложения будет отличаться от нативных приложений пользователя. Это может стать как преимуществом, так и недостатком, все зависит от аудитории.
Установка Kivy
У Kivy есть множество зависимостей, поэтому лучше устанавливать его в виртуальную среду Python. Можно использовать встроенную библиотеку Python venv или же пакет virtualenv.