我的iOS和Mac应用程序已经启动到App Store,我的所有用户(包括我自己)都在使用CloudKit生产数据库。 我的问题是,有没有办法针对我的开发版本的生产环境? 似乎没有办法在Mac App Store之外定位生产环境,而对于iOS,只有Ad Hoc分发可以针对生产环境。
我正在使用一个基于CloudKit的应用程序,它使用CKSubscription通知来跟踪对公共数据库的更改。 每当应用程序收到一个推送通知,我检查CKFetchNotificationChangesOperation通知队列,并标记处理后读取每个通知: __block NSMutableArray *notificationIds = [NSMutableArray new]; CKFetchNotificationChangesOperation *operation = [[CKFetchNotificationChangesOperation alloc] initWithPreviousServerChangeToken:self.serverChangeToken]; operation.notificationChangedBlock = ^(CKNotification *notification) { [notificationIds addObject:notification.notificationID]; [self processRemoteNotification:notification withCompletionHandler:completionHandler]; }; __weak CKFetchNotificationChangesOperation *operationLocal = operation; operation.fetchNotificationChangesCompletionBlock = ^(CKServerChangeToken *serverChangeToken, NSError *operationError) { if (operationError) { NSLog(@"Unable to fetch queued notifications: %@", operationError); } else { self.serverChangeToken = serverChangeToken; completionHandler(UIBackgroundFetchResultNewData); // […]
CKFetchNotificationChangesOperation返回INSERT操作,但UPDATE和DELETE不总是。 当我将应用程序提交给App Store时,DELETE,UPDATE最后工作,但现在不再。 为什么? 我创build了如下订阅: let s = CKSubscription(recordType: recordType, predicate: NSPredicate(value: true), options: .FiresOnRecordCreation | .FiresOnRecordUpdate | .FiresOnRecordDeletion) s.notificationInfo = CKNotificationInfo() subscriptionsToSave.append(s) 仪表板显示所有树触发器: 我不使用任何alertBody ,所以通知是所谓的无声通知,可以是原因吗? 在CloudKit提示和技巧讲师说,订阅需要开发者门户打开的应用程序ID的APSfunction。 我不认为我有,但我只是想获取通知,只有这样的工作推。 后台function? – 一样 在应用程序的信息列表中需要设置APS环境密钥。 – 我想我有。
编辑 :今天27.08.2015重新testing,它再次运作,苹果已经修复它。 我有一个应用程序在开发模式。 应用程序使用CKSubscription来获取服务器上的更改通知,为所有三个选项进行configuration:创build,更新,删除。 一切工作正常,但最近在回归testing期间,我发现应用程序没有收到logging更新通知,创build和删除通知仍然工作。 当我在仪表板上选中时,所有三个选项的设置都正确,并且应用程序注册了CKSubscription,因为它是几天前像魅力一样工作的。 我没有从CloudKit获得任何错误。 开发环境的重置没有帮助。 我已经重新testing了这个版本,我确信它正在工作,并得到了相同的结果。 任何想法可能会导致这个问题,还有什么我应该检查/尝试? 附加信息:我想在服务器端可能会出错。 在订阅CloudKit事件和处理推送通知的代码中,我没有更改任何内容,无论如何,它的工作版本也没有得到更新通知。 我正在编写的应用程序已经发布,因此更换容器是不行的。 不知道这是否会导致这个问题,只是想提一下:应用程序使用相同的容器在云中存储核心数据 – 应用程序升级的目标是将数据迁移到CloudKit并将其用作云专门存储。 令人困惑的是,一切工作都好几个星期,并没有任何明确的理由突然停止工作,可能作为加载testing的影响,增加loggingtypes… testing从头开发的应用程序:我已经写了一个简单的testing应用程序来检查接收通知。 我只能收到创buildlogging的通知。 我的代码有什么问题: import UIKit import CloudKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? let container = CKContainer.defaultContainer() func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let settings = UIUserNotificationSettings(forTypes: .Alert, categories: nil) application.registerUserNotificationSettings(settings) […]
苹果文档表示,从应用程序的CloudKit公共数据库中读取数据可能不需要iCloudlogin,但写入不能。 保存或更新logging到公共数据库需要一个iCloudlogin。 如果您想以pipe理员身份种植和维护公共数据库,该怎么办? 例如,对于地图应用程序,如果您作为pipe理员想要使用每个国家/地区的人口统计数据填充和维护公共数据库,那么您的stream程是否仍需要iCloudlogin? 如果发布代码片段,Swift是首选。 谢谢。
对Cloudkit私有默认区域的查询结果是否有限制? 我不知道为什么我只收到前100个logging与以下查询: let p = NSPredicate(format: "(type == 'entered') AND (timestamp >= %@) AND (timestamp <= %@)", from, to) let q = CKQuery(recordType: self.beaconRecordType, predicate: p) q.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: true)] self.privateDatabase?.performQuery(q, inZoneWithID: nil, completionHandler: { results, error in //count = 100 println(results.count) } 好的。 正如Edwin在答案中提到的,解决scheme是使用CKQueryOperation获取数据的初始块,然后使用completionBlock中的“游标”来触发另一个操作。 这里是一个例子: UPDATE func fetchBeacons(from:NSDate, to:NSDate) { let p […]
我正在开发一个应用程序与Xcode 7testing版5.当我运行我的应用程序在我的iPhone 6,我尝试将它连接到CloudKit,如果我的iPhone在WiFi模式下工作,所有这些都没关系,我显示所有的数据; 但如果我的iPhone在LTE模式下工作,我看不到任何types的数据。 有谁知道如何做到这一点? func getRecordsFromCloud() { lavori = [] / let _cloudContainer = CKContainer.defaultContainer() let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase / let predicate = NSPredicate(value: true) let query = CKQuery(recordType: "Lavori", predicate: predicate) / let queryOperation = CKQueryOperation(query: query) queryOperation.desiredKeys = ["image","name"] queryOperation.queuePriority = .VeryHigh queryOperation.resultsLimit = 50 queryOperation.recordFetchedBlock = { (record:CKRecord) -> Void in […]