Как исправить ошибку сборки мобильного приложения 1С под iOS при несоответствии deployment target?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При сборке мобильного приложения или мобильного клиента через облачный сервис сборки 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, которые новый компоновщик не может корректно обработать и падает в аварийный режим. Рассмотрим подробнее, какими способами можно устранить эту неполадку.

Способ 1. Обновление версии мобильной платформы 1С

Самое простое и рекомендуемое платформенное решение — перейти на сборку приложения на базе мобильной платформы версий 8.3.26 или 8.3.27. В этих релизах разработчики фирмы «1С» адаптировали шаблон проекта под современные требования Apple:

  1. Откройте конфигурацию «Сборщик мобильных приложений».
  2. Перейдите в настройки требуемого мобильного приложения.
  3. Укажите версию мобильной платформы не ниже 8.3.26.
  4. Повторите процесс генерации архива и выполните сборку.

Начиная с версии 8.3.26, библиотеки движка 1С скомпилированы с поддержкой нового линкера, и ошибка в файле Atom.cpp больше не прерывает процесс сборки.

Способ 2. Обход ошибки компилятора на старых версиях мобильной платформы

Бывают ситуации, когда проект жестко привязан к старой платформе (например, к 8.3.24) из-за проблем совместимости. В частности, при использовании устаревших веб-сервисов (SOAP/XDTO) в новых версиях платформы возможны сбои при сетевом обмене. Если переход на новую версию платформы невозможен, заставим Xcode использовать классический компоновщик.

Разберем по шагам, как настроить проект вручную:

  1. Выгрузите проект мобильного приложения из сервиса сборки на локальный компьютер с macOS.
  2. Откройте сгенерированный проект в среде Xcode.
  3. Перейдите в настройки проекта: выберите корневой элемент проекта в навигаторе, откройте вкладку Build Settings.
  4. Найдите параметр Other Linker Flags (переменная OTHER_LDFLAGS).
  5. Добавьте флаг -ld_classic (или -Wl,-ld_classic). Это переключит Xcode на работу со старым компоновщиком, который корректно воспринимает объектные файлы старых платформ 1С.
  6. Для устранения сопутствующего предупреждения Traditional headermap style is no longer supported найдите параметр Always Search User Paths (ALWAYS_SEARCH_USER_PATHS) и установите его значение в NO.

Способ 3. Ручная корректировка параметров Info.plist и файлов проекта

Даже при сборке на платформе 8.3.26 сервис сборки может выгрузить проект, в котором ключ MinimumOSVersion или таргет деплоя по-прежнему указаны как iOS 11, из-за чего App Store Connect не принимает сборку. Посмотрим, как скорректировать параметры проекта:

  1. Откройте файл Info.plist целевого таргета и добавьте или измените ключ MinimumOSVersion, установив актуальное значение (например, 15.0).
  2. В настройках проекта (раздел General -> Minimum Deployments) не всегда удается изменить значение без конфликтов зависимостей. Если проект ломается при смене значений в графическом интерфейсе, закройте Xcode.
  3. Откройте пакет проекта: нажмите правой кнопкой мыши на файл .xcodeproj и выберите пункт «Показать содержимое пакета».
  4. Откройте текстовым редактором файл project.pbxproj.
  5. Выполните поиск строки IPHONEOS_DEPLOYMENT_TARGET = 11.0; и замените ее на IPHONEOS_DEPLOYMENT_TARGET = 15.0; во всех секциях файла.
  6. Сохраните изменения, снова откройте проект в Xcode и запустите архивацию через пункт меню Product -> Archive.

Способ 4. Устранение ошибки ITMS-90714 (Invalid binary / corrupted binaries)

После успешной сборки архива при загрузке в App Store Connect иногда возникает критический отказ 90714: Invalid binary. The app contains one or more corrupted binaries. Проанализируем основные причины и методы исправления:

  1. Лишние срезы архитектур симулятора: если в проект включены внешние компоненты или сторонние библиотеки, проверьте их с помощью консольной утилиты lipo. В финальном файле приложения должны оставаться только срезы для реальных устройств (arm64). Срезы для симуляторов (например, x86_64) необходимо вырезать перед сборкой.
  2. Подпись вложенных библиотек: проверьте на вкладке General раздел Frameworks, Libraries, and Embedded Content. Убедитесь, что для сторонних динамических библиотек выбран режим Embed & Sign, исключающий повреждение подписи при запаковке.
  3. Генерация отладочных символов: при возникновении сбоев с валидацией бинарных файлов в настройках сборки Build Settings для конфигурации Release измените параметр Debug Information Format (DEBUG_INFORMATION_FORMAT) с DWARF with dSYM File на DWARF.
  4. Использование внешней утилиты загрузки: сбои загрузки через интерфейс Xcode нередко связаны с локальными ошибками валидации манифеста. Выполните экспорт архива в формате .ipa на диск и загрузите его в App Store Connect с помощью официальной утилиты Transporter.

Рекомендация по замене SOAP/XDTO на HTTP-сервисы

Если возврат к старым версиям мобильной платформы обусловлен аварийным завершением работы механизмов XDTO при обращении к веб-сервисам, наиболее надежным архитектурным решением является перевод мобильного клиента на стандартные HTTP-сервисы с передачей данных через JSON.

Работа через объект HTTPСоединение значительно стабильнее на современных версиях iOS, исключает зависимость от тяжеловесных XML-структур и обеспечивает устойчивую работу приложения на версиях платформы 8.3.26 и 8.3.27 без падений и системных ошибок.

← На главную