-
Notifications
You must be signed in to change notification settings - Fork 543
CloudKit tvOS xcode26.0 b1
Rolf Bjarne Kvinge edited this page Jun 20, 2025
·
2 revisions
#CloudKit.framework
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKAllowedSharingOptions.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKAllowedSharingOptions.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKAllowedSharingOptions.h 2025-04-19 04:15:34
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKAllowedSharingOptions.h 2025-05-25 02:08:39
@@ -43,11 +43,18 @@
@property (assign) CKSharingParticipantPermissionOption allowedParticipantPermissionOptions;
@property (assign) CKSharingParticipantAccessOption allowedParticipantAccessOptions;
+/// Defaults to `NO`. If set, the system sharing UI will allow the user to choose whether added participants can invite others to the share.
+/// Shares with ``.administrator`` participants will be returned as read-only to devices running OS versions prior to the ``.administrator`` role being introduced. The ``.administrator`` participants on these read-only shares will be returned as ``.privateUser``.
+@property (assign) BOOL allowsParticipantsToInviteOthers API_AVAILABLE(macos(26.0), ios(26.0), visionos(26.0)) API_UNAVAILABLE(tvos, watchos);
/*!
Standard allowed options are most permissive i.e. @c allowedParticipantPermissionOptions = @c CKSharingParticipantPermissionOptionAny
and @c allowedParticipantAccessOptions = @c CKSharingParticipantAccessOptionAny
*/
@property (class, readonly, strong, nonatomic) CKAllowedSharingOptions *standardOptions;
+
+/// Default value is `NO`. If set, the system sharing UI will allow the user to configure whether access requests are enabled on the share.
+@property (assign) BOOL allowsAccessRequests API_AVAILABLE(macos(26.0), ios(26.0), visionos(26.0)) API_UNAVAILABLE(tvos, watchos);
+
@end
NS_HEADER_AUDIT_END(nullability, sendability)
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKContainer.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKContainer.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKContainer.h 2025-05-03 21:59:05
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKContainer.h 2025-05-30 23:54:52
@@ -134,7 +134,7 @@
CKApplicationPermissionStatusGranted = 3,
} API_DEPRECATED("No longer supported. Please see Sharing CloudKit Data with Other iCloud Users.", macos(10.10, 14.0), ios(8.0, 17.0), tvos(9.0, 17.0), watchos(3.0, 10.0));
-typedef void(^CKApplicationPermissionBlock)(CKApplicationPermissionStatus applicationPermissionStatus, NSError * _Nullable error) API_DEPRECATED("No longer supported. Please see Sharing CloudKit Data with Other iCloud Users.", macos(10.10, 14.0), ios(8.0, 17.0), tvos(9.0, 17.0), watchos(3.0, 10.0));
+typedef void (^CKApplicationPermissionBlock)(CKApplicationPermissionStatus applicationPermissionStatus, NSError * _Nullable error) API_DEPRECATED("No longer supported. Please see Sharing CloudKit Data with Other iCloud Users.", macos(10.10, 14.0), ios(8.0, 17.0), tvos(9.0, 17.0), watchos(3.0, 10.0));
@interface CKContainer (ApplicationPermission)
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDatabase.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDatabase.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDatabase.h 2025-04-19 04:15:34
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDatabase.h 2025-05-25 02:53:29
@@ -37,13 +37,13 @@
*/
@interface CKDatabase (ConvenienceMethods)
-#pragma mark Record Convenience Methods
+#pragma mark - Record Convenience Methods
/*! @c CKFetchRecordsOperation and @c CKModifyRecordsOperation are the more configurable, @c CKOperation -based alternatives to these methods */
- (void)fetchRecordWithID:(CKRecordID *)recordID completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKRecord * _Nullable record, NSError * _Nullable error))completionHandler NS_SWIFT_ASYNC_NAME(record(for:));
- (void)saveRecord:(CKRecord *)record completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKRecord * _Nullable record, NSError * _Nullable error))completionHandler;
- (void)deleteRecordWithID:(CKRecordID *)recordID completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKRecordID * _Nullable recordID, NSError * _Nullable error))completionHandler NS_SWIFT_ASYNC_NAME(deleteRecord(withID:));
-#pragma mark Query Convenience Method
+#pragma mark - Query Convenience Method
/*! @discussion @c CKQueryOperation is the more configurable, @c CKOperation -based alternative to this method
* Queries can potentially return a large number of records, and the server will return those records in batches. This convenience API will only fetch the first batch of results (equivalent to using @c CKQueryOperationMaximumResults).
* If you would like to fetch all results, use @c CKQueryOperation and its @c CKQueryCursor instead.
@@ -53,14 +53,14 @@
- (void)performQuery:(CKQuery *)query inZoneWithID:(nullable CKRecordZoneID *)zoneID completionHandler:(void (NS_SWIFT_SENDABLE ^)(NSArray<CKRecord *> * _Nullable results, NSError * _Nullable error))completionHandler
CK_SWIFT_DEPRECATED("renamed to fetch(withQuery:inZoneWith:desiredKeys:resultsLimit:completionHandler:)", macos(10.10, 12.0), ios(8.0, 15.0), tvos(9.0, 15.0), watchos(3.0, 8.0));
-#pragma mark Record Zone Convenience Methods
+#pragma mark - Record Zone Convenience Methods
/*! @c CKFetchRecordZonesOperation and @c CKModifyRecordZonesOperation are the more configurable, @c CKOperation -based alternatives to these methods */
- (void)fetchAllRecordZonesWithCompletionHandler:(void (NS_SWIFT_SENDABLE ^)(NSArray<CKRecordZone *> * _Nullable zones, NSError * _Nullable error))completionHandler NS_SWIFT_ASYNC_NAME(allRecordZones());
- (void)fetchRecordZoneWithID:(CKRecordZoneID *)zoneID completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKRecordZone * _Nullable zone, NSError * _Nullable error))completionHandler NS_SWIFT_ASYNC_NAME(recordZone(for:));
- (void)saveRecordZone:(CKRecordZone *)zone completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKRecordZone * _Nullable zone, NSError * _Nullable error))completionHandler;
- (void)deleteRecordZoneWithID:(CKRecordZoneID *)zoneID completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKRecordZoneID * _Nullable zoneID, NSError * _Nullable error))completionHandler NS_SWIFT_ASYNC_NAME(deleteRecordZone(withID:));
-#pragma mark Subscription Convenience Methods
+#pragma mark - Subscription Convenience Methods
/*! @c CKFetchSubscriptionsOperation and @c CKModifySubscriptionsOperation are the more configurable, @c CKOperation -based alternative to these methods */
- (void)fetchSubscriptionWithID:(CKSubscriptionID)subscriptionID completionHandler:(void (NS_SWIFT_SENDABLE ^)(CKSubscription * _Nullable subscription, NSError * _Nullable error))completionHandler API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0), watchos(6.0)) NS_REFINED_FOR_SWIFT_ASYNC(2);
- (void)fetchAllSubscriptionsWithCompletionHandler:(void (NS_SWIFT_SENDABLE ^)(NSArray<CKSubscription *> * _Nullable subscriptions, NSError * _Nullable error))completionHandler API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0), watchos(6.0)) NS_SWIFT_ASYNC_NAME(allSubscriptions());
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDefines.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDefines.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDefines.h 2025-04-19 04:15:34
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKDefines.h 2025-05-25 02:08:40
@@ -43,6 +43,14 @@
#define CK_SUBCLASSING_RESTRICTED __attribute__((__objc_subclassing_restricted__))
#endif
+#ifndef CK_SUBCLASSING_EXTERNALLY_RESTRICTED
+ #if defined(CK_BUILDING_CK)
+ #define CK_SUBCLASSING_EXTERNALLY_RESTRICTED
+ #else
+ #define CK_SUBCLASSING_EXTERNALLY_RESTRICTED __attribute__((__objc_subclassing_restricted__))
+ #endif
+#endif
+
#ifndef CK_SUBCLASSING_DEPRECATED
#define CK_SUBCLASSING_DEPRECATED // we can't actually emit a warning, but heed this annotation anyway!
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKError.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKError.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKError.h 2025-05-03 21:59:04
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKError.h 2025-05-25 02:54:58
@@ -165,6 +165,9 @@
/*! The current account is in a state that may need user intervention to recover from. The user should be directed to check the Settings app. Listen for CKAccountChangedNotifications to know when to re-check account status and retry. */
CKErrorAccountTemporarilyUnavailable API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0)) = 36,
+ /// The user is already an invited participant on this share. They must accept the existing share invitation before continuing.
+ CKErrorParticipantAlreadyInvited API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0)) = 37,
+
};
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKNotification.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKNotification.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKNotification.h 2025-05-03 22:04:42
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKNotification.h 2025-05-25 02:08:39
@@ -22,29 +22,29 @@
@end
typedef NS_ENUM(NSInteger, CKNotificationType) {
- /// Generated by `CKQuerySubscription`s
+ /// Generated by ``CKQuerySubscription``s
CKNotificationTypeQuery = 1,
- /// Generated by `CKRecordZoneSubscription`s
+ /// Generated by ``CKRecordZoneSubscription``s
CKNotificationTypeRecordZone = 2,
/// Indicates a notification that a client had previously marked as read
CKNotificationTypeReadNotification = 3,
- /// Generated by `CKDatabaseSubscription`s
+ /// Generated by ``CKDatabaseSubscription``s
CKNotificationTypeDatabase API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0)) = 4,
} API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0));
/// Pushes from CloudKit servers contain both CloudKit-specific and APS-specific information.
/// APS-specific information includes elements like alerts, badges, sounds, categories, etc.
/// When receiving a push from CloudKit servers, the push may be delivered via multiple API flows.
-/// The flow(s) chosen will depend on the type of push requested (e.g. via the `CKSubscription`
+/// The flow(s) chosen will depend on the type of push requested (e.g. via the ``CKSubscription``
/// that triggered it and its configured `notificationInfo`).
///
/// Pushes with UI elements (alerts, badges, sounds):
/// These pushes are delivered via the `UserNotifications` framework, in the form of a `UNNotification`
/// Applications should use the `UserNotifications` framework to interact with the UI elements of this push.
-/// Applications may create a `CKNotification` from a `UNNotification` in their `UNUserNotificationCenterDelegate`:
+/// Applications may create a ``CKNotification`` from a `UNNotification` in their `UNUserNotificationCenterDelegate`:
///
/// func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification) async -> UNNotificationPresentationOptions {
/// let ckNotification = CKNotification(fromRemoteNotificationDictionary: notification.request.content.userInfo)
@@ -55,7 +55,7 @@
/// For example: `UIApplicationDelegate.application(_:didReceiveRemoteNotification:) async`
/// Applications do not need to interact with any UI element in the push payload argument, that's intended to be handled via the `UserNotifications` flow
/// (a push with both UI elements and `content-available` will be delivered via both API flows)
-/// Applications may create a `CKNotification` from the remote notification in their `UIApplicationDelegate`:
+/// Applications may create a ``CKNotification`` from the remote notification in their `UIApplicationDelegate`:
///
/// func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) async -> UIBackgroundFetchResult {
/// let ckNotification = CKNotification(fromRemoteNotificationDictionary: userInfo)
@@ -70,7 +70,7 @@
+ (nullable instancetype)notificationFromRemoteNotificationDictionary:(NSDictionary *)notificationDictionary;
-/// When you instantiate a `CKNotification` from a remote notification dictionary, you will get back a concrete
+/// When you instantiate a ``CKNotification`` from a remote notification dictionary, you will get back a concrete
/// subclass defined below. Use `notificationType` to avoid `as?` or `-isKindOfClass:` checks.
@property (readonly, assign, nonatomic) CKNotificationType notificationType;
@@ -83,9 +83,9 @@
/// Whether or not the notification fully represents what the server wanted to send.
///
-/// Push notifications have a limited size. In some cases, CloudKit servers may not be able to send you a full `CKNotification`'s worth of info in one push.
+/// Push notifications have a limited size. In some cases, CloudKit servers may not be able to send you a full ``CKNotification``'s worth of info in one push.
/// In those cases, `isPruned` returns `true`.
-/// The order in which properties are dropped from a push notification is defined in each `CKNotification` subclass below.
+/// The order in which properties are dropped from a push notification is defined in each ``CKNotification`` subclass below.
@property (readonly, assign, nonatomic) BOOL isPruned;
/// The ID of the subscription that caused this notification to fire.
@@ -118,7 +118,7 @@
CKQueryNotificationReasonRecordDeleted,
} API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0));
-/// A notification generated by a `CKQuerySubscription`
+/// A notification generated by a ``CKQuerySubscription``
///
/// `notificationType` == `.query`
/// When properties must be dropped (see @c isPruned), here's the order of importance. The most important properties are first, they'll be the last ones to be dropped.
@@ -161,7 +161,7 @@
@end
-/// A notification generated by a `CKRecordZoneSubscription`
+/// A notification generated by a ``CKRecordZoneSubscription``
///
/// `notificationType` == `.recordZone`
/// When properties must be dropped (see @c isPruned), here's the order of importance. The most important properties are first, they'll be the last ones to be dropped.
@@ -195,7 +195,7 @@
@end
-/// A notification generated by a `CKDatabaseSubscription`
+/// A notification generated by a ``CKDatabaseSubscription``
///
/// `notificationType` == `.database`
/// When properties must be dropped (see @c isPruned), here's the order of importance. The most important properties are first, they'll be the last ones to be dropped.
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKOperationGroup.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKOperationGroup.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKOperationGroup.h 2025-04-19 03:56:44
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKOperationGroup.h 2025-05-25 08:18:55
@@ -49,7 +49,7 @@
API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0))
CK_SUBCLASSING_DEPRECATED // should not be subclassed, or Sendable may no longer apply
// NS_SWIFT_SENDABLE on macos(13.3), macCatalyst(16.4), ios(16.4), tvos(16.4), watchos(9.4)
-@interface CKOperationGroup : NSObject <NSSecureCoding>
+@interface CKOperationGroup : NSObject <NSSecureCoding, NSCopying>
- (instancetype)init NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecord.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecord.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecord.h 2025-05-03 20:34:59
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecord.h 2025-05-30 23:54:51
@@ -23,15 +23,15 @@
/*! Use this constant for the recordType parameter when fetching User Records. */
CK_EXTERN CKRecordType const CKRecordTypeUserRecord API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0));
-/*! For use in queries to match on record properties. Matches `record.recordID`. Value is a `CKRecordID` */
+/*! For use in queries to match on record properties. Matches `record.recordID`. Value is a ``CKRecordID`` */
CK_EXTERN CKRecordFieldKey const CKRecordRecordIDKey API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0)) NS_REFINED_FOR_SWIFT;
-/*! For use in queries to match on record properties. Matches `record.creatorUserRecordID`. Value is a `CKRecordID` */
+/*! For use in queries to match on record properties. Matches `record.creatorUserRecordID`. Value is a ``CKRecordID`` */
CK_EXTERN CKRecordFieldKey const CKRecordCreatorUserRecordIDKey API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0)) NS_REFINED_FOR_SWIFT;
/*! For use in queries to match on record properties. Matches `record.creationDate`. Value is a `NSDate` */
CK_EXTERN CKRecordFieldKey const CKRecordCreationDateKey API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0)) NS_REFINED_FOR_SWIFT;
-/*! For use in queries to match on record properties. Matches `record.lastModifiedUserRecordID`. Value is a `CKRecordID` */
+/*! For use in queries to match on record properties. Matches `record.lastModifiedUserRecordID`. Value is a ``CKRecordID`` */
CK_EXTERN CKRecordFieldKey const CKRecordLastModifiedUserRecordIDKey API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0)) NS_REFINED_FOR_SWIFT;
/*! For use in queries to match on record properties. Matches `record.modificationDate`. Value is a `NSDate` */
CK_EXTERN CKRecordFieldKey const CKRecordModificationDateKey API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0)) NS_REFINED_FOR_SWIFT;
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecordZone.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecordZone.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecordZone.h 2025-04-19 04:15:33
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKRecordZone.h 2025-05-25 02:05:57
@@ -14,16 +14,36 @@
NS_HEADER_AUDIT_BEGIN(nullability, sendability)
typedef NS_OPTIONS(NSUInteger, CKRecordZoneCapabilities) {
- /*! This zone supports CKFetchRecordChangesOperation */
+ /// This zone supports `CKFetchRecordZoneChangesOperation`
CKRecordZoneCapabilityFetchChanges = 1 << 0,
- /*! Batched changes to this zone happen atomically */
+ /// Batched changes to this zone happen atomically
CKRecordZoneCapabilityAtomic = 1 << 1,
- /*! Records in this zone can be shared */
+ /// Records in this zone can be shared
CKRecordZoneCapabilitySharing API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0)) = 1 << 2,
- /*! This zone supports a single CKShare record that shares all records in the zone */
+ /// This zone supports a single `CKShare` record that shares all records in the zone
CKRecordZoneCapabilityZoneWideSharing API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0)) = 1 << 3,
} API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0));
+API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0))
+typedef NS_ENUM(NSInteger, CKRecordZoneEncryptionScope) {
+ /// Zone uses per-record encryption keys for any encrypted values on a record or share.
+ ///
+ /// This is the default encryption scope for a record zone.
+ CKRecordZoneEncryptionScopePerRecord,
+
+ /// Zone uses per-zone encryption keys for encrypted values across all records and the zone-wide share, if present.
+ ///
+ /// This is an optional optimization that can reduce the overall storage used by encryption keys in a zone.
+ /// Note that:
+ /// - Record zones using per-zone encryption only support zone-wide sharing.
+ /// - Encryption scope can only be assigned at zone creation and cannot be changed for the lifetime of the zone.
+ /// - The server will not return zones using per-zone encryption to device OS versions older than the corresponding API availability version.
+ /// - An older OS trying to overwrite an existing zone using per-zone encryption due to a naming collision will result in a `.serverRejectedRequest` error.
+ /// - On device OS upgrade, your application is responsible for fetching database changes via `CKFetchDatabaseChangesOperation` with a nil sync token to ensure it has
+ /// received all the zones available to it from the server.
+ CKRecordZoneEncryptionScopePerZone,
+};
+
CK_EXTERN NSString * const CKRecordZoneDefaultName API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0));
API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0))
@@ -40,18 +60,25 @@
@property (readonly, copy) CKRecordZoneID *zoneID;
-/*! Capabilities on locally-created record zones are not valid until the record zone is saved. Capabilities on record zones fetched from the server are valid. */
+/// Capabilities on locally-created record zones are not valid until the record zone is saved. Capabilities on record zones fetched from the server are valid.
@property (readonly, assign) CKRecordZoneCapabilities capabilities;
-/*! @discussion The share property on a record zone will only be set on zones fetched from the server and only if a
- * corresponding zone-wide share record for the zone exists on the server.
- *
- * You can create a zone-wide share for a zone using @code -[CKShare initWithRecordZoneID:] @endcode.
- *
- * Zone-wide sharing is only supported in zones with the @c CKRecordZoneCapabilityZoneWideSharing sharing capability.
- * You cannot share a zone if it already contains shared records.
- */
+/// The share property on a record zone will only be set on zones fetched from the server and only if a
+/// corresponding zone-wide share record for the zone exists on the server.
+///
+/// You can create a zone-wide share for a zone using `-[CKShare initWithRecordZoneID:]`.
+///
+/// Zone-wide sharing is only supported in zones with the `CKRecordZoneCapabilityZoneWideSharing` sharing capability.
+/// You cannot share a zone if it already contains shared records.
@property (nullable, readonly, copy) CKReference *share API_AVAILABLE(macos(12.0), ios(15.0), tvos(15.0), watchos(8.0));
+
+/// The encryption scope determines the granularity at which encryption keys are stored within the zone.
+///
+/// Zone encryption scope defaults to `CKRecordZoneEncryptionScopePerRecord` and can only be modified before zone creation. Attempting to change the encryption
+/// scope of an existing zone is invalid and will result in an error.
+///
+/// Zones using `CKRecordZoneEncryptionScopePerZone` can only use zone-wide sharing and are not compatible with older device OS versions. Refer to `CKRecordZoneEncryptionScope` for more info.
+@property (assign) CKRecordZoneEncryptionScope encryptionScope API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0));
@end
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShare.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShare.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShare.h 2025-04-19 03:55:35
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShare.h 2025-05-25 02:08:39
@@ -10,6 +10,12 @@
#import <CloudKit/CKRecord.h>
#import <CloudKit/CKShareParticipant.h>
+
+#define CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0))
+
+
+@class CKShareAccessRequester, CKShareBlockedIdentity, CKUserIdentityLookupInfo;
+
NS_HEADER_AUDIT_BEGIN(nullability, sendability)
CK_EXTERN CKRecordType const CKRecordTypeShare API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0));
@@ -85,22 +91,92 @@
@property (nullable, readonly, copy) CKShareParticipant *currentUserParticipant;
/*! @discussion If a participant with a matching userIdentity already exists, then that existing participant's properties will be updated; no new participant will be added.
- * A `CKShareParticipant` instance that has already been added to one `CKShare` cannot be added to another, unless it is removed from the first `CKShare` through `removeParticipant`.
+ * A ``CKShareParticipant`` instance that has already been added to one ``CKShare`` cannot be added to another, unless it is removed from the first ``CKShare`` through `removeParticipant`.
* In order to modify the list of participants, a share must have publicPermission set to @c CKShareParticipantPermissionNone. That is, you cannot mix-and-match private users and public users in the same share.
* @see CKShareParticipantRole
*/
- (void)addParticipant:(CKShareParticipant *)participant;
-/*! @discussion It's not allowed to call `removeParticipant` on a `CKShare` with a `CKShareParticipant` that has never been added to that share through `addParticipant`.
+/*! @discussion It's not allowed to call `removeParticipant` on a ``CKShare`` with a ``CKShareParticipant`` that has never been added to that share through `addParticipant`.
*/
- (void)removeParticipant:(CKShareParticipant *)participant;
+/*! @abstract Invitation URLs that can be used by any receiver to claim the associated participantID and join the share.
+ *
+ * @discussion Only available after share record has been saved to the server for participants created via `+[CKShareParticipant oneTimeURLParticipant]`.
+ * One-time URLs are stable, and tied to the associated participantIDs as long as the participant is part of the share.
+ * Typically, a recipient user invited via their handle (i.e. `.acceptanceStatus` == `.pending`) is provided a `CKShare.URL` directly by the share's owner. However, any user can also use a `oneTimeURL` in the same manner by fetching share metadata and accepting the share.
+ * After share acceptance, the `oneTimeURL` becomes functionally equivalent to the regular `CKShare.URL`.
+ */
+- (nullable NSURL *)oneTimeURLForParticipantID:(NSString *)participantID API_AVAILABLE(macos(15.0), ios(18.0), tvos(18.0), watchos(11.0), visionos(2.0)) NS_REFINED_FOR_SWIFT;
+
/*! These superclass-provided initializers are not allowed for CKShare */
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)initWithRecordType:(CKRecordType)recordType NS_UNAVAILABLE;
- (instancetype)initWithRecordType:(CKRecordType)recordType recordID:(CKRecordID *)recordID NS_UNAVAILABLE;
- (instancetype)initWithRecordType:(CKRecordType)recordType zoneID:(CKRecordZoneID *)zoneID NS_UNAVAILABLE;
+
+/// A list of all uninvited users who have requested access to this share.
+///
+/// When share access requests are allowed, uninvited users can attempt to join the share
+/// by sending an access request. Those pending requests appear in this array.
+/// Share owners or administrators can approve the requester or use ``denyRequesters(_:)`` to respond
+/// to these access requests. Requesters are always returned with name components and either an email or phone number.
+/// Requesters can be approved by running ``CKFetchShareParticipantsOperation`` with the requester's ``CKShareAccessRequester/participantLookupInfo``
+/// and adding the resulting participant to the share.
+@property (readonly, copy) NSArray<CKShareAccessRequester *> *requesters CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY;
+
+/// A list of users blocked from requesting access to this share.
+///
+/// Identities remain in this list until a user calls ``unblockIdentities(_:)``.
+@property (readonly, copy) NSArray<CKShareBlockedIdentity *> *blockedIdentities CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY;
+
+/// Indicates whether uninvited users can request access to this share.
+///
+/// By default, allows access requests is `NO`
+/// When `YES`, uninvited users can submit an access request to the share
+/// if they discover the share URL. When `NO`, the server does not allow uninvited users
+/// to request access and does not reveal whether the share exists. This property can only be
+/// modified by the share owner or an admin. Attempting to change its value as any other
+/// participant will result in an exception.
+@property (readwrite, assign) BOOL allowsAccessRequests CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY;
+
+/// Denies share access to the specified requesters.
+///
+/// Use this method to reject pending requests from one or more uninvited users.
+/// Denied requesters are removed from the ``requesters`` array.
+/// You must save the share to the server after denying to persist the changes.
+/// Once saved, these requesters are not given access to the share, but they may attempt to request
+/// access again unless you block them. This method can only be used by the share owner or an
+/// admin. Attempting to use it as any other participant will result in an exception.
+///
+/// - Parameters:
+/// - requesters: An array of ``CKShareAccessRequester`` objects to deny.
+- (void)denyRequesters:(NSArray<CKShareAccessRequester *> *)requesters CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY;
+
+/// Blocks the specified requesters from requesting access to this share.
+///
+/// This method permanently prevents the listed requesters from requesting access to the share in the future.
+/// Blocked requesters appear in the ``blockedIdentities`` array.
+/// The share must be saved to the server after blocking to persist the changes. This method can only be used
+/// by the share owner or an admin. Attempting to use it as any other participant will result in an exception.
+/// Blocking an existing participant removes the participant from the share.
+///
+/// - Parameters:
+/// - requesters: An array of ``CKShareAccessRequester`` objects to block.
+- (void)blockRequesters:(NSArray<CKShareAccessRequester *> *)requesters CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY;
+
+/// Unblocks previously blocked identities, allowing them to request access again.
+///
+/// Call this method to remove the specified identities from the ``blockedIdentities`` array.
+/// Once unblocked, those identities are free to request access to the share unless access
+/// requests are disabled. You must save the share to commit this change to the server.
+/// This method can only be used by the share owner or an admin. Attempting to use it as any
+/// other participant will result in an exception.
+///
+/// - Parameter blockedIdentities: An array of ``CKShareBlockedIdentity`` objects to unblock.
+- (void)unblockIdentities:(NSArray<CKShareBlockedIdentity *> *)blockedIdentities CKSHARE_REQUEST_ACCESS_INTERFACES_AVAILABILITY;
@end
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareAccessRequester.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareAccessRequester.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareAccessRequester.h 1969-12-31 19:00:00
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareAccessRequester.h 2025-05-25 02:08:39
@@ -0,0 +1,45 @@
+//
+// CKShareAccessRequester.h
+// CloudKit
+//
+// Copyright © 2025 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+#define CK_SHARE_ACCESS_REQUESTER_AVAILABILITY API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0))
+
+
+@class CKUserIdentity, CKUserIdentityLookupInfo, CNContact;
+
+NS_HEADER_AUDIT_BEGIN(nullability, sendability)
+
+CK_SHARE_ACCESS_REQUESTER_AVAILABILITY
+NS_SWIFT_NAME(CKShare.AccessRequester)
+CK_SUBCLASSING_RESTRICTED // should not be subclassed, or Sendable may no longer apply
+NS_SWIFT_SENDABLE
+@interface CKShareAccessRequester : NSObject <NSSecureCoding, NSCopying>
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+/// The user identity this share access requester represents.
+@property (readonly, copy) CKUserIdentity *userIdentity;
+
+/// Convenience method to get the requester's lookup info.
+/// This lookup info can be used in ``CKFetchShareParticipantsOperation`` to approve the requester by fetching the corresponding participant and adding the participant to the share.
+@property (nonatomic, readonly, copy) CKUserIdentityLookupInfo *participantLookupInfo;
+
+#if !TARGET_OS_TV
+
+/// Returns a displayable `CNContact` for the requester, or a new `CNContact` if none exists in the user's contacts.
+/// Provides a standardized format for the requester's underlying lookup info in the user identity.
+/// Use when displaying the requester information to other participants and approvers in application UI.
+@property (nonatomic, readonly, copy) CNContact *contact;
+
+#endif
+
+@end
+
+NS_HEADER_AUDIT_END(nullability, sendability)
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareBlockedIdentity.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareBlockedIdentity.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareBlockedIdentity.h 1969-12-31 19:00:00
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareBlockedIdentity.h 2025-05-25 02:08:40
@@ -0,0 +1,41 @@
+//
+// CKShareBlockedIdentity.h
+// CloudKit
+//
+// Copyright © 2025 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+#define CK_SHARE_BLOCKED_IDENTITY_AVAILABILITY API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0))
+
+
+@class CKUserIdentity, CNContact;
+
+NS_HEADER_AUDIT_BEGIN(nullability, sendability)
+
+CK_SHARE_BLOCKED_IDENTITY_AVAILABILITY
+NS_SWIFT_NAME(CKShare.BlockedIdentity)
+CK_SUBCLASSING_EXTERNALLY_RESTRICTED // should not be subclassed, or Sendable may no longer apply
+NS_SWIFT_SENDABLE
+@interface CKShareBlockedIdentity : NSObject <NSSecureCoding, NSCopying>
+
++ (instancetype)new NS_UNAVAILABLE;
+- (instancetype)init NS_UNAVAILABLE;
+
+/// The user identity this blocked identity represents.
+@property (readonly, copy, nonatomic) CKUserIdentity *userIdentity;
+
+#if !TARGET_OS_TV
+
+/// Returns a displayable `CNContact` for the blocked identity, or a new `CNContact` if none exists in the user's contacts.
+/// Provides a standardized format for the blocked identity's underlying lookup info in the user identity.
+/// Use when displaying the blocked identity information to other participants in application UI.
+@property (nonatomic, readonly, copy) CNContact *contact;
+
+#endif
+
+@end
+
+NS_HEADER_AUDIT_END(nullability, sendability)
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareMetadata.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareMetadata.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareMetadata.h 2025-04-19 04:15:34
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareMetadata.h 2025-05-25 02:08:39
@@ -17,8 +17,8 @@
// NS_SWIFT_SENDABLE on macos(14.0), ios(17.0), tvos(17.0), watchos(10.0)
@interface CKShareMetadata : NSObject <NSCopying, NSSecureCoding>
-- (instancetype)init CK_UNAVAILABLE("Obtain `CKShareMetadata` from `CKFetchShareMetadataOperation` or platform-specific scene / app delegate callbacks.");
-+ (instancetype)new CK_UNAVAILABLE("Obtain `CKShareMetadata` from `CKFetchShareMetadataOperation` or platform-specific scene / app delegate callbacks.");
+- (instancetype)init CK_UNAVAILABLE("Obtain `CKShareMetadata` from ``CKFetchShareMetadataOperation`` or platform-specific scene / app delegate callbacks.");
++ (instancetype)new CK_UNAVAILABLE("Obtain `CKShareMetadata` from ``CKFetchShareMetadataOperation`` or platform-specific scene / app delegate callbacks.");
@property (readonly, copy) NSString *containerIdentifier;
@property (readonly, copy) CKShare *share;
@@ -34,7 +34,7 @@
/*! This is only present if the share metadata was returned from a CKFetchShareMetadataOperation with shouldFetchRootRecord set to YES */
@property (nullable, readonly, copy) CKRecord *rootRecord;
-@property (readonly, assign) CKShareParticipantType participantType API_DEPRECATED_WITH_REPLACEMENT("participantRole", macos(10.12, 10.14), ios(10.0, 12.0), tvos(10.0, 12.0), watchos(3.0, 5.0));
+@property (readonly, assign) CKShareParticipantType participantType API_OBSOLETED_WITH_REPLACEMENT("role", macos(10.12, 10.14, 16.0), ios(10.0, 12.0, 19.0), tvos(10.0, 12.0, 19.0), watchos(3.0, 5.0, 12.0));
@property (readonly, copy) CKRecordID *rootRecordID API_DEPRECATED_WITH_REPLACEMENT("hierarchicalRootRecordID", macos(10.12, 13.0), ios(10.0, 16.0), tvos(10.0, 16.0), watchos(3.0, 9.0));
@end
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareParticipant.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareParticipant.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareParticipant.h 2025-04-19 04:15:33
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareParticipant.h 2025-05-25 02:21:45
@@ -26,18 +26,19 @@
CKShareParticipantPermissionReadWrite,
} API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0));
-/*! @abstract The participant type determines whether a participant can modify the list of participants on a share.
- *
- * @discussion
- * - Owners can add private users
- * - Private users can access the share
- * - Public users are "self-added" when the participant accesses the shareURL. Owners cannot add public users.
- */
+/// Defines the participant role in a share:
+/// - `owner`: Can add private users.
+/// - `privateUser`: Can access the share.
+/// - `publicUser`: Self-added when accessing the share URL (owners cannot add public users).
+/// - `administrator`: Can add and remove participants and change their permissions.
+
+/// Shares with ``.administrator`` participants will be returned as read-only to devices running OS versions prior to the ``.administrator`` role being introduced. The ``.administrator`` participants on these read-only shares will be returned as ``.privateUser``.
typedef NS_ENUM(NSInteger, CKShareParticipantRole) {
CKShareParticipantRoleUnknown = 0,
CKShareParticipantRoleOwner = 1,
CKShareParticipantRolePrivateUser = 3,
CKShareParticipantRolePublicUser = 4,
+ CKShareParticipantRoleAdministrator API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0)) = 2,
} API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0));
typedef NS_ENUM(NSInteger, CKShareParticipantType) {
@@ -45,7 +46,7 @@
CKShareParticipantTypeOwner = 1,
CKShareParticipantTypePrivateUser = 3,
CKShareParticipantTypePublicUser = 4,
-} API_DEPRECATED_WITH_REPLACEMENT("CKShareParticipantRole", macos(10.12, 10.14), ios(10.0, 12.0), tvos(10.0, 12.0), watchos(3.0, 5.0));
+} API_OBSOLETED_WITH_REPLACEMENT("CKShareParticipantRole", macos(10.12, 10.14, 16.0), ios(10.0, 12.0, 19.0), tvos(10.0, 12.0, 19.0), watchos(3.0, 5.0, 12.0));
API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0))
// This class should not be subclassed. If it is, Sendable may no longer apply.
@@ -61,8 +62,8 @@
/*! The default participant role is @c CKShareParticipantRolePrivateUser. */
@property (assign) CKShareParticipantRole role API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0));
-/*! The default participant type is @c CKShareParticipantTypePrivateUser. */
-@property (assign) CKShareParticipantType type API_DEPRECATED_WITH_REPLACEMENT("role", macos(10.12, 10.14), ios(10.0, 12.0), tvos(10.0, 12.0), watchos(3.0, 5.0));
+/// The default participant type is ``CKShareParticipantTypePrivateUser``.
+@property (assign) CKShareParticipantType type API_OBSOLETED_WITH_REPLACEMENT("role", macos(10.12, 10.14, 16.0), ios(10.0, 12.0, 19.0), tvos(10.0, 12.0, 19.0), watchos(3.0, 5.0, 12.0));
@property (readonly, assign) CKShareParticipantAcceptanceStatus acceptanceStatus;
@@ -71,6 +72,23 @@
/*! A unique identifier for this participant. */
@property (readonly, copy) NSString *participantID API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0)) NS_REFINED_FOR_SWIFT;
+
+/// `YES` if this participant was a requester before getting added to the share
+@property (readonly, assign, nonatomic) BOOL isApprovedRequester API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0));
+
+/// The timestamp when the participant was added, set when the share is saved to the server.
+@property (nullable, readonly, copy, nonatomic) NSDate *dateAddedToShare API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0));
+
+/*! @abstract Generate a unique URL for inviting a participant without knowing their handle
+ *
+ * @discussion When a participant's email address / phone number / userRecordID isn't known up-front, a @c oneTimeURLParticipant can be added
+ * to the share. Once the share is saved, a custom invitation link is available for that @c oneTimeURLParticipant. The link is accessed via `-[CKShare oneTimeURLForParticipantID]:)`.
+ * This custom link can be used by any recipient user to fetch share metadata and accept the share.
+ *
+ * Note that a one-time URL participant in the @c CKShareParticipantAcceptanceStatusPending state has empty `CKUserIdentity.nameComponents`
+ * and a nil `CKUserIdentity.lookupInfo`.
+ */
++ (instancetype)oneTimeURLParticipant NS_SWIFT_NAME(oneTimeURLParticipant()) API_AVAILABLE(macos(15.0), ios(18.0), tvos(18.0), watchos(11.0), visionos(2.0));
@end
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareRequestAccessOperation.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareRequestAccessOperation.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareRequestAccessOperation.h 1969-12-31 19:00:00
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKShareRequestAccessOperation.h 2025-05-25 02:08:39
@@ -0,0 +1,52 @@
+//
+// CKShareRequestAccessOperation.h
+// CloudKit
+//
+// Copyright © 2025 Apple Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <CloudKit/CKDatabaseOperation.h>
+
+@class CKShare;
+
+NS_HEADER_AUDIT_BEGIN(nullability, sendability)
+
+API_AVAILABLE(macos(26.0), ios(26.0), tvos(26.0), watchos(26.0), visionos(26.0))
+@interface CKShareRequestAccessOperation : CKOperation
+
+/// - Returns: A new ``CKShareRequestAccessOperation`` instance.
+- (instancetype)init NS_DESIGNATED_INITIALIZER;
+
+/// Creates a ``CKShareRequestAccessOperation`` for requesting access to the specified shares.
+///
+/// - Parameter shareURLs: An array of `NSURL` objects for shares you wish to request access to
+/// - Returns: A ``CKShareRequestAccessOperation`` instance configured with the given share URLs.
+- (instancetype)initWithShareURLs:(NSArray<NSURL *> *)shareURLs NS_SWIFT_NAME(init(shareURLs:));
+
+/// The share URLs for which access is being requested.
+///
+/// If requesting access to multiple shares, include multiple `NSURL` objects.
+/// The server processes them independently.
+@property (nullable, copy, nonatomic) NSArray<NSURL *> *shareURLs;
+
+/// A block that is called once for each share URL processed by the server.
+///
+/// - Parameters:
+/// - shareURL: The URL of the processed share.
+/// - shareRequestAccessError: If non-nil, an error describing why the request failed for this share.
+///
+/// The server does **not** reveal share existence to the requester to protect privacy.
+@property (nullable, copy, nonatomic) void (^perShareAccessRequestCompletionBlock)(NSURL *shareURL, NSError * _Nullable shareRequestAccessError) NS_REFINED_FOR_SWIFT;
+
+/// A block that is called when the entire operation completes.
+///
+/// - Parameter operationError: If non-nil, an error describing why the request failed.
+///
+/// If operationError is CKErrorPartialFailure, the userInfo dictionary
+/// contains per-share errors under ``CKPartialErrorsByItemIDKey``.
+@property (nullable, copy, nonatomic) void (^shareRequestAccessCompletionBlock)(NSError * _Nullable operationError) NS_REFINED_FOR_SWIFT;
+
+@end
+
+NS_HEADER_AUDIT_END(nullability, sendability)
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngine.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngine.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngine.h 2025-04-19 03:37:29
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngine.h 2025-05-30 23:54:52
@@ -8,7 +8,11 @@
#import <CloudKit/CKDefines.h>
#import <CloudKit/CKSyncEngineRecordZoneChangeBatch.h>
-@class CKDatabase, CKOperationGroup, CKRecord, CKRecordID, CKRecordZone, CKRecordZoneID, CKSyncEngineConfiguration, CKSyncEngineEvent, CKSyncEngineFetchChangesContext, CKSyncEngineFetchChangesOptions, CKSyncEngineFetchChangesScope, CKSyncEnginePendingRecordZoneChange, CKSyncEngineSendChangesContext, CKSyncEngineSendChangesOptions, CKSyncEngineSendChangesScope, CKSyncEngineState, CKSyncEngineStateSerialization;
+@class CKDatabase, CKOperationGroup, CKRecord, CKRecordID, CKRecordZone, CKRecordZoneID;
+@class CKSyncEngineConfiguration, CKSyncEngineEvent, CKSyncEngineState, CKSyncEngineStateSerialization;
+@class CKSyncEngineFetchChangesContext, CKSyncEngineFetchChangesOptions, CKSyncEngineFetchChangesScope;
+@class CKSyncEngineSendChangesContext, CKSyncEngineSendChangesOptions, CKSyncEngineSendChangesScope, CKSyncEnginePendingRecordZoneChange;
+
@protocol CKSyncEngineDelegate;
NS_HEADER_AUDIT_BEGIN(nullability, sendability)
@@ -26,10 +30,10 @@
/// The sync engine will perform work in the background on your behalf, and it needs to be initialized
/// so that it can properly listen for push notifications and handle scheduled sync tasks.
///
-/// When initializing your sync engine, you need to provide an object conforming to the ``CKSyncEngineDelegate`` protocol.
+/// When initializing your sync engine, you need to provide an object conforming to the `CKSyncEngineDelegate` protocol.
/// This protocol is the main method of communication between the sync engine and your app.
/// You also need to provide your last known version of the ``CKSyncEngine/State/Serialization``.
-/// See ``CKSyncEngine/State`` and ``Event/StateUpdate`` for more details on the sync engine state.
+/// See ``CKSyncEngine/State`` and ``CKSyncEngine/Event/StateUpdate`` for more details on the sync engine state.
///
/// Note that before using `CKSyncEngine` in your app, you need to add the CloudKit and remote notification capabilities.
///
@@ -40,37 +44,37 @@
///
/// When you add pending changes to the state, the sync engine will schedule a task to sync.
/// When the sync task runs, the sync engine will start sending changes to the server.
-/// The sync engine will automatically send database changes from ``State/pendingDatabaseChanges``, but you need to provide the record zone changes yourself.
-/// In order to send record zone changes, you need to return them from ``CKSyncEngineDelegate/nextRecordZoneChangeBatch(_:syncEngine:)``.
+/// The sync engine will automatically send database changes from ``CKSyncEngine/State/pendingDatabaseChanges``, but you need to provide the record zone changes yourself.
+/// In order to send record zone changes, you need to return them from `-[CKSyncEngineDelegate syncEngine:nextRecordZoneChangeBatchForContext:]`.
///
/// When the sync engine finishes sending a batch of changes to the server,
-/// your `CKSyncEngineDelegate` will receive ``Event/sentDatabaseChanges(_:)`` and ``Event/sentRecordZoneChanges(_:)`` events.
+/// your `CKSyncEngineDelegate` will receive ``CKSyncEngine/Event/sentDatabaseChanges(_:)`` and ``CKSyncEngine/Event/sentRecordZoneChanges(_:)`` events.
/// These events will notify you of the success or failure of the changes you tried to send.
///
/// At a high level, sending changes to the server happens with the following order of operations:
///
/// 1. You add pending changes to ``CKSyncEngine/state``.
-/// 2. You receive ``Event/willSendChanges(_:)`` in ``CKSyncEngineDelegate/handleEvent(_:syncEngine:)``
+/// 2. You receive ``CKSyncEngine/Event/willSendChanges(_:)`` in `-[CKSyncEngineDelegate syncEngine:handleEvent:]`
/// 3. If there are pending database changes, the sync engine sends the next batch.
-/// 4. If any database changes were sent, your delegate receives``Event/sentDatabaseChanges(_:)``.
+/// 4. If any database changes were sent, your delegate receives``CKSyncEngine/Event/sentDatabaseChanges(_:)``.
/// 5. Repeat from step 3 until all pending database changes are sent, then move on to record zone changes in step 6.
-/// 6. The sync engine asks for the next batch of record zone changes by calling ``CKSyncEngineDelegate/nextRecordZoneChangeBatchToSend(_:syncEngine:)``.
+/// 6. The sync engine asks for the next batch of record zone changes by calling `-[CKSyncEngineDelegate syncEngine:nextRecordZoneChangeBatchForContext:]`.
/// 7. The sync engine sends the next record zone change batch to the server.
-/// 8. If any record zone changes were sent, your delegate receives ``Event/sentRecordZoneChanges(_:)``.
+/// 8. If any record zone changes were sent, your delegate receives ``CKSyncEngine/Event/sentRecordZoneChanges(_:)``.
/// 9. If you added any pending database changes during steps 6-8, the sync engine repeats from step 3. Otherwise, it repeats from step 6.
-/// 10. When all pending changes are sent, your delegate receives ``Event/didSendChanges(_:)``.
+/// 10. When all pending changes are sent, your delegate receives ``CKSyncEngine/Event/didSendChanges(_:)``.
///
/// # Fetching Changes from the Server
///
/// The sync engine will automatically listen for remote notifications, and it will fetch changes from the server when necessary.
/// Generally, you'll receive events in this order:
///
-/// 1. Your delegate receives ``Event/willFetchChanges(_:)``.
-/// 2. If there are new database changes to fetch, you receive batches of them in ``Event/fetchedDatabaseChanges(_:)`` events.
-/// 3. If there are new record zone changes to fetch, you will receive ``Event/willFetchRecordZoneChanges(_:)`` for each zone that has new changes.
-/// 4. The sync engine fetches record zone changes and gives you batches of them in ``Event/fetchedRecordZoneChanges(_:)`` events.
-/// 5. Your delegate receives ``Event/didFetchRecordZoneChanges(_:)`` for each zone that had changes to fetch.
-/// 6. Your delegate receives ``Event/didFetchChanges(_:)``, indicating that sync engine has finished fetching changes.
+/// 1. Your delegate receives ``CKSyncEngine/Event/willFetchChanges(_:)``.
+/// 2. If there are new database changes to fetch, you receive batches of them in ``CKSyncEngine/Event/fetchedDatabaseChanges(_:)`` events.
+/// 3. If there are new record zone changes to fetch, you will receive ``CKSyncEngine/Event/willFetchRecordZoneChanges(_:)`` for each zone that has new changes.
+/// 4. The sync engine fetches record zone changes and gives you batches of them in ``CKSyncEngine/Event/fetchedRecordZoneChanges(_:)`` events.
+/// 5. Your delegate receives ``CKSyncEngine/Event/didFetchRecordZoneChanges(_:)`` for each zone that had changes to fetch.
+/// 6. Your delegate receives ``CKSyncEngine/Event/didFetchChanges(_:)``, indicating that sync engine has finished fetching changes.
///
/// # Sync Scheduling
///
@@ -100,20 +104,20 @@
/// The sync engine will retry the operations for these transient errors automatically when it makes sense to do so.
/// Specifically, the sync engine will handle the following errors on your behalf:
///
-/// * ``CKErrorCode/notAuthenticated``
-/// * ``CKErrorCode/accountTemporarilyUnavailable``
-/// * ``CKErrorCode/networkFailure``
-/// * ``CKErrorCode/networkUnavailable``
-/// * ``CKErrorCode/requestRateLimited``
-/// * ``CKErrorCode/serviceUnavailable``
-/// * ``CKErrorCode/zoneBusy``
+/// * ``CKError/notAuthenticated``
+/// * ``CKError/accountTemporarilyUnavailable``
+/// * ``CKError/networkFailure``
+/// * ``CKError/networkUnavailable``
+/// * ``CKError/requestRateLimited``
+/// * ``CKError/serviceUnavailable``
+/// * ``CKError/zoneBusy``
///
/// When the sync engine encounters one of these errors, it will wait for the system to be in a good state and try again.
/// For example, if the server sends back a `.requestRateLimited` error, the sync engine will respect this throttle and try again after the retry-after time.
///
/// `CKSyncEngine` will _not_ handle errors that require application-specific logic.
-/// For example, if you try to save a record and get a ``CKErrorCode/serverRecordChanged``, you need to handle that error yourself.
-/// There are plenty of errors that the sync engine cannot handle on your behalf, see ``CKErrorCode`` for a list of all the possible errors.
+/// For example, if you try to save a record and get a ``CKError/serverRecordChanged``, you need to handle that error yourself.
+/// There are plenty of errors that the sync engine cannot handle on your behalf, see ``CKError`` for a list of all the possible errors.
///
/// # Accounts
///
@@ -123,7 +127,7 @@
/// Once an account is available, the sync engine will start syncing automatically.
///
/// It will also listen for when the user signs in or out of their account.
-/// When it notices an account change, it will send an ``Event/accountChange(_:)`` to your delegate.
+/// When it notices an account change, it will send an ``CKSyncEngine/Event/accountChange(_:)`` to your delegate.
/// It's your responsibility to react appropriately to this change and update your local persistence.
API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0))
NS_REFINED_FOR_SWIFT
@@ -154,7 +158,7 @@
/// For example, you might use this in your tests to simulate specific sync scenarios.
///
/// Fetching changes from the server might result in some events being posted to your delegate via `handleEvent`.
-/// For example, you might receive a `CKSyncEngineWillFetchChangesEvent` or `CKSyncEngineWillFetchChangesEvent`.
+/// For example, you might receive a `CKSyncEngineWillFetchChangesEvent` or `CKSyncEngineDidFetchChangesEvent`.
/// This will not complete until all the relevant events have been handled by your delegate.
- (void)fetchChangesWithCompletionHandler:(nullable void (NS_SWIFT_SENDABLE ^)(NSError * _Nullable error))completionHandler;
@@ -171,7 +175,7 @@
/// Sending changes to the server might result in some events being posted to your delegate via `handleEvent`.
/// For example, you might receive a `CKSyncEngineWillSendChangesEvent` or `CKSyncEngineDidSendChangesEvent`.
/// This function will not return until all the relevant events have been handled by your delegate.
-- (void)sendChangesWithCompletionHandler:(nullable void (^)(NSError * _Nullable error))completionHandler;
+- (void)sendChangesWithCompletionHandler:(nullable void (NS_SWIFT_SENDABLE ^)(NSError * _Nullable error))completionHandler;
/// Sends pending changes to the server with the specified options.
/// See discussion in ``sendChangesWithCompletionHandler:`` for more information.
@@ -214,7 +218,7 @@
///
/// ## Sending changes for specific zones
///
-/// When you call `sendChanges` for a specific set of zone IDs, you should make sure to only send changes for those zones.
+/// When you call ``CKSyncEngine/sendChanges(_:)`` for a specific set of zone IDs, you should make sure to only send changes for those zones.
/// You can do this by checking the `zoneIDs` property on ``CKSyncEngineSendChangesContext/options``.
///
/// For example, you might have some code like this:
@@ -424,14 +428,14 @@
/// This sync was scheduled automatically by the sync engine.
CKSyncEngineSyncReasonScheduled,
- /// This sync was requested manually by calling `fetchChanges` or `sendChanges`.
+ /// This sync was requested manually by calling ``CKSyncEngine/fetchChanges(_:)`` or ``CKSyncEngine/sendChanges(_:)``.
CKSyncEngineSyncReasonManual,
};
/// The context of an attempt to fetch changes from the server.
///
/// The sync engine might attempt to fetch changes to the server for many reasons.
-/// For example, if you call `fetchChanges`, it'll try to fetch changes immediately.
+/// For example, if you call ``CKSyncEngine/fetchChanges(_:)``, it'll try to fetch changes immediately.
/// Or if it receives a push notification, it'll schedule a sync and fetch changes when the scheduler task runs.
/// This object represents one of those attempts to fetch changes.
API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0))
@@ -454,7 +458,7 @@
/// The context of an attempt to send changes to the server.
///
/// The sync engine might attempt to send changes to the server for many reasons.
-/// For example, if you call `sendChanges`, it'll try to send changes immediately.
+/// For example, if you call ``CKSyncEngine/sendChanges(_:)``, it'll try to send changes immediately.
/// Or if you add pending changes to the state, it'll schedule a sync and send changes when the scheduler task runs.
/// This object represents one of those attempts to send changes.
API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0))
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineConfiguration.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineConfiguration.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineConfiguration.h 2025-04-19 03:55:36
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineConfiguration.h 2025-05-30 23:54:02
@@ -32,12 +32,12 @@
/// You can have multiple instances of `CKSyncEngine` in the same process, each targeting a different database.
/// For example, you might have one for your private database and one for your shared database.
///
-/// It's also technically possible to have multiple instances of `CKSyncEngine` for the same `CKDatabase`.
+/// It's also technically possible to have multiple instances of `CKSyncEngine` for the same ``CKDatabase``.
/// This isn't recommended for production code, but it can be helpful for testing your `CKSyncEngine` integration.
/// For example, you might make multiple `CKSyncEngine` instances to simulate multiple devices syncing back and forth.
@property (strong) CKDatabase *database;
-/// The state serialization you last received in a `CKSyncEngineStateUpdateEvent`.
+/// The state serialization you last received in a ``CKSyncEngine/Event/StateUpdate``.
///
/// If this is the first time ever initializing your `CKSyncEngine`, you can provide `nil`.
@property (nullable, copy) CKSyncEngineStateSerialization *stateSerialization;
@@ -52,11 +52,11 @@
/// When it receives a notification about new changes on the server, it will automatically schedule a sync task to fetch changes.
/// It will also automatically re-schedule sync tasks for retryable errors such as network failures or server throttles.
///
-/// If `automaticallySync` is off, then the sync engine will not perform any operations unless you tell it to do so via `fetchChanges` or `sendChanges`.
+/// If ``CKSyncEngineConfiguration/automaticallySync`` is off, then the sync engine will not perform any operations unless you tell it to do so via ``CKSyncEngine/fetchChanges(_:)`` or ``CKSyncEngine/sendChanges(_:)``.
///
/// Most applications likely want to enable automatic syncing during normal use.
/// However, you might want to disable it if you have specific requirements for when you want to sync.
-/// For example, if you want to sync only once per day, you can turn off automatic sync and manually call `fetchChanges` and `sendChanges` once per day.
+/// For example, if you want to sync only once per day, you can turn off automatic sync and manually call ``CKSyncEngine/fetchChanges(_:)`` and ``CKSyncEngine/sendChanges(_:)`` once per day.
///
/// You might also disable automatic sync when writing automated tests for your integration with `CKSyncEngine`.
/// This way, you can have fine grained control over exactly when the sync engine fetches or sends changes.
@@ -66,7 +66,7 @@
/// An optional override for the sync engine's default database subscription ID.
/// Use this for backward compatibility with a previous CloudKit sync implementation.
///
-/// By default, `CKSyncEngine` will create its own `CKDatabaseSubscription` with its own subscription ID.
+/// By default, `CKSyncEngine` will create its own ``CKDatabaseSubscription`` with its own subscription ID.
/// If you're migrating to `CKSyncEngine` from a custom CloudKit sync implementation, you can specify your previous subscription ID here.
/// This allows your `CKSyncEngine` integration to be backward compatible with previous versions of your app.
///
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineEvent.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineEvent.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineEvent.h 2025-05-03 20:34:59
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineEvent.h 2025-05-25 02:05:57
@@ -8,7 +8,9 @@
#import <Foundation/Foundation.h>
#import <CloudKit/CKRecord.h>
-@class CKRecordZone, CKRecordZoneID, CKSyncEngineAccountChangeEvent, CKSyncEngineDidFetchChangesEvent, CKSyncEngineDidFetchRecordZoneChangesEvent, CKSyncEngineDidSendChangesEvent, CKSyncEngineFailedRecordSave, CKSyncEngineFailedZoneSave, CKSyncEngineFetchChangesContext, CKSyncEngineFetchedDatabaseChangesEvent, CKSyncEngineFetchedRecordDeletion, CKSyncEngineFetchedRecordZoneChangesEvent, CKSyncEngineFetchedZoneDeletion, CKSyncEngineSendChangesContext, CKSyncEngineSentDatabaseChangesEvent, CKSyncEngineSentRecordZoneChangesEvent, CKSyncEngineStateSerialization, CKSyncEngineStateUpdateEvent, CKSyncEngineWillFetchChangesEvent, CKSyncEngineWillFetchRecordZoneChangesEvent, CKSyncEngineWillSendChangesEvent;
+@class CKRecordZone, CKRecordZoneID;
+@class CKSyncEngineAccountChangeEvent, CKSyncEngineDidFetchChangesEvent, CKSyncEngineDidFetchRecordZoneChangesEvent, CKSyncEngineDidSendChangesEvent, CKSyncEngineFetchedDatabaseChangesEvent, CKSyncEngineFetchedRecordDeletion, CKSyncEngineFetchedRecordZoneChangesEvent, CKSyncEngineSentDatabaseChangesEvent, CKSyncEngineSentRecordZoneChangesEvent, CKSyncEngineStateUpdateEvent, CKSyncEngineWillFetchChangesEvent, CKSyncEngineWillFetchRecordZoneChangesEvent, CKSyncEngineWillSendChangesEvent;
+@class CKSyncEngineFailedRecordSave, CKSyncEngineFailedZoneSave, CKSyncEngineFetchChangesContext, CKSyncEngineFetchedZoneDeletion, CKSyncEngineSendChangesContext, CKSyncEngineStateSerialization;
NS_HEADER_AUDIT_BEGIN(nullability, sendability)
@@ -122,15 +124,18 @@
// These will crash if used for the wrong event type.
@property (readonly, strong, nonatomic) CKSyncEngineStateUpdateEvent *stateUpdateEvent;
@property (readonly, strong, nonatomic) CKSyncEngineAccountChangeEvent *accountChangeEvent;
-@property (readonly, strong, nonatomic) CKSyncEngineFetchedDatabaseChangesEvent *fetchedDatabaseChangesEvent;
-@property (readonly, strong, nonatomic) CKSyncEngineFetchedRecordZoneChangesEvent *fetchedRecordZoneChangesEvent;
-@property (readonly, strong, nonatomic) CKSyncEngineSentDatabaseChangesEvent *sentDatabaseChangesEvent;
-@property (readonly, strong, nonatomic) CKSyncEngineSentRecordZoneChangesEvent *sentRecordZoneChangesEvent;
+
@property (readonly, strong, nonatomic) CKSyncEngineWillFetchChangesEvent *willFetchChangesEvent;
+@property (readonly, strong, nonatomic) CKSyncEngineFetchedDatabaseChangesEvent *fetchedDatabaseChangesEvent;
+@property (readonly, strong, nonatomic) CKSyncEngineDidFetchChangesEvent *didFetchChangesEvent;
+
@property (readonly, strong, nonatomic) CKSyncEngineWillFetchRecordZoneChangesEvent *willFetchRecordZoneChangesEvent;
+@property (readonly, strong, nonatomic) CKSyncEngineFetchedRecordZoneChangesEvent *fetchedRecordZoneChangesEvent;
@property (readonly, strong, nonatomic) CKSyncEngineDidFetchRecordZoneChangesEvent *didFetchRecordZoneChangesEvent;
-@property (readonly, strong, nonatomic) CKSyncEngineDidFetchChangesEvent *didFetchChangesEvent;
+
@property (readonly, strong, nonatomic) CKSyncEngineWillSendChangesEvent *willSendChangesEvent;
+@property (readonly, strong, nonatomic) CKSyncEngineSentDatabaseChangesEvent *sentDatabaseChangesEvent;
+@property (readonly, strong, nonatomic) CKSyncEngineSentRecordZoneChangesEvent *sentRecordZoneChangesEvent;
@property (readonly, strong, nonatomic) CKSyncEngineDidSendChangesEvent *didSendChangesEvent;
- (instancetype)init NS_UNAVAILABLE;
@@ -141,7 +146,7 @@
/// The sync engine state was updated, and you should persist it locally.
///
/// In order to function properly and efficiently, `CKSyncEngine` tracks some state internally.
-/// When the sync engine state changes, it will give you the latest serialized version in a `CKSyncEngineStateUpdateEvent`.
+/// When the sync engine state changes, it will give you the latest serialized version in a ``CKSyncEngine/Event/StateUpdate``.
/// This event will happen occasionally when the sync engine modifies the state internally during normal sync operation.
/// This event will also happen when you change the state yourself.
///
@@ -270,7 +275,7 @@
/// The sync engine finished sending a batch of record zone changes to the server.
///
-/// If a record save succeeded, you should encode the system fields of this record to use the next time you save. See `encodeSystemFields` on `CKRecord`.
+/// If a record save succeeded, you should encode the system fields of this record to use the next time you save. See `encodeSystemFields` on ``CKRecord``.
///
/// If a record deletion succeeded, you should remove any local system fields for that record.
///
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineRecordZoneChangeBatch.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineRecordZoneChangeBatch.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineRecordZoneChangeBatch.h 2025-04-19 04:15:34
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineRecordZoneChangeBatch.h 2025-05-25 02:08:39
@@ -23,7 +23,7 @@
///
/// This will iterate over the pending changes in order and add them to the batch until it reaches the max batch size.
///
-/// When it sees a pending save, it will ask the record provider for the actual `CKRecord` to send to the server.
+/// When it sees a pending save, it will ask the record provider for the actual ``CKRecord`` to send to the server.
/// If you return `nil` from the record provider, this will skip to the next pending change.
///
/// This will return `nil` if there are no pending changes to send.
@@ -38,7 +38,7 @@
///
/// When creating your own batches, you need to consider batch size limitations.
/// There is a maximum count and size of records that can be sent to the server in a single batch.
-/// If you supply too many changes, or if the total size of the records is too large, then you might get a ``CKErrorLimitExceeded``.
+/// If you supply too many changes, or if the total size of the records is too large, then you might get a ``CKError/limitExceeded``.
///
/// > Tip: These batch size limitations are handled automatically by the ``initWithPendingChanges:recordProvider:`` initializer.
- (instancetype)initWithRecordsToSave:(nullable NSArray<CKRecord *> *)recordsToSave
@@ -56,7 +56,7 @@
/// If set to true, the sync engine will modify these records atomically by zone.
///
-/// If this is true, and if any record change fails, then any other changes from that zone in this batch will also fail with ``CKErrorBatchRequestFailed``.
+/// If this is true, and if any record change fails, then any other changes from that zone in this batch will also fail with ``CKError/batchRequestFailed``.
///
/// Records that exist in different zones will not be modified together atomically.
@property (assign) BOOL atomicByZone;
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineState.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineState.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineState.h 2025-04-19 04:15:34
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CKSyncEngineState.h 2025-05-25 02:08:39
@@ -9,13 +9,14 @@
#import <CloudKit/CKDefines.h>
-@class CKRecordID, CKRecordZone, CKRecordZoneID, CKSyncEnginePendingRecordZoneChange, CKSyncEnginePendingDatabaseChange;
+@class CKAsset, CKRecordID, CKRecordZone, CKRecordZoneID;
+@class CKSyncEnginePendingRecordZoneChange, CKSyncEnginePendingDatabaseChange;
NS_HEADER_AUDIT_BEGIN(nullability, sendability)
-/// An object that tracks some state required for proper and efficient operation of `CKSyncEngine`.
+/// An object that tracks some state required for proper and efficient operation of ``CKSyncEngine-5sie5``.
///
-/// `CKSyncEngine` needs to track several things in order to properly sync.
+/// ``CKSyncEngine-5sie5`` needs to track several things in order to properly sync.
/// For example, it needs to remember the last server change tokens for your database and zones.
/// It also needs to keep track of things like the last known user record ID and other various pieces of state.
///
@@ -24,12 +25,12 @@
/// ## Pending changes
///
/// One of the main things you can control is the list of pending changes to send to the server.
-/// You can control these by calling functions like ``addPendingDatabaseChanges:`` and ``addPendingRecordZoneChanges:``.
+/// You can control these by calling functions like ``addPendingDatabaseChanges:`` and ``addPendingRecordZoneChanges:``.
/// When you add new pending changes, the sync engine will automatically schedule a task to sync with the server.
///
/// ## State serialization
///
-/// `CKSyncEngine` will occasionally update its state in the background.
+/// ``CKSyncEngine-5sie5`` will occasionally update its state in the background.
/// When it updates its state, your delegate will receive a ``CKSyncEngineStateUpdateEvent``.
///
/// This event will contain a ``CKSyncEngineStateSerialization``, which you should persist locally.
@@ -45,9 +46,9 @@
/// A list of record changes that need to be sent to the server.
///
-/// `CKSyncEngine` provides the convenience of tracking your pending record zone changes.
+/// ``CKSyncEngine-5sie5`` provides the convenience of tracking your pending record zone changes.
/// When the user makes some changes that need to be sent to the server, you can track them in this list.
-/// Then, you can use this list when creating your next `CKSyncEngineRecordZoneChangeBatch` in your `CKSyncEngineDelegate`.
+/// Then, you can use this list when creating your next ``CKSyncEngineRecordZoneChangeBatch`` in your ``CKSyncEngineDelegate-1q7g8``.
///
/// The sync engine will ensure consistency and deduplicate these pending changes under the hood.
/// For example, if you add a pending save for record A, then record B, then record A again, this will result in a list of `[saveRecordA, saveRecordB]`.
@@ -57,21 +58,21 @@
/// For example, when it successfully saves a record, it will remove that change from this list.
/// If it fails to send a change due to some retryable error (e.g. a network failure), it will keep that change in this list.
///
-/// If you'd prefer to track pending changes yourself, you can use `hasPendingUntrackedChanges` instead.
+/// If you'd prefer to track pending changes yourself, you can use ``CKSyncEngine/State/hasPendingUntrackedChanges`` instead.
@property (readonly, copy) NSArray<CKSyncEnginePendingRecordZoneChange *> *pendingRecordZoneChanges;
/// A list of database changes that need to be sent to the server, similar to `pendingRecordZoneChanges`.
@property (readonly, copy) NSArray<CKSyncEnginePendingDatabaseChange *> *pendingDatabaseChanges;
-/// This represents whether or not you have pending changes to send to the server that aren't tracked in `pendingRecordZoneChanges`.
+/// This represents whether or not you have pending changes to send to the server that aren't tracked in ``CKSyncEngine/State/pendingRecordZoneChanges``.
/// This is useful if you want to track pending changes in your own local database instead of the sync engine state.
///
/// When this property is set, the sync engine will automatically schedule a sync.
-/// When the sync task runs, it will ask your delegate for pending changes in `nextRecordZoneChangeBatch`.
+/// When the sync task runs, it will ask your delegate for pending changes in ``CKSyncEngineDelegate/nextRecordZoneChangeBatch(_:syncEngine:)``.
@property (assign) BOOL hasPendingUntrackedChanges;
/// The list of zone IDs that have new changes to fetch from the server.
-/// `CKSyncEngine` keeps track of these zones and will update this list as it receives new information.
+/// ``CKSyncEngine-5sie5`` keeps track of these zones and will update this list as it receives new information.
@property (readonly, copy) NSArray<CKRecordZoneID *> *zoneIDsWithUnfetchedServerChanges;
/// Adds to the list of pending record zone changes.
@@ -96,9 +97,11 @@
@end
+#pragma mark - CKSyncEngineStateSerialization
+
/// A serialized representation of a ``CKSyncEngineState``.
///
-/// This will be passed to your delegate via ``CKSyncEngineStateUpdateEvent``.
+/// This will be passed to your delegate via ``CKSyncEngine/Event/StateUpdate``.
/// You should use `NSSecureCoding` to persist this locally alongside your other data and use it the next time you initialize your sync engine.
API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0))
NS_REFINED_FOR_SWIFT
@@ -111,6 +114,8 @@
@end
+#pragma mark - CKSyncEnginePendingRecordZoneChange
+
API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0))
NS_REFINED_FOR_SWIFT
typedef NS_ENUM(NSInteger, CKSyncEnginePendingRecordZoneChangeType) {
@@ -135,6 +140,8 @@
@property (readonly, assign, nonatomic) CKSyncEnginePendingRecordZoneChangeType type;
@end
+
+#pragma mark - CKSyncEnginePendingDatabaseChange
API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0), watchos(10.0))
NS_REFINED_FOR_SWIFT
diff -ruN /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CloudKit.h /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CloudKit.h
--- /Applications/Xcode_16.4.0.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CloudKit.h 2025-04-19 04:15:31
+++ /Applications/Xcode_26.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/CloudKit.framework/Headers/CloudKit.h 2025-05-25 02:08:37
@@ -23,6 +23,8 @@
#import <CloudKit/CKReference.h>
#import <CloudKit/CKServerChangeToken.h>
#import <CloudKit/CKShare.h>
+#import <CloudKit/CKShareAccessRequester.h>
+#import <CloudKit/CKShareBlockedIdentity.h>
#import <CloudKit/CKShareMetadata.h>
#import <CloudKit/CKShareParticipant.h>
#import <CloudKit/CKSubscription.h>
@@ -52,6 +54,7 @@
#import <CloudKit/CKOperation.h>
#import <CloudKit/CKOperationGroup.h>
#import <CloudKit/CKQueryOperation.h>
+#import <CloudKit/CKShareRequestAccessOperation.h>
#pragma mark - Sharing Support
#import <CloudKit/NSItemProvider+CKSharingSupport.h>