플랫폼 간 응용 프로그램 빌드 개요Building Cross Platform Applications Overview

이 가이드에서는 Xamarin 플랫폼 및 플랫폼 간 응용 프로그램을 설계 하 여 코드 재사용을 최대화 하 고 모든 주요 모바일 플랫폼 (iOS, Android 및 Windows Phone)에서 고품질의 기본 환경을 제공 하는 방법을 소개 합니다.This guide introduces the Xamarin platform and how to architect a cross-platform application to maximize code re-use and deliver a high-quality native experience on all of the main mobile platforms: iOS, Android and Windows Phone.

이 문서에서 사용 되는 방법은 생산성 앱과 게임 앱 모두에 일반적으로 적용 되지만, 생산성 및 유틸리티 (비 게임 응용 프로그램)에 중점을 둡니다.The approach used in this document is generally applicable to both productivity apps and game apps, however the focus is on productivity and utility (non-game applications). 플랫폼 간 게임 개발 지침은 MonoGame 문서 소개 또는 체크 아웃 Visual Studio Tools for Unity 를 참조 하세요.See the Introduction to MonoGame document or check out Visual Studio Tools for Unity for cross-platform game development guidance.

"한 번 쓰기, 모든 위치에서 실행"은 여러 플랫폼에서 수정 되지 않은 상태로 실행 되는 단일 코드 베이스의 virtues을 extol 하는 데 종종 사용 됩니다.The phrase “write-once, run everywhere” is often used to extol the virtues of a single codebase that runs unmodified on multiple platforms. 코드를 다시 사용 하는 이점을 얻을 수 있지만, 이러한 접근 방식은 일반적으로 가장 낮은-분모 기능 집합을 포함 하 고 있고 대상 플랫폼에 적합 하지 않은 일반 사용자 인터페이스가 있는 응용 프로그램을 만드는 경우가 많습니다.While it has the benefit of code re-use, that approach often leads to applications that have a lowest-common-denominator feature-set and a generic-looking user interface that does not fit nicely into any of the target platforms.

강력한 기능 중 하나는 각 플랫폼에 대해 네이티브 사용자 인터페이스를 구현 하는 기능이 기 때문에 Xamarin은 "한 번만 작성 되 고, 모든" 플랫폼에서 실행 되는 것은 아닙니다.Xamarin is not just a “write-once, run everywhere” platform, because one of its strengths is the ability to implement native user interfaces specifically for each platform. 그러나 확인이 가능한 디자인을 사용 하는 경우에도 대부분의 사용자 인터페이스 코드를 공유할 수 있으며, 데이터 저장소 및 비즈니스 논리 코드를 한 번 작성 하 고 각 플랫폼에 기본 Ui를 제공 하는 것이 좋습니다.However, with thoughtful design it’s still possible to share most of the non-user interface code and get the best of both worlds: write your data storage and business logic code once, and present native UIs on each platform. 이 문서에서는이 목표를 달성 하는 일반적인 아키텍처 접근 방법을 설명 합니다.This document discusses a general architectural approach to achieve this goal.

