Издевательство над симулятором (iOS 18 - 26).
Рассмотрим способы, которые позволяют тестировать приложения и твики в iOS-симуляторе.
Зачем это нужно?
Не нужно, особенно способ для приложений. Прочитав статью, вы сами всё поймёте.
- MacBook Arm (M1 и новее);
- Xcode и Theos;
- Расшифрованные приложения (все способы).
Simforge (только iOS 18).
Simforge - инструмент, который позволяет запускать приложения в симуляторе iOS на чипах Apple Silicon.
xcodebuild -project simforge.xcodeproj -scheme simforge -configuration Release
unzip /path/to/your-app-decrypted.ipa -d /path/to/destination/
simforge convert /path/to/Payload/YourApp.app
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 приложений без их установки.
- Соберите и запустите LiveContainer из исходников в Xcode.
- Откройте LiveContainer и перетащите IPA приложение в окно симулятора.
- Запустите приложение.
P.S. В отличие от Simforge/Simufy, LiveContainer не требует дополнительных конвертаций.
Итог
Вывод: Из-за различных ограничений simforge/simufy не лучший выбор, когда дело доходит до тестирования приложений.