iOS使用Run Script提升開發效率


通過在Xcode Run Script添加shell腳本,然後通過腳本來幫助我們在編譯階段完成一下資源的copy,文件替換,修改等繁瑣的事件。使Xcode在編譯過程中自動完成耗時繁瑣的操作提升開發效率。
添加腳本的過程很簡單,添加+添加

 

添加完腳本後可以根據需要調整腳本的執行順序,如:對應Bundle資源,Framework的copy工作放在鏈接後。對應編譯前的源碼分析,代碼規範化檢測要放在編譯之前。
這些可以通過調整 Run Script在Build Phases中的排列順序來調整執行順序。
Xcode Run Script的執行順序就是Build Phases中的顯示順序。
 
查詢腳本的執行結果是在Xcode-Navigators-Show the Report navigator-Build日誌中進行查看。
設置執行策略
勾選了"Based on dependency analysis",則表示執行腳本前會先判斷上次執行腳本的Output Files產物目錄是否存在,如果存在就不再重複執行,提升build效率。
如果沒有勾選,則會每次build都會執行一次腳本,通常會打印如下警告信息。
Run script build phase 'Run Script' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking "Based on dependency analysis" in the script phase.

 

常見的腳本應用

可以在腳本中添加env命令,查詢Xcode內置的項目環境變量,在腳本中進行使用。
env

結果如下:


靜態庫自動替換
在項目中可以將靜態庫的模擬器版本和真機版本分開打,然後運行時自動替換,腳本如下:
#env


switchFrameworks=('aa' 'bb')
frameworkFlag='framework'
simulatorFrameworkAppendFileName='SimulatorFramework'

if [ "${PLATFORM_NAME}" == "iphonesimulator" ]; then
    for scheme in ${switchFrameworks[@]}; do
        iphoneosFrameworkPath="${SRCROOT}/Frameworks/${scheme}.${frameworkFlag}"
        simulatorFrameworkPath="${SRCROOT}/Frameworks/${scheme}${simulatorFrameworkAppendFileName}/${scheme}.${frameworkFlag}"
        cd ~
        if [ ! -d ${scheme} ]; then
            mkdir ${scheme}
            cp -r ${iphoneosFrameworkPath} ${scheme}
            rm -rf ${iphoneosFrameworkPath}
            cp -r ${simulatorFrameworkPath} "${SRCROOT}/Frameworks/"
            rm -rf ${simulatorFrameworkPath}
        fi
        cd ${SRCROOT}
    done
else
    
    for scheme in ${switchFrameworks[@]}; do
        iphoneosFrameworkPath="${SRCROOT}/Frameworks/${scheme}.${frameworkFlag}"
        simulatorFrameworkPath="${SRCROOT}/Frameworks/${scheme}${simulatorFrameworkAppendFileName}"
        cd ~
        if [ -d ${scheme} ]; then
            cp -r ${iphoneosFrameworkPath} ${simulatorFrameworkPath}
            rm -rf ${iphoneosFrameworkPath}
            cp -r "$(pwd)/${scheme}/${scheme}.${frameworkFlag}" "${SRCROOT}/Frameworks/"
            rm -rf ${scheme}
        fi
        cd ${SRCROOT}
    done
fi
Xcode Build Number 自增
 if [ $CONFIGURATION == Release ]; then
     echo "Bumping build number..."
     plist=${PROJECT_DIR}/${INFOPLIST_FILE}
     
     #increment the build number (ie 115 to 116)
     buildnum=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${plist}")
     
     if [[ "${buildnum}" == "" ]]; then
         echo "No build number in $plist"
         exit 2
     fi
 
     buildnum=$(expr $buildnum + 1)
 
     /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"
 
     echo "Bumped build number to $buildnum"
 
 else
     echo $CONFIGURATION " build - Not bumping build number."
 fi

 



參考文章:
https://www.jianshu.com/p/4cab21fd5517
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章