Xamarin.iOS에서 다른 디바이스용으로 컴파일Compiling for Different Devices in Xamarin.iOS

프로젝트의 iOS 빌드 속성 페이지에서 실행 파일의 빌드 속성을 구성할 수 있으며, 이 페이지는 Mac용 Visual Studio에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 옵션 > iOS 빌드를 찾거나 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:

UI에서 사용할 수 있는 구성 옵션 외에도, 개발자 고유의 명령줄 옵션 집합을 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.

SDK 옵션SDK Options

Mac용 Visual Studio를 사용하면 SDK와 관련된 두 가지 중요한 속성인 소프트웨어를 빌드하는 데 사용되는 iOS SDK 버전 및 배포 대상(또는 필요한 최소 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).

iOS SDK 버전 옵션을 통해 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.

일반적으로 Xamarin.iOS API는 최신 버전의 SDK에서 사용할 수 있는 모든 메서드를 노출하며, 필요한 경우 런타임에 기능을 사용할 수 있는지 여부를 감지할 수 있는 편의 속성을 제공해 드립니다(예를 들어 UIDevice.UserInterfaceIdiomUIDevice.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

Xamarin.iOS 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.

이 방법은 Mac용 Visual Studio 또는 Visual Studio의 iOS 빌드 옵션에서 사용할 수 있습니다.You can enable these from iOS Build options in Visual Studio for Mac or Visual Studio.

아키텍처 지원Architecture Support

ARMv6(Xamarin.iOS는 v8.10부터 ARMv6 지원 중단)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는 v8.6부터 ARM64 지원 시작)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)

앱 스토어에 제출된 모든 빌드는 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-2 지원ARM 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. 가장 대표적인 예로 iOS 4.0 이상에서 실행 중일 때 iAd를 사용하고 싶지만 계속해서 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. 이렇게 하려면 iAd 프레임워크에 "약하게" 연결해야 한다는 사실을 Xamarin.iOS가 알 수 있게 해야 합니다.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.