При сборке мобильного приложения или мобильного клиента через облачный сервис сборки 1С либо локально в среде Xcode разработчики часто сталкиваются с ошибками компилятора и линкера. Одно из типичных сообщений — The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 11.0, but the range of supported deployment target versions is 12.0 to 18.2.99, сопровождаемое сбоем ARCHIVE FAILED. Разберем по шагам, почему возникает эта проблема, что на самом деле скрывается за предупреждениями и как успешно опубликовать сборку в App Store Connect.
Проанализируем ситуацию детально. Начиная с актуальных версий Xcode, компания Apple полностью исключила поддержку устаревших версий операционной системы ниже iOS 12.0. Старые версии мобильной платформы 1С (включая ветку 8.3.24 и ниже) генерируют проект с жестко прописанным параметром IPHONEOS_DEPLOYMENT_TARGET = 11.0.
Однако само сообщение о несоответствии версии развертывания часто является лишь предупреждением (warning). Если прокрутить лог сборки выше, можно обнаружить истинную причину остановки процесса компоновки:
ld: Assertion failed: ((ct == Atom::ContentType::objcConst) || (ct == Atom::ContentType::objcData) || (ct == Atom::ContentType::constData) || (ct == Atom::ContentType::constText)), function ObjCClassReadOnlyDataRef, file Atom.cpp
С выходом Xcode 15 и Xcode 16 инструмент сборки перешел на новый линкер (ld-prime). Статические модули платформы 1С ранних версий содержат структуры метаданных Objective-C, которые новый компоновщик не может корректно обработать и падает в аварийный режим. Рассмотрим подробнее, какими способами можно устранить эту неполадку.
Самое простое и рекомендуемое платформенное решение — перейти на сборку приложения на базе мобильной платформы версий 8.3.26 или 8.3.27. В этих релизах разработчики фирмы «1С» адаптировали шаблон проекта под современные требования Apple:
Начиная с версии 8.3.26, библиотеки движка 1С скомпилированы с поддержкой нового линкера, и ошибка в файле Atom.cpp больше не прерывает процесс сборки.
Бывают ситуации, когда проект жестко привязан к старой платформе (например, к 8.3.24) из-за проблем совместимости. В частности, при использовании устаревших веб-сервисов (SOAP/XDTO) в новых версиях платформы возможны сбои при сетевом обмене. Если переход на новую версию платформы невозможен, заставим Xcode использовать классический компоновщик.
Разберем по шагам, как настроить проект вручную:
OTHER_LDFLAGS).-ld_classic (или -Wl,-ld_classic). Это переключит Xcode на работу со старым компоновщиком, который корректно воспринимает объектные файлы старых платформ 1С.Traditional headermap style is no longer supported найдите параметр Always Search User Paths (ALWAYS_SEARCH_USER_PATHS) и установите его значение в NO.Даже при сборке на платформе 8.3.26 сервис сборки может выгрузить проект, в котором ключ MinimumOSVersion или таргет деплоя по-прежнему указаны как iOS 11, из-за чего App Store Connect не принимает сборку. Посмотрим, как скорректировать параметры проекта:
Info.plist целевого таргета и добавьте или измените ключ MinimumOSVersion, установив актуальное значение (например, 15.0)..xcodeproj и выберите пункт «Показать содержимое пакета».project.pbxproj.IPHONEOS_DEPLOYMENT_TARGET = 11.0; и замените ее на IPHONEOS_DEPLOYMENT_TARGET = 15.0; во всех секциях файла.После успешной сборки архива при загрузке в App Store Connect иногда возникает критический отказ 90714: Invalid binary. The app contains one or more corrupted binaries. Проанализируем основные причины и методы исправления:
lipo. В финальном файле приложения должны оставаться только срезы для реальных устройств (arm64). Срезы для симуляторов (например, x86_64) необходимо вырезать перед сборкой.DEBUG_INFORMATION_FORMAT) с DWARF with dSYM File на DWARF..ipa на диск и загрузите его в App Store Connect с помощью официальной утилиты Transporter.Если возврат к старым версиям мобильной платформы обусловлен аварийным завершением работы механизмов XDTO при обращении к веб-сервисам, наиболее надежным архитектурным решением является перевод мобильного клиента на стандартные HTTP-сервисы с передачей данных через JSON.
Работа через объект HTTPСоединение значительно стабильнее на современных версиях iOS, исключает зависимость от тяжеловесных XML-структур и обеспечивает устойчивую работу приложения на версиях платформы 8.3.26 и 8.3.27 без падений и системных ошибок.