MMWormhole 以外に、iPhone と Apple Watch の間で基本的なデータをやり取りする方法があるかどうか疑問に思っていました。既存の公式の Apple フレームワークでこれが許可されているかどうか知っていますか?
5 に答える
可能です。
参照: WatchKit Doc の
Watch アプリと iPhone の拡張機能の間でデータを共有することについての段落があります。
最初の段落を引用します。
含まれている iOS アプリとのデータの共有
iOS アプリと WatchKit 拡張機能が同じデータに依存している場合は、共有アプリ グループを使用してそのデータを保存します。アプリ グループは、複数のプロセスがアクセスできる安全なコンテナーです。WatchKit 拡張機能と iOS アプリは別々のサンドボックス環境で実行されるため、通常、ファイルを共有したり、互いに直接通信したりすることはありません。アプリ グループを使用すると、2 つのプロセスがファイルやユーザーの既定の情報を共有できます。
私が理解していることから、MMWormhole は、2 つのバイナリ間でリアルタイムに近いデータ変更を行う場合に便利です。この方法では、iPhone アプリで保存されたデータにアクセスして、Watch アプリで読み取ることができます。
グループを使用して、iPhone と iWatch の間でデータを渡すことができます。
基本的に、NSUserDefaults を使用してデータを共有できます。
ただし、そのためには、以下の手順を参照して有効にする必要があります: 1)両方のプロジェクトターゲットで機能セクションを開きます
2) そのセクションからアプリ グループを開きます
3) group.test.demo という名前の + ボタンをクリックしてコンテナーを追加します。
それを実現するためのサンプルコード。
iPhone アプリのコードで
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults setObject:@"tejas" forKey:@"name"];
現在、値「tejas」がキー「name」に設定されています
それを取得するコード
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]initWithSuiteName:@"group.test.demo"];
[myDefaults objectForKey:@"name"];
幸運を祈ります:)
WKInterfaceControllerのドキュメントを確認するopenParentApplication:reply:
と、バックグラウンドでホスト アプリと通信できるメソッドが呼び出されていることがわかります。
ウォッチ コネクティビティを使用します。
// 1. In .m viewcontroller on phone & interface controller on iwatch
#import <WatchConnectivity/WatchConnectivity.h>
@interface IController()<WCSessionDelegate>
@end
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];}
// 2. Send Message - Phone or iWatch:
[[WCSession defaultSession] sendMessage:response
replyHandler:^(NSDictionary *reply) {
NSLog(@"%@",reply);
}
errorHandler:^(NSError *error) {
NSLog(@"%@",error);
}
];
// 3. Receive Message - Phone or iWatch
- (void)session:(WCSession *)session didReceiveMessage: (NSDictionary<NSString *, id> *)message
{
}