Come controllare se iCloud è configurata a livello di codice
Domanda
Questa è la frase da Apple Documenti: "Se iCloud non è configurato, chiedere agli utenti se vogliono configurarlo (e, preferibilmente, trasferirli su Impostazioni di avvio se vogliono configurare iCloud)."
Come posso controllare se iCloud è configurato o meno e come le impostazioni di lancio per icloud?
Soluzione
Modifica
Se ci si rivolge iOS6 o superiore è possibile utilizzare [[NSFileManager defaultManager] ubiquityIdentityToken];
. Per esempio l'utilizzo consultare @Dj S' risposta :).
E 'più veloce e più facile che la soluzione originale che è stato pensato per le persone destinate iOS5 e soprattutto
risposta originale
Come documentato in iOS App Programming guide - iCloud bagagli . Che possono essere controllati chiedendo l'URL del contenitore ubiquità al file manager:)
Fino a quando si fornisce un identificatore contenitore di ubiquità valida sotto metodo deve restituire 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;
}
Tuttavia, ho trovato che URLForUbiquityContainerIdentifier:
potrebbe richiedere alcuni secondi la prima volta all'interno di una sessione (ho usato in iOS5 quindi le cose potrebbero essere diverse ora). Mi ricordo di usare qualcosa di simile a questo:
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];
}
});
});
Altri suggerimenti
Proprio per integrare la risposta di cui sopra,
se solo si vuole sapere se iCloud è disponibile per la vostra applicazione,
per esempio
1. nessun account iCloud è configurato, o
2. I documenti e dati è disattivata (per tutte le applicazioni), o
3. I documenti e dati è disattivata per la vostra applicazione solo
quindi è possibile utilizzare NSFileManager's ubiquityIdentityToken
per iOS 6 e superiori .
Se il valore è pari a zero, quindi account iCloud non è configurato. In caso contrario, account iCloud è configurato.
id token = [[NSFileManager defaultManager] ubiquityIdentityToken];
if (token == nil)
{
// iCloud is not available for this app
}
else
{
// iCloud is available
}
Si noti che in base al Documenti di Apple , si può chiamare dal thread principale.
Poiché questo metodo restituisce in tempi relativamente brevi, si può chiamare al momento del lancio e si può chiamare da filo conduttore della tua app.