我正在尝试创建应用程序文件夹并将示例file.txt
上传到 iCloud Drive 。
我正在使用下一个代码:
@objc func testUploading() {
let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
//is iCloud working?
if iCloudDocumentsURL != nil {
//Create the Directory if it doesn't exist
if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL!.path, isDirectory: nil)) {
//This gets skipped after initial run saying directory exists, but still don't see it on iCloud
do {
try FileManager.default.createDirectory(at: iCloudDocumentsURL!, withIntermediateDirectories: true, attributes: nil)
} catch {
print("\(error.localizedDescription)")
}
}
} else {
print("iCloud is NOT working!")
return
}
//Set up directories
let localDocumentsURL = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: .userDomainMask).last! as NSURL
//Add txt file to my local folder
let myTextString = NSString(string: "HELLO WORLD")
let myLocalFile = localDocumentsURL.appendingPathComponent("examplefile.txt")
do {
try myTextString.write(to: myLocalFile!, atomically: true, encoding: String.Encoding.utf8.rawValue)
} catch {
print("\(error.localizedDescription)")
}
//If file exists on iCloud remove it
var isDir:ObjCBool = false
if (FileManager.default.fileExists(atPath: iCloudDocumentsURL!.path, isDirectory: &isDir)) {
do {
try FileManager.default.removeItem(at: iCloudDocumentsURL!)
} catch {
print("\(error.localizedDescription)")
}
}
//copy from my local to iCloud
do {
try FileManager.default.copyItem(at: localDocumentsURL as URL, to: iCloudDocumentsURL!)
} catch {
print("\(error.localizedDescription)")
}
}
我在项目中有两个目标,每个目标针对不同的环境,Development
和Production
,所以当选择development environment
时,我的应用程序中的前一个代码运行良好,应用程序可以在iCloud Drive
上添加app文件夹,运行并编译得很好..但是当我更改为production environment
时,应用程序也可以编译并运行良好,但无法在 {{上添加应用程序文件夹1}}。
接下来,我展示了每个环境的功能:
第一张照片是 功能 标签上的制作和第二次开发:
两个目标之间的独特区别在于设置iCloud-Drive
的方式,对于我选择的Capabilities
目标复选框 指定自定义容器 因为Production
不允许在XCode
上选择 使用默认容器 ,所以选择 使用默认容器< / EM>
当
Development environment
上选中 使用默认容器 复选框时,会出现下一个错误:
我认为这种差异是因为这个应用程序已经使用了4年,而且我不记得究竟是什么,我创建了一个自定义Production
,这个应用程序使用相同名称的应用程序iCloud Container
但小写。
Apple 不允许从Bundle Identifier
删除任何容器,如果可以,则错误将得到解决。
以下标识符是我认为导致错误的数据
捆绑标识符 - com.reverse_domain .ControlHoras
iCloud容器ID - com.reverse_domain .controlhoras
iCloud
出于这个原因,**The last path (Bold) the identifiers is the real case..
不允许XCode
上的选择选项&gt; Capabilities
&gt; iCLoud
&gt; Containers
,我想我无法在Use default container
的{{1}}中创建应用程序文件夹。由于除了设置 Capablilities 的方式之外,相同的代码具有相同的代码,因此一个工作正常而另一个不工作。
既然你在上下文中,我可以问我的问题:
iCloud Drive
上添加文件夹)?我很沮丧,花了很多时间在这上面,我已经尝试了一切,我不知道该怎么办..
提前致谢!!
我忘记了,这些是production environment
个文件:
制作
iCloud-Drive
开发
Entitlements
这是iCloud Drive文件夹中仅出现
的方面<dict> <key>com.apple.developer.icloud-container-identifiers</key> <array> <string>iCloud.es.reverse_domain.controlhoras</string> </array> <key>com.apple.developer.icloud-services</key> <array> <string>CloudDocuments</string> </array> <key>com.apple.developer.ubiquity-container-identifiers</key> <array> <string>iCloud.es.reverse_domain.controlhoras</string> </array> <key>com.apple.developer.ubiquity-kvstore-identifier</key> <string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>
:
重要提示:我在该问题中使用
<dict> <key>com.apple.developer.icloud-container-identifiers</key> <array> <string>iCloud.$(CFBundleIdentifier)</string> </array> <key>com.apple.developer.icloud-services</key> <array> <string>CloudDocuments</string> </array> <key>com.apple.developer.ubiquity-container-identifiers</key> <array> <string>iCloud.$(CFBundleIdentifier)</string> </array> <key>com.apple.developer.ubiquity-kvstore-identifier</key> <string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string>
我的ID保持匿名,其余标识符为原件。
前几天我尝试使用CloudKit,在开始使用iCloud Drive之前在云端存储数据但是接下来的一段时间开发iCloudKit的新功能它停止工作,因此我开始开发iCloud Drive的这项功能。
我找到了Apple的官方帖子:
如果通知'shouldSendContentAvailable属性为true且同时您的应用已强制退出,则CloudKit通知将不会传递到您的应用。在iOS上,用户可以通过双击主页按钮并将其从多任务UI中轻扫来强制退出应用程序。
因为我使用development app
进行部署,所以苹果禁止mi reverse_domain
的可能性是什么?
如果有人有或有类似问题,请告诉我。