2016-05-13 23 views

回答

2

我想出了一個腳本,根據第一個答案更新LaunchScreen.storyboard上的版本&構建標籤,而不使用任何額外的文件。不幸的是,Clemens Brockschmidt的解決方案由於某些語法錯誤和不正確的路徑而不起作用。

確保在標識檢查器窗格 - >文檔 - >標籤中將您的標籤命名爲「APP_VERSION」。

還在「複製捆綁軟件資源」階段之前創建腳本。

這裏與外殼的最終工作腳本:在的XCode 9(SWIFT 4)/bin/sh的:

# ON/OFF Script Toggle (script ON with #, script OFF without #) 
exit 0 

# Increment build number 
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}") 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" 

# Output version & build numbers into a label on LaunchScreen.storyboard 
versionNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}") 
sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"Version: $versionNumber Build: $buildNumber\"/" $PROJECT_DIR/>>>CHANGE ME<<</Base.lproj/LaunchScreen.storyboard 

注: '>>>改變我< < <' 是一個項目名稱。

作爲獎金我已經包含了內部編號增量器和開/關腳本切換。如果您有任何問題或者這對您有用,請告訴我。

-1

編輯

有沒有辦法使發射屏幕動態。不能與本地化太等

一個替代方案是低於

以前的答案給出

你應該讓你的inital VC類似LaunchScreen.xib且在工作良好 製作一個標籤。

現在在ViewController中,您可以通過NSBundle方法訪問信息plist並設置其值。這將使從啓動屏幕過渡到第一個VC平穩,如果你想

let appVersion = NSBundle.mainBundle().infoDictionary["CFBundleVersion"]; 
myLabel.text = "\(appVersion)" 
+0

這是如何在啓動屏幕上顯示版本的?在啓動屏幕故事板中不能有代碼。 – rmaddy

+0

從問題我可以看到的要求是有初始屏幕顯示數字,而不必每次輸入,這將使其自動和從啓動屏幕過渡到版本屏幕仍然看起來自然 – Shubhank

+0

OP要版本出現在啓動屏幕上。不是啓動屏幕後顯示的一些屏幕。 – rmaddy

5

我們都知道看起來自然與版本代碼動畫什麼的,你不能把代碼在發射畫面。不幸的是,在啓動屏幕中沒有內置的方式來爲標籤的文本使用變量(類似於您可以使用頭文件中的值預處理Info.plist)。

可用於實現您的目標的唯一選項是編寫您自己的腳本來更新LaunchScreen.storyboard文件並將該腳本作爲目標的自定義Build階段添加。

爲了使這更容易,我將設置您的目標使用Info.plist的預處理器文件。完成並運行後,您現在可以在腳本中查詢單獨且簡單的頭文件來處理LaunchScreen.storyboard文件。

下面是一個完整的解決方案:

創建一個名爲Info.h文件,並將其添加到您的項目的根。

添加以下行:

#define APP_VERSION 2.6 // Update this version as needed 

現在在Xcode中選擇項目的目標,然後轉到常規選項卡。將版本值從您擁有的任何數字更改爲APP_VERSION

現在選擇Build Settings標籤。在Info上搜索。在「包裝」部分下,將Preprocess Info.plist File設置爲Yes。同時將Info.plist preprocessing Prefix File設置爲Info.h

現在,當您執行構建時,Info.plist中的CFBundleShortVersionString值將設置爲Info.h文件中的值。

要獲得更新,以匹配啓動畫面文件的標籤,請執行以下操作:

選擇啓動屏幕的故事板,然後選擇將包含版本號的標籤。顯示Identity Inspector窗格。在標籤屬性中輸入APP_VERSION。如果現在查看故事板文件,則標籤的XML現在將顯示一個userLabel屬性,其值爲APP_VERSION

返回到項目目標並選擇Build Phases選項卡。點擊+圖標,然後選擇添加新的運行腳本階段。將新階段重命名爲「Update Launch Version」等有用的東西。然後將新階段拖到現有的「複製包資源」階段之前。

現在打開新的「更新啓動版本」階段。在Shell字段中輸入/bin/bash。將以下代碼複製並粘貼到階段:

VERSION=`cat Info.h | grep APP_VERSION | cut -f3 -d' '` 

sed -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$VERSION\"/" Storyboard.storyboard > tmp.storyboard 

現在做一個乾淨的構建。這是一個測試在這一點上。看看tmp.storyboard並確保它看起來正確,並且應用程序版本的標籤顯示正確的版本。

一旦這些工作,更新上面的代碼:

VERSION=`cat Info.h | grep APP_VERSION | cut -f3 -d' '` 

sed -i bak -e "/userLabel=\"APP_VERSION\"/s/text=\"[^\"]*\"/text=\"$VERSION\"/" Storyboard.storyboard 

這個最終版本實際更新推出屏幕故事板文件。以前的版本是一個測試,以確保其他一切工作沒有風險搗毀你的故事板。

+0

感謝您的回答。它幫助我走上了正確的軌道:我不是使用'Info.h'文件來設置版本號,而是直接從我的'Info.plist'中讀取它。這是我的完整腳本,不需要額外的文件:'BUNDLE_ID = $(/ usr/libexec/PlistBuddy -c「打印:CFBundleShortVersionString」「Info.plist」) sed -i bak -e「/ userLabel = \」APP_VERSION \ 「/ s/text = \」[^ \「] * \」/ text = \「$ BUNDLE_ID \」/「LaunchScreen.storyboard' –

相關問題