摘要:
目前工程有两代Universal framework,第一代是基于shell实现,第二代是基于python实现。如果不修复第一代的Universal framework,虽然可以编译成功,但是无法生成有效的framework bundle。这样导致该业务bundle无法正常的加载到手淘工程中。
目前的修复方案为,使用脚本主动把基于shell的Universal framework主动修改为基于python的Universal framework。
具体收益—–未来只要统一维护Universal framework(基于python),如果未来target to iOS8,就可以用xcode提供的framework。
如何区分两代Universal framework
比较简单,打开工程,查看业务bundle target的是否有python的脚本,如果有这个是第二代,如果都是shell的脚本,这个是第一代。
修复步骤
如下:(以BMGuideMan工程为例子)
- 下载附件脚本压缩包:auto_xcode_edit.zip。放到工程BMGuideMan.xcodeproj文件同级目录下
|--BMGuideMan.xcodeproj
|--auto_xcode_edit
|-- universal_python_fixed.py
|-- universal_shell_fix.py
- 终端 cd到工程文件夹,运行python命令
python auto_xcode_edit/universal_shell_fix.py
- 手动打开TBGuideMan.xcodeproj工程, 选择业务bundle framework对应的的target,该例子是选择TBGuideMan这个target。这个地方请大家仔细,由于时间有限,没有完全做到自动化,还是请大家手动改下吧。
第三步的步骤具体看下图,一步一步来吧。
- 选中业务bundle framework的target的build parse。
- 查看Run Script脚本,只保留图中红圈指定的Run Script。 可能有的同学发现此时工程的run script中有两个一样的Run Script。OK没错只要保留一个就可以。
- 重新Run Script顺序调整下,并且修改该Run Script中Shell为/usr/bin/python。具体修改看下图红圈标识部分
然后把build parse中的顺序,调整为下图的数据
- 最后加入新的Run Script脚本,内容如下
# remove the last framework
set -e
set +u
echo rm -rf "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"
rm -rf "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.framework"
- 把新的脚本放到下图的位置
总结:由于比较忙,解决方案,难免有问题,请大家多多提建议,发现问题。