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. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам:

Комментарии (18)


  1. bodyawm Автор
    20.06.2024 08:02
    +1

    Друзья! Надеюсь, вам было интересно. Поэкспериментировал с длинными материалами на 15+ минут чтения, теперь можно попробовать и покороче.

    Какой формат лучше по вашему мнению?


    1. bodyawm Автор
      20.06.2024 08:02
      +7

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

      1. Недавно мне написал читатель и предложил купить HTC Shift за 5.000 рублей. Я само собой не отказался, хоть и весьма недешево (для меня, для такого крутого девайса это недорого). HTC Shift - это UMPC с двумя отдельными процессорами: первый это ARM-чипсет Qualcomm MSM7200, который работает на Windows Mobile, а второй x86 Intel A110 на частоте 800МГц, который работает в стоке на Windows Vista. Между обеими системами можно переключаться по нажатию одной кнопки (!) и конечно-же звонить с такого красавца :) Интересно?

      2. Затем мне написал читатель и предложил приобрести NVidia Shield Portable за 5.000 рублей - крайне интересная Android-консоль, продолжающая идеи Xperia Play. Я решил покушать бичпакеты до конца месяца, но купить себе красавца, о нём тоже будет контент!


    1. ivandreevich11
      20.06.2024 08:02
      +2

      Статья супер, погружение в те дни когда еще у меня был iphone 5c, причем он еще живой, но памяти только на 8 gb.


      1. bodyawm Автор
        20.06.2024 08:02

        Люблю 5c за дизайн :) жаль мой купался и с сим проблемы


  1. 1nd1go
    20.06.2024 08:02
    +3

    Интересно читать про оживление классики ). А есть гдето описание конкретных приложух, что удалось поднять на ios'е древнем?

    Там кстати я еще заметил на своем древнем айпаде, что много сайтов весьма критичных для минимальной работы с вебом выдают сообщение "браузер не поддерживается, байбай". Это для PWA не мешает?


    1. bodyawm Автор
      20.06.2024 08:02

      Не мешает, если пилить приложения ориентируясь на html4 браузеры и js без наворотов (в т.ч и без class).

      Позже будет материал о написании 3д игры под айос с нуля)


    1. 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 какой-то для почитать на большом экране :)


  1. V1tol
    20.06.2024 08:02

    Apple, конечно, придумали решение в виде Swift, однако этот язык, к
    сожалению, нам недоступен: писать приложения на свифт можно с iOS 7.0 и
    выше!

    Я могу уже ошибаться за давностью лет, но Swift первой версии (XСode 6) запускался на iOS 5.



  1. Akin55
    20.06.2024 08:02

    Все-таки андроид — это прелесть, долгое время пользовался кастомным андроидом десятой версии (Lineage os) на Самсунге с 1 Гб оперативной памяти, и все работало прекрасно, правда без гугл сервисов, с ними система тормозила, оригинальная поддержка устройства закончилась 10 лет назад. Спасибо за статью


    1. bodyawm Автор
      20.06.2024 08:02

      Да, на дроидах все гораздо проще, накатил последнюю студию и пока что можно собиратб приложения даже для 2.3)


  1. NickSin
    20.06.2024 08:02

    А как же qt под iOS. Как раз приложения можно полноценной делать с ним на Афон. Там уже готовы ui обертки) Сидишь себе и пишешь просто приложение


    1. bodyawm Автор
      20.06.2024 08:02

      Под 32х битные iOS еще попробуй найти)


  1. Bardakan
    20.06.2024 08:02

    а есть варианты запустить более свежие версии iOS вроде 14, но без покупки еще одного мака и установки хакинтоша?


    1. bodyawm Автор
      20.06.2024 08:02

      Есть, 14ую вроде самый последний хкод поддерживаети там не нужно таких хаков


      1. Bardakan
        20.06.2024 08:02

        сижу в Xcode 15.0 (в более новы не работает отладка для iOS 15) - iOS 14 там даже не выкачать. Взять эмулятор из более старого Xcode тоже проблема - macOS Sonoma Xcode 14 нормально не поддерживает


  1. BorisTheAnimal
    20.06.2024 08:02

     уже через 3-4 года

    последние лет 10, минимум 5-6 лет. iOs 18 будете официально доступна для моделей 2018 года включительно.


    1. bodyawm Автор
      20.06.2024 08:02

      Речь не о поддержки айфонами версий iOS, а о возможности публикации обновлений для приложений на старых iOS.