Apple Docsからの文章は次のとおりです。「iCloudが構成されていない場合は、ユーザーに構成するかどうかを尋ねます(iCloudを構成する場合は、できれば、ユーザーを起動設定に転送します)。」
iCloudが設定されているかどうかを確認するにはどうすればよいですか?iCloudの設定を起動するにはどうすればよいですか?
編集:
iOS6以降をターゲットにしている場合は、を使用できます[[NSFileManager defaultManager] ubiquityIdentityToken];
。使用例については、@DjSの回答を参照 してください:)。
iOS5以降をターゲットとする人々を対象とした元のソリューションよりも高速で簡単です
元の回答iOSアプリプログラミングガイド-iCloudストレージ
に記載されています。これは、ユビキタスコンテナのURLをファイルマネージャに問い合わせることで確認できます:)
以下の有効なユビキタスコンテナ識別子を指定する限り、メソッドはYESを返す必要があります
- (BOOL) isICloudAvailable
{
// Make sure a correct Ubiquity Container Identifier is passed
NSURL *ubiquityURL = [[NSFileManager defaultManager]
URLForUbiquityContainerIdentifier:@"ABCDEFGHI0.com.acme.MyApp"];
return ubiquityURL ? YES : NO;
}
URLForUbiquityContainerIdentifier:
ただし、セッション内で初めて数秒かかる場合があることがわかりました(iOS5で使用したため、現在は状況が異なる可能性があります)。私はこのようなものを使用したことを覚えています:
dispatch_queue_t backgroundQueue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue,^{
BOOL isAvailable = [self isICloudAvailable]
/* change to the main queue if you want to do something with the UI. For example: */
dispatch_async(dispatch_get_main_queue(),^{
if (!isAvailable){
/* inform the user */
UIAlertView *alert = [[UIAlertView alloc] init...]
[alert show];
[alert release];
}
});
});
上記の答えを補足するために、アプリケーションでiCloudが利用可能かどうかだけを知りたい場合は、たとえば
、1。iCloudアカウントが設定されていない、
2。ドキュメントとデータが無効になっている(すべてのアプリで)、または
3.ドキュメントとデータアプリでのみ無効になっています
NSFileManager's ubiquityIdentityToken
その後、iOS6以降で使用できます。
値がnilの場合、iCloudアカウントは構成されていません。それ以外の場合は、iCloudアカウントが設定されます。
id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
if (token == nil)
{
// iCloud is not available for this app
}
else
{
// iCloud is available
}
Appleのドキュメントによると、メインスレッドから呼び出すことができることに注意してください。
このメソッドは比較的迅速に返されるため、起動時に呼び出すことができ、アプリのメインスレッドから呼び出すことができます。