요약 - 9장. 플랫폼별 API 호출
참고 항목
이 책은 2016년 봄에 출간되었으며, 그 후로 업데이트되지 않았습니다. 이 책의 많은 내용이 지금까지도 무척 유용하나, 일부 내용은 오래되었고 올바르지 않거나 완전하지 않은 주제도 있습니다.
플랫폼에 따라 달라지는 일부 코드를 실행해야 하는 경우도 있습니다. 이 장에서는 기법에 대해 살펴봅니다.
공유 자산 프로젝트에서 전처리
Xamarin.Forms 공유 자산 프로젝트는 C# 전처리기 지시문 #if
, #elif
및 endif
를 사용하여 플랫폼마다 다른 코드를 실행할 수 있습니다. 이는 PlatInfoSap1에 설명되어 있습니다.
그러나 결과 코드는 복잡하고 읽기 힘들 수 있습니다.
공유 자산 프로젝트의 병렬 클래스
SAP에서 플랫폼별 코드를 실행하는 보다 구조화된 접근 방식은 PlatInfoSap2 샘플에 설명되어 있습니다. 각 플랫폼 프로젝트는 동일하게 명명된 클래스 및 메서드가 있지만 특정 플랫폼에 대해 구현됩니다. 그런 다음 SAP는 단순히 클래스를 인스턴스화하고 메서드를 호출합니다.
DependencyService 및 이식 가능한 클래스 라이브러리
참고 항목
이식 가능한 클래스 라이브러리는 .NET Standard 라이브러리로 대체되었습니다. 이 책의 모든 샘플 코드는 .NET Standard 라이브러리를 사용하도록 변환되었습니다.
라이브러리는 일반적으로 애플리케이션 프로젝트의 클래스에 액세스할 수 없습니다. 이 제한은 PlatInfoSap2에 표시된 기법이 라이브러리에서 사용되지 않도록 하는 것처럼 보입니다. 그러나 Xamarin.Forms에는 .NET 리플렉션을 사용하여 라이브러리에서 애플리케이션 프로젝트의 공용 클래스에 액세스하는 DependencyService
라는 클래스가 있습니다.
라이브러리는 각 플랫폼에서 사용해야 하는 멤버를 사용하여 interface
를 정의해야 합니다. 그런 다음 각 플랫폼에 해당 인터페이스의 구현이 포함됩니다. 인터페이스를 구현하는 클래스는 어셈블리 수준에서 DependencyAttribute를 사용하여 식별해야 합니다.
그런 다음 라이브러리는 DependencyService
의 제네릭 Get
메서드를 사용하여 인터페이스를 구현하는 플랫폼 클래스의 인스턴스를 가져옵니다.
이는 DisplayPlatformInfo 샘플에 설명되어 있습니다.
플랫폼별 소리 생성
MonkeyTapWithSound 샘플은 각 플랫폼에서 소리 생성 기능에 액세스하여 MonkeyTap 프로그램에 경고음을 추가합니다.