Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if User is Logged into iCloud? Swift/iOS

Is there a way for me to check and see if a user is logged into iCloud when they open the app up? I want to be able to direct them to the settings page if they are not logged in, and if they are logged into iCloud and have used the app before - I want to skip the sign in page....

I looked into Apple's iCloud and Cloudkits documentation but was unable to find anything that would be of assistance! Is this even possible to do?

like image 235
pmoney13 Avatar asked Sep 01 '15 15:09

pmoney13


1 Answers

If you just want to know if the user is logged in to iCloud, the synchronous method can be used:

if FileManager.default.ubiquityIdentityToken != nil {     print("iCloud Available") } else {     print("iCloud Unavailable") } 

If the ubiquityIdentityToken is nil and you'd like to know why iCloud isn't available, you can use the asynchronous method:

CKContainer.default().accountStatus { (accountStatus, error) in     switch accountStatus {     case .available:         print("iCloud Available")     case .noAccount:         print("No iCloud account")     case .restricted:         print("iCloud restricted")     case .couldNotDetermine:         print("Unable to determine iCloud status")     } } 

Note that this requires the use of CloudKit, which requires the CloudKit entitlement:

<key>com.apple.developer.icloud-services</key> <array>     <string>CloudKit</string> </array> 

If you want to use the asynchronous method but don't care about why, you should check that accountStatus is available, rather than checking that it is not noAccount:

CKContainer.default().accountStatus { (accountStatus, error) in     if case .available = accountStatus {         print("iCloud Available")     } else {         print("iCloud Unavailable")     } } 
like image 144
Joseph Duffy Avatar answered Oct 11 '22 10:10

Joseph Duffy