January 28, 2025

Издевательство над симулятором (iOS 18 - 26).

Рассмотрим способы, которые позволяют тестировать приложения и твики в iOS-симуляторе.

Зачем это нужно?
Не нужно, особенно способ для приложений. Прочитав статью, вы сами всё поймёте.

Подготовка:

-

Simforge (только iOS 18).

Simforge - инструмент, который позволяет запускать приложения в симуляторе iOS на чипах Apple Silicon.

-

Сборка:

  • Откройте Simforge в Xcode - соберите проект - готовый файл отправьте по пути /usr/local/bin

xcodebuild -project simforge.xcodeproj -scheme simforge -configuration Release

Инструкция:

  • Распакуйте приложение (.ipa) любым архиватором или командой:

unzip /path/to/your-app-decrypted.ipa -d /path/to/destination/

  • Преобразуйте для симулятора:

simforge convert /path/to/Payload/YourApp.app

  • Подпишите Frameworks:

codesign -f -s - /path/to/Payload/YourApp.app/Frameworks/*

  • Подпишите приложение:

codesign -f -s - /path/to/Payload/YourApp.app

-

Осталось открыть iOS-симулятор, перетащить в него пропатченное приложение и радоваться. Уверен, многие хотели это услышать, к сожалению, не всё так просто, иногда придётся попотеть.

-

Решение ошибок:

Вы должны понимать, как отлаживать приложения, уметь решать ошибки или хотя бы знать, где можно найти ответ(ы).
Все ошибки невозможно расписать, но я напишу, с какой ошибкой столкнулся сам и как её решал. Все действия выполнял в симуляторе iOS 18.2.
  • Для тестирования взял приложение ВКармане ТВ ( простенькое, маленькое и ломается легко).
  • При запуске выскакивает ошибка:

Simulator device failed to launch luchsheetv.com.online.

The request was denied by service delegate (SBMainWorkspace).

Underlying error (domain=FBSOpenApplicationServiceErrorDomain, code=1):

The request to open "luchsheetv.com.online" failed.

The request was denied by service delegate (SBMainWorkspace).

Погуглив ошибку, нашёл решение в виде установки Rosetta (позволяет компьютерам Mac с чипами Apple использовать приложения, созданные для компьютеров Mac с процессорами Intel), но это не помогло.

Поиск в интернете привёл меня к блогу, оказывается 4 года назад кто-то уже занимался подобным и решение было найдено.

  • Заменяем зависимость:
install_name_tool -change "@rpath/libswiftUIKit.dylib" "/System/iOSSupport/usr/lib/swift/libswiftUIKit.dylib" .../mediastream.app/mediastream
  • Используем Mac Catalyst – технология для переноса iOS-приложений (с UIKit) на macOS. Это не лучший вариант, т. к. некоторые функции могут быть сломаны.
vtool -arch arm64 -set-build-version maccatalyst 10.0 14.0 -replace -output .../mediastream.app/mediastream .../mediastream.app/mediastream
  • Удаляем подпись (если она есть):
codesign --remove .../mediastream.app/mediastream
  • Преобразуйте для симулятора и повторно подпишите приложение (см. команды выше). Ошибка исчезла, приложение работает! Хвала открытому исходному коду.
Это только один из примеров, на практике может быть больше ошибок и от них не легко избавиться.
  • Отрываем приложение и видим уведомление (см. скриншот):
Обнаружен джейлбрейк.
Внимание: На последних версиях симулятор доступен только для чтения, следовательно многие инструменты не смогут подключиться к процессу.
Можно отключить SIP, но тогда .ipa-приложения не запускаются 🙃, да и это всё равно не поможет.

Плюсы:

  • Работает.

Минусы:

  • Наличие такого инструмента радует, но иногда требуется много времени, чтобы запустить нужное приложение.
  • В iOS-симуляторе не работают многие API, поэтому полностью протестировать приложение не получится.

-

Simufy (iOS 26).

Simufy - инструмент, который позволяет запускать приложения в симуляторе iOS на чипах Apple Silicon.

Всё аналогично Simforge, подробная инструкция есть по ссылке.

-

Simject

Simject - инструмент, который помогает разработчикам твиков проверять свои настройки на симуляторе iOS.

Установка:

На форуме 4PDA подробно всё расписал и повторяться не хочется.

export THEOS=/opt/theos sudo xcode-select -s /Applications/Xcode.app git clone https://github.com/akemin-dayo/simject.git cd simject/ make setup

-

Программы для анализа и способы взлома:

Существует множество утилит для анализа приложений, но в первую очередь нам нужны заголовки (классы и методы), чтобы понимать, к чему подключаться. Для этого подходят такие инструменты, как Flex, Hopper Disassembler, IDA Pro, Ghidra и другие. Аналогично, существует много способов взлома .ipa приложений, но это отдельная тема.

-

Запускаем твик:

simforge launch --bundleid com.example.app --dylib /path/to/tweak.dylib
Избавились от уведомления и активировали подписку.

Плюсы:

  • Работает.

Минусы:

  • Их нет, это один из способов протестировать твики, второй.

-

LiveContainer (iOS 18 - 26).

LiveContainer - инструмент для запуска iOS приложений без их установки.

Инструкция:

  1. Соберите и запустите LiveContainer из исходников в Xcode.
  2. Откройте LiveContainer и перетащите IPA приложение в окно симулятора.
  3. Запустите приложение.

P.S. В отличие от Simforge/Simufy, LiveContainer не требует дополнительных конвертаций.

-

Итог

Вывод: Из-за различных ограничений simforge/simufy не лучший выбор, когда дело доходит до тестирования приложений.

-

Другое по теме: