介绍
在打包 Xcode 工程时,会根据当前 SDK 的需要,修改 Info.plist
,增加删除或更新属性。
但是不同的 SDK 需要修改的属性不同,因此最好的方法是将修改的属性单独放在自己的文件中,使用代码进行合并。
这里的关键是只修改自己需要的属性,而且需要正确地更新已有属性。
环境
实现
- Python 本身提供了 plistlib 库,可以非常方便地操作 plist 文件。
- Python 3.5 及以上的版本提供了快速合并字典功能,可以正确地使用新字典中的字段更新旧字典中的已有字段。
下面的代码实现了将 custom_path
指向的 plist 文件与 Xcode 工程内的 Info.plist
文件合并。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import json
import plistlib
def update_info_plist(custom_path, xcode_project_path):
if not os.path.exists(custom_path):
print(f'plist file {custom_path} did not exist')
return
info_plist_path = os.path.join(xcode_project_path, 'Info.plist')
with open(info_plist_path, 'rb') as fp:
base = plistlib.load(fp)
with open(custom_path, 'rb') as fp:
custom = plistlib.load(fp)
# 使用 Python 3.5 及以上版本语法将自定义内容更新到原有的 Info.plist 中
merged = {**base, **custom}
with open(info_plist_path, 'wb') as fp:
plistlib.dump(merged, fp)
print('Custom Info.plist content')
print(json.dumps(custom, indent=4))
|
参考资料