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

Вы можете настроить свойства сборки для исполняемого файла на странице свойств проекта Сборка iOS. Чтобы открыть эту страницу, щелкните имя проекта правой кнопкой мыши и выберите Параметры > Сборка iOS (в Visual Studio для Mac) или Свойства (в Visual Studio).The build properties of your executable can be configured from the Project's iOS Build properties page, which is found by right-clicking on the Project name and browsing to Options > iOS Build in Visual Studio for Mac, and Properties in Visual Studio:

Помимо параметров конфигурации, доступных в пользовательском интерфейсе, вы можете создать собственный набор параметров командной строки и передать его в средство сборки Xamarin.iOS (mtouch).In addition to the configuration options available on the UI, you can also pass your own set of command line options to the Xamarin.iOS build tool (mtouch).

Доступен полезный ресурс http://iossupportmatrix.com/, где вы можете проверить охват всех требуемых устройств, архитектур и версий iOS.http://iossupportmatrix.com/ is a helpful resource that can be used to make sure you are including all the required devices, architectures, and iOS versions.

Параметры пакета SDKSDK Options

Visual Studio для Mac позволяет настроить для пакета SDK два важных свойства: версию пакета SDK для iOS, которая используется при сборке программы, и цель развертывания (которая обозначает минимально необходимую версию iOS).Visual Studio for Mac lets you configure two important properties related to the SDK: the iOS SDK version used to build your software and the Deployment Target (or the minimum required iOS version).

Версия пакета SDK для IOS позволяет указать разные версии опубликованных Apple пакетов SDK. Эти сведения сообщат Xamarin.iOS, какие компиляторы, компоновщики и библиотеки нужно использовать при сборке.The iOS SDK version option lets you use different versions of an Apple published SDK, this directs Xamarin.iOS to the compilers, linkers and libraries it should reference during your build.

Параметр Цель развертывания определяет минимальную необходимую версию операционной системы, на которой может выполняться приложение.The Deployment Target setting is used to select the minimum required version of the operating system on which your application will run. Этот параметр задается в файле проекта Info.plist.This is set in your Project's Info.plist file. В качестве минимально необходимой выбирайте такую версию, которая содержит все нужные API-интерфейсы для запуска приложения.You should pick the minimum version that has all the APIs that you need to run your application.

Как правило, API-интерфейс Xamarin.iOS предоставляет все методы, доступные в последней версии пакета SDK, и мы при необходимости предоставляем удобные методы, позволяющие определить доступность определенных функциональных возможностей во время выполнения (например, UIDevice.UserInterfaceIdiom и UIDevice.IsMultitaskingSupported работают на Xamarin.iOS всегда и не требуют от вас никаких действий).In general, the Xamarin.iOS API exposes all the methods available in the latest version of the SDK, and when necessary, we provide convenience properties that allow you to detect if the functionality is available at runtime (for example, UIDevice.UserInterfaceIdiom and UIDevice.IsMultitaskingSupported always work on Xamarin.iOS, we do all the work behind the scenes).

КомпоновкаLinking

Страница с информацией о компоновщике позволит узнать, как компоновщик помогает уменьшить размер исполняемых файлов, и как его наиболее эффективно использовать.See our dedicated page on the Linker to learn more about how the linker helps you reduce the size of your executables and to find out how to use it effectively.

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

Начиная с версии 4.0, Xamarin.iOS поддерживает две серверные системы создания кода.Starting with Xamarin.iOS 4.0, there are two code generation backends to Xamarin.iOS. Это обычный Mono и модуль на основе оптимизирующего компилятора LLVM.The regular Mono code generation engine and one based on the LLVM Optimizing Compiler. У каждого из них есть преимущества и недостатки.Each engine has its pros and cons.

Обычно в процессе разработки чаще применяется модуль создания кода Mono, который позволяет быстро повторять регулярные процессы.Typically, during the development process, you will likely use the Mono code generation engine as it will let you iterate quickly. Для сборки выпуска и для развертывания в AppStore лучше переключиться на модуль создания кода LLVM.For release builds and AppStore deployment, you will want to switch to the LLVM code generation engine.

