다음을 통해 공유


요약 - 9장. 플랫폼별 API 호출

참고 항목

이 책은 2016년 봄에 출간되었으며, 그 후로 업데이트되지 않았습니다. 이 책의 많은 내용이 지금까지도 무척 유용하나, 일부 내용은 오래되었고 올바르지 않거나 완전하지 않은 주제도 있습니다.

플랫폼에 따라 달라지는 일부 코드를 실행해야 하는 경우도 있습니다. 이 장에서는 기법에 대해 살펴봅니다.

공유 자산 프로젝트에서 전처리

Xamarin.Forms 공유 자산 프로젝트는 C# 전처리기 지시문 #if, #elifendif를 사용하여 플랫폼마다 다른 코드를 실행할 수 있습니다. 이는 PlatInfoSap1에 설명되어 있습니다.

가변 형식 단락의 세 가지 스크린샷

그러나 결과 코드는 복잡하고 읽기 힘들 수 있습니다.

공유 자산 프로젝트의 병렬 클래스

SAP에서 플랫폼별 코드를 실행하는 보다 구조화된 접근 방식은 PlatInfoSap2 샘플에 설명되어 있습니다. 각 플랫폼 프로젝트는 동일하게 명명된 클래스 및 메서드가 있지만 특정 플랫폼에 대해 구현됩니다. 그런 다음 SAP는 단순히 클래스를 인스턴스화하고 메서드를 호출합니다.

DependencyService 및 이식 가능한 클래스 라이브러리

참고 항목

이식 가능한 클래스 라이브러리는 .NET Standard 라이브러리로 대체되었습니다. 이 책의 모든 샘플 코드는 .NET Standard 라이브러리를 사용하도록 변환되었습니다.

라이브러리는 일반적으로 애플리케이션 프로젝트의 클래스에 액세스할 수 없습니다. 이 제한은 PlatInfoSap2에 표시된 기법이 라이브러리에서 사용되지 않도록 하는 것처럼 보입니다. 그러나 Xamarin.Forms에는 .NET 리플렉션을 사용하여 라이브러리에서 애플리케이션 프로젝트의 공용 클래스에 액세스하는 DependencyService라는 클래스가 있습니다.

라이브러리는 각 플랫폼에서 사용해야 하는 멤버를 사용하여 interface를 정의해야 합니다. 그런 다음 각 플랫폼에 해당 인터페이스의 구현이 포함됩니다. 인터페이스를 구현하는 클래스는 어셈블리 수준에서 DependencyAttribute를 사용하여 식별해야 합니다.

그런 다음 라이브러리는 DependencyService의 제네릭 Get 메서드를 사용하여 인터페이스를 구현하는 플랫폼 클래스의 인스턴스를 가져옵니다.

이는 DisplayPlatformInfo 샘플에 설명되어 있습니다.

플랫폼별 소리 생성

MonkeyTapWithSound 샘플은 각 플랫폼에서 소리 생성 기능에 액세스하여 MonkeyTap 프로그램에 경고음을 추가합니다.