Кросс-компиляция iOS: требования Linux toolchain
Параметры cross-ветки, обязательный Swift и границы проверенной поддержки.
Текущие build-скрипты распознают кросс-компиляцию iOS через OSXCROSS_IOS. Это включает ветку конфигурации, но не устанавливает toolchain и не подтверждает работоспособность сборки на Linux. Если нужен готовый шаблон без сопровождения собственного toolchain, используйте сборку на macOS.
Что требуется от toolchain
Работайте в Source, рядом с SConstruct. Кроме Python 3.9+ и SCons 4.4+, нужны согласованные Apple SDK, C/C++ и Swift-инструменты:
| Настройка | Что ожидает текущая сборка |
|---|---|
OSXCROSS_IOS | Переменная окружения: достаточно наличия, даже пустое значение включает ветку. Не задавайте её на обычной нативной сборке macOS. |
APPLE_TOOLCHAIN_PATH | Каталог с usr/bin, содержащим необходимые compiler, archive и link tools. Без явного пути helper пытается вызвать xcode-select. |
APPLE_SDK_PATH | Каталог соответствующего SDK, а не архив. Без явного пути helper вызывает xcrun. |
apple_target_triple | Префикс имён инструментов, включая завершающий дефис, если он есть в именах. Это не Swift target и не флаг clang -target. |
SWIFT_COMPILER | Явный путь к исполняемому на Linux swiftc, способному собирать Apple target с нужным SDK. В cross-ветке автоматического выбора Swift нет. |
Скрипт ищет ${apple_target_triple}clang, clang++, ar, ranlib и libtool под APPLE_TOOLCHAIN_PATH/usr/bin. Наличие только clang недостаточно. iOS SCsub всегда подключает Swift-исходники, общий SwiftUI-контроллер и генерацию заголовка Swift→Objective-C. Swift запускается в режиме -swift-version 6 с C++ interop; для устройства target имеет вид arm64-apple-ios15.0, для симулятора — arm64-apple-ios15.0-simulator либо x86_64-apple-ios15.0-simulator.
Старый рецепт «извлечь SDK и собрать cctools» не обеспечивает эту цепочку целиком. Не скачивайте случайный SDK и не считайте macOS-бинарник swiftc исполняемым на Linux. Используйте SDK и инструменты на условиях их поставщиков; эта инструкция не делает вывода о праве на их распространение.
Параметры вызова
После самостоятельной подготовки и проверки toolchain передайте пути явно. Ниже схема команды, а не готовый установщик: замените все /absolute/... и префикс реальными значениями. Если инструменты называются просто clang, ar и т. д., передайте пустой apple_target_triple.
export OSXCROSS_IOS=1
scons platform=ios target=template_release arch=arm64 simulator=no APPLE_TOOLCHAIN_PATH="/absolute/toolchain" APPLE_SDK_PATH="/absolute/iPhoneOS.sdk" SWIFT_COMPILER="/absolute/swiftc" apple_target_triple="your-tool-prefix-" -j4Сначала получите библиотеку bin/libreckfell…a без упаковки. Для debug замените target на template_debug. Для симулятора одновременно замените simulator=yes, SDK на iPhoneSimulator и при необходимости архитектуру; менять только arch нельзя. x86_64 без симулятора отклоняется конфигуратором. В симуляторе текущая сборка отключает Metal и Vulkan.
Где заканчивается проверка
| Ошибка | Причина или следующий шаг |
|---|---|
Не найден xcode-select/xcrun | Не передан явный toolchain/SDK. Эти helpers рассчитаны на macOS. |
Swift compiler path is not set | Не задан SWIFT_COMPILER. Одного OSXCROSS_IOS недостаточно. |
| Swift не запускается или не находит Apple-модуль | Проверьте host-формат исполняемого файла, поддерживаемый target, SDK и Swift-зависимости. Не подменяйте это проверкой clang --version. |
Найдена .a, но упаковка не работает | generate_bundle=yes — отдельный этап; упаковщик использует lipo, шаблон Xcode и зависимости frameworks. Наличие архиватора не гарантирует их доступность. |
| Библиотеки получены, но игра не запускается | Перенесите результат в цепочку Xcode/export и отдельно проверьте slices, подпись, устройство и рендерер. |
C# по умолчанию выключен; добавление module_mono_enabled=yes не заменяет managed/AOT-публикацию. На этой странице проверена логика конфигурации по исходникам, но нет проверенного сквозного рецепта Linux→iOS: compiler, Swift, упаковка, экспорт и устройство не запускались. Не используйте наличие OSXCROSS_IOS как обещание поддержанной готовой сборочной среды.