WatchOS에서 Xamarin 부모 응용 프로그램 사용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

에 설명 된 부모 iPhone 앱 및 watch 확장 간의 통신을 GpsWatch 샘플합니다.Communicating between a watch extension and the parent iPhone app is demonstrated in the GpsWatch sample. 조사식 확장 상위 iOS 앱을 사용 하 여 해당 대신 일부 처리를 요청할 수는 OpenParentApplication 메서드.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 Kit App Extension

호출 된 WKInterfaceController.OpenParentApplication watch 앱 확장에 있습니다.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. 확인 합니다 error 응답에서 매개 변수 Action 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

다음 코드를 작성할 수 있습니다 watch 앱 확장 및 부모 iPhone 앱의 공통 집합을 참조할 수 있도록 NSUserDefaults: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 앱 및 watch 확장을 공통 파일 경로 사용 하 여 파일을 공유할 수도 있습니다.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) 부모 앱 및 watch 앱 간의 데이터 또는 명령을 전달 합니다.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");

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