问题描述
我想通过应用程序扩展(更具体地说是手表应用程序)从CloudKit访问一些数据。
在我的主应用程序中,我只是像这样创建容器:CKContainer(identifier: "myContainerID")
,然后调用私有数据库上的任何方法
在我的应用扩展程序中,我创建了一个具有完全相同代码的容器,但是当我尝试在私有数据库上调用方法时,出现此错误:
<ckerror 0x600003953c90: "Permission Failure" (10/2007); server message = "Invalid bundle ID for container"; uuid = 76F8A8B0-0B53-4D23-A7EB-D9982C7CE0BB; container ID = "myContainerID">
我还仔细检查了我是否拥有所有正确的iCloud权利。
我也看到了这个问题,但是我已经在使用解决方案:how to make watchkit extension app and my iphone app share the same icloud databases
感谢您的帮助!
解决方法
我整整一天都在尝试解决问题,最终成功。我找到的是:云容器ID中的姓氏必须与产品目标ID和应用程序名称(plist文件中CFBundleName的值)匹配。默认情况下,这是在info.plist中设置的方式:
Dim pathString As String = My.Settings.filePath
Dim fullPath = Path.Combine(pathString,"Locatie.txt")
If Not Directory.Exists(pathString) Then
Directory.CreateDirectory(pathString)
File.Create(fullPath)
Else
If Not File.Exists(pathString) Then
File.Create(fullPath)
Else
Console.WriteLine($"File {fullPath}already exists.")
End If
End If
其中$(PRODUCT_NAME)是我上面提到的目标。请参阅底部的图片。同样重要的是要注意,通过更改现有目标来解决不匹配问题是行不通的。您需要做的是创建一个ID为姓氏与您的产品名称相匹配的新容器,例如如果您的产品名称是abc,则新的容器ID应该类似于:
context('conditional test',() => {
if (Cypress.env('myVariable')) {
it('conditional test',function () {
//code to be run only if the variable is true
})
}
}
进行更改后,您需要将新容器添加到您的APP ID中,并重新创建配置文件,因为它们将无效。创建新的配置文件后,只需下载它们并导入Xcode / Signing and Capabilities。
请注意,Apple官方文档确实建议使用应用程序名称,但他们从未说过它是强制性的,也是使其正常工作的唯一方法。
,苹果似乎已经将其固定在一边!
仍然感谢您的帮助:)