Можно ли использовать старую версию Xcode или Xamarin.iOS?

В документации по Xamarin предполагается использование последних версий Xamarin.iOS и Xcode, которые рекомендуется использовать. Однако некоторые клиенты предпочитают использовать старый Xamarin.iOS и /или Xcode, и хотели бы получить подробные сведения о последствиях.

Заметки о выпуске содержат следующее предупреждение:

Предупреждение

Использование более старой версии Xcode

Использование более старой версии Xcode (чем одна из упоминание в указанных выше требованиях) часто возможна, но некоторые функции могут быть недоступны. Кроме того, некоторые ограничения могут потребовать обходных решений, например:

  • registrar Статический требует файлов заголовков Xcode для создания приложений, что приводит к MT0091 ошибкам или MT4109 ошибкам, если API отсутствуют. В большинстве случаев включение управляемого компоновщика поможет (путем удаления API).
  • Сборки Bitcode (для tvOS и watchOS) могут завершиться ошибкой отправки в App Store, если не используется цепочка инструментов Xcode 9.0+.

Дополнительные сведения

Корпорация Майкрософт настоятельно рекомендует использовать последний Xcode и последний выпуск Xamarin.iOS при разработке и отправке приложений. Apple требует использования самого последнего Xcode при отправке приложений.

Обратите внимание, что использование последнего Xcode не препятствует приложению нацеливание на старые версии iOS. Поддерживаемые версии iOS основаны на записи Info.plist и api, которые использует ваше приложение.

Можно установить несколько версий Xcode параллельно с различными именами, такими как Xcode101.app и Xcode102.app. Если вы используете несколько версий, установите активный Xcode в Visual Studio для Mac Параметры и с помощью средства командной xcode-selectстроки.

Однако редким обстоятельствам может потребоваться использование старых компонентов. В этой документации описаны общие проблемы, которые могут возникнуть при использовании версий старше последней версии.

Каждый выпуск от Apple уникальный, хотя, и вы можете столкнуться с другими ловушками, которые здесь не описаны.

Эти проблемы иногда не являются тривиальными для решения, поэтому каждый раз, когда это возможно, придерживаться поддерживаемой конфигурации последнего Xcode и последней версии Xamarin.iOS.

Использование старого Xamarin.iOS со старым Xcode

Обновление Xamarin.iOS и Xcode возможно, по крайней мере в течение некоторого времени. Ограничение заключается в том, что в какой-то момент Apple потребует минимальную версию Xcode для отправки приложений. На этом этапе необходимо обновить все компоненты (macOS, Xcode и Xamarin.iOS) до последних версий (или новой, минимальной версии Xcode, необходимой Apple и соответствующего выпуска Xamarin.iOS).

Как правило, проще постепенно обновлять и следить за небольшими изменениями. Для больших проектов, где обновления могут быть сложнее поддерживать, оставаясь с известным рабочим набором может быть хорошим компромиссом.

Использование нового Xamarin.iOS с более старым Xcode

Xamarin.iOS в целом поддерживает старые выпуски Xcode всякий раз, когда это возможно. Ниже приведены некоторые потенциальные проблемы.

  • Более новая версия Xamarin.iOS может поддерживать некоторые функции и API, которые отсутствуют в выбранном Xcode.
  • registrarСтатический требует файлов заголовков Xcode для создания приложений, что приводит к MT0091 ошибкам или MT4109 ошибкам, если API отсутствуют.
    • В большинстве случаев включение управляемого компоновщика поможет (удалив управляемые привязки для нового API), если он не используется.
  • Сборки Bitcode (для tvOS и watchOS) могут завершиться ошибкой отправки в App Store, если не используется цепочка инструментов Xcode 9.0+.

Использование нового Xcode с более старым Xamarin.iOS

Этот вариант использования значительно сложнее, так как Xamarin.iOS не может прогнозировать изменения требований нового Xcode. Обновления macOS также могут возникнуть проблемы, и без исправлений совместимости могут быть затронуты многие части Xamarin.iOS.

Существует ряд потенциальных областей, где вещи могут пойти не так, включая:

  • Несовместимость с mlaunch:
    • Поддержка симулятора может не работать должным образом (или вообще)
    • Поддержка устройств может не работать должным образом (или вообще)
  • Неизвестная поддержка mtouch
    • Поддержка новых платформ не поддерживается
    • Поддержка новых прав не поддерживается
    • Поддержка новых или обновленных средств не поддерживается
      • Это может повлиять на подпись кода, а также

Новые правила отправки AppStore

Apple в любое время оставляет за собой право обновлять правила отправки AppStore. Эти изменения правил только иногда объявляются заранее. Для некоторых из этих изменений требуются изменения инструментов для поддержки, для которых требуется обновленный компонент Xamarin.iOS.

В дополнение к изменениям правил Apple часто добавляет дополнительные проверки для отправленных приложений или ужесточает существующие. Для некоторых из них требуются изменения в средствах (например, новые блокированные символы). Многие из них сначала сталкиваются с клиентами, отправляющими, так как нет объявления (или списка) правил.

Итоги

Когда это возможно, вы можете безопасно играть в нем, следуя инструкциям Apple и развиваясь и отправляя его с помощью последнего Xcode, выпущенного в App Store.

В свою очередь используйте последнюю версию Xamarin.iOS. Это позволит отслеживать последние исправления, которые могут повлиять на отправленные приложения и соответствовать последним изменениям правила.

Если это невозможно, рекомендуется использовать соответствующий более старый выпуск Xcode и Xamarin.iOS. Это может работать в течение некоторого времени, но в какой-то момент Apple будет настаивать на более новых инструментах так планировать соответствующим образом.