我的應用程序使用Cocoa Framework Sparkle部署更新。我通常不會部署我的軟件的測試版,但對於我的下一次更新,我覺得我需要。 我的問題是使用Sparkle部署測試版的最佳編號策略是什麼。對於測試我的測試版的任何人,我希望在發佈下一個正式版本時更新是無縫的,但對於其他用戶,我希望整個系統完全不可見。我目前使用1.2.3的編號系統進行更新。部署Beta軟件更新和Sparkle
回答
最好的方法可能是完全斷開你的CFBundleVersion(它必須包含唯一的數字,並且被Sparkle的版本比較和操作系統使用)和CFBundleShortVersionString(它可以被任何東西和用戶看到)。
然後,你只需要確保你的CFBundleVersion隨着時間的推移總是增加,但可以是任何東西[*],而你分別使用1.2.4b和1.2.4作爲CFBundleStortVersionString。只要該測試版的CFBundleVersion高於當前的CFBundleVersion,並且最終的非beta版發佈的CFBundleVersion高於測試版,則所有內容都會按照您的想法運行。請注意,儘管Apple的文檔沒有提及它,但9999.99.99幾乎是LaunchServices可以識別的最高版本,並且它將忽略超出第三個的任何數字塊,因此計劃使用一個方案甚至不會比這更高; Sparkle更新仍然有效,但操作系統會對最新版本的副本感到困惑。
我喜歡使用Xcode附帶的Apple版本控制工具。它維護一個與您的營銷版本號(1.2.3)不同的並行內部編號(例如12345)。您可以使用命令行工具agvtool
來調用它。
更重要的是,如果您使用Subversion或CVS作爲您的版本控制系統,該工具具有內置支持。例如,我想增加我的版本號,我只是在終端輸入:
agvtool -usesvn bump -all
這增加我的應用程序的每個目標的版本號,更新Info.plist
文件,然後提交整個事情自動到SVN。還有一個new-marketing-version
動詞,您可以使用該動詞在所有項目的目標中設置CFBundleShortVersionString
。查看agvtool
的手冊頁(即在終端輸入man agvtool
)以獲取更多詳細信息。
那麼這與Sparkle有什麼關係呢?我使用內部編號作爲我的sparkle:version
號碼。使用內部版本號讓Sparkle很容易判斷它是否是當前版本。爲了用戶的利益,我喜歡在營銷版本號中輸入版本號。所以我的測試版本號如下所示:1.2.3 (456)
。蘋果公司和Safari做了一些非常相似的事如果我現在進入Safari>關於Safari,我會看到4.0.2版本(5530.19)。
我最近也考慮過這樣做。我的應用程序的開發設置是Xcode(顯然)使用Sparkle,並且我將代碼保存在Mercurial存儲庫中。作爲我的構建過程的一部分,我使用「hg id」查詢Mercurial來填充Info.plit。這是在我的Xcode目標的構建腳本中完成的。這是腳本:
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion `/usr/local/bin/hg id -in`" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString `/usr/local/bin/hg id -t`" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
因此,對於beta版本,我可以標記我變更爲「0.29b」或什麼的。爲了讓這個誰想要得到beta版本我實現SUUpdater委託方法的用戶:
#pragma mark -
#pragma mark SUUpdate Delegate methods
- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile {
if([[NSUserDefaults standardUserDefaults] boolForKey:BSEnableBetaUpdates]) {
return [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"beta", @"key", [NSNumber numberWithBool:YES], @"value", @"Enable beta updates", @"displayKey", @"Yes", @"displayValue", nil], nil];
} else {
return nil;
}
}
哪裏BSEnableBetaUpdates是得到通過我的喜好窗口用戶設置的常數。它所做的是確保對您的供稿網址的GET請求包含beta = 1。在服務器上,您可以對此進行解釋並提供Beta版本的Appcast,或者它不存在正常版本。我不會解釋你如何做到這一點,無論是使用PHP,.htaccess。
- 1. ILCrashreporter打破Sparkle更新
- 2. 部署和自動更新
- 3. 軟件部署過程
- 4. Bitrise的Fabric/Crashlytics beta部署
- 5. 軟件更新和UAC
- 6. 軟件更新
- 7. 從應用程序外部調用Sparkle更新程序
- 8. AIR企業部署和更新
- 9. 更新組件,不再部署clickonce
- 10. 微軟構建和持續部署 - 機
- 11. Mountain Lion上的Sparkle更新 - 開發人員ID是否與Sparkle一起工作?
- 12. IntelliJ未更新Glassfish部署
- 13. MDM模式更新部署
- 14. 在Windows上部署軟件時,更新/更新Mac OS X應用程序包中的文件
- 15. 部署Windows Azure的部署問題,僅部署新的/更新的內容
- 16. 針對特定用戶的clickonce部署策略更新進行beta測試
- 17. Weblogic OSGI軟件包熱部署
- 18. 軟件包部署最佳定義
- 19. 如何迭代地部署軟件?
- 20. 部署:MSI軟件包vs腳本
- 21. 虛擬環境中的軟件部署
- 22. Web部署軟件包失敗
- 23. 遷移軟件部署在Linux VM?
- 24. 部署Vosao在Capedwarf Beta 3中
- 25. 部署在AWS上的惡意軟件/廣告軟件Elasticbeanstalk
- 26. python卸載和更新軟件包
- 27. 更改在JBOSS中部署軟件包的順序保險絲
- 28. MVN部署:部署文件RPM和TGZ
- 29. Clickonce部署 - 如何做部分更新
- 30. 重新部署ClickOnce部署
我選擇這樣做的方式是將CFBundleVersion從1.2.5更新到1.2.5.1,並將CFBundleShortVersionString更新爲1.2.6 beta。當我發佈最終版本時,我會將CFBundleVersion更新到1.2.6,然後所有用戶都可以使用最新版本,包括beta測試者和非beta測試者。唯一的問題是,我無法使用Sparkle更新測試版測試人員使用的版本,但對於當前的測試,我希望只需要一個測試版。 – 2009-07-25 07:08:44