Эти айфоны ещё будут жить: Пишем и деплоим свои приложения из XCode на старые iPhone

image
Согласно политике Apple, компания чётко разграничивает время жизни тех или иных версий iOS. Обычно, уже через 3–4 года определенная версия iOS считается устаревшей и публиковать новые версии приложений с её поддержкой больше нельзя. Однако в ходу всё ещё «старые», но по настоящему трушные и любимые многими «пятёрки», «четвёрки», а среди коллекционеров — и «тройки»! Способ, о котором я расскажу в статье, раскопали ещё «олды», однако он позволяет запускать и отлаживать «хоумбрю» приложения на старых айфонах, потенциально принося им новую жизнь с кастомными приложениями! Интересно? Тогда добро пожаловать под кат!

Предисловие


После серии статей и видео из моей рубрики «сам себе экосистема», где я использую диковинные девайсы прошлых лет и пишу для них клиенты нужных мне сервисов (ВК, YouTube и Telegram), люди часто стали писать в комментариях и личку мол, «автор, когда под iOS 6 что-то будет?!». Безусловно, я люблю «яблочки», читатель даже дарил мне коробочный iPhone 2G с его родной симкой AT&T, но если разработка и отладка под Android вопросов не вызывает (современная документация актуальная и её легко найти, приложения разрабатываются на любимом мной Java), под Windows Phone тоже (для деплоя и дебага под WP достаточно лишь разблокировать загрузчик и сделать Interop Unlock), то с айфоном уже есть определенные нюансы, а именно — Objective C и отвратительная политика Apple касательно «старых» девайсов.

image

К Obj-C претензии всегда стандартны: нелогичный синтаксис, худшая, по сравнению с C или адекватными плюсами читаемость (хотя код STL уже переплюнул любой код на ObjC), на язык может быть проблематично переучиться после относительно большого опыта с C/C++. Apple, конечно, придумали решение в виде Swift, однако этот язык, к сожалению, нам недоступен: писать приложения на свифт можно с iOS 7.0 и выше!

image

А с политикой Apple всё очевидно. XCode поддерживает определенную версию iOS несколько лет, после чего — всё, смартфоны на условной iOS 12 (5s, iPad Air) уже превратились в тыкву, не говоря уже об 32х-битных устройствах на iOS 10 (5, iPad 4), нормально деплоить новые приложения туда возможности нет. Но выход есть: на старых айфонах вполне можно отлаживать приложения при условии наличия джейлбрейка. И вот с джейлом всё особенно хорошо на «старых» тройках и четверках, где хак перманентный и не сбрасывается после перезагрузки.

Способ древний, придуман ещё в конце позапрошлого десятилетия, но о нём почему-то многие забыли…

Деплоим


Для разработки под старые версии iOS, нам потребуется древний XCode, который работает только на древней версии OS X. Поэтому решения два: хакинтош в VMWare (тормозно из-за отсутствия дров на GPU, но работать будет), или на реальной машине с Ivy Bridge/Core 2 Duo, либо покупка трушного, настоящего мака тех лет, с поддержкой нужной версии OS X. Мне давно хотелось пощупать макбук, поэтому я купил себе Early 2008 — A1181, вполне годная машинка, пусть и кажется слабоватой.

image

Для охвата почти всех «старых» версий iOS, нам нужен OS X 10.7 Lion и XCode 4.5.2 (нужен Appe ID для скачивания. Аккаунт разработчика не нужен). Накатываем IDE, запускаем и видим, что всё работает… Но при попытке развернуть приложение на настоящем устройстве, а не в симуляторе, XCode просит нас ввести данные от Apple ID для подписывания приложения нашим сертификатом. У нас его, конечно же, нет :)

image

Сначала нам понадобится накатить джейлбрейк на наше устройство (для каждой версии системы и устройства разный джейл, до 10-ки все версии системы джейлятся очень легко и прямо с ПК на Windows) и специальный патч, позволяющий запускать крякнутые и неподписанные приложения — AppSync. Этот патч можно установить как из Cydia, так и в один клик с помощью 3u Tools.

image

Дальше необходимо отредактировать файл SDKSettings.plist, который можно найти по пути /Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/. Где этот файл находится, зависит от версии XCode. Он может находится как в /Developer/, так и в самом пакете XCode (нажимаем в финдере шестеренку → просмотреть содержимое пакета и там увидим папку Developer).

Устанавливаем свойства AD_HOC_CODE_SIGNING_ALLOWED, ENTITLEMENTS_REQUIRED в YES, а CODE_SIGNING_REQUIRED в NO. Теперь XCode не будет валится с ошибкой проверки подписи, но приложение пока не запустится.

image

Теперь заходим в настройки проекта, жмём на Target с именем проекта и переходим в Build Settings. Разворачиваем все опции (нажимаем All вместо Basic) и и меняем опции на Ad-hoc Code Sign. После этого, приложение можно развернуть с помощью кнопки Run, но отладчик к нему не сможет подключиться. Для отладки нам нужно создать файл Entitlements.plist и добавить одну единственную опцию — «Can be debugged» с значением YES и установить значение Code Signing Entitlements в Entitlements.plist.

image

image

После этого мы сможем запустить приложение с отладчиком и всё будет работать без проблем :)

Если же вы не перевариваете ObjC и подходы Apple к разработке приложений, и это для вас единственное препятствие — то возможностей разработки под 15-летние айфоны несколько. Если вы пишите или портируете игру — никто вам не мешает писать основную логику на плюсах, создавая в ObjC-коде лишь контекст OpenGL и коммутировать события в основную логику. Для приложений на C++ доступен полноценный GLES и OpenAL для звука, ну, а прослойку для того, чтобы ловить события с тачскрина, думаю, вы и сами осилите.
Потенциально есть возможность пропатчить Xamarin для сборки приложений на iOS 6, но у меня пока не получилось :(

Ну, а для «просто» приложений есть, конечно же, PWA:) Никто не мешает реализовать UI на веб-стеке технологий (с учетом того, что браузер в iOS 5 всё ещё HTML4), а часть логики — на тех же плюсах, благо частичная возможность прокинуть собственные методы в UIWebView есть. Так что, самый первый айфон ещё будет жить?

Заключение


Вот таким нехитрым способом можно деплоить приложения на «старые» айфоны с джейлбрейком и снова продлить им жизнь. Да, на более свежих версиях системы есть возможность самоподписи на 7 дней, но он требует переустановки приложения каждую неделю, да и пользователей обычно больше интересуют «трушные» iOS 4/iOS 6 с тем самым скевоморфизмом, нежели, например, iOS 10.

Понравился материал? Подписывайтесь на меня и ТаймВеб на Хабре, а если вам нравится тематика моддинга, ремонта и программирования под гаджеты прошлых лет — подписывайтесь на мой канал в Telegram. Всем спасибо :)


Возможно, захочется почитать и это:
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам:

r8msjcfet9mgza3ybpor_sdgrt0.jpeg

© Habrahabr.ru