2009-08-21 79 views
5

可能重複:
How can I display the application version revision in my application's settings bundle?iPhone更新的應用程序版本(在設置)

我有一個顯示當前版本的設置iPhone應用程序不變(就像Skype的一樣)。

當我發佈應用程序的第一個版本,我用這個代碼來設置應用程序設置:

- (void)registerDefaultsFromSettingsBundle { 
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; 
    if(!settingsBundle) { 
     NSLog(@"Could not find Settings.bundle"); 
     return; 
    } 

    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]]; 
    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"]; 

    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]]; 
    for(NSDictionary *prefSpecification in preferences) { 
     NSString *key = [prefSpecification objectForKey:@"Key"]; 
     if(key) { 
      [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key]; 

     } 
    } 

    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister]; 
    [defaultsToRegister release]; 
} 

而且這個工作非常愉快。

我現在面臨的問題是,如果您更新應用程序,這些默認值(設置)也不會重新編寫,因此應用程序版本不會更新。

如何強制在每次安裝時設置特定設置?

感謝 Gonso

回答

0

你爲什麼不設置從mainBundle的版本號?

NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]]; 

這樣你就不必爲每個版本更新設置文件。如果你想比較現有的和新的安裝版本。您可以在啓動時將版本號寫入文件,並將目錄版本與啓動版本進行比較。

+0

但那麼我不能在設置屏幕上有版本,我可以嗎? 這是我如何定義版本: \t \t \t \t \t 類型 \t \t \t PSTitleValueSpecifier \t \t \t 標題 \t \t \t 版本 \t \t \t 重點 \t \t \t applicationVersion \t \t \t 默認值 \t \t \t 1.1.2 \t \t gonso 2009-08-24 15:52:36

1

我有這樣的代碼在我的應用程序委託的-applicationDidFinishLaunching:

#if DDEBUG // debugging/testing 
    NSString *versionString = [NSString stringWithFormat:@"v%@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]]; 
#else 
    NSString *versionString = [NSString stringWithFormat:@"Version %@",[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]]; 
#endif // DDEBUG 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setValue:versionString forKey:@"version"]; 
    printf("Version: = %s\n", [versionString cStringUsingEncoding:NSMacOSRomanStringEncoding]); 
    [defaults synchronize]; // force immediate saving of defaults. 

但應用程序有前設置「版本」更新運行,以反映這一變化。

7

您可以使用下面的「運行腳本」構建階段:

CFBundleShortVersionString=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ${SRCROOT}/YourApp/YourApp-Info.plist` 
CFBundleVersion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ${SRCROOT}/YourApp/YourApp-Info.plist` 
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:3:DefaultValue '${CFBundleShortVersionString} (${CFBundleVersion})'" ${SRCROOT}/YourApp/Settings.bundle/Root.plist 

所有你需要做的,是你的應用程序的名稱,以取代YourApp並設置相應的keyPath。

在我的情況,我有PreferenceSpecifiers數組中的4項,並且我需要設置從數組中最後一個項目的價值,這就是爲什麼我用「:PreferenceSpecifiers::默認值」

+1

的情況下,你在你的應用程序名稱 CFBundleShortVersionString ='在/ usr/libexec目錄有空間/ PlistBuddy -c「打印:CFBundleShortVersionString」「$ {SRCROOT}/$ {INFOPLIST_FILE}」'「$ {SRCROOT}/$ {INFOPLIST_FILE}」 /usr/libexec/PlistBuddy -c「Set:PreferenceSpecifiers:0:DefaultValue'$ {CFBundleShortVersionString }($ {CFBundleVersion})'「」$ {SRCROOT}/$ {PROJECT} /Settings.bundle/Root.plist「 – Zsolt 2013-05-14 11:23:09

相關問題