Xamarin Forms, MVVMCross 및 SkiaSharp: 플랫폼 간 앱 개발의 성삼위일체

게시 됨: 2022-03-11

높은 기대치를 설정하는 것에 대해 이야기하십시오. 신성한 삼위일체, 그 이하도 아닙니다!

사실 모바일 앱 개발은 공유 코드가 없기 때문에 여러 플랫폼을 대상으로 할 때 비용이 많이 듭니다. Apple에서는 Objective-C 또는 Swift로 코딩해야 하고 Android에서는 Java로 코딩해야 하며 WinPhone에서는 .NET(주로 C#)으로 개발해야 합니다. 거기에 각 플랫폼이 지도, 그림, 사진 또는 GPS를 처리하기 위해 제공하는 과다한 라이브러리를 추가합니다. 단일 모바일 앱을 구축하려면 엄청난 시간과 지식이 필요합니다.

Xamarin Forms, MVVMCross 및 SkiaSharp를 사용한 플랫폼 간 앱 개발

말할 필요도 없이 대부분의 신생 기업은 비용을 세 배로 늘릴 여유가 없으며 기존 기업도 모바일 공간에 진입하는 비용을 정당화하는 데 어려움을 겪을 수 있습니다.

이 문서에서는 Xamarin Forms가 MVVMCross 및 SkiaSharp와 함께 친숙함, 성능 및 고유성을 손상시키지 않으면서 플랫폼 간 모바일 앱을 빌드하는 실행 가능한 방법이 될 수 있는 방법을 배웁니다. 이 기사에서는 이 세 가지 기술과 여러 모바일 플랫폼에서 최대 코드 재사용을 허용하여 개발 비용을 줄이는 방법을 검토합니다.

중요한 문제

크로스 플랫폼 모바일 앱 개발 문제는 현실이며, 따라서 플랫폼 간에 코드를 공유하여 개발 비용을 절감하기 위해 수년 동안 다양한 솔루션이 등장했습니다. 예를 들어 비디오 게임 산업에서 모든 주요 게임 엔진은 모바일 폰과 태블릿을 대상으로 하는 Unreal 및 Unity와 함께 크로스 플랫폼 솔루션을 제공합니다.

앱 측면에서 수년 동안 이 크로스 플랫폼 시장을 주도하려는 여러 시도가 있었습니다. 많은 사람들이 부족하여 심연에서 길을 잃었지만 몇 명은 몇 년이 지난 후에도 여전히 살아 있습니다. 그 중 Xamarin은 세 가지 모바일 플랫폼을 모두 지원하는 유일한 .NET 솔루션입니다.

원주민이든 아니든, 여기 내가 온다

따라서 서로 다른 솔루션 간에 전쟁이 벌어지고 있으며 누가 전쟁은 선전이라고 말하는가!

전쟁은 대부분 큰 N 의 전면에서 이루어집니다. 명확한 의미가 없기 때문에 주의해야 합니다. 요즘 모바일 개발 세계에서 가장 많이 사용되는 단어이며 매우 트렌디합니다. 진실은 아무도 그것이 실제로 의미하는 바에 동의하지 않는다는 것입니다.

크로스 플랫폼 프레임워크를 선택할 때 모든 "네이티브" 옵션이 동일하지 않으므로 사과를 오렌지와 비교할 수 있으므로 주의하십시오. 어떤 사람들에게는 프로그래밍 언어에 관한 것이고, 다른 사람들에게는 하드웨어 기능을 사용할 수 있다는 것에 관한 것이고, 다른 사람들은 플랫폼 API/UI의 사용에 관한 것이라고 생각하며, 종종 웹 앱이 아닌 것에 관한 것입니다.

논쟁의 모든 면에서 논쟁이 있고 쓸모가 없기 때문에 더 깊이 파고들지는 않을 것입니다. 왜 쓸모가 없습니까? 음, 삼키기 힘든 사실을 말씀드리겠습니다. 최종 사용자는 신경 쓰지 않습니다!

네, 당신의 프로그래머만이 관심을 가지고 있습니다. 최종 사용자는 기본 기술 때문에 앱을 선택하지 않을 것입니다. 앱이 문제에 답하고 좋은 경험을 제공하기 때문에 앱을 선택할 것입니다.

따라서 단어의 의미를 놓고 다투는 대신 Xamarin이 사용자에게 관심 있는 것을 제공하는 효율적인 방법을 제공하는 방법을 살펴보겠습니다.

성부와 성자와 성령

계속 진행하기 전에 플랫폼 간 개발 문제에 대한 솔루션을 구성하는 세 가지 요소를 명확히 합시다.

아버지: 자마린

앞서 언급했듯이 Xamarin은 모바일 및 데스크톱 앱 개발을 위한 .NET 솔루션입니다. 그것은 2016년에 마이크로소프트에 의해 구입되었지만 Mono 프로젝트와 함께 약 4년 전으로 거슬러 올라갑니다. 현재 Xamarin.iOS, Xamarin.Android 및 Xamarin.Mac의 세 가지 솔루션을 제공합니다. 다른 플랫폼은 이미 기본적으로 Microsoft 솔루션인 .NET 앱을 처리합니다. 간단히 말해서 Xamarin은 .NET의 플랫폼 API에 대한 직접 링크를 제공합니다. 따라서 .NET 앱의 기본 기능을 사용할 수 있습니다. UI에 대한 추상화 계층을 제공하는 Forms라는 Xamarin용 확장 모듈도 있습니다.

아들: SkiaSharp

SkiaSharp는 Google의 Skia 벡터 그래픽 라이브러리에 대한 .NET 래퍼입니다. Skia는 Android, Chrome, ChromeOS 및 Firefox의 기본 렌더링 엔진입니다. SkiaSharp를 사용하면 .NET 앱의 라이브러리를 사용하여 플랫폼 간을 만들 수 있습니다. 이것은 디자이너가 "앱을 훨씬 더 좋게 만들 것입니다"라고 말하는 깔끔한 그림자가 각 대상 플랫폼에 대해 반복되는 대신 한 번만 코딩될 수 있음을 의미합니다. 개인적으로 가장 좋은 기능은 선명하고 완벽한 픽셀 렌더링을 유지하면서 다양한 폼 팩터의 복제를 방지할 수 있는 방식으로 SVG 그래픽을 렌더링하는 기능이라고 생각합니다.

성령: MVVMCross

모든 것을 잘 분리하고 느슨하게 결합하기 위해 우리의 신성한 솔루션은 MVVMCross에 의존합니다. 이 프레임워크는 모든 것이 독립적으로 유지될 수 있도록 MVVM(Model-View-ViewModel) 인프라를 구현합니다. 너무 기술적이지 않으면 앱은 일반적으로 세 부분으로 나뉩니다.

  1. 모델: 데이터의 메모리 표현
  2. 보기: 사용자에게 데이터와 작업을 표시하는 우리의 UI
  3. ViewModel: Model을 View에, 또는 그 반대로 묶는 레이어

소프트웨어 엔지니어링에서 우리는 시각적 표현을 변경하더라도 애플리케이션 로직(ViewModel의)을 재사용할 수 있도록 ViewModel에서 뷰를 분리하기 위해 항상 노력합니다. MVVMCross는 데이터 바인딩을 처리하고 플랫폼 추상화를 위한 패턴과 도구를 제공하여 이를 달성하는 데 도움이 됩니다.

최종 사용자가 중요하게 생각하는 것

요약하자면, 성공적인 앱과 나쁜 앱을 구별하는 여러 가지 요소가 있습니다. 성공적인 앱:

  1. 실생활의 문제를 해결하다
  2. 즐거운 경험을 제공합니다

1번 포인트는 분명히 당신이 선택한 프레임워크와 아무 관련이 없습니다. 따라서 2번 항목에 집중하겠습니다. 앱의 즐거움에 기여하는 세 가지 주요 측면이 있습니다.

  1. 정통
  2. 성능
  3. 독창성

정통

친숙함은 사용의 용이성과 앱을 통해 길을 빠르게 찾는 것과 관련이 있습니다.

다시 말해, 시스템 전반에 걸쳐 일관된 방식으로 플랫폼의 다양한 사용자 인터페이스 패러다임을 사용하는 것입니다. 예를 들어 버튼 위치, 목록 컨텍스트 작업 또는 탐색과 같은 간단한 사항은 모두 앱의 친숙도에 기여합니다.

친숙함은 웹 인터페이스를 기반으로 하는 웹 앱 또는 프레임워크의 주요 약점입니다. 반면 Xamarin Forms는 공급업체 제공 UI 요소에 플랫폼 간 매핑을 제공합니다.

따라서 사용자는 플랫폼의 일반적인 모양과 느낌에 맞는 경험을 얻을 수 있으므로 직관적으로 앱에서 편안함을 느낄 수 있습니다.

성능

솔직히 마케팅 선전에서 "네이티브"를 언급하는 것은 아무 의미가 없습니다. "Native over HTTP"의 예로 Jasonette를 사용하십시오. UI는 웹 서버에 저장되어 있습니다. 왕복 및 속도 저하가 있습니다. 따라서 네이티브가 반드시 더 나은 성능을 의미한다고 가정할 수는 없음을 알 수 있습니다.

따라서 그 신화를 벗어나 실제 벤치마크를 볼 때 Xamarin은 성능과 관련하여 가장 완벽한 솔루션으로 나옵니다. 훨씬 더 많은 컨텍스트 전환이 필요하지 않은 Xamarin Forms는 모국어 앱과 비슷한 성능을 제공합니다.

내 결론은 구현 선택이 Xamarin 대 모국어보다 앱 속도를 늦출 수 있다는 것입니다. 다른 옵션은 성능과 관련하여 분명한 단점이 있습니다.

독창성

가능한 최고의 사용자 경험을 제공하고 앱을 차별화하려면 디자이너가 고유한 모양의 앱을 만들 가능성도 매우 중요합니다.

많은 경우 고유성은 사용자 정의 모양의 컨트롤, 애니메이션 또는 제스처를 만드는 것을 의미합니다. Xamarin에서 쉽게 사용할 수 없는 경우 SkiaSharp(Google의 Skia 벡터 그래픽 렌더링 라이브러리에 대한 래퍼)를 사용하고 Xamarin Forms의 사용자 지정 렌더러 개념을 활용하여 필요한 만큼 하드웨어에 접근하면서 항상 단일 다른 솔루션이 제공할 수 없는 언어입니다.

사업체로서 당신이 중요하게 생각하는 것

이 시점에서 프레임 워크의 선택도 비즈니스 결정이라고 생각할 가능성이 큽니다. 인적 자원 가용성과 같이 이 문서의 범위를 벗어나는 요소를 제외하고 Xamarin은 특히 MVVMCross와 결합할 때 많은 것을 제공합니다. 나는 당신이 당신의 결정에서 고려할 4가지 측면에 대해 자세히 설명할 것입니다:

  1. 가격 및 개발 비용
  2. 코드 재사용
  3. 구성 요소 가용성
  4. 지원 및 커뮤니티

가격 및 개발 비용

이 문제를 해결해 보겠습니다. 올해 초부터 Xamarin은 프리랜서 및 스타트업과 같은 소규모 비즈니스(Visual Studio Community Edition 포함)에게 무료입니다. 대규모 조직의 경우 이미 보유하고 있을 수 있는 Visual Studio 라이선스와 함께 « 무료로 » 제공됩니다. Xamarin Forms, MVVMCross 및 SkiaSharp도 모두 무료이며 이를 보완할 수 있는 오픈 소스입니다!

이미 언급했듯이 Xamarin을 사용하여 .Net 경로를 사용하면 처음부터 끝까지 단일 언어로 앱을 개발할 수 있습니다. 대부분의 다른 솔루션은 프로그래머가 다른 언어를 알고 있어야 합니다. 예를 들어 Cordova의 경우 사용 가능한 플러그인이 없는 공급업체 API에 액세스해야 하는 경우 HTML, Javascript, CSS뿐만 아니라 Objective-C, Java 및/또는 C#에도 유창해야 합니다. .

사용되는 다양한 언어로 인해 더 많은 컨텍스트 전환과 마스터해야 할 도구가 많아져 효율성이 저하됩니다. 반면 Xamarin은 올인원 솔루션입니다. Visual Studio에서 모든 플랫폼에서 빌드, 배포 및 디버그할 수 있습니다.

Xamarin과 직접적인 관련은 없지만 .Net 솔루션을 선택하여 개발 속도를 높이는 C#의 많은 기능도 사용할 수 있습니다. 즉, async/await, 클로저 및 리플렉션이 포함된 간편한 다중 스레딩과 같은 C# 4.5+의 뛰어난 기능의 이점을 누릴 수 있습니다. 이 모든 기능은 효율성을 향상시키는 것으로 나타났습니다.

코드 재사용

코드 재사용에 대해 생각해 보았을 가능성이 높으며 이와 관련하여 모든 솔루션이 어느 정도 동등하다고 생각할 가능성이 큽니다. 친구라고 해서 미안하지만 당신이 틀렸어요!

여러분 중 프로그래머는 내가 Forms에 내장된 MVVM 계층보다 MVVMCross 사용을 제안하는 이유를 궁금해했을 것입니다. 음, 고려해야 할 사항이 있습니다. 정말 모바일 앱만 구축하고 있습니까?

MVVMCross를 사용하여 앱 논리를 격리하고 제공하는 제어 역전을 사용하면 모바일뿐 아니라 Windows 및 Mac에서도 최대 양의 코드를 재사용할 수 있습니다(Xamarin.Mac이 친구이기 때문).

비용을 절약할 뿐만 아니라 코드 유지 관리 비용을 낮추는 우수한 엔지니어링 방법을 제시합니다.

구성 요소 가용성

당신은 나와 같지 않을 수도 있지만 나는 바퀴를 재발명하는 것을 싫어합니다. 따라서 앱에 쉽게 통합할 수 있는 기존 구성 요소에 액세스하는 것은 시장 출시 시간을 단축하는 데 중요하며 동시에 비용도 낮출 수 있습니다.

Xamarin 및 MVVMCross를 선택하면 기존 구성 요소를 선택할 수 있는 두 가지 옵션이 제공됩니다. 첫째, Forms가 있거나 없이 Xamarin에 사용할 수 있는 구성 요소가 점점 더 많아지고 있습니다. Xamarin에는 일반적인 앱 문제에 대한 다양한 솔루션을 찾을 수 있고 다른 회사에서 직접 판매할 수 있는 Visual Studio 내부에 통합된 구성 요소 저장소가 있습니다.

둘째, 누군가가 이미 필요한 작업을 수행하는 코드를 작성했을 가능성이 있으므로 Nuget 패키지를 검색하고 싶을 것입니다. 이러한 패키지 중에서 전자 메일, GPS 또는 현지화와 같은 일반적인 문제를 해결할 수 있는 적절한 크로스 플랫폼 MVVMCross 플러그인 목록을 찾을 수 있습니다.

C#에 이미 경험이 있다면 선호하는 구성 요소가 있을 것입니다. 물론, 당신은 그들을 놓아주고 싶지 않습니다. 그들은 매우 편안하다고 느낍니다. 기존 구성 요소에 대한 C# 바인딩을 만든 다음 사용자 지정 렌더러의 약간의 도움을 받아 Forms에서도 마치 Xamarin과 함께 번들로 제공되는 것처럼 사용할 수 있습니다.

말하자면, 자신을 만들기 전에 Xamarin 바인딩 Github 리포지토리를 살펴보는 것이 좋습니다.

지원 및 커뮤니티

마지막으로 지원 및 예제에 대한 액세스는 프레임워크를 선택하는 데 매우 중요한 요소입니다. Xamarin은 오랫동안 사용되어 왔기 때문에 오늘날 커뮤니티의 규모는 꽤 큽니다.

Google에서 정보를 검색하면 일반적으로 상당한 수의 답변이 표시되며(팁: Xamarin의 조상인 monotouch 및 monodroid도 검색해 보세요) Xamarin은 웹 사이트에서 많은 예제와 훌륭한 문서를 제공합니다.

또한 Xamarin은 실제로 공급업체 API에 대한 바인딩일 뿐이므로 Apple과 Google의 문서는 항상 관련성이 있으며 많은 질문에 답할 것입니다. 그런 다음 자신의 MVVMCross 서비스를 만들어 공유 코드 내에서 공급업체 API를 추상화할 수 있습니다.

지난 3월 Microsoft가 인수한 Xamarin의 미래에 대해서는 앞으로 나아갈 수 밖에 없을 것입니다. 그 판매 이후, 매칭이 자유로운 모델로 이동한 이후로 커뮤니티는 성장했고 지원도 향상되었으며 제품은 더 빠른 속도로 계속 개선되었습니다!

Xamarin의 미래는 밝습니다.

한번 붙어 준비하자!

나는 이 기사로 내가 벌레 통조림을 열 수 있다는 사실을 의식하고 있다. 이제 오해하지 마십시오. 고려할 가치가 있는 다른 옵션이 있으며 그렇게 하도록 초대합니다. 제 우려가 귀하와 다를 수 있기 때문입니다.

6주 일정이 있고 4개월 후에도 앱이 준비되지 않으면 당첨이 되지 않는다는 점을 명심하십시오. 그렇게 하면 사내에서 누군가를 훈련시키거나 지식이 풍부한 누군가를 고용하는 데 2개월 반과 많은 돈이 남게 됩니다. 그 시점에서 "네이티브" 앱 구축을 주장하는 것은 프로젝트의 운명에 상당히 해로울 수 있습니다.

Xamarin 및 이러한 동반 기술은 사용자가 관심을 갖고 필요한 것을 정확히 제공합니다. 이 기사가 차기 모바일 앱을 위해 선택할 수 있는 프레임워크에 대해 정보에 입각한 결정을 내리는 데 도움이 되기를 바랍니다.

관련: 클린 아키텍처와 함께 MVVM을 사용하는 더 나은 Android 앱