From 8648e8e8f7039691fbb0c458c8421bd07e4cd480 Mon Sep 17 00:00:00 2001 From: Rustam Zaitov Date: Sun, 29 Sep 2013 21:59:26 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20ap?= =?UTF-8?q?i=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B0=D1=82=D1=87=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=D0=B0=20Info.Plist=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/patch.py | 11 +++------- scripts/plist_patch.py | 49 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 scripts/plist_patch.py diff --git a/scripts/patch.py b/scripts/patch.py index e4187d5..38d9016 100644 --- a/scripts/patch.py +++ b/scripts/patch.py @@ -1,5 +1,6 @@ import re import os +import plist_patch as plist def RewriteFile(file_to_rewrite, content): file_to_rewrite.seek(0) @@ -24,14 +25,8 @@ def PatchInfoPlist(build_config): sln_dir = os.path.dirname(build_config['sln_path']) abs_info_plist_path = os.path.join(sln_dir, build_config['info_plist_rel_path']) - info_plist_file = open(abs_info_plist_path, 'r+') - content = info_plist_file.read() - - version_patt = r'\s*CFBundleVersion\s+[\d\.]+' - version_node = r'\n\tCFBundleVersion\n\t{0}'.format(build_config['version']) - content = re.sub(version_patt, version_node, content) - - RewriteFile(info_plist_file, content) + key_values = {'CFBundleVersion' : build_config['version']} + plist.AppendOrReplace(key_values, abs_info_plist_path) def PathcIos(build_config): diff --git a/scripts/plist_patch.py b/scripts/plist_patch.py new file mode 100644 index 0000000..b034937 --- /dev/null +++ b/scripts/plist_patch.py @@ -0,0 +1,49 @@ +import xml.etree.ElementTree as ET + +def AppendKeyValue(key_name, value, dict_element): + key_element = ET.Element('key') + key_element.text = key_name + + value_element = ET.Element('string') + value_element.text = value + + dict_element.append(key_element) + dict_element.append(value_element) + +def ReplaceValueByKeyIndex(key_element_index, value, dict_element): + value_index = key_element_index + 1 + value_element = dict_element[value_index] + value_element.text = value + +def FindIndexByKey(key_name, dict_element): + all_keys_elements = dict_element.findall('key') + + is_exists = False + index = 0 + + for e in all_keys_elements: + if e.text == key_name: + is_exists = True + break + index += 1 + + element_index = index * 2 + return element_index if is_exists else -1 + +def AppendOrReplaceValueByKey(key_name, value, dict_element): + key_index = FindIndexByKey(key_name, dict_element) + element_exists = key_index >= 0 + + if element_exists: + ReplaceValueByKeyIndex(key_index, value, dict_element) + else: + AppendKeyValue(key_name, value, dict_element) + +def AppendOrReplace(key_value_dict, abs_plist_path): + tree = ET.parse(abs_plist_path) + plist_dict = tree.getroot().find('dict') + + for key_name in key_value_dict: + AppendOrReplaceValueByKey(key_name, key_value_dict[key_name], plist_dict) + + tree.write(abs_plist_path) \ No newline at end of file