2013-10-31 433 views
4

我正在開發一個iOS應用程序,該應用程序應該被標記爲不同的客戶。目前的問題是我需要兩個版本的應用程序(一個用橙色主題,另一個用紅色主題)同時安裝。完成此操作的最佳方法是什麼?安裝兩個版本的相同iOS應用程序

回答

8

您只需要使用兩個不同的捆綁標識符。這可以在info.plist中設置:CFBundleIdentifier。 您可能想要設置使用不同版本的info.plist的不同目標或方案。

+0

簡單而有效,謝謝! – user1354603

0

爲同一個項目設置兩個不同的目標。然後,在每個目標中定義您在代碼中使用的預處理器宏,以區分應用程序的版本。例如,您可以有:

if (FREE_VERSION == true) { 
    ... 
} 
else { 
    ... 
} 
+1

這將不允許您在設備上並行安裝應用程序。 – FelixLam

+0

是的,你可以在你的設備上有不同的版本。我可以告訴你,因爲這是我處理同一應用的免費和高級版本的方式。 –

+0

你可能也會在info.plists中使用不同的'CFBundleIdentifier'值。也許這取決於變量'FREE_VERSION'。 – FelixLam

0

您必須爲每個目標創建兩個具有不同捆綁標識符的目標。

+1

你不需要有單獨的目標。這可能會幫助您進行開發,但對於此設置不是必需的。 – FelixLam

4

我更喜歡在沒有維護兩個單獨的plist文件的情況下通過在「存檔」操作的自定義「Pre-actions」構建腳本中對plist文件進行後處理。

這有助於避免某些人在更改某些內容時忘記更新兩個plist文件的問題。

我使用這種機制來構建可以上傳到TestFlight的應用程序的測試版本,以便我的測試人員可以同時安裝實時版本和當前測試版本。

(注:雖然這個劇本要「預動作」一節中,這是一個真正的後處理步驟,因爲它發生的XCode已經做了所有的變量替換後進入plist文件)

設置(這些說明適用於XCode 5.0.1),重複您現有的方案並將其稱爲適當的。

選擇「編輯方案」,並展開左側選項卡中的「存檔」項目。這應該給你「預先行動」,「存檔」和「後行動」子項目。點擊「預先操作」之一,然後在右側的選項卡中,點擊底部的「+」以添加新的「運行腳本操作」。

我在我的構建腳本中使用Ruby,所以我在頂部的「Shell」框中輸入「/ usr/bin/ruby​​」,但顯然你可以在bash或類似的地方做同樣的事情。

在「Provide build settings from ...」下拉列表中選擇您的項目。

然後你就可以在底部的框下面的代碼的一些變種粘貼(或把它放在一個文件,並將該文件拖動到箱):

def changeBundle(file) 
    oldId = `/usr/libexec/Plistbuddy -c "print :CFBundleIdentifier" #{file}`.strip 
    system("/usr/libexec/PlistBuddy -c \"Set :CFBundleIdentifier #{oldId}_test\" #{file}") 

    oldName = `/usr/libexec/Plistbuddy -c "print :CFBundleDisplayName" #{file}`.strip 
    system("/usr/libexec/PlistBuddy -c \"Set :CFBundleDisplayName #{oldName}-Test\" #{file}") 
end 

changeBundle("#{ENV['CODESIGNING_FOLDER_PATH']}/Info.plist") 

此更新CFBundleIdentifier(添加'_test')和CFBundleDisplayName(添加'-Test'),以便應用程序明顯不同。自定義以進行所需的任何更改。

更改文件的代碼位於函數中的原因是,如果需要,可以輕鬆地對多個plist文件進行相同的更改。

在這種情況下,您不需要這樣做(因爲您可能只是想更改進入輸出存檔文件的內容),但我的其他一些構建腳本會自動更新版本號,並且我希望這些更改能夠被檢入到git中。如果你需要做這樣的事情,你可以修改源plist文件,也可以在底部添加這個文件:

changeBundle("#{ENV['PROJECT_DIR']}/#{ENV['INFOPLIST_FILE']}") 
+1

我知道這個評論是在一年前,但如果你碰巧看到我的評論,你能否詳細說明一下使用這種方法的細節?我假設你必須爲你的_test包ID創建一個新的App ID和關聯的配置文件?另外,我希望瞭解有關更新版本號的構建腳本的更多信息。在構建階段的什麼時候你運行這些? – mbeaty

+0

我使用這種方法爲本地開發創建了一個-Dev版本,這樣我就可以測試我的應用程序的空狀態而不刪除我在生產版本中使用的所有個人數據。 – astromme

相關問題