I am able to share a record in CloudKit using the instructions in the Apple Documentation, including the CloudKitShare sample, but when another user accepts the share, only the root record is saved in the sharedDatabase. There is supposed to be another record that has a reference to the root record.
I'm not sure what code to include in this post. Perhaps someone can tell me that much or know of a common programmer mistake that causes this error.
Here is the basic code, after I have removed code not essential to the problem, to make my code easier to read.
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {
let container = CKContainer(identifier: cloudKitShareMetadata.containerIdentifier)
let acceptSharesOperation = CKAcceptSharesOperation(shareMetadatas: [cloudKitShareMetadata])
container.add(acceptSharesOperation)
}
}
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
When I query for all the records of a certain record type, and then I click on the record name to view the record, I get this error at the bottom of the window pane that shows the details of the specific record:
BadRequestException: endpoint not applicable in the database type 'sharedb'
What is "endpoint" referring, what does it mean and what is causing this error message?
Here is the part of the schema that defines the two record types involved:
RECORD TYPE Group (
"___createTime" TIMESTAMP,
"___createdBy" REFERENCE,
"___etag" STRING,
"___modTime" TIMESTAMP,
"___modifiedBy" REFERENCE,
"___recordID" REFERENCE QUERYABLE,
debugTag STRING QUERYABLE SEARCHABLE SORTABLE,
groupData BYTES,
GRANT WRITE TO "_creator",
GRANT CREATE TO "_icloud",
GRANT READ TO "_world"
);
RECORD TYPE LocalGroupIdentifier (
"___createTime" TIMESTAMP,
"___createdBy" REFERENCE,
"___etag" STRING,
"___modTime" TIMESTAMP,
"___modifiedBy" REFERENCE,
"___recordID" REFERENCE QUERYABLE,
groupReference REFERENCE,
localGroupIdentifier STRING QUERYABLE SEARCHABLE,
GRANT WRITE TO "_creator",
GRANT CREATE TO "_icloud",
GRANT READ TO "_world"
);
The error comes when I view the details of a record of type Group.
I use UICloudSharingController and CKModifyRecordsOperation as Apple Documentation shows in the Apple Documentation for UICloudSharingController and Sample Code: Sharing CloudKit Data with Other iCloud Users. It works just fine when I create the CKShare object. When I use the url to accept the share, it works fine except for the error in question, which shows when I view the record of type Group and the record of type LocalGroupIdentifier, which has a reference to the record of type Group. I use exactly one record of type Group and one record of type LocalGroupIdentifier.
I used two different simulators with different Apple IDs for sharing and for accepting the share. They are both iPhone 8 with iOS 15.4. The share I create is in the private database, and the share accepted is in the shared database.
When I try to delete records in CloudKit Dashboard by querying them and then selecting them and clicking on the trash can icon at the top right-hand side of the query results, I get a message box saying that those records will be deleted in a box shaded red, but the delete button at the bottom right-hand side of the box is grayed out and doesn't respond when I click it.
These records were root records of shares whose shares in the cloudkit.share table I have deleted using CKModifyRecordsOperation.
For some reason when I deleted the shares, the root records were not deleted. Then when I try to delete those root records using CKModifyRecordsOperation, I got an error.
Here is my code in CKModifyRecordsOperation.modifyRecordsCompletionBlock that caught the error:
if let error = error {
print("error:")
print(error.localizedDescription)
if let ckError = self.handleCloudKitError(error, operation: .modifyRecords) {
if let serverVersion = ckError.serverRecord {
serverRecord = serverVersion
print("serverRecord:")
print(serverRecord!)
}
}
}
Here is what my code above printed in the Debug window:
error:
Internal server error
ModifyRecords operation error: <CKError 0x600001bb9920: "Server Rejected Request" (15/2000); server message = "Internal server error"; op = 49A32A559E4F4C11; uuid = 22F46530-5F45-463E-A21F-279C3876C897; container ID = "iCloud.us.gnolaum.Courier">
I'm having trouble converting a CNGroup object to a Data object and back to a CNGroup object. I decided to start rethinking the problem again. Somewhere along the way I decided that I should use the Data class to save a CNGroup object to CloudKit. I also learned that the field type to use in my CKRecord object would be of the type bytes.
Am I correct so far?
I am able to convert a CNGroup object to a Data object and back again unless I store the Data object in CloudKit and then retrieve it before I convert the Data object back to a CNGroup object, in which case I get an error when I try to access the pointee property of the typed pointer. That would be an UnsafeBufferPointer, an UnsafeMutableBufferPointer, or an UnsafePointer.
I've tried a lot of different code using different ways. It is impractical to put so much code in my post. I have used the copyBytes method and the withUnsafeBytes method of the Data object.
There is one simple code, and that is when I converted the CNGroup object to a Data object:
func convertCNGroupToData(fromCNGroup group: inout CNGroup) -> Data {
return Data(bytes: &group, count: MemoryLayout.size(ofValue: group))
}
I am looking for a simple way to do what I want. I am relooking at Apple's documentation of Data and NSData.
I am not able to be more specific with this question. I appreciate any effort to help me with this.
I've never had this error before. When I try to run an iOS project in Xcode with a simulator, I get this message from XCode: "Unable to lookup in current state: Shutdown", and a button that says "Details", and a button that says"OK".
When I quit simulator and try to run my project again, the same thing happens.
When I click details it says "iPhone10,4 for device_model. The simulator is an iPhone 8 simulator.
Here is what the whole thing says:
(I don't know why some of the text has such a large font and is in bold.)
Details
Unable to lookup in current state: Shutdown
Domain: com.apple.CoreSimulator.SimError
Code: 405
User Info: {
DVTErrorCreationDateKey = "2022-04-16 23:02:18 +0000";
IDERunOperationFailingWorker = IDELaunchiPhoneSimulatorLauncher;
}
Analytics Event: com.apple.dt.IDERunOperationWorkerFinished : {
"device_model" = "iPhone10,4";
"device_osBuild" = "15.4 (19E240)";
"device_platform" = "com.apple.platform.iphonesimulator";
"launchSession_schemeCommand" = Run;
"launchSession_state" = 1;
"launchSession_targetArch" = "x86_64";
"operation_duration_ms" = 22;
"operation_errorCode" = 405;
"operation_errorDomain" = "com.apple.CoreSimulator.SimError";
"operation_errorWorker" = IDELaunchiPhoneSimulatorLauncher;
"operation_name" = IDERunOperationWorkerGroup;
"param_consoleMode" = 0;
"param_debugger_attachToExtensions" = 0;
"param_debugger_attachToXPC" = 1;
"param_debugger_type" = 3;
"param_destination_isProxy" = 0;
"param_destination_platform" = "com.apple.platform.iphonesimulator";
"param_diag_MainThreadChecker_stopOnIssue" = 0;
"param_diag_MallocStackLogging_enableDuringAttach" = 0;
"param_diag_MallocStackLogging_enableForXPC" = 1;
"param_diag_allowLocationSimulation" = 1;
"param_diag_gpu_frameCapture_enable" = 0; "param_diag_gpu_shaderValidation_enable" = 0;
"param_diag_gpu_validation_enable" = 0;
"param_diag_memoryGraphOnResourceException" = 0;
"param_diag_queueDebugging_enable" = 1;
"param_diag_runtimeProfile_generate" = 0;
"param_diag_sanitizer_asan_enable" = 0;
"param_diag_sanitizer_tsan_enable" = 0;
"param_diag_sanitizer_tsan_stopOnIssue" = 0;
"param_diag_sanitizer_ubsan_stopOnIssue" = 0;
"param_diag_showNonLocalizedStrings" = 0;
"param_diag_viewDebugging_enabled" = 1;
"param_diag_viewDebugging_insertDylibOnLaunch" = 1;
"param_install_style" = 0;
"param_launcher_UID" = 2;
"param_launcher_allowDeviceSensorReplayData" = 0;
"param_launcher_kind" = 0;
"param_launcher_style" = 0;
"param_launcher_substyle" = 0;
"param_runnable_appExtensionHostRunMode" = 0;
"param_runnable_productType" = "com.apple.product-type.application";
"param_runnable_swiftVersion" = "5.6";
"param_runnable_type" = 2;
"param_testing_launchedForTesting" = 0;
"param_testing_suppressSimulatorApp" = 0;
"param_testing_usingCLI" = 0;
"sdk_canonicalName" = "iphonesimulator15.4";
"sdk_osVersion" = "15.4";
"sdk_variant" = iphonesimulator;
}
--
System Information
macOS Version 12.3.1 (Build 21E258)
Xcode 13.3.1 (20103) (Build 13E500a)
Timestamp: 2022-04-16T18:02:18-05:00
I got this message "Account temporarily unavailable due to bad or missing auth token" when I try to save to privateDatabase in CloudKit, using the CKDatabase.save(record:completionHandler).
It looks like the error that was posted about here on stackoverflow has reappeared.
The fix for that other problem was a bug in Apple's side.
Anyone have this problem recently and have a solution?
What is the difference between CKShare.ParticipantRole.privateUser and CKShare.ParticipantRole.publicUser?
Does this together with CKShare.ParticipantPermission determine whether the participant is able to share the share with others or not, or does ParticipantPermission determine both whether a participant can change the records that are shared as well as whom the participant can share the share with?
Does UICloudSharingController.availablePermissions adjust itself to the CKShare.publicPermission and CKShare.currentUserParticipant.participantRole of an existing CKShare object I initialize UICloudSharingController with, or do I have to manually set availablePermissions according to what those CKShare properties are set to?
I'm trying out UICloudSharingController. I noticed that When I select "Anyone with the link" for "WHO CAN ACCESS" in Share Options, then click to copy the link, a screen comes up saying "Add People" at the top. If anyone with a link can access this share, why does it ask me to add participants?
It seems I remember that before it didn't ask me to add participants when I select "Anyone with the link".
"Provisioning profile "iOS Team Provisioning Profile: ***" doesn't include the com.apple.developer.contacts.notes entitlement.
I'm looking for a cause to this problem. It happened when I tried to run a project on an old iPhone 5. I didn't get this problem with any of the other devices and simulators.
I’m looking for ideas here. Is there anyway I can access the record of which calls a user has made. I would like to figure out a way to know which numbers a user uses most. I want to be able to set a default number for each contact in my app that the user uses. Is there so way I can determine what default phone number user would normally call for a contact?
When I add or remove records to a share's hierarchy using CKModifyRecordsOperation, do I need to include the share in the recordsToSave argument of one of the convenience initializers or the property recordsToSave property?
What does CNContactStoreDidChange notification notify multiple times for a single change my app makes itself?
What is the word in programming that means that checks a condition for true or false, and if the condition is false, code is run to make that condition true, so that if the condition is checked again, it would be true?
I believe I have seen something in Swift or Foundations that does this as applied to different things.
Is there any way to run code in iOS whenever new information are added to certain contacts in contact store?
If I use Notifications, I would have to have a process running at all times, since contacts are able to be changed by Apple's Contacts app. I have looked at App Extensions and there are no extensions I that can be used.
There is a way to run a background process but I recall that has a limited lifespan. Am I correct about this?
I need to update data in CloudKit that saves contacts information that can be shared with other users using their own Apple ID's. CloudKit subscriptions notify my app when something changes in CloudKit, but I also need to update records in CloudKit when something changes in Contacts.
Anyone have any ideas how this might possibly be done?