2011-08-24 21 views
3

背景:更新的應用程序,新的顯式應用程序ID,應用程序內購買。 SKProductsRequest返回的產品空列表

目前出售的版本我的應用程序的使用通配符應用程序ID和束ID是簡單,不符合com.companyname.appname約定(它只是'應用程序名稱「)。它使用的應用程序ID僅僅是'bundleseed。*'的格式,我相信在使用配置文件簽名時會導致'bundleseed.appname'。 (爲什麼?因爲這個應用程序自蘋果推薦顯式應用程序ID之前2.x天開始,並且在XCode引入了com.companyname約定之前)。

我正在爲應用程序添加應用程序內購買,這需要一個明確的應用程序ID。我已按照Technical Q&A QA1680 Updating from a wildcard App ID to an explicit App ID中的說明操作。其結果是我有一個新的顯式應用程序ID'newbundleseed.appname',用於簽署應用程序的新配置文件指定了這一點。 info.plist中的包ID保持相同的'appname'。

問題:

當我在舊版本上部署從Xcode中新的應用程序似乎很好地工作。舊版應用程序實例將被新應用程序替換,並且所有新功能都已到位。 但是,當應用程序提交SKProductsRequest時,會產生一個空的產品列表。如果我將新應用程序部署爲全新安裝(而不是複製舊版本),則一切都按預期工作 - SKProductsRequest將生成完整的可用產品列表。

我也注意到升級後的版本會繼承舊版本的某些方面,這對我來說很陌生。具體來說,舊版本的應用程序有一個default.png,新應用程序尚未作爲構建的一部分,但升級後的應用程序在加載時顯示舊的default.png。這就好像升級的應用程序是舊的和新的合併。

我主要關心的是應用內購買將適用於我的升級用戶。我是否在顯式應用程序ID方面做了錯誤的事,或者這只是我正在使用In App Purchase沙箱的一個問題?在這種情況下,我可以相信它會在發佈時起作用嗎?

此外,任何洞察力爲什麼/如何新的應用程序不會看起來完全取代舊的應用程序包?

我能想到的唯一事情是,而不是產生一個新的束種子(如在QA1680詳述),我應該創建新的應用程序ID時所使用的舊的包種子。即舊的應用程序ID是'oldbundleseed。*',而我目前的新應用程序是'newbundleseed.appname',也許它應該是'oldbundleseed.appname'。但是我不能這樣做,因爲配置門戶不會讓我創建一個僅由bundle種子不同的應用程序ID。如果這是我的問題,該怎麼辦?聯繫Apple?

TL/DR:現有的應用程序,一個新的明確的應用程序ID更新,以支持IAP,作品除了SKProductRequests導致當應用程序被updgraded與乾淨的空的產品列表精細安裝其中它們導致一個人口稠密的產品清單。

+0

發生這種情況時,請嘗試記錄捆綁ID。我想知道,當你將新版本加載到舊版本時,它是否可能無法正確更改。 – jtbandes

+0

@jtbandes - 包ID是正確的。有沒有辦法使用捆綁種子記錄完整的App ID?我推理說在升級場景中種子可能不正確(仍舊使用舊版本)。 – TomSwift

+0

不確定。我不認爲種子是與應用程序一起存儲的。我認爲它與配置文件有關,配置文件通過代碼簽名綁定到應用程序。你有沒有試過刪除/重新安裝你的prov。個人資料? – jtbandes

回答

3

你怎麼樣升級?如果你是做一個構建和運行,你最終會解決這個問題,其中的應用程序沒有完全重寫。 的Xcode使得一些「優化」的決定,僅複製是真的改變和它攪亂東西的文件。

創建即席分佈,並將其下載到具有應用程序的舊版本的設備。檢查該adhoc構建是否正確枚舉它。

+0

是的,我一直在做構建和運行。它已經在我的列表中嘗試了不同的部署方法,所以我會在下面嘗試。感謝您確認「xcode部署優化」 - 是否在任何地方記錄? – TomSwift

+0

我不確定任何文檔。但是,在其他情況下,我遇到了問題。例如:我對XIB文件進行了更改,但是直到我刪除應用程序並重新安裝之後,它們才從複製到設備。僅適用於Xcode 4 – Mugunth

+0

解決方案是使用臨時分發證書創建和部署即席構建。感謝您的洞察! – TomSwift

0

您是否實現了request:didFailWithError:delegate方法?它是SKProductsRequestDelegate協議符合的SKRequestDelegate協議的一部分。我不得不同意StoreKit沒有充分的文檔記錄。根據我的經驗,如果iOS看到具有不同appID的相同應用程序,則它表現得好像是兩個不同的應用程序,而不是覆蓋(或部分覆蓋)具有相同標題的應用程序。不過,如果您的開發設備已越獄:啓動應用程序(處於有問題的狀態),ssh進入您的設備,運行launchctl list並查看iOS如何在您的應用程序中標識結果列表。

相關問題