Xamarin 플랫폼 간 앱을 만들기 위한 핵심 사항은 다음과 같습니다.Here is a summary of the key points for creating Xamarin cross-platform apps:

  • 에서 C#앱을 사용 C# 합니다.Use C# - Write your apps in C#. 에서 C# 작성 된 기존 코드는 Xamarin을 매우 쉽게 사용 하 여 IOS 및 Android로 이식할 수 있으며 Windows 앱에서 사용할 수 있습니다.Existing code written in C# can be ported to iOS and Android using Xamarin very easily, and obviously used in Windows apps.
  • MVC 또는 MVVM 디자인 패턴 활용 -모델/뷰/컨트롤러 패턴을 사용 하 여 응용 프로그램의 사용자 인터페이스를 개발 합니다.Utilize MVC or MVVM design patterns - Develop your application’s User Interface using the Model/View/Controller pattern. 모델/뷰/컨트롤러 접근 방식이 나 "모델"과 나머지를 명확 하 게 구분 하는 모델/뷰/ViewModel 방식을 사용 하 여 응용 프로그램을 설계 합니다.Architect your application using a Model/View/Controller approach or a Model/View/ViewModel approach where there is a clear separation between the “Model” and the rest. 응용 프로그램에서 각 플랫폼 (iOS, Android, Windows, Mac)의 네이티브 사용자 인터페이스 요소를 사용 하는 부분을 확인 하 고 응용 프로그램을 "Core" 및 "사용자 인터페이스"의 두 가지 구성 요소로 분할 하는 지침으로 사용 합니다.Determine which parts of your application will be using native user interface elements of each platform (iOS, Android, Windows, Mac) and use this as a guideline to split your application into two components: “Core” and “User-Interface”.
  • 네이티브 Ui 빌드 -각 OS 특정 응용 프로그램은 다른 사용자 인터페이스 계층을 제공 합니다 (네이티브 C# UI 디자인 도구를 사용 하 여에서 구현 됨).Build native UIs - Each OS-specific application provides a different user-interface layer (implemented in C# with the assistance of native UI design tools):
  1. IOS에서 UIKit Api를 사용 하 여 네이티브 응용 프로그램을 만들고, 선택적으로 Xamarin의 iOS designer를 활용 하 여 UI를 시각적으로 만듭니다.On iOS, use the UIKit APIs to create native-looking applications, optionally utilizing Xamarin's iOS designer to create your UI visually.
  2. Android에서 Android. 뷰를 사용 하 여 네이티브 응용 프로그램을 만들고 Xamarin의 UI 디자이너를 활용 합니다.On Android, use Android.Views to create native-looking applications, taking advantage of Xamarin’s UI designer.
  3. Windows에서는 Visual Studio 또는 Blend의 UI 디자이너에서 만든 프레젠테이션 계층에 대 한 XAML을 사용 합니다.On Windows you will be using XAML for presentation layer, created in Visual Studio or Blend’s UI designer.
  4. Mac에서는 Xcode에서 만든 프레젠테이션 계층에 대해 Storyboard를 사용 합니다.On Mac, you will use Storyboards for the presentation layer, created in Xcode.

Xamarin Forms 프로젝트는 모든 플랫폼에서 지원 되며 Xamarin.ios XAML을 사용 하 여 플랫폼 간에 공유할 수 있는 사용자 인터페이스를 만들 수 있습니다.Xamarin.Forms projects are supported on all platforms, and allow you create user interfaces that can be shared across platforms using Xamarin.Forms XAML.

코드를 다시 사용 하는 양은 공유 코어에 유지 되는 코드의 양과 사용자 인터페이스에 따라 달라 지는 코드의 양에 따라 크게 달라 집니다.The amount of code re-use will depend largely on how much code is kept in the shared core and how much code is user-interface specific. 핵심 코드는 사용자와 직접 상호 작용 하지 않고, 대신이 정보를 수집 하 고 표시 하는 응용 프로그램의 일부에 대 한 서비스를 제공 하는 것입니다.The core code is anything that does not interact directly with the user, but instead provides services for parts of the application that will collect and display this information.

코드를 다시 사용 하는 양을 늘리려면 다음과 같은 모든 시스템에서 공통 서비스를 제공 하는 플랫폼 간 구성 요소를 채택할 수 있습니다.To increase the amount of code re-use, you can adopt cross-platform components that provide common services across all these systems such as:

  1. SQLite- 로컬 SQL 저장소의 경우SQLite-net for local SQL storage,
  2. 카메라, 연락처 및 지리적 위치를 포함 하 여 장치 특정 기능에 액세스 하기 위한 Xamarin 플러그인Xamarin Plugins for accessing device-specific capabilities including the camera, contacts and geolocation,
  3. Xamarin 프로젝트와 호환 되는 NuGet 패키지 (예: Json.NET)NuGet packages that are compatible with Xamarin projects, such as Json.NET,
  4. 네트워킹, 웹 서비스, IO 등에 .NET framework 기능 사용.Using .NET framework features for networking, web services, IO and more.

이러한 구성 요소 중 일부는 Tasky 사례 연구에서 구현 됩니다.Some of these components are implemented in the Tasky case study.

재사용 가능한 코드를 핵심 라이브러리로 분리Separate Reusable Code into a Core Library

응용 프로그램 아키텍처를 계층화 한 후 플랫폼의 핵심 기능을 재사용 가능한 핵심 라이브러리로 이동 하 여 책임 분리의 원칙에 따라 아래 그림 처럼 플랫폼 간에 코드 공유를 최대화할 수 있습니다. 예제By following the principle of separation of responsibility by layering your application architecture and then moving core functionality that is platform agnostic into a reusable core library, you can maximize code sharing across platforms, as the figure below illustrates:

사례 연구Case Studies

이 문서는 Tasky Pro와 함께 제공 되는 한 가지 사례 연구입니다.There is one case study that accompanies this document – Tasky Pro. 각 사례 연구에서는 실제 예제에서이 문서에 설명 된 개념의 구현에 대해 설명 합니다.Each case study discusses the implementation of the concepts outlined in this document in a real-world example. 코드는 오픈 소스 이며 github에서 사용할 수 있습니다.The code is open source and available on github.