Компиляция для разных устройств в Xamarin.iOS

Свойства сборки исполняемого файла можно настроить на странице свойств сборки iOS Проекта, которая найдена, щелкнув правой кнопкой мыши имя проекта и просмотр в разделе "Параметры > сборки iOS" Visual Studio для Mac и свойства в Visual Studio:

Помимо параметров конфигурации, доступных в пользовательском интерфейсе, вы можете создать собственный набор параметров командной строки и передать его в средство сборки Xamarin.iOS (mtouch).

Параметры пакета SDK

Visual Studio для Mac позволяет настроить для пакета SDK два важных свойства: версию пакета SDK для iOS, которая используется при сборке программы, и цель развертывания (которая обозначает минимально необходимую версию iOS).

Версия пакета SDK для IOS позволяет указать разные версии опубликованных Apple пакетов SDK. Эти сведения сообщат Xamarin.iOS, какие компиляторы, компоновщики и библиотеки нужно использовать при сборке. Щелкните проект правой кнопкой мыши и выберите Параметры, а затем Сборка iOS в окне "Параметры":

Choose the SDK version on the options window

Параметр Цель развертывания определяет минимальную необходимую версию операционной системы, на которой может выполняться приложение. Этот параметр задается в файле Info.plist проекта. В качестве минимально необходимой выбирайте такую версию, которая содержит все нужные API-интерфейсы для запуска приложения.

Set the deployment target in the Info.plist file

Как правило, API-интерфейс Xamarin.iOS предоставляет все методы, доступные в последней версии пакета SDK, и мы при необходимости предоставляем удобные методы, позволяющие определить доступность определенных функциональных возможностей во время выполнения (например, UIDevice.UserInterfaceIdiom и UIDevice.IsMultitaskingSupported работают на Xamarin.iOS всегда и не требуют от вас никаких действий).

Связывание

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

Модуль создания кода

Начиная с версии 4.0, Xamarin.iOS поддерживает две серверные системы создания кода. Это обычный Mono и модуль на основе оптимизирующего компилятора LLVM. У каждого из них есть преимущества и недостатки.

Обычно в процессе разработки чаще применяется модуль создания кода Mono, который позволяет быстро повторять регулярные процессы. Для сборки выпуска и для развертывания в AppStore лучше переключиться на модуль создания кода LLVM.

Серверный модуль оптимизации LLVM создает код, который работает быстрее и занимает меньше места, чем код Mono, но при этом компиляция требует много больше времени.

Вы можете выбрать используемый вариант в параметрах сборки iOS в Visual Studio или Visual Studio для Mac.

Enabling L L V M in Visual Studio for Mac.

Enabling L L V M in Visual Studio.

Поддержка архитектур

ARMv6 (Xamarin.iOS прекратил поддержку ARMv6 с версии 8.10)

  • iPhone (оригинальный), 3G
  • iPod 1-го и 2-го поколения

ARMv7

  • iPhone 3GS, 4, 4S
  • iPad 1, 2, 3, Mini
  • iPod 3-го, 4-го и 5-го поколения

ARMv7s

  • iPhone 5
  • iPhone 5c
  • iPad 4

Если вы создаете код только для процессора ARMv7s, он будет выполняться немного быстрее, но совсем не будет работать на системах ARMv7 или ARMv6, если не включить в сборку файл в толстом двоичном формате, который содержит несколько исполняемых объектов.

ARM64 (Xamarin.iOS начал поддерживать ARM64 с версии 8.6)

  • iPhone 5s
  • iPhone SE
  • iPhone 6, 6 Plus
  • iPhone 6s, 6s Plus
  • iPhone 7, 7 Plus
  • iPhone 8, 8 Plus
  • iPhone X
  • iPad Air
  • iPad Air 2
  • iPad Mini 2, 3, 4
  • iPad Pro (все версии)

Обратите внимание, что переданные в App Store сборки должны поддерживать 64-разрядные системы. Это обязательное требование Apple. Кроме того, iOS 11 поддерживает только 64-разрядные приложения.

Поддержка ARM Thumb-2

Thumb — это более компактный набор инструкций, используемый процессорами ARM. Включив поддержку Thumb, вы сможете уменьшить размер исполняемого файла, но в ущерб времени его выполнения. Thumb поддерживается на ARMv7 и ARMv7s.

Использование условной структуры

Если в проекте нужны какие-то функции новых выпусков iOS, вам может потребоваться условная структура для выбора платформ. Для примера предположим, что вы хотите использовать iAd при работе на iOS 4.0, но не терять при этом и поддержку устройств 3.x. Чтобы решить эту задачу, нужно задать для Xamarin.iOS "слабую" привязку к платформе iAd. Слабая привязка означает, что платформа будет загружаться только по запросу при первом вызове класса из этой платформы.

Для этого следует выполнить следующие действия:

  • Откройте Параметры проекта и перейдите к панели Сборка iOS.
  • Добавьте '-gcc_flags "-weak_framework iAd"' дополнительные параметры для каждой конфигурации, на которую вы хотите слабо связаться:

Additional Options

Помимо этого, нужно запретить использование в коде тех типов, которые не существуют в более старых версиях iOS при работе на устройствах с этими версиями. Эту задачу можно решить несколькими способами, например с помощью синтаксического анализа UIDevice.CurrentDevice.SystemVersion.