[FAQ] Как залить в TestFlight сборку из бета-версии OS X

MyApps_2x

Если вы хотите увидеть на нашем сайте ответы на интересующие вас вопросы обо всём, что связано с техникой, программами и сервисами Apple, iOS или Mac OS X, iTunes Store или App Store, задавайте их через форму обратной связи. Ответы на самые интересные из них будут появляться в материалах данной рубрики. К нам поступил следующий вопрос:

Доброго дня!

Очень нужен совет от знающих людей по iTunes Connect и TestFlight. TestFlight задуман как сервис бета-тестирования софта. Логично, что бета-тестирование софта может быть на бетах iOS и OS X. Так почему в TestFlight нельзя нормально залить бета-версию моего приложения, если у меня на компе стоит бета-версия El Capitan, а на устройстве – бета iOS 9.3? Неужели никак нельзя обойти это ограничение?

Здравствуйте!

Это давний повод всеобщего недовольства платформой TestFlight. А причина всех проблем в том, что заливка сборок на портал iTunes Connect устроена совершенно одинаково и для TestFlight, и для App Store. Вы сначала заливаете билд, и уже потом решаете, куда его направить: внутренним тестировщикам вашей команды, внешним тестировщикам или цензорам App Store. Потому и ограничения везде одинаковые.

Проверка на стороне iTunes Connect ведётся по номерам билдов Xcode и OS X, на которых собрано ваше приложение. Если они совпадают с базой запрещённых билдов, вы получите такую ошибку:

itunesconnect-error

Заметим, что виноватым может быть как билд OS X, так и версия Xcode. Практика показывает, что в Apple следят за соблюдением собственных же ограничений довольно плохо. Некоторые бета-сборки Xcode и OS X почему-то не попадают в список запрещённых и, как следствие, позволяют заливать собранный софт в App Store. Но чаще всего вы будете сталкиваться именно с такой ошибкой.

Обход проверки версии Xcode

Чтобы iTunes Connect принял вашу сборку, нужно, чтобы она компилировалась не бета-версией компилятора. Поэтому можно либо держать параллельно две версии Xcode (бету и не бету), либо отдельно скачать Command Line Tools для предыдущей стабильной версии Xcode.

Если место на диске позволяет, предпочтительнее первый вариант. Но перед компиляцией нужно будет заглянуть в настройки Xcode на вкладку Locations и убедиться, что активирована правильная версия Command Line Tools:

commandlinetools

Ну а если решите скачать Command Line Tools от прошлой версии Xcode, вам сюда.

Обход проверки версии OS X

Обойти проверку версии OS X nj;t можно двумя способами. Про переустановку системы, пожалуй, промолчим :) Куда разумнее на время заставить OS X думать, что она не бета. А это делается подменой версии в конфигурационном файле /System/Library/CoreServices/SystemVersion.plist. Но тут есть подводные камни.

В OS X El Capitan внедрена функция System Integrity Protection, которая блокирует правку некоторых принципиально важных системных файлов. Для всех. Даже для рута. И SystemVersion.plist относится как раз к таким файлам. Поэтому для его правки вам нужно будет осуществить следующую цепочку действий:

  • перезагрузить Мак, удерживая в момент старта системы клавиши Cmd+R, чтобы попасть в режим восстановления
  • выбрать любой язык
  • в верхнем меню запустить Терминал
  • ввести команду csrutil disable
  • потом ввести reboot
  • загрузиться в OS X, открыть Терминал там
  • ввести sudo nano /System/Library/CoreServices/SystemVersion.plist

systemversion

  • заменить версию и номер билда на те, что использованы в любой финальной версии OS X (Википедия всё помнит)
  • нажать Cmd+X, y и Enter для сохранения изменений
  • перезагрузиться ещё раз

Потом можете компилировать и заливать сборку. Но если вы захотите вернуть всё как было, вам придётся выполнить эту цепочку действий в обратном порядке – вернуть обратно версию, перезагрузиться в режиме восстановления и включить обратно System Integrity Protection.

Удачи :)