Добавил api для патчинга Info.Plist файла

This commit is contained in:
Rustam Zaitov 2013-09-29 21:59:26 +04:00
parent 3642148ed3
commit 8648e8e8f7
2 changed files with 52 additions and 8 deletions

View File

@ -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*<key>CFBundleVersion</key>\s+<string>[\d\.]+</string>'
version_node = r'\n\t<key>CFBundleVersion</key>\n\t<string>{0}</string>'.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):

49
scripts/plist_patch.py Normal file
View File

@ -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)