기존 Xamarin.Forms 앱 업데이트

다음 단계에 따라 기존 Xamarin.Forms 앱을 업데이트하여 통합 API를 사용하고 버전 1.3.1로 업데이트합니다.

Important

Xamarin.Forms 1.3.1은 통합 API를 지원하는 첫 번째 릴리스이므로 iOS 앱을 Unified로 마이그레이션하는 동시에 최신 버전을 사용하도록 전체 솔루션을 업데이트해야 합니다. 즉, 통합 지원을 위해 iOS 프로젝트를 업데이트하는 것 외에도 솔루션의 모든 프로젝트에서 코드를 편집해야 합니다.

업데이트는 다음 두 단계로 수행됩니다.

  1. 마이그레이션 도구에서 Mac용 Visual Studio 빌드를 사용하여 iOS 앱을 통합 API로 마이그레이션합니다.

    • 마이그레이션 도구를 사용하여 프로젝트를 자동으로 업데이트합니다.

    • iOS 앱(특히 사용자 지정 렌더러 또는 종속성 서비스 코드)을 업데이트하는 지침에 설명된 대로 iOS 네이티브 API를 업데이트합니다.

  2. 전체 솔루션을 Xamarin.Forms 버전 1.3으로 업데이트합니다.

    1. Xamarin.Forms 1.3.1 NuGet 패키지를 설치합니다.

    2. 공유 코드에서 App 클래스를 업데이트합니다.

    3. AppDelegate iOS 프로젝트에서 업데이트합니다.

    4. MainActivity Android 프로젝트에서 업데이트합니다.

    5. MainPage Windows 전화 프로젝트에서 업데이트합니다.

1. iOS 앱(통합 마이그레이션)

마이그레이션의 일부로 Xamarin.Forms를 통합 API를 지원하는 버전 1.3으로 업그레이드해야 합니다. 올바른 어셈블리 참조를 만들려면 먼저 통합 API를 사용하도록 iOS 프로젝트를 업데이트해야 합니다.

마이그레이션 도구

iOS 프로젝트가 선택되도록 클릭한 다음, Xamarin.iOS 통합 API로 프로젝트 > 마이그레이션을 선택하고 표시되는 경고 메시지에 동의합니다.

Choose Project > Migrate to Xamarin.iOS Unified API... and agree to the warning message that appears

그러면 자동으로 다음이 수행됩니다.

  • 통합 64비트 API를 지원하도록 프로젝트 유형을 변경합니다.
  • 프레임워크 참조를 Xamarin.iOS 로 변경합니다(이전 monotouch 참조 대체).
  • 코드에서 네임스페이스 참조를 변경하여 접두사를 MonoTouch 제거합니다.
  • 통합 API에 올바른 빌드 대상을 사용하도록 csproj 파일을 업데이트합니다.

수정할 다른 오류가 없도록 프로젝트를 정리 하고 빌드 합니다. 추가 작업이 필요하지 않습니다. 이러한 단계는 통합 API 문서에서 자세히 설명합니다.

네이티브 iOS API 업데이트(필요한 경우)

추가 iOS 네이티브 코드(예: 사용자 지정 렌더러 또는 종속성 서비스)를 추가한 경우 추가 수동 코드 수정을 수행해야 할 수 있습니다. 앱을 다시 컴파일하고 필요한 변경 내용에 대한 추가 정보는 기존 iOS 앱 업데이트 지침을 참조하세요. 이러한 팁 은 필요한 변경 내용을 식별하는 데도 도움이 됩니다.

2. Xamarin.Forms 1.3.1 업데이트

iOS 앱이 통합 API로 업데이트되면 나머지 솔루션은 Xamarin.Forms 버전 1.3.1로 업데이트해야 합니다. 다음 내용이 포함됩니다.

  • 각 프로젝트에서 Xamarin.Forms NuGet 패키지를 업데이트합니다.
  • 새 Xamarin.FormsApplication, FormsApplicationDelegate (iOS), (Android) FormsApplicationActivityFormsApplicationPage (Windows 전화) 클래스를 사용하도록 코드를 변경합니다.

이러한 단계는 아래에 설명되어 있습니다.

2.1 모든 프로젝트에서 NuGet 업데이트

