在Xcode中手動設置版本號和版本號很容易,並且我學會了如何在構建時使用宏來增加它們。但是,我如何在代碼中引用它們的值?參考代碼中的內部版本號或版本號
回答
當然,你可以問你的主束的信息目錄,其中包括您的info.plist的所有鍵和值,包括版本號:
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleShortVersionString"];
你可以得到的info.plist值這片代碼(與要比照Recommended Info.plist Keys Info.plist中的主要替代CFBundleShortVersionString
)
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDict objectForKey:@"CFBundleShortVersionString"]; // example: 1.0.0
NSString *buildNumber = [infoDict objectForKey:@"CFBundleVersion"]; // example: 42
這是否記錄在Apple文檔的任何位置?謝謝! – snowbound 2014-10-02 03:10:34
https://developer.apple.com/library/ios/documentation/general/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html記錄了可以在應用程序(實際上是任何包)中Info.plist的密鑰,包括這些二。 – 2014-10-02 03:31:19
NSBundle *bundle = [NSBundle mainBundle];
NSString *appVersion = [bundle objectForInfoDictionaryKey:(NSString *)@"CFBundleShortVersionString"];
NSString *appBuildNumber = [bundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
由於這些值存儲在應用程序的Info.plist
你可以通過設置在NSBundle
方法讀取,然後:
NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: CFBundleShortVersionString];
見Accessing bundles contents作爲權威參照從你的Info.plist文件和Core Foundation keys可用的Info.plist獲取數據鍵。
@robo 我確實按照如何自動增加內部版本號(不是版本號,但是非常相似)寫了一篇文章,但現在我找不到它了。我會盡力解釋我做了什麼。我希望已經足夠清楚了。
在Xcode 4中,查看Navigator窗格,它是Xcode屏幕左側的窗格。它在頂部有7個圖標。選擇最左邊的圖標(看起來像一個文件夾)以獲得Project Navigator窗格。
現在單擊該窗格中的第一項,即項目本身。這在中間打開一個大窗口,左邊有一個窄欄。
窄欄包含2個部分:「PROJECT」和「TARGETS」。在「TARGETS」部分點擊您的項目名稱。現在中間窗格頂部有5個選項卡:「摘要」,「信息」,「生成設置」,「生成階段」和「生成規則」。
點擊「Build Phases」標籤。如果您的配置與我的配置相同,您現在將在主窗口中看到4個部分:「目標相關性」,「複製束資源」,「編譯源」和「鏈接...」。點擊「添加生成階段」(在右下角)並選擇「添加運行腳本」。第5部分現在出現在中心窗格中,標題爲「運行腳本」。將「運行腳本」部分向上拖動,使其位於「目標相關性」下方的第二部分。
現在單擊運行腳本部分的顯示三角形。這將打開一個窗口,您可以在其中放置腳本。將以下腳本複製並粘貼到該窗口中。
#!/bin/bash
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
bN=$((0x$bN))
bN=$(($bN + 1))
bN=$(printf "%X" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"
確保「只安裝運行腳本時,」未選中。
就是這樣!現在,每次構建項目時,您的內部版本號都會自動遞增。
此腳本假定您的info.plist文件中有一個純正的十六進制內部版本號,並將其作爲十六進制進行遞增。我不確定如果內部版本號丟失會發生什麼。但輸入起始值很簡單 - 只需在上面使用的同一個中心窗格中的「摘要」選項卡上,然後在「生成」框中輸入「1」(或任何您喜歡的值)(但不是格式化的像1.0的字符串)。
我認爲我先給的十六進制腳本不適用於提交到App Store。這是使用十進制算術的相同腳本。
#!/bin/bash
bN=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
((bN += 1))
bN=$(printf "%d" $bN)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bN" "$INFOPLIST_FILE"
非常感謝。 (10char) – phlebotinum 2012-04-09 11:02:25
令我驚訝的是,我已經瞭解到,十六進制版本號未通過App Store的驗證。我在下面發佈了一個回覆,其中包含一個修改後的十進制算術腳本。見下文。 – RobertL 2013-01-26 17:41:34
我繼續前進,並在您的小數點腳本中對此答案的底部進行了編輯。這樣,其他答案可以刪除,減少一些雜亂無章。 – thegrinner 2013-06-28 18:33:07
在斯威夫特:
let version = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as? String
- 1. ASP.Net版本號/內部版本號
- 2. 新版本的Xcode內部版本號
- 3. 內部版本VS版本號
- 4. 版本內部版本號與TortoiseSNV
- 5. Xcode版本和內部版本號
- 6. Xcode的內部版本號
- 7. 顯示Silverlight應用程序的內部版本號或版本?
- 8. 將Octopack nuget版本號更改爲teamcity的內部版本號
- 9. MonoTouch的自動增量內部版本號版本號爲
- 10. 內部版本號/指紋
- 11. TFS 2015內部版本號
- 12. TeamCity內部版本號與Ant版本號任務
- 13. BIOS內部版本號和標識號?
- 14. 需要跨幾個文件設置版本號或內部版本號
- 15. SQL Azure中的內部版本號
- 16. 保存代碼 - R中的版本號
- 17. 以前版本號的版本號
- 18. App store的版本號和版本號
- 19. Maven,刪除部分版本並替換內部版本號
- 20. 如何在NPM版本中表示內部版本號?
- 21. 在C#代碼中增加版本號
- 22. 當項目內部版本號爲x.x. *或x.x.x. *時,Visual Studio生成內部版本號的規則是什麼?
- 23. 版本號不使用SVN版本號
- 24. 「沒有版本符號的符號版本部分」
- 25. 哈德森不增加失敗版本的內部版本號
- 26. 瞭解內部版本號在Android的
- 27. iTunes Connect的內部版本號重置
- 28. Inno setup的每頁內部版本號
- 29. maven版本插件沒有獲取內部版本號
- 30. Xcode版本和內部版本號並提交給iTunes Connect
你有關於如何AUTOCREATE版本#分別引用/鏈接? – phlebotinum 2012-04-04 16:27:44
@robo在下面看到我的「回覆」。 – RobertL 2012-04-08 17:22:10