2015-09-18 8 views
7

デフォルトのXCodeテンプレートを使用してWatchKitアプリケーションを作成しました。 iOSターゲット、Watchkit App Target、Watchkit App Extension Targetにアプリグループの資格を追加しました。 (これはアプリのグループ名です:group.com.lombax.fiveminutes) その後、私は、iOSのAppとWatchKit拡張の両方で共有フォルダのURLにアクセスしようとしました:containerURLForSecurityApplicationGroupIdentifier:iPhoneとウォッチシミュレータで異なる結果を表示

拡張子:

@implementation ExtensionDelegate 

- (void)applicationDidFinishLaunching { 
    // Perform any final initialization of your application. 
    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
} 

iOSのアプリケーション:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
// ... 
} 

しかし、test NSURLが異なります。

iOSでは:

ファイル:///ユーザ/ロンバルド/ライブラリ/開発/ CoreSimulator /デバイス/ 38B983DB-342F-4A47-8C26-5D2C92CDB666 /データ/コンテナ/共有/ APPGROUP/8DEE182E-AFE6-47DD-BA2B-6B0520158A8B /ウォッチの

ファイル:///ユーザ/ロンバルド/ライブラリ/開発/ CoreSimulator /デバイス/ BF52D613-25FF-4092-A5B2-9C3F1B616160 /データ/コンテナ/共有/ APPGROUP/CECB5EFC-7FBD-4C84-A878-1314CB7CF211/

このため、iOS AppとWatchKit Extensionの間でデータを共有できません。

私はApple WatchでWatchOS 2.0を使用していないため、実際のデバイスでは試してみません。 アドバイスはありますか?

UPDATE おかげで、私はいくつかの他のテストでした:WatchOS 2インストール

  • を、問題はまだ実際のデバイス上で存続します。

この私のiPhoneのための店のURLです:*

NSURL @ "ファイル:///民間の/ var /モバイル/コンテナ/共有/ APPGROUP/3D05D159-94D6-409C-9A38 -90E0830D0C3F/FiveMinutes.sqlite "

そして、これは私の腕時計のための店のURLです:*

NSURL @" ファイル:/// PRIVAT Eの/ var /モバイル/コンテナ/共有/ APPGROUP/F1E89377-F456-4FC2-BAAC-3DD705EF381A/FiveMinutes.sqlite」

2つのアプリが読み込み、へ-から二つの異なる.sqliteファイルを書き込みます。シミュレータ上で

  • 私はハードコードのURLの1つが、iOSのシミュレータとウォッチシミュレータの両方が同じ.sqliteファイルを書き込み、読み込み、コンテンツを共有することができます。

URL:ファイル:ウォッチの拡張子は、iOSのパスに書き込むことができないので、これは実際のデバイス上不可能です///民間の/ var /モバイル/コンテナ/共有/ APPGROUP/3D05D159-94D6 -409C-9A38-90E0830D0C3F/FiveMinutes.sqlite options :(null)...エラーを返しましたError Domain = NSCocoaErrorDomain Code = 512「ファイルを保存できませんでした」 UserInfo = {理由=ファイルの作成に失敗しました。コード= 2} userInfo辞書{ 理由= "ファイルを作成できませんでした、コード= 2"; }

+0

しかし、実際にファイルを配置してアクセスしようとしましたか?神はどのようにシミュレータが動作し、どのフォルダを使用するのかを知っています。 watchOS 2.0といえばそれらは現在ネイティブアプリです。アプリを見る権利を追加するべきではありませんか? – Yaroslav

+0

はい、ファイルを書き込もうとしましたが、別の場所に置かれました.iOSは時計ファイルにアクセスできず、watchはiOSファイルにアクセスできません。 iOSアプリ、時計アプリ、時計拡張機能にエンタイトルメントを追加しました。エンタイトルメント文字列を何か別のものに変更すると、返されるNSURLはゼロになるため、エンタイトルメントはうまく追加されたようです – LombaX

答えて

12

[OK]を私は私の答えを見つけたと思います。 Watch OS 2に移行すると、Apple Watchで直接拡張コードが実行されるようになりました。したがって、2つのデバイスが同じストレージを共有していないことは明らかです。

私がやった最初のことは、ベースのiOSプロジェクトから開始して、Watch OS 1(旧バージョン)のApp Targetを追加するという、新しいプロジェクトを作成することでした。 は、この場合、ディレクトリは同一であったと彼らが通信することができる:

ウォッチパス:ファイル:///ユーザ/ロンバルド/ライブラリ/開発/ CoreSimulator /デバイス/ BF52D613-25FF-4092-A5B2-9C3F1B616160 /データ/コンテナ/共有/ APPGROUP/30B39103-CEEB-4C64-9531-FB27DC40180D/

iOSのパスファイル:///ユーザ/ロンバルド/ライブラリ/開発/ CoreSimulator /デバイス/ BF52D613-25FF-4092-A5B2-9C3F1B616160/data/Containers/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

次に、私はすべてのプログラマーがdo:ドキュメントを読んでください。

あなたの拡張子は、今のAppleウォッチ上のファイルやデータを格納します。 WatchOS 2移行ガイドのFIRST PAGEではこの文があります。 WatchアプリまたはWatchKit拡張バンドルに含まれていないデータは、ネットワークから、またはユーザーのiPhoneで実行されているコンパニオンiOSアプリからフェッチする必要があります。共有グループコンテナを使用してiOSアプリとファイルを交換することはできません。ファイルを取得するには、Apple Watchにワイヤレスで転送する必要があります。

関連する問題