Серверный модуль оптимизации LLVM создает код, который работает быстрее и занимает меньше места, чем код Mono, но при этом компиляция требует много больше времени.The LLVM optimizing backend engine produces both faster and tighter code than the Mono engine does, at the cost of long compile times.

Вы можете выбрать используемый вариант в параметрах сборки iOS в Visual Studio или Visual Studio для Mac.You can enable these from iOS Build options in Visual Studio for Mac or Visual Studio.

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

ARMv6 (Xamarin.iOS прекратил поддержку ARMv6 с версии 8.10)ARMv6 (Xamarin.iOS discontinued support for ARMv6 with v8.10)

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

ARMv7ARMv7

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

ARMv7sARMv7s

  • iPhone 5iPhone 5
  • iPhone 5ciPhone 5c
  • iPad 4iPad 4

Если вы создаете код только для процессора ARMv7s, он будет выполняться немного быстрее, но совсем не будет работать на системах ARMv7 или ARMv6, если не включить в сборку файл в толстом двоичном формате, который содержит несколько исполняемых объектов.If you target only the ARMv7s processor, the code generated will be slightly faster, but it will no longer run on ARMv7 or ARMv6 systems unless you compile a fat binary that contains multiple executables in your package.

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

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

Обратите внимание, что переданные в App Store сборки должны поддерживать 64-разрядные системы. Это обязательное требование Apple.Note that any builds submitted to the App Store must contain 64 bit support, this is a requirement set by Apple. Кроме того, iOS 11 поддерживает только 64-разрядные приложения.Additionally, iOS 11 only supports 64-bit applications.

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

Thumb — это более компактный набор инструкций, используемый процессорами ARM.Thumb is a more compact instruction set used by ARM processors. Включив поддержку Thumb, вы сможете уменьшить размер исполняемого файла, но в ущерб времени его выполнения.By enabling the Thumb support, you can reduce the size of your executable, at the expense of slower execution times. Thumb поддерживается на ARMv7 и ARMv7s.Thumb is supported on ARMv7 and ARMv7s.

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

Если в проекте нужны какие-то функции новых выпусков iOS, вам может потребоваться условная структура для выбора платформ.If your project wants to leverage some of the features in the newer iOS releases, you may need to conditionally rely on certain new frameworks. Для примера предположим, что вы хотите использовать iAd при работе на iOS 4.0, но не терять при этом и поддержку устройств 3.x.A prime example of this is wanting to use iAd when running on iOS 4.0 or greater, but still support 3.x devices. Чтобы решить эту задачу, нужно задать для Xamarin.iOS "слабую" привязку к платформе iAd.To accomplish this you need to let Xamarin.iOS know that you need to link against the iAd framework "weakly". Слабая привязка означает, что платформа будет загружаться только по запросу при первом вызове класса из этой платформы.Weak bindings ensure that the framework is only loaded on demand the first time a class from the framework is required.

Для этого следует выполнить следующие действия:To do this you should take the following steps:

  • Откройте Параметры проекта и перейдите к панели Сборка iOS.Open your Project Options and navigate to the iOS Build pane.
  • Добавьте '-gcc_flags "-weak_framework iAd"' в раздел Дополнительные параметры для каждой конфигурации, к которой должна действовать слабая привязка:Add '-gcc_flags "-weak_framework iAd"' to the Additional Options for each configuration you wish to weakly link on:

Помимо этого, нужно запретить использование в коде тех типов, которые не существуют в более старых версиях iOS при работе на устройствах с этими версиями.In addition to this you will need to guard your usage of the types from running on older versions of iOS where they may not exist. Эту задачу можно решить несколькими способами, например с помощью синтаксического анализа UIDevice.CurrentDevice.SystemVersion.There are several methods to accomplish this, but one of which is parsing UIDevice.CurrentDevice.SystemVersion.