Согласно политике Apple, компания чётко разграничивает время жизни тех или иных версий iOS. Обычно, уже через 3-4 года определенная версия iOS считается устаревшей и публиковать новые версии приложений с её поддержкой больше нельзя. Однако в ходу всё ещё «старые», но по настоящему трушные и любимые многими «пятёрки», «четвёрки», а среди коллекционеров — и «тройки»! Способ, о котором я расскажу в статье, раскопали ещё «олды», однако он позволяет запускать и отлаживать «хоумбрю» приложения на старых айфонах, потенциально принося им новую жизнь с кастомными приложениями! Интересно? Тогда добро пожаловать под кат!
❯ Предисловие
После серии статей и видео из моей рубрики «сам себе экосистема», где я использую диковинные девайсы прошлых лет и пишу для них клиенты нужных мне сервисов (ВК, YouTube и Telegram), люди часто стали писать в комментариях и личку мол, «автор, когда под iOS 6 что-то будет!?». Безусловно, я люблю «яблочки», читатель даже дарил мне коробочный iPhone 2G с его родной симкой AT&T, но если разработка и отладка под Android вопросов не вызывает (современная документация актуальная и её легко найти, приложения разрабатываются на любимом мной Java), под Windows Phone тоже (для деплоя и дебага под WP достаточно лишь разблокировать загрузчик и сделать Interop Unlock), то с айфоном уже есть определенные нюансы, а именно — Objective C и отвратительная политика Apple касательно «старых» девайсов.
К Obj-C претензии всегда стандартны: нелогичный синтаксис, худшая, по сравнению с C или адекватными плюсами читаемость (хотя код STL уже переплюнул любой код на ObjC), на язык может быть проблематично переучиться после относительно большого опыта с C/C++. Apple, конечно, придумали решение в виде Swift, однако этот язык, к сожалению, нам недоступен: писать приложения на свифт можно с iOS 7.0 и выше!
А с политикой 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, вполне годная машинка, пусть и кажется слабоватой.
Для охвата почти всех «старых» версий iOS, нам нужен OS X 10.7 Lion и XCode 4.5.2 (нужен Appe ID для скачивания. Аккаунт разработчика не нужен). Накатываем IDE, запускаем и видим, что всё работает… Но при попытке развернуть приложение на настоящем устройстве, а не в симуляторе, XCode просит нас ввести данные от Apple ID для подписывания приложения нашим сертификатом. У нас его, конечно же, нет :)
Сначала нам понадобится накатить джейлбрейк на наше устройство (для каждой версии системы и устройства разный джейл, до 10-ки все версии системы джейлятся очень легко и прямо с ПК на Windows) и специальный патч, позволяющий запускать крякнутые и неподписанные приложения — AppSync. Этот патч можно установить как из Cydia, так и в один клик с помощью 3u Tools.
Дальше необходимо отредактировать файл 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 не будет валится с ошибкой проверки подписи, но приложение пока не запустится.
Теперь заходим в настройки проекта, жмём на Target с именем проекта и переходим в Build Settings. Разворачиваем все опции (нажимаем All вместо Basic) и и меняем опции на Ad-hoc Code Sign. После этого, приложение можно развернуть с помощью кнопки Run, но отладчик к нему не сможет подключиться. Для отладки нам нужно создать файл Entitlements.plist и добавить одну единственную опцию — «Can be debugged» с значением YES и установить значение Code Signing Entitlements в Entitlements.plist.
После этого мы сможем запустить приложение с отладчиком и всё будет работать без проблем :)
Если же вы не перевариваете 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. Всем спасибо :)
Возможно, захочется почитать и это:
- ➤ Автостарт android-устройств — это просто! Реверсим, патчим загрузчик и заставляем смартфон включаться самому
- ➤ Учимся летать: симуляция эволюции на Rust
- ➤ Моя б̶е̶з̶умная колонка: часть вторая // программная
- ➤ Разработка самой маленькой в мире книги на e-ink дисплее
- ➤ «Робокоп 2»: падение стального рыцаря
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам:
Комментарии (18)
1nd1go
20.06.2024 08:02+3Интересно читать про оживление классики ). А есть гдето описание конкретных приложух, что удалось поднять на ios'е древнем?
Там кстати я еще заметил на своем древнем айпаде, что много сайтов весьма критичных для минимальной работы с вебом выдают сообщение "браузер не поддерживается, байбай". Это для PWA не мешает?
bodyawm Автор
20.06.2024 08:02Не мешает, если пилить приложения ориентируясь на html4 браузеры и js без наворотов (в т.ч и без class).
Позже будет материал о написании 3д игры под айос с нуля)
True_Login
20.06.2024 08:02+1На своем iPad Gen1 (которому уже 14 лет и 12 из них в моих руках) с iOS 5.1.1 и jailbreak'ом удалось запустить (скачивал ipa и устанавливал через iFunBox):
SketchBook Pro
AVPlayer HD
VLC
Игры тоже без проблем:
Fruit Ninja HD
Temple Run
NFS: Hot Pursuit
Castle Defense
Dead Space
Boost 2
Doom
Anomaly HD
Эмуляторы из Cydia:
SNES AD+ (ROMы надо закидывать в /var/Media/ROMs/SNES)
Разного рода твиков из Cydia тоже наставил для небольшого облегчения жизни :)
Небольшие танцы с бубном нужны для:
родного YouTube-клиента, ролики смотреть можно но иногда случаются вылеты
Из проблем:
страницы чаще не открываются чем открываются, хоть и установлен сертификат
можно установить торрент-клиент из Cydia, но из-за небольшого размера RAM (вроде как 256 MB) можно и не докачать фильм :)
Пока расход аккумулятора все еще приятный: 10% в час при локальном просмотре фильма/сериала в AVPlayer HD (это основной сценарий использования)
Из нерешенных хотелок:
RSS-reader какой-то для почитать на большом экране :)
Akin55
20.06.2024 08:02Все-таки андроид — это прелесть, долгое время пользовался кастомным андроидом десятой версии (Lineage os) на Самсунге с 1 Гб оперативной памяти, и все работало прекрасно, правда без гугл сервисов, с ними система тормозила, оригинальная поддержка устройства закончилась 10 лет назад. Спасибо за статью
bodyawm Автор
20.06.2024 08:02Да, на дроидах все гораздо проще, накатил последнюю студию и пока что можно собиратб приложения даже для 2.3)
Bardakan
20.06.2024 08:02а есть варианты запустить более свежие версии iOS вроде 14, но без покупки еще одного мака и установки хакинтоша?
bodyawm Автор
20.06.2024 08:02Есть, 14ую вроде самый последний хкод поддерживаети там не нужно таких хаков
Bardakan
20.06.2024 08:02сижу в Xcode 15.0 (в более новы не работает отладка для iOS 15) - iOS 14 там даже не выкачать. Взять эмулятор из более старого Xcode тоже проблема - macOS Sonoma Xcode 14 нормально не поддерживает
BorisTheAnimal
20.06.2024 08:02уже через 3-4 года
последние лет 10, минимум 5-6 лет. iOs 18 будете официально доступна для моделей 2018 года включительно.
bodyawm Автор
20.06.2024 08:02Речь не о поддержки айфонами версий iOS, а о возможности публикации обновлений для приложений на старых iOS.
bodyawm Автор
Друзья! Надеюсь, вам было интересно. Поэкспериментировал с длинными материалами на 15+ минут чтения, теперь можно попробовать и покороче.
Какой формат лучше по вашему мнению?
bodyawm Автор
Скоро будет занимательный контент о весьма интересных ништяках, которые я купил у подписчиков.
Недавно мне написал читатель и предложил купить HTC Shift за 5.000 рублей. Я само собой не отказался, хоть и весьма недешево (для меня, для такого крутого девайса это недорого). HTC Shift - это UMPC с двумя отдельными процессорами: первый это ARM-чипсет Qualcomm MSM7200, который работает на Windows Mobile, а второй x86 Intel A110 на частоте 800МГц, который работает в стоке на Windows Vista. Между обеими системами можно переключаться по нажатию одной кнопки (!) и конечно-же звонить с такого красавца :) Интересно?
Затем мне написал читатель и предложил приобрести NVidia Shield Portable за 5.000 рублей - крайне интересная Android-консоль, продолжающая идеи Xperia Play. Я решил покушать бичпакеты до конца месяца, но купить себе красавца, о нём тоже будет контент!
ivandreevich11
Статья супер, погружение в те дни когда еще у меня был iphone 5c, причем он еще живой, но памяти только на 8 gb.
bodyawm Автор
Люблю 5c за дизайн :) жаль мой купался и с сим проблемы