在iOS的項目開發(fā)以及學(xué)習(xí)過程中, 為了提高代碼質(zhì)量壳贪,我們經(jīng)常需要對默認的debug和release修改配置, 比如開啟編譯時自動進行靜態(tài)分析, 或者打開關(guān)閉不同的warning陵珍,或者開啟 treat warnings as errors 選項。但是每新建一個項目就要配置一次的話就有點太麻煩了违施,所以我就寫了一個簡單的腳本對指定的build configuration進行自動設(shè)置互纯。
1. 如何找到project.pbxproj
我在這里快速描述一下如何找到這個配置文件
在項目根目錄下的xxx.xcodeproject 其實就是一個文件夾。 選中后點擊右鍵磕蒲, 然后選擇show package contents 留潦, 就可以找到project.pbxproj只盹。
2.如何解析project.pbxproj
關(guān)于這個配置文件的結(jié)構(gòu),請參考project.pbxproj兔院,最熟悉的”陌生人
這個文件的格式其實是比較特別的殖卑, 因此沒有辦法通過xml或者plist的方式進行解析。 不過前人栽樹坊萝,后人乘涼孵稽,早就有高手寫好了解析工具。在這里我選擇的是mod-pbxproj十偶, 一個python的解析庫菩鲜。
3. 實現(xiàn)思路
在打開project.pbxproj以后,我們可以發(fā)現(xiàn)里面的各個配置項目之間都是通過id來進行關(guān)聯(lián)的惦积,所以為了找到我們需要的XCBuildConfiguration接校, 只能從rootobject 一層一層往下找。
路徑如下:rootObject=> Project Object.buildConfigurationList =>?buildConfigurationList.buildConfigurations[]
這個數(shù)組包含了我們需要的debug 和release 的id荣刑。 通過這個id我們就可以取到對應(yīng)的XCBuildConfiguration dictionary馅笙。 剩下的工作就是按照我們的需要對dictionary進行設(shè)置伦乔。
4. Python 腳本
按照上節(jié)提到的思路厉亏,附上腳本如下, 通過從json文件中讀取配置烈和,然后設(shè)置到對應(yīng)的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 是我自己比較喜歡的配置恬试,大家可以根據(jù)自己的需要自行修改
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
有人說如何找到我想要的設(shè)置的key和value呢,其實方法很簡單疯暑,在xcode手動設(shè)置號以后训柴,查看project.pbxproj即可。
如果設(shè)置了以后有任何問題妇拯, 你可以在對應(yīng)的xxx.xcodeproject下找到對應(yīng)的備份
最后建議大家在Xcode中打開這個continue building after errors?選項幻馁,這樣在日常的編程過程中會效率會高一些
話說我的python是為了寫這個腳本現(xiàn)學(xué)的,如果哪里有問題或者寫的不好越锈,歡迎指正仗嗦。
如需轉(zhuǎn)載,請保留署名