有沒有什麼辦法可以在我的LaunchStoryboard中將CFBundleShortVersionString顯示爲UILabel文本,而不必每次手動輸入時都手動輸入它?我知道如何在代碼中完成它,但LaunchStoryboard顯示時無法運行代碼。
是否有可能通過Xcode變量?如何在我的LaunchStoryboard中顯示CFBundleShortVersionString?
回答
我想出了一個腳本,根據第一個答案更新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
注: '>>>改變我< < <' 是一個項目名稱。
作爲獎金我已經包含了內部編號增量器和開/關腳本切換。如果您有任何問題或者這對您有用,請告訴我。
編輯
有沒有辦法使發射屏幕動態。不能與本地化太等
一個替代方案是低於
以前的答案給出
你應該讓你的inital VC類似LaunchScreen.xib且在工作良好 製作一個標籤。
現在在ViewController中,您可以通過NSBundle方法訪問信息plist並設置其值。這將使從啓動屏幕過渡到第一個VC平穩,如果你想
let appVersion = NSBundle.mainBundle().infoDictionary["CFBundleVersion"];
myLabel.text = "\(appVersion)"
我們都知道看起來自然與版本代碼動畫什麼的,你不能把代碼在發射畫面。不幸的是,在啓動屏幕中沒有內置的方式來爲標籤的文本使用變量(類似於您可以使用頭文件中的值預處理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
這個最終版本實際更新推出屏幕故事板文件。以前的版本是一個測試,以確保其他一切工作沒有風險搗毀你的故事板。
感謝您的回答。它幫助我走上了正確的軌道:我不是使用'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' –
- 1. 如何在我的JTextPane中顯示Applet
- 2. 在構建時更新dSYM中的CFBundleShortVersionString?
- 3. CFBundleShortVersionString不匹配
- 4. 如何在列中顯示json?我的json不顯示
- 5. 我如何顯示在樹
- 6. iPhone:如何獲取CFBundleShortVersionString作爲std :: string?
- 7. 如何獲得CFBundleShortVersionString爲常數
- 8. 我如何在GridView中顯示圖像?
- 9. 我如何顯示循環中的div
- 10. 如何顯示我的android系統中
- 11. 如何顯示在我的wordpress主題
- 12. 如何顯示圖像我在PyQt4的
- 13. 如何在我的UITableView上不顯示「...」?
- 14. 如何使用數據在我的popoverController中顯示我的tableview
- 15. 如何將我的數據顯示在我的ALV中?
- 16. 我如何在java中顯示我的哈希表的內容
- 17. 如何在我的SKLabelNode中顯示我的計時器?
- 18. 如何在我的iApp中顯示我的信息視圖
- 19. Javafx - 我如何推遲在我的textarea中顯示新行?
- 20. 我如何在python 3.3中顯示我的句子?
- 21. 我如何始終在Google地圖中顯示我的位置
- 22. CSS:我如何顯示我的區塊?
- 23. 如何讓我的Android TODO在Eclipse中的任務中顯示?
- 24. 如何在我的視圖中顯示Codeigniter中的adodb數據?
- 25. 我該如何顯示getUserMedia()
- 26. 我如何顯示UIViewAnimationOptionTransitionCurl(MapCurl)?
- 27. 我如何顯示網址
- 28. 我如何顯示循環
- 29. 我如何顯示圖像?
- 30. 如何顯示在GridView中
看看我更新的答案。它現在有一個完整的解決方案。 – rmaddy