2014-09-25 3 views
0

У меня есть файл настроек приложения, который отображает номер версии для нашего приложения. Идея состоит в том, чтобы обновить Root.plist при компиляции, чтобы нам не нужно было обновлять два места, а не одно. Мы обновляем версию настроек Build и хотели бы, чтобы эти настройки обновили Root.plist при компиляции.Обновление Root.Plist on Compile

Этот код извлекает информацию для параметров сборки, как я могу обновить файл 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, но он не работает. Любая помощь была бы оценена

+0

Да, напишите сценарий, реализованный как отдельная цель сборки, используя шаблон * External Build System * и используйте 'PlistBuddy' для обновления' info.plist'. Затем сделайте целевую страницу приложения зависимой от этой цели. – Droppy

+0

Спасибо за ваш ответ, я не знаком с методом, который вы описываете, можете немного расширить его. Большое спасибо – user616076

ответ

0

Droppy был очень полезен, помогая мне исправить это. После настройки моего набора параметров и файла 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 к моему набору параметров.

Смежные вопросы