솔루션의 모든 프로젝트(있는 경우), iOS, Android 및 Windows 전화 NuGet 패키지 관리자 사용하여 Xamarin.Forms를 1.3.1 시험판으로 업데이트합니다. Xamarin.Forms NuGet 패키지를 삭제하고 다시 추가하여 버전 1.3으로 업데이트하는 것이 좋습니다.

참고 항목

Xamarin.Forms 버전 1.3.1은 현재 시험판에 있습니다. 즉, 최신 시험판 버전을 보려면 NuGet에서 시험판 옵션(Mac용 Visual Studio 체크 박스 또는 Visual Studio의 드롭다운 목록을 통해)을 선택해야 합니다.

Important

Visual Studio를 사용하는 경우 최신 버전의 NuGet 패키지 관리자 설치되어 있는지 확인합니다. Visual Studio의 이전 버전의 NuGet은 통합 버전의 Xamarin.Forms 1.3.1을 올바르게 설치하지 않습니다. 도구 > 확장 및 업데이트...이동하고 설치된 목록을 클릭하여 Visual Studio용 NuGet 패키지 관리자 버전이 2.8.5 이상인지 검사. 이전 버전인 경우 업데이트 목록을 클릭하여 최신 버전을 다운로드합니다.

NuGet 패키지를 Xamarin.Forms 1.3.1로 업데이트한 후 각 프로젝트에서 다음을 변경하여 새 Xamarin.Forms.Application 클래스로 업그레이드합니다.

2.2 이식 가능한 클래스 라이브러리(또는 공유 프로젝트)

다음을 수행 하려면 App.cs 파일을 변경합니다.

  • 이제 클래스가 App .에서 Application상속됩니다.
  • MainPage 속성은 표시하려는 첫 번째 콘텐츠 페이지로 설정됩니다.
public class App : Application // superclass new in 1.3
{
    public App ()
    {
        // The root page of your application
        MainPage = new ContentPage {...}; // property new in 1.3
    }

메서드를 GetMainPage 완전히 제거하고 대신 서브클래스에 Application 속성을 설정합니다MainPage.

또한 이 새로운 Application 기본 클래스는 OnStartOnSleepOnResume 애플리케이션의 수명 주기를 관리하는 데 도움이 되는 재정의를 지원합니다.

App 그런 다음, 아래 설명된 대로 각 앱 프로젝트의 새 LoadApplication 메서드에 클래스가 전달됩니다.

2.3 iOS 앱

다음을 수행 하려면 AppDelegate.cs 파일을 변경합니다.

  • 클래스는 이전에 상속된 것이 아니라 UIApplicationDelegate 상속됩니다 FormsApplicationDelegate .
  • LoadApplication 의 새 인스턴스를 사용하여 가 호출됩니다 App.
[Register ("AppDelegate")]
public partial class AppDelegate :
    global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init ();

        LoadApplication (new App ());  // method is new in 1.3

        return base.FinishedLaunching (app, options);
    }
}

2.3 Android 앱

다음을 수행 하려면 MainActivity.cs 파일을 변경합니다.

  • 클래스는 이전에 상속된 것이 아니라 FormsActivity 상속됩니다 FormsApplicationActivity .
  • LoadApplication 는 의 새 인스턴스를 사용하여 호출됩니다. App
[Activity (Label = "YOURAPPNAM", Icon = "@drawable/icon", MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
    global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        global::Xamarin.Forms.Forms.Init (this, bundle);

        LoadApplication (new App ()); // method is new in 1.3
    }
}

2.4 Windows 전화 앱

XAML과 codebehind 모두의 MainPage를 업데이트해야 합니다.

MainPage.xaml 파일을 변경하여 다음을 수행합니다.

  • 루트 XAML 요소는 .이어야 winPhone:FormsApplicationPage합니다.
  • xmlns:phone 특성을 다음으로 변경해야 합니다.xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"

업데이트된 예제는 아래에 나와 있습니다. 이러한 항목만 편집하면 됩니다(특성의 나머지 부분만 다시 변경해야 함기본 동일).

<winPhone:FormsApplicationPage
   ...
   xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
    ...>
</winPhone:FormsApplicationPage>

MainPage.xaml.cs 파일을 변경하여 다음을 수행합니다.

  • 클래스는 이전에 상속된 것이 아니라 PhoneApplicationPage 상속됩니다 FormsApplicationPage .
  • LoadApplication 는 Xamarin.Forms 클래스의 새 인스턴스를 사용하여 호출됩니다 App . Windows 전화 자체 App 클래스가 이미 정의되어 있으므로 이 참조를 완전히 한정해야 할 수 있습니다.
