С выходом обновлений операционной системы iOS разработчики мобильных приложений на платформе 1С часто сталкиваются с ситуацией, когда стабильно работавшее приложение внезапно перестает запускаться на новых версиях ОС. Одной из самых резонансных проблем стал выпуск iOS 13, который привел к моментальному закрытию приложений при старте. В рамках этой статьи мы подробно разберем причины такого поведения, проанализируем логи ошибок и определим последовательность действий для восстановления работоспособности мобильного клиента или автономного приложения.
Рассмотрим типичную ситуацию: вы обновили Xcode до актуальной версии, поддерживающей SDK для iOS 13, успешно собрали проект, но при попытке запуска на реальном устройстве приложение мгновенно закрывается. При этом на симуляторе Xcode все может работать корректно. Чтобы понять причину, необходимо изучить лог падения (Crash Log), который предоставляет Apple. В таких случаях в логах часто встречается специфическая ошибка:
Termination Description: DYLD, malformed trie too deep
Exception Type: EXC_CRASH (SIGABRT)
Выясним причину появления этой ошибки. Она напрямую связана с изменениями в динамическом загрузчике (dyld) в iOS 13. Компания Apple ужесточила алгоритмы проверки структуры исполняемых файлов формата Mach-O. Ошибка malformed trie too deep означает, что дерево экспортируемых символов (trie) в бинарном файле приложения имеет некорректную структуру или слишком большую вложенность с точки зрения новых требований безопасности. Старые версии мобильной платформы 1С формировали исполняемый файл способом, который стал недопустимым в iOS 13.
Проанализируем ситуацию, описанную многими разработчиками: в симуляторе iOS 13 приложение стартует без проблем. Это происходит по нескольким причинам:
x86_64 (или ARM64 в режиме трансляции на процессорах Apple Silicon), в то время как реальное устройство требует строго ARM64. Ошибки в структуре бинарного файла часто проявляются именно при финальной упаковке под реальное «железо».Основным способом решения проблемы является обновление версии мобильной платформы 1С, на которой собирается приложение. Разберем по шагам, какие версии являются рабочими:
Как показывает практика и опыт разработчиков, версии платформы ниже 8.3.15.62 содержат внутренние ошибки формирования бинарного файла, несовместимые с iOS 13. Если вы используете, например, 8.3.14.78 или 8.3.15.61, приложение будет гарантированно закрываться с ошибкой DYLD.
Для исправления ситуации необходимо:
2.0.12 и выше для корректной поддержки всех инструментов Xcode.Посмотрим на требования к программному обеспечению для успешной публикации. Одной лишь замены платформы может быть недостаточно, если окружение устарело. Проанализируем необходимые компоненты:
Для корректной линковки библиотек под iOS 13 требуется Xcode 11 и выше. Однако Xcode 11 требует наличия macOS Mojave 10.14.6 или macOS Catalina 10.15. Попытка сборки на более старых версиях операционной системы Apple может привести к скрытым ошибкам, которые проявятся только в процессе эксплуатации приложения пользователями.
Важный совет: Перед новой сборкой обязательно выполните очистку кэша Xcode. Для этого перейдите в меню Product -> Clean Build Folder или вручную удалите содержимое папки DerivedData. Это исключит использование старых скомпилированных объектов, которые могут содержать «битую» структуру dyld.
Помимо критического падения при запуске, в iOS 13 изменились механизмы работы с интерфейсом и безопасностью. Рассмотрим подробнее два важных аспекта:
В iOS 13 был изменен API LocalAuthentication. В версиях платформы ниже 8.3.15.62 наблюдался баг: приложение не могло получить доступ к защищенному хранилищу данных (Keychain) после первого входа. Кроме того, теперь система требует обязательного наличия ключа NSFaceIDUsageDescription в файле Info.plist. Если этого описания нет, приложение аварийно завершится при попытке вызвать окно сканирования лица. Новые версии платформы 1С корректно обрабатывают эти требования.
iOS 13 стала первой версией с системной темной темой. Если ваше приложение собрано на старой платформе, вы можете столкнуться с проблемой «белого текста на белом фоне». Система пытается принудительно инвертировать цвета системных элементов, о которых старые версии 1С «не знают». Использование платформы версии 8.3.15.62 и выше включает базовую адаптацию, позволяющую приложению корректно отображать элементы управления независимо от выбранной темы в настройках iPhone.
Проанализируем и закрепим последовательность действий, которая поможет вам восстановить работу приложения:
DerivedData перед финальной компиляцией.Следуя этим рекомендациям, вы устраните ошибку DYLD, malformed trie too deep и обеспечите стабильную работу вашего мобильного решения на современных устройствах Apple.