【问题标题】:Update Root.Plist on Compile编译时更新 Root.Plist
【发布时间】:2014-09-25 14:25:27
【问题描述】:

我有一个应用设置文件,其中显示了我们应用的版本号。这个想法是在编译时更新 Root.plist,这样我们就不必更新两个地方而不是一个。我们更新了构建设置版本,并希望这些设置在编译时更新 Root.plist。

此代码提取构建设置的信息,如何更新 Root.plist 文件?

NSString *appBuildNo = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
NSString *appBuildVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSString *appBuildStr = [NSString stringWithFormat:@"%@ Build %@", appBuildNo, appBuildVersion];

NSURL * settingsURL =  [[NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"Settings" withExtension:@"bundle"]]
                        URLForResource:@"Root" withExtension:@"plist"];
NSDictionary * settingsDict = [NSDictionary dictionaryWithContentsOfURL:settingsURL];
NSArray * settingsArr = [settingsDict objectForKey:@"PreferenceSpecifiers"];
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
for( NSDictionary * setting in settingsArr ){
    NSString * key = [setting objectForKey:@"DefaultValue"];
    [defaults setValue:appBuildStr forKey:key];
    [defaults synchronize];
    break;
}

这个想法是默认更新 Root.plist 但它不起作用。任何帮助将不胜感激

【问题讨论】:

  • 是的,使用 External Build System 模板编写一个实现为单独构建目标的脚本,并使用PlistBuddy 更新info.plist。然后让应用目标依赖于这个脚本目标。
  • 谢谢你的回复,你描述的方法我不熟悉,你能不能扩展一下。非常感谢

标签: ios xcode plist nsuserdefaults


【解决方案1】:

Droppy 在帮助我解决这个问题方面非常有帮助。设置完我的 Settings Bundle 和 Root.plist 文件后,我将以下代码添加到我的 AppDelegate 并从 didFinishLaunchingWithOptions 中调用它。

- (void)updateVersionInfo
{
   //This method updates the Root settings to display current Version and Build No in Settings Bundle
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   NSString *appVersionNumber = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
   NSString *appBuildNo = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

   NSString *versionNumberInSettings = [NSString stringWithFormat:@"%@ Build %@", appBuildNo, appVersionNumber];

   [defaults setObject:versionNumberInSettings forKey:@"version"];
}

然后,此代码将 info.plist 文件中的版本内容添加到我的设置包中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多