1부 – Xamarin 모바일 플랫폼 이해
Xamarin 플랫폼은 iOS 및 Android용 애플리케이션을 개발할 수 있는 여러 요소로 구성됩니다.
- C# 언어 – 제네릭, LINQ 및 병렬 작업 라이브러리와 같은 친숙한 구문과 정교한 기능을 사용할 수 있습니다.
- Mono .NET Framework – Microsoft의 .NET Framework 에서 광범위한 기능의 플랫폼 간 구현을 제공합니다.
- 컴파일러 – 플랫폼에 따라 네이티브 앱(예: iOS) 또는 통합 .NET 애플리케이션 및 런타임(예: Android)을 생성합니다. 또한 컴파일러는 사용되지 않는 코드를 연결하는 등 모바일 배포에 대한 많은 최적화를 수행합니다.
- IDE 도구 – Mac 및 Windows의 Visual Studio를 사용하면 Xamarin 프로젝트를 만들고, 빌드하고, 배포할 수 있습니다.
또한 기본 언어는 .NET 프레임워크를 사용하는 C#이므로 Windows 전화 배포할 수도 있는 코드를 공유하도록 프로젝트를 구성할 수 있습니다.
내부 살펴보기
Xamarin을 사용하면 C#으로 앱을 작성하고 여러 플랫폼에서 동일한 코드를 공유할 수 있지만 각 시스템의 실제 구현은 다릅니다.
컴파일
C# 소스는 각 플랫폼에서 다양한 방법으로 네이티브 앱으로 전환됩니다.
- iOS – C#은 ARM 어셈블리 언어로 컴파일된 AOT(Ahead-of-Time)입니다. 애플리케이션 크기를 줄이기 위해 연결 중에 사용되지 않는 클래스가 제거되는 .NET 프레임워크가 포함됩니다. Apple은 iOS에서 런타임 코드 생성을 허용하지 않으므로 일부 언어 기능을 사용할 수 없습니다(Xamarin.iOS 제한 사항 참조).
- Android – C#은 IL로 컴파일되고 MonoVM + JIT'ing으로 패키지됩니다. 프레임워크에서 사용되지 않는 클래스는 연결 중에 제거됩니다. 애플리케이션은 Java/ART(Android 런타임)와 나란히 실행되며 JNI를 통해 네이티브 형식과 상호 작용합니다(Xamarin.Android 제한 사항 참조).
- Windows – C#은 IL로 컴파일되고 기본 제공 런타임에 의해 실행되며 Xamarin 도구가 필요하지 않습니다. Xamarin의 지침에 따라 Windows 애플리케이션을 디자인하면 iOS 및 Android에서 코드를 더 간단하게 재사용할 수 있습니다. 유니버설 Windows 플랫폼 Xamarin.iOS의 AOT 컴파일과 비슷하게 작동하는 .NET 네이티브 옵션도 있습니다.
Xamarin.iOS 및 Xamarin.Android에 대한 링커 설명서에서는 컴파일 프로세스의 이 부분에 대한 자세한 정보를 제공합니다.
런타임 '컴파일'(동적으로 System.Reflection.Emit
코드를 생성)은 피해야 합니다.
Apple의 커널은 iOS 디바이스에서 동적 코드 생성을 방지하므로 Xamarin.iOS에서 즉시 코드를 내보내는 것은 작동하지 않습니다. 마찬가지로 동적 언어 런타임 기능은 Xamarin 도구와 함께 사용할 수 없습니다.
일부 리플렉션 기능은 작동하지만(예: MonoTouch.Dialog에서 리플렉션 API에 사용) 코드 생성은 수행하지 않습니다.
플랫폼 SDK 액세스
Xamarin을 사용하면 익숙한 C# 구문을 사용하여 플랫폼별 SDK에서 제공하는 기능에 쉽게 액세스할 수 있습니다.
- iOS – Xamarin.iOS는 Apple의 CocoaTouch SDK 프레임워크를 C#에서 참조할 수 있는 네임스페이스로 노출합니다. 예를 들어 모든 사용자 인터페이스 컨트롤을 포함하는 UIKit 프레임워크를 간단한
using UIKit;
문에 포함할 수 있습니다. - Android – Xamarin.Android는 Google의 Android SDK를 네임스페이스로 노출하므로 사용자 인터페이스 컨트롤에 액세스하는 것과 같은
using Android.Views;
using 문을 사용하여 지원되는 SDK의 모든 부분을 참조할 수 있습니다. - Windows – Windows 앱은 Windows의 Visual Studio를 사용하여 빌드됩니다. 프로젝트 유형에는 Windows Forms, WPF, WinRT 및 UWP(유니버설 Windows 플랫폼)가 포함됩니다.
개발자를 위한 원활한 통합
Xamarin의 아름다움은 내부적인 차이점에도 불구하고 Xamarin.iOS 및 Xamarin.Android(Microsoft의 Windows SDK와 결합됨)는 세 플랫폼 모두에 재사용할 수 있는 C# 코드를 작성하기 위한 원활한 환경을 제공한다는 것입니다.
비즈니스 논리, 데이터베이스 사용, 네트워크 액세스 및 기타 일반적인 함수를 한 번 작성하고 각 플랫폼에서 다시 사용할 수 있으므로 네이티브 애플리케이션으로 보고 수행하는 플랫폼별 사용자 인터페이스를 위한 토대를 제공합니다.
IDE(통합 개발 환경) 가용성
Xamarin 개발은 Mac 또는 Windows의 Visual Studio에서 수행할 수 있습니다. 선택한 IDE는 대상으로 지정하려는 플랫폼에 따라 결정됩니다.
Windows 앱은 Windows에서만 개발할 수 있으므로 iOS, Android 및 Windows용으로 빌드하려면 Windows용 Visual Studio가 필요합니다. 그러나 Windows와 Mac 컴퓨터 간에 프로젝트와 파일을 공유할 수 있으므로 iOS 및 Android 앱을 Mac에서 빌드하고 나중에 Windows 프로젝트에 공유 코드를 추가할 수 있습니다.
각 플랫폼에 대한 개발 요구 사항은 요구 사항 가이드에서 자세히 설명합니다.
iOS
iOS 애플리케이션을 개발하려면 macOS를 실행하는 Mac 컴퓨터가 필요합니다. Visual Studio를 사용하여 Visual Studio에서 Xamarin을 사용하여 iOS 애플리케이션을 작성하고 배포할 수도 있습니다. 그러나 Mac은 빌드 및 라이선싱 목적으로 여전히 필요합니다.
테스트를 위해 컴파일러 및 시뮬레이터를 제공하려면 Apple의 Xcode IDE를 설치해야 합니다. 사용자 고유의 디바이스 에서 무료로 테스트할 수 있지만 배포용 애플리케이션(예: App Store)을 빌드하려면 Apple 개발자 프로그램(연간 $99 USD)에 가입해야 합니다. 애플리케이션을 제출하거나 업데이트할 때마다 고객이 다운로드할 수 있게 되기 전에 Apple에서 검토 및 승인해야 합니다.
코드는 Visual Studio IDE를 사용하여 작성되며 화면 레이아웃은 프로그래밍 방식으로 작성되거나 Mac의 Xcode를 사용하여 편집할 수 있습니다.
설정에 대한 자세한 지침은 Xamarin.iOS 설치 가이드 를 참조하세요.
Android
Android 애플리케이션 개발을 위해서는 Java 및 Android SDK를 설치해야 합니다. SDK는 컴파일러, 에뮬레이터 및 빌드, 배포 및 테스트에 필요한 기타 도구를 제공합니다. Java, Google의 Android SDK 및 Xamarin 도구는 모두 Windows 및 macOS에서 설치하고 실행할 수 있습니다. 다음 구성을 사용하는 것이 좋습니다.
- Visual Studio 2019를 사용하는 Windows 10
- Mac용 Visual Studio 2019를 사용한 macOS Mojave(10.11 이상)
Xamarin은 필수 Java, Android 및 Xamarin 도구(화면 레이아웃용 시각적 디자이너 포함)를 사용하여 시스템을 구성하는 통합 설치 관리자를 제공합니다. 자세한 지침은 Xamarin.Android 설치 가이드 를 참조하세요.
Google의 라이선스 없이 실제 디바이스에서 애플리케이션을 빌드하고 테스트할 수 있지만 스토어(예: Google Play, Amazon 또는 Barnes & Noble)를 통해 애플리케이션을 배포하려면 운영자에게 등록 요금을 지불할 수 있습니다. 구글 플레이는 즉시 응용 프로그램을 게시합니다, 다른 상점은 애플과 유사한 승인 프로세스가 있는 동안.
Windows
Windows 앱(WinForms, WPF 또는 UWP)은 Visual Studio를 사용하여 빌드됩니다. Xamarin은 직접 사용하지 않습니다. 그러나 C# 코드는 Windows, iOS 및 Android에서 공유할 수 있습니다. Windows 개발에 필요한 도구에 대해 알아보려면 Microsoft의 개발자 센터 방문하세요.
UI(사용자 인터페이스) 만들기
Xamarin을 사용하는 주요 이점은 애플리케이션 사용자 인터페이스가 각 플랫폼에서 네이티브 컨트롤을 사용하여 작성된 Objective-C 애플리케이션 또는 Java(각각 iOS 및 Android용)와 구별할 수 없는 앱을 만드는 것입니다.
앱에서 화면을 빌드할 때 코드에서 컨트롤을 배치하거나 각 플랫폼에 사용할 수 있는 디자인 도구를 사용하여 전체 화면을 만들 수 있습니다.
프로그래밍 방식으로 컨트롤 만들기
각 플랫폼을 사용하면 코드를 사용하여 사용자 인터페이스 컨트롤을 화면에 추가할 수 있습니다. 컨트롤 위치 및 크기에 대해 픽셀 좌표를 하드 코딩할 때 완성된 디자인을 시각화하기 어려울 수 있으므로 시간이 많이 걸릴 수 있습니다.
하지만 프로그래밍 방식으로 컨트롤을 만들면 i전화 및 iPad 화면 크기에서 다르게 크기를 조정하거나 렌더링하는 보기를 빌드하기 위한 iOS의 이점이 있습니다.
비주얼 디자이너
각 플랫폼에는 화면을 시각적으로 배치하는 다른 방법이 있습니다.
- iOS – 스토리보드에는 여러 보기 및 컨트롤이 포함되어 있으며 , 프로젝트에 포함된 스토리보드 파일입니다.
- Android – Xamarin은 Visual Studio용 Android 끌어서 놓기 UI 디자이너를 제공합니다.
- Windows – Microsoft는 Visual Studio 및 Blend에서 끌어서 놓기 UI 디자이너를 제공합니다. 화면 레이아웃은 다음과 같이 저장됩니다. XAML 파일.
이러한 스크린샷은 각 플랫폼에서 사용할 수 있는 시각적 화면 디자이너를 보여줍니다.
모든 경우에 시각적으로 만드는 요소는 코드에서 참조할 수 있습니다.
사용자 인터페이스 고려 사항
Xamarin을 사용하여 플랫폼 간 애플리케이션을 빌드할 때의 주요 이점은 네이티브 UI 도구 키트를 활용하여 사용자에게 친숙한 인터페이스를 제시할 수 있다는 것입니다. 또한 UI는 다른 네이티브 애플리케이션만큼 빠르게 수행됩니다.
일부 UI 은유는 여러 플랫폼에서 작동하지만(예를 들어 세 플랫폼 모두 유사한 스크롤 목록 컨트롤을 사용) 애플리케이션이 '느낌'을 얻으려면 UI가 적절한 경우 플랫폼별 사용자 인터페이스 요소를 활용해야 합니다. 플랫폼별 UI 비유의 예는 다음과 같습니다.
- iOS – 화면 아래쪽에 있는 탭, 부드러운 뒤로 단추가 있는 계층적 탐색
- Android – 하드웨어/시스템 소프트웨어 뒤로 단추, 작업 메뉴, 화면 위쪽의 탭.
- Windows – Windows 앱은 데스크톱, 태블릿(예: Microsoft Surface) 및 휴대폰에서 실행할 수 있습니다. 예를 들어 Windows 10 디바이스에는 하드웨어 뒤로 단추와 라이브 타일이 있을 수 있습니다.
대상 플랫폼과 관련된 디자인 지침을 읽는 것이 좋습니다.
- iOS – Apple의 휴먼 인터페이스 지침
- Android – Google의 사용자 인터페이스 지침
- Windows – Windows용 사용자 환경 디자인 지침
라이브러리 및 코드 재사용
Xamarin 플랫폼을 사용하면 모든 플랫폼에서 기존 C# 코드를 재사용하고 각 플랫폼에 대해 기본적으로 작성된 라이브러리의 통합을 사용할 수 있습니다.
C# 원본 및 라이브러리
Xamarin 제품은 C# 및 .NET Framework를 사용하므로 Xamarin.iOS 또는 Xamarin.Android 프로젝트에서 많은 기존 소스 코드(오픈 소스 및 사내 프로젝트 모두)를 다시 사용할 수 있습니다. 종종 원본을 Xamarin 솔루션에 단순히 추가할 수 있으며 즉시 작동합니다. 지원되지 않는 .NET Framework 기능이 사용된 경우 일부 조정이 필요할 수 있습니다.
Xamarin.iOS 또는 Xamarin.Android에서 사용할 수 있는 C# 원본의 예는 SQLite-NET, NewtonSoft.JSON 및 SharpZipLib입니다.
Objective-C 바인딩 + 바인딩 프로젝트
Xamarin은 Xamarin.iOS 프로젝트에서 라이브러리를 사용할 수 있는 Objective-C 바인딩을 만드는 데 도움이 되는 btouch라는 도구를 제공합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 바인딩 Objective-C 형식 설명서를 참조하세요.
Xamarin.iOS에서 사용할 수 있는 라이브러리의 Objective-C 예로는 RedLaser 바코드 스캔, Google Analytics 및 PayPal 통합이 있습니다. 오픈 소스 Xamarin.iOS 바인딩은 GitHub에서 사용할 수 있습니다.
.jar 바인딩 + 바인딩 프로젝트
Xamarin은 Xamarin.Android에서 기존 Java 라이브러리 사용을 지원합니다. 를 사용하는 방법에 대한 자세한 내용은 Java 라이브러리 바인딩 설명서를 참조하세요. Xamarin.Android의 JAR 파일입니다.
오픈 소스 Xamarin.Android 바인딩은 GitHub에서 사용할 수 있습니다.
PInvoke를 통한 C
"플랫폼 호출" 기술(P/Invoke)을 사용하면 관리 코드(C#)가 네이티브 라이브러리의 메서드를 호출하고 네이티브 라이브러리가 관리 코드로 다시 호출되도록 지원할 수 있습니다.
예를 들어 SQLite-NET 라이브러리는 다음과 같은 문을 사용합니다.
[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);
이는 iOS 및 Android의 네이티브 C 언어 SQLite 구현에 바인딩됩니다. 기존 C API에 익숙한 개발자는 C# 클래스 집합을 생성하여 네이티브 API에 매핑하고 기존 플랫폼 코드를 활용할 수 있습니다. Xamarin.iOS에서 네이티브 라이브러리를 연결하는 설명서가 있습니다. Xamarin.Android에도 유사한 원칙이 적용됩니다.
CppSharp를 통한 C++
Miguel은 자신의 블로그에서 CXXI(현재 CppSharp라고 함)에 대해 설명합니다. C++ 라이브러리에 직접 바인딩하는 대안은 C 래퍼를 만들고 P/Invoke를 통해 바인딩하는 것입니다.