2012-04-19 74 views
2

我已經在我的(現有)應用上工作了一段時間,以添加支持iCloud同步功能。總體而言,我有應用程序的3個版本:拒絕iCloud權利

一)普通iPhone版
B)精簡版(免費)iPhone版
C)iPad版

我想使用的iCloud,使核心數據所有3個版本/設備之間的存儲同步。我已經實現了,我放在我的設備上的開發版本運行良好。

昨天我決定提交了iPhone版本,但他們得到了拒絕:

無效代碼簽名應享權利 - 簽名爲您的應用程序包包含不支持的權利值。對於com.apple.developer.ubiquity-容器標識符權利,數組中的第一個值必須由Apple在提供配置文件中提供的前綴後跟一個包標識符後綴。捆綁軟件標識符必須與您的某個應用或允許用作iCloud容器標識符的其他應用的捆綁軟件標識符匹配。

具體而言,不支持[my app]中關鍵的「com.apple.developer.ubiquity-container-identifiers」的值「[teamid] .com。[myself]。[somename]」。

我真的不知道這些標識符應該是什麼樣子。本頁內容:https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iCloud/iCloud.html#//apple_ref/doc/uid/TP40007072-CH5-SW1他們對我的其他應用程序的容器說了一些話...我必須爲我的應用程序的3個版本添加3個容器嗎?到目前爲止,我配置下的項目/目標/摘要/權利:

[X]的iCloud鍵值存儲:。com [自己] [somename]
iCloud的容器:。。com [自己] [somename]

所有3個版本(相同的標識符)。我必須準確配置什麼,以便所有3個版本都能通過iCloud同步其核心數據存儲數據庫?

+0

同時給予了iCloud的支持下,我們應該在現有工作的應用程序ID啓用iCloud中,或者我們應該創建iCloud的新的應用程序ID啓用? – 2014-11-05 17:01:53

回答

2

根據iCloud Design Guide: iCloud Fundamentals,所有共享您的iCloud容器的應用程序都可以使用單個iCloud容器(如果這是您的願望)這樣做。這裏美中不足的是,主(第一)容器ID必須是捆綁ID您當前應用程序的正在開發,或包ID任何您先前提交的應用程序(即共享相同團隊ID)。

我去拿一個例子,

讓我們假設你的應用程序經常iPhone應用程序(一)具有包IDcom.yourteam.iphoneapp,這是您提交的一個第一和在App Store上可用。然後,您必須爲所有其他版本提供與主iCloud容器ID相同的ID。

這裏有一個相關的部分進行了上述文件的:

在Xcode目標編輯器的摘要選項卡,您可以根據您的需要爲您的應用程序請求訪問的 許多無處不在的容器。例如,假設您提供免費和付費版本的應用程序,請致電 。您希望升級的用戶保留對其iCloud文檔的訪問權限。或者,也許你提供了兩個互操作的應用程序,並且需要訪問彼此的文件 。在這兩個示例中,您都可以通過 獲得所需的訪問權限,指定一個普通的無所不在容器,然後請求訪問來自每個應用程序的 。

  1. 選擇您的一個啓用iCloud的應用程序作爲常見的無處不在容器的主要應用程序。您選擇的應用程序可以是當前正在開發的 ,也可以是您在App Store中提交的 分發的其他應用程序,其應用程序使用相同團隊 ID。
0

enter image description here您需要創建3個分離的啓用iCloud的臨時配置文件。運行相同版本應用的設備可以在同一個iCloud容器上共享數據。但是,如果您希望任何設備運行這三個版本的應用程序中的任意一個來共享數據,則需要在每個版本的權利部分中添加這些標識符。

有在iCloud上很好的教程從http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1

編輯:

我增加了一個樣品圖片爲你的情況。另外,下面的文本摘自該網站上的教程:

這裏我們使用一種您尚未見過的稱爲URLForUbiquityContainerIdentifier的新方法。此方法允許您傳入容器標識符(就像您之前在iCloud Containers部分中設置的那樣),它將返回給您一個用於訪問iCloud存儲中的文件的URL。

您需要在啓動時調用您希望訪問的每個容器,以便您的應用訪問該URL的權限。如果您將方法傳遞給nil(就像我們這裏所做的那樣),它會自動返回爲該項目設置的第一個iCloud容器。由於我們只有一個容器,這使得它很好,很容易。

+0

恐怕我還沒有得到它。我確實有3個獨立的供應配置文件,全部用於其啓用iCloud的自己的應用程序ID。 http://d1xzuxjlafny7l.cloudfront.net/wp-content/uploads/2011/10/entitlements.png我必須把什麼作爲鍵值存儲?配置門戶中相應版本的XXXXXXXX.com.myself.appname字符串?或者只是com.myself.appname,如教程中所示?什麼是容器?其他版本的com.myself.appname? (共3個)我想知道我的開發版本是如何同步的。我基本上和所有版本的嘖嘖一樣。 – user826955 2012-04-19 20:29:07

+0

我用圖片編輯了答案。 – user523234 2012-04-20 01:40:57

+0

謝謝,它現在變得更清晰了。您放入圖片的密鑰必須與我的應用程序的捆綁標識符相對應,還是可以是任意名稱? 另外,如何確保核心數據存儲已同步?我需要將其中一個容器密鑰傳遞給NSPersistentStoreCoordinator選項。這是3個版本的3種不同的選擇,還是我會傳遞相同的容器id到所有3個NSPersistentStoreCoordinator(iphone/lite/ipad)?我的意思是,3個容器會自動同步,還是必須選擇1個容器才能在3個設備之間共享? – user826955 2012-04-20 06:19:59

1

您現在可能已經解決了此問題,但答案是您只需在所有應用程序中使用相同的無處不在容器標識符。你只需要一個,它不依賴於應用程序的名稱:注意蘋果告訴你使用「[teamid] .com。[我]」[somename]「not」[teamid] .com。[我]。 [appname]「。使用應用程序之間一致的「某個名稱」,而不是「應用程序名稱」。

+0

感謝您的信息。我真的放棄了iCloud的同步,看到許多開發者仍然面臨使用coredata/icloud同步問題。我決定是否和何時開始另一次嘗試,但如果我這樣做,我一定會記住你的建議。 – user826955 2013-02-06 09:36:33

+0

感謝您的澄清,我將實際沿着這個方向前進,以便讓我的類似應用程序在它們之間共享用戶創建的文檔。 – Kuoni 2013-08-06 18:19:33