Xamarin에서 watchOS 부모 응용 프로그램 작업Working with the watchOS Parent Application in Xamarin

중요

아래 예제를 사용 하 여 부모 응용 프로그램에 액세스 하는 것은 watchOS 1 watch 앱 에서만 작동 합니다.Accessing the parent application using the examples below only works on watchOS 1 watch apps.

Watch 앱과 함께 제공 되는 iOS 앱 간에 통신 하는 방법에는 여러 가지가 있습니다.There are different ways to communicate between the watch app and the iOS app that it is bundled with:

  • 조사식 확장은 iPhone의 백그라운드에서 실행 되는 부모 앱에 대해 메서드를 호출할 수 있습니다.Watch extensions can call a method against the parent app that runs in the background on the iPhone.

  • 시청 확장은 부모 iPhone 앱과 함께 저장소 위치를 공유할 수 있습니다.Watch extensions can share a storage location with the parent iPhone app.

  • 사용자를 앱의 특정 인터페이스 컨트롤러에 보내서 사용자를 Watch 앱에 전달 하기 위해 핸드 오프를 사용 합니다.Using Handoff to pass data from a Glance or Notification to the Watch app, sending the user to a specific interface controller in the app.

부모 앱을 컨테이너 앱이 라고도 하기도 합니다.The Parent App is also sometimes referred to as the Container App.

코드 실행Run Code

GpsWatch 샘플에서는 감시 확장과 부모 iPhone 앱 간의 통신을 보여 줍니다.Communicating between a watch extension and the parent iPhone app is demonstrated in the GpsWatch sample. 조사식 확장은 OpenParentApplication 메서드를 사용 하 여 부모 iOS 앱을 대신 처리 하도록 요청할 수 있습니다.Your watch extension can request the parent iOS app to do some processing on its behalf using the OpenParentApplication method.

이는 장기 실행 작업 (네트워크 요청 포함)에 특히 유용 합니다. 부모 iOS 앱만 백그라운드 처리를 활용 하 여 이러한 작업을 완료 하 고 검색 된 데이터를 조사식 확장에 액세스할 수 있는 위치에 저장할 수 있습니다.This is especially useful for long running tasks (including network requests) - only the parent iOS app can take advantage of background processing to complete these tasks and save the retrieved data in a location accessible to the watch extension.

Watch 키트 앱 확장Watch Kit App Extension

Watch 앱 확장에서 WKInterfaceController.OpenParentApplication를 호출 합니다.Call the WKInterfaceController.OpenParentApplication in your watch app extension. 메서드 요청이 성공적으로 전송 되었는지 여부를 나타내는 bool을 반환 합니다.It returns a bool that indicates whether the method request was sent successfully or not. 응답 Actionerror 매개 변수를 확인 하 여 iPhone 앱에서 실행 되는 메서드 중에 발생 한 내용이 있는지 확인 합니다.Check the error parameter in the response Action to determine if any occurred during the method running in the iPhone app.

WKInterfaceController.OpenParentApplication (new NSDictionary (), (replyInfo, error) => {
    if(error != null) {
        Console.WriteLine (error);
        return;
    }
    Console.WriteLine ("parent app responded");
    // do something with replyInfo[] dictionary
});

iOS 앱iOS App

Watch 앱 확장의 모든 호출은 iPhone 앱의 HandleWatchKitExtensionRequest 메서드를 통해 라우팅됩니다.All calls from a watch app extension are routed through the iPhone app's HandleWatchKitExtensionRequest method. Watch 앱에서 다양 한 요청을 수행 하는 경우이 메서드는 userInfo 사전을 쿼리하여 요청을 처리 하는 방법을 결정 해야 합니다.If you are making different requests in the watch app then this method will need to query the userInfo dictionary to determine how to process the request.

[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
    // ... other AppDelegate methods
    public override void HandleWatchKitExtensionRequest
        (UIApplication application, NSDictionary userInfo, Action<NSDictionary> reply)
    {
        var status = 2;
        // do something in the background, and respond
        reply (new NSDictionary (
            "count", NSNumber.FromInt32 ((int)status),
            "value2", new NSString("some-info")
            ));
    }
}

공유 저장소Shared Storage

앱 그룹 을 구성 하는 경우 iOS 8 확장 (감시 확장 포함)에서 부모 앱과 데이터를 공유할 수 있습니다.If you configure an app group then iOS 8 extensions (including watch extensions) can share data with the parent app.

NSUserDefaultsNSUserDefaults

다음 코드는 일반적인 NSUserDefaults집합을 참조할 수 있도록 watch 앱 확장과 부모 iPhone 앱 모두에 작성할 수 있습니다.The following code can be written in both the watch app extension and the parent iPhone app so that they can reference a common set of NSUserDefaults:

NSUserDefaults shared = new NSUserDefaults(
        "group.com.your-company.watchstuff",
        NSUserDefaultsType.SuiteName);

// set values
shared.SetInt (2, "count");
shared.Synchronize ();

// get values
shared.Synchronize ();
var count = shared.IntForKey ("count");

파일Files

IOS 앱 및 감시 확장은 공통 파일 경로를 사용 하 여 파일을 공유할 수도 있습니다.The iOS app and watch extension can also share files using a common file path.

var FileManager = new NSFileManager ();
var appGroupContainer =
            FileManager.GetContainerUrl ("group.com.your-company.watchstuff");
var appGroupContainerPath = appGroupContainer.Path;
Console.WriteLine ("agcpath: " + appGroupContainerPath);
// use the path to create and update files

참고: 경로를 null 하는 경우 앱 그룹 구성을 확인 하 여 프로 비전 프로필이 올바르게 구성 되 고 개발 컴퓨터에 다운로드/설치 되었는지 확인 합니다.Note: if the path is null then check the app group configuration to ensure the provisioning profiles have been configured correctly and have been downloaded/installed on the development computer.

자세한 내용은 앱 그룹 기능 설명서를 참조 하세요.For more information, please see the App Group Capabilities documentation.

WormHoleSharpWormHoleSharp

WatchOS 1에 대 한 인기 있는 오픈 소스 메커니즘 ( Mmwormhole 홀기반)은 부모 앱과 시청 앱 간에 데이터 또는 명령을 전달 합니다.A popular open-source mechanism for watchOS 1 (based on MMWormHole) to pass data or commands between the parent app and the watch app.

IOS 앱 및 조사식 확장에서 다음과 같은 앱 그룹을 사용 하 여 웜 홀을 구성할 수 있습니다.You can configure WormHole using an app group like this in your iOS app and watch extension:

// AppDelegate (iOS) or InterfaceController (watch extension)
Wormhole wormHole;
// ...
wormHole = new Wormhole ("group.com.your-company.watchstuff", "messageDir");

WormHoleSharp 버전 C# 을 다운로드합니다.Download the C# version WormHoleSharp.