在iOS的项目开发以及学习过程中, 为了提高代码质量,我们经常需要对默认的debug和release修改配置, 比如开启编译时自动进行静态分析, 或者打开关闭不同的warning,或者开启 treat warnings as errors 选项。但是每新建一个项目就要配置一次的话就有点太麻烦了,所以我就写了一个简单的脚本对指定的build configuration进行自动设置。
1. 如何找到project.pbxproj
我在这里快速描述一下如何找到这个配置文件
在项目根目录下的xxx.xcodeproject 其实就是一个文件夹。 选中后点击右键, 然后选择show package contents , 就可以找到project.pbxproj。
2.如何解析project.pbxproj
关于这个配置文件的结构,请参考project.pbxproj,最熟悉的”陌生人
这个文件的格式其实是比较特别的, 因此没有办法通过xml或者plist的方式进行解析。 不过前人栽树,后人乘凉,早就有高手写好了解析工具。在这里我选择的是mod-pbxproj, 一个python的解析库。
3. 实现思路
在打开project.pbxproj以后,我们可以发现里面的各个配置项目之间都是通过id来进行关联的,所以为了找到我们需要的XCBuildConfiguration, 只能从rootobject 一层一层往下找。
路径如下:rootObject=> Project Object.buildConfigurationList => buildConfigurationList.buildConfigurations[]
这个数组包含了我们需要的debug 和release 的id。 通过这个id我们就可以取到对应的XCBuildConfiguration dictionary。 剩下的工作就是按照我们的需要对dictionary进行设置。
4. Python 脚本
按照上节提到的思路,附上脚本如下, 通过从json文件中读取配置,然后设置到对应的XCBuildConfiguration去。
使用方法:
Git Clone 或者下载以下四个文件
在terminal运行以下命令即可
python xcode_auto_configurator.py YourProject.xcodeproj/project.pbxproj
也可以指定json配置文件(注意:json文件名要和XCBuildConfiguration的name一致,忽略大小写,单个文件或者多个文件皆可)
python xcode_auto_configurator.py YourProject.xcodeproj/project.pbxproj debug.json release.json
bebug.json 和release.json 是我自己比较喜欢的配置,大家可以根据自己的需要自行修改
debug.json
{
"WARNING_CFLAGS":"-Wall -Wextra -Wno-unused-parameter -Wno-unused-variable",
"CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER":"YES",
"CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND":"YES",
"CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY":"YES",
"RUN_CLANG_STATIC_ANALYZER":"YES",
"GCC_TREAT_WARNINGS_AS_ERRORS":"NO"
}
release.json
{
"WARNING_CFLAGS":"-Wall -Wextra -Wno-unused-parameter -Wno-unused-variable",
"CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER":"YES",
"CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND":"YES",
"CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY":"YES",
"RUN_CLANG_STATIC_ANALYZER":"YES",
"GCC_TREAT_WARNINGS_AS_ERRORS":"YES",
"CLANG_STATIC_ANALYZER_MODE":"deep"
}
Tips: 如何找到想要的key
有人说如何找到我想要的设置的key和value呢,其实方法很简单,在xcode手动设置号以后,查看project.pbxproj即可。
如果设置了以后有任何问题, 你可以在对应的xxx.xcodeproject下找到对应的备份
最后建议大家在Xcode中打开这个continue building after errors 选项,这样在日常的编程过程中会效率会高一些
话说我的python是为了写这个脚本现学的,如果哪里有问题或者写的不好,欢迎指正。
如需转载,请保留署名