IOS8と拡張機能でAppleはアプリグループコンテナを導入しました( 詳細はこちら )。
NSFileManager
の_containerURLForSecurityApplicationGroupIdentifier:
_メソッドを介して使用します。 AppStore(iOS8とiOS7の両方)での本番環境でうまく機能します。問題は、チームがXcode 6.1 (6A1052d)
に更新されたため、メソッドがシミュレーターでnil
を返すことです。
たくさん検索しましたが、手がかりを見つけることができませんでした。これでも 質問 または これ ここでは適用されません。
NSFileManager
の_containerURLForSecurityApplicationGroupIdentifier:
_メソッドはシミュレーターで機能しますか?それを修正する方法はありますか?
私は自分の側でこの問題を解決することができました。ドキュメントには
アプリには、指定したアプリケーショングループのcom.Apple.security.application-groups資格が必要です。 https://developer.Apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/index.html#//Apple_ref/occ/instm/NSFileManager/containerURLForSecurityApplicationGroupIdentifier :
アプリのある時点で、アプリのターゲット/ビルド設定/コード署名/コード署名資格から資格ファイルを削除しました。デバッグとリリースの両方にYOUR_APP.entitlementsファイルを含める必要があります。私のデバッグにはそれが含まれていなかったので、シミュレーターで動作していませんでした
メソッドcontainerURLForSecurityApplicationGroupIdentifier:
デバイスとシミュレータの両方で動作します。
グループをサポートするためにデータを共有する両方のターゲット(またはたとえばTargetとWatchKit Extension)をセットアップしていて、それがnilを返し続ける場合は、ターゲットの設定を確認することをお勧めします。
ターゲット設定>一般>チーム> yourCompany署名チームをここで選択する必要があります。警告とFix This Issueボタンがある場合は、問題を解決してください:)
[ターゲット設定]> [機能]> [アプリグループ]> [オン] +は、group.com.yourcompany.yourapp.sharedContainterグループ名(「sharedContainer」が私の選択名です)が選択され、黒(赤ではない)で表示されます。赤の場合、または警告が表示されて[この問題を修正]ボタンがある場合は、グループを更新するか、別のグループを作成します。
ターゲット設定>ビルド設定>コード署名>コード署名エンタイトルメント:デバッグとリリースの両方のエンタイトルメントファイルを指します(yourApp/yourApp.entitlementsなど)
ターゲット設定>ビルド設定>コード署名>コード署名ID:IDが上記で選択したチームの一部であることを確認してください。私はiOS Developerを使用します。
ターゲット設定>ビルド設定>コード署名>プロビジョニングプロファイル:上記のように、使用しているPPが必要なチームのものであることを確認してください。自動に設定しました。
両方のターゲットデータの共有についてそれらを確認してください。
お役に立てば幸いです
ドキュメントは明確ではありませんが、グループ識別子では大文字と小文字が区別されることがわかりました。
ContainerURLForSecurityApplicationGroupIdentifierは、xcode6.2を使用して実際のデバイスとシミュレーターの両方で機能することがわかりました。私もnilを取得したため、このスレッドに出くわしましたが、根本的な原因は「アプリグループ」名の入力エラーであることがわかりました。
さらに、チェックが必要なリストは次のとおりです。
メソッドcontainerURLForSecurityApplicationGroupIdentifier:
私のシミュレーターで動作します。しかし、グループフォルダー内のすべてのファイルを削除すると(ユーザーがアプリでログアウトを実行した場合)、メソッドはXcode6.1の次の実行でnilを返します。これをXcode6.2とiOSSDK 8.2 Betaでもテストしましたが、機能しません。
コードは実際のデバイスで正常に実行されます。
私も上記の解決策を試しましたが成功しませんでした。
私の場合、このエラーの理由はファイル"。com.Apple.mobile_container_manager.metadata.plist"であることがわかりました。このディレクトリからファイルを取得した後、その中のすべてのファイルを削除しました。そのため、このファイルも削除されました。そして、このファイルを削除すると、アプリはnil
に対してcontainerURLForSecurityApplicationGroupIdentifier
を返します
だから私は自分のコードをこれに変更しました:
NSURL *groupPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YGGroupIdentifier];
NSArray *fileArray = [fileManager contentsOfDirectoryAtPath:[groupPath path] error:nil];
for (NSString *filename in fileArray) {
if (![filename hasPrefix:@".com"]) {
[fileManager removeItemAtPath:[[groupPath path] stringByAppendingPathComponent:filename] error:nil];
}
}
今では、シミュレーターでもうまく機能します。
私にとっては、iOS Team Provisioning Profile(Simulatorで実行する必要はありません)にいくつかの混乱がありました。
IPhoneでアプリを実行するには、最初にデバッグ環境用にiOS Team Provisioning Profileを再構成する必要がありました。 containerURLForSecurityApplicationGroupIdentifier:
の呼び出しは、デバイス上で完全に正常に機能しました。その後、私はシミュレーターに戻り、-そこに行きます-それもまた機能しました。