public partial class MainPage : global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3
{
    public MainPage()
    {
        InitializeComponent();
        SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;

        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3
    }
 }

문제 해결

경우에 따라 Xamarin.Forms NuGet 패키지를 업데이트한 후 이와 유사한 오류가 표시됩니다. NuGet 업데이트 프로그램이 csproj 파일에서 이전 버전에 대한 참조를 완전히 제거하지 않을 때 발생합니다.

YOUR_PROJECT.csproj: 오류: 이 프로젝트는 이 컴퓨터에서 누락된 NuGet 패키지를 참조합니다. NuGet 패키지 복원을 사용하도록 설정하여 다운로드합니다. 자세한 내용은 https://go.microsoft.com/fwlink/?LinkID=322105를 참조하세요. 누락된 파일이 .입니다. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)

이러한 오류를 해결하려면 텍스트 편집기에서 csproj 파일을 열고 아래 표시된 요소와 같이 이전 버전의 Xamarin.Forms를 참조하는 요소를 찾 <Target 습니다. csproj 파일에서 이 전체 요소를 수동으로 삭제하고 변경 내용을 저장해야 합니다.

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets'))" />
  </Target>

이러한 이전 참조가 제거되면 프로젝트가 성공적으로 빌드되어야 합니다.

고려 사항

앱이 하나 이상의 구성 요소 또는 NuGet 패키지를 사용하는 경우 기존 Xamarin.Forms 프로젝트를 클래식 API에서 새 통합 API로 변환할 때는 다음 사항을 고려해야 합니다.

구성 요소

애플리케이션에 포함된 모든 구성 요소도 통합 API로 업데이트해야 합니다. 그렇지 않으면 컴파일하려고 할 때 충돌이 발생합니다. 포함된 구성 요소의 경우 현재 버전을 통합 API를 지원하는 Xamarin 구성 요소 저장소의 새 버전으로 바꾸고 클린 빌드를 수행합니다. 작성자가 아직 변환하지 않은 구성 요소는 구성 요소 저장소에 32비트 경고만 표시합니다.

NuGet 지원

통합 API 지원과 함께 작동하도록 NuGet 변경에 기여한 반면 NuGet의 새 릴리스는 없으므로 NuGet에서 새 API를 인식하는 방법을 평가하고 있습니다.

그 때까지는 구성 요소와 마찬가지로 프로젝트에 포함된 NuGet 패키지를 통합 API를 지원하는 버전으로 전환하고 나중에 클린 빌드를 수행해야 합니다.

Important

"오류 3 동일한 Xamarin.iOS 프로젝트에 'monotouch.dll'과 'Xamarin.iOS.dll'을 모두 포함할 수 없습니다. 'Xamarin.iOS.dll'은 명시적으로 참조됩니다. 애플리케이션을 통합 API로 변환한 후 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'에서 'monotouch.dll'을 참조하지만 일반적으로 통합 API로 업데이트되지 않은 프로젝트에 구성 요소 또는 NuGet 패키지가 있기 때문입니다. 기존 구성 요소/NuGet을 제거하고 통합 API를 지원하는 버전으로 업데이트하고 클린 빌드를 수행해야 합니다.

Xamarin.iOS 앱의 64비트 빌드 사용

통합 API로 변환된 Xamarin.iOS 모바일 애플리케이션의 경우 개발자는 앱의 옵션에서 64비트 컴퓨터에 애플리케이션을 빌드할 수 있도록 설정해야 합니다. 64비트 빌드를 사용하도록 설정하는 방법에 대한 자세한 지침은 32/64비트 플랫폼 고려 사항 문서의 Xamarin.iOS 앱 64비트 빌드 사용 문서를 참조하세요.

요약

이제 Xamarin.Forms 애플리케이션이 버전 1.3.1로 업데이트되고 iOS 앱이 통합 API(iOS 플랫폼에서 64비트 아키텍처를 지원)로 마이그레이션됩니다.

위에서 설명한 것처럼 Xamarin.Forms 앱에 사용자 지정 렌더러 또는 종속성 서비스와 같은 네이티브 코드가 포함된 경우 통합 API에 도입된 새 형식을 사용하도록 업데이트해야 할 수도 있습니다.