Gre*_*tic 6 ios cloudkit cloudkit-environments
是否有一种编程方式来发现我的应用是否与CloudKit开发或生产环境进行通信?
(我知道我可以查看com.apple.developer.icloud-container-environmentEntitlements.plist 中的键来进行智能猜测,但这并不能真正证明 - 我正在使用哪种环境.)
截至目前,您可以在CKContainer. 这对于调试和开发目的非常有帮助。
extension CKContainer {
public var isProductionEnvironment:Bool {
let containerID = self.value(forKey: "containerID") as! NSObject // CKContainerID
return containerID.value(forKey: "environment")! as! CLongLong == 1
}
}
Run Code Online (Sandbox Code Playgroud)
说明:
扩展@garafajon 的回答。如果您查看 iOS 运行时标头(例如https://github.com/JaviSoto/iOS10-Runtime-Headers),您会发现有一个CKContainerID不是公开可用的类。
您可以使用键值编码访问环境属性,如下所示:
let container = CKContainer.default()
let containerID = container.value(forKey: "containerID") as! NSObject // CKContainerID
let environment = containerID.value(forKey: "environment")!
print("\(container)")
print("\(containerID)")
print("\(environment)")
Run Code Online (Sandbox Code Playgroud)
带com.apple.developer.icloud-container-environment= 的输出Production:
<CKContainer: 0x60800017a040; containerID=<CKContainerID: 0x608000232ea0; containerIdentifier=iCloud.com.yourdomain.yourapp, containerEnvironment="Production">>
<CKContainerID: 0x608000232ea0; containerIdentifier=iCloud.com.yourdomain.yourapp, containerEnvironment="Production">
1
Run Code Online (Sandbox Code Playgroud)
带com.apple.developer.icloud-container-environment= 的输出Development:
<CKContainer: 0x60800017a1c0; containerID=<CKContainerID: 0x618000035360; containerIdentifier=iCloud.com.yourdomain.yourapp, containerEnvironment="Sandbox">>
<CKContainerID: 0x618000035360; containerIdentifier=iCloud.com.yourdomain.yourapp, containerEnvironment="Sandbox">
2
Run Code Online (Sandbox Code Playgroud)
我可以想到两种方法来做到这一点:
您可以创建一个设置 recordType 并添加一个环境变量。然后确保其中只有 1 条记录,无论是生产还是开发。在开发时将环境变量设置为开发,在生产时将该变量设置为生产。然后在您的应用程序中只需读取该记录即可了解您所处的环境。
有一种不依赖数据操作的方法,那就是:尝试在虚拟记录类型中创建一个新的随机字段名称。在开发上,这将会起作用。在生产中你会得到一个错误。
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |