私はCNContactsフレームワークでIOS 12まで完全にうまく機能したアプリを持っています。現在、IOS 13ベータ版でそれをテストしています。連絡先の権限を確認してアプリを削除し、権限を再度許可しました。これは、すべての連絡先を取得するために使用しているコードです。
NSError* error;
CNContactStore *store = [[CNContactStore alloc]init];
[store containersMatchingPredicate:[CNContainer predicateForContainersWithIdentifiers: @[store.defaultContainerIdentifier]] error:&error];
NSArray *keysToFetch =@[CNContactGivenNameKey, CNContactEmailAddressesKey, CNContactNoteKey];
CNContactFetchRequest *request = [[CNContactFetchRequest alloc]initWithKeysToFetch:keysToFetch];
BOOL success = [store enumerateContactsWithFetchRequest:request error:&error usingBlock:^(CNContact * __nonnull contact, BOOL * __nonnull stop){
NSLog(@"Contact Found: %@", contact.givenName);
}];
連絡先ストアは正常に構築され、エラーはありません。しかし、フェッチ要求を介して連絡先を取得しようとすると、success = NOが返され、次のエラーが表示されます。
Error Domain=CNErrorDomain Code=102 "(null)" UserInfo={CNKeyPaths=(
note
), CNInvalidRecords=(
"<CNContactFetchRequest: 0x60000189aa00: predicate=(null), keysToFetch=(\n givenName,\n emailAddresses,\n note\n), unifyResults=1, sortOrder=0>"
私はさまざまな調整を試みましたが、これをまったく機能させることができません。また、これが動作が変更されたと言うドキュメントも見つかりません。
他の誰かもこれを試したり、回避策を見つけたりしましたか?
IOS 13では、Appleにより、連絡先のメモにアクセスする場合に必要な新しい資格が追加されました。資格は com.Apple.developer.contacts.notes
。 App Storeに配置されるアプリに対して この資格を使用するためのアクセス許可を要求 できます。
追加された理由は、主にプライバシー上の理由によるものです。メモフィールドには、連絡先に関する情報を含めることができます。多くの場合、この情報は連絡先情報よりもはるかに機密性が高くなります。
2019-08-15以降、このエンタイトルメントはベータ版カテゴリに含まれています。つまり、iOS 13のリリース前に変更される可能性があり、エンタイトルメントの名前はXcodeでの開発者へのプレゼンテーションでおそらく安定します。
私にとって、これは「フェッチするキー」にCNContactNoteKeyが存在することが原因であると思われました。削除すると機能が回復します。
CNContactNoteKeyもあるようですね。
これをバグとしてAppleにフラグを立てました。
最新の com.Apple.developer.contacts.notes
iOS 13のエンタイトルメントは、XcodeおよびApple開発者ポータルのアプリ内ID設定で更新されていません。現在、同じ理由でブロックされています。誰かに教えてください。これを続行します。com.Apple.developer.contacts.notes
手動でエンタイトルメントにアクセスすると、次のエラーがスローされます。
プロビジョニングプロファイル「iOS Development Profile」には、com.Apple.developer.contacts.notesエンタイトルメントが含まれていません。
おかげで、
サナス