簡體   English   中英

如何在Cocoa應用程序和iOS應用程序之間測試iCloud同步

[英]How to test iCloud synchronisation between Cocoa app and iOS app

我的問題很簡單:

我現在正在開發將數據存儲在iCloud (鍵值存儲)中的Cocoa應用程序 為了測試 iCloud同步,我構建了一個簡單的iOS應用 ,並將其安裝在我的設備中

我在可可應用中進行了iCloud初始化

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdatedFromCloud:) name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification object:[NSUbiquitousKeyValueStore defaultStore]];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];

和選擇器:

+(void)dataUpdatedFromCloud:(NSNotification *)notification {
    NSLog(@"dataUpdatedFromCloud: %@", [[NSUbiquitousKeyValueStore defaultStore] objectForKey:@"theKey"]);
}

以捕獲來自iCloud的數據。

我在iOS應用程序中執行所有相同的操作,但是當我將數據存儲在NSUbiquitousKeyValueStore中時,需要執行額外的操作:

// Script 1
[[NSUbiquitousKeyValueStore defaultStore] setDictionary:@{@"id":@1} forKey:@"theKey"];

我的測試方案是:

  1. 在Xcode中運行可可應用程序
  2. 在我的設備上運行iOS應用
  3. 在iOS應用中,我有一個按鈕,它調用腳本1
  4. 在這里,我希望可可應用程序會在10-20秒內調用dataUpdatedFromCloud但是不會!!!

我所做的一切是否正確,或者我理解不正確?

好吧,也許吧,但是失敗的原因包括:

  • 兩個應用程序上的iCloud容器ID並不完全相同。 一方面,這很明顯,但另一方面,這是最容易搞砸的事情,因此請再次檢查。
  • iCloud容器ID可以,但是配置文件實際上並未在兩個應用程序中都啟用iCloud。 您應該在兩個應用程序中都檢查ubiquityIdentityToken以進行驗證。
  • 例如,當應用未運行時,該值已經同步。 如果更改是在應用程序運行時發生的, 並且新值與舊值不相同則只會發布您要查找的通知。 由於您始終將@1設置為值,因此很有可能已經接收到該值,並且新嘗試不會更改任何內容。 對於測試,將@1替換為@1 @([NSDate timeIntervalSinceReferenceDate])可能有助於確保每次獲得的值都不同。
  • iCloud暫時被混淆/崩潰/損壞/只是緩慢。 盡管10到20秒是合理的,但不能保證性能。 如果它在30秒甚至30分鍾后顯示,則仍按廣告宣傳工作。

通過重置iCloud的文檔和數據,我已經成功地解決了iCloud同步問題,如下所述: http : //support.apple.com/kb/HT5824

有時,iCloud對其已同步的內容以及在何處感到困惑-測試(尤其是當您進行重復的相同更新時)在我的體驗中尤其如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM