起因
公司项目集成了萤石云SDK(EZOpenSDK,下文简称EZ),此SDK不支持模拟器调试,由于个人工作习惯不同,有些同事习惯模拟器调试(其实是因为公司不配发测试机,平时真机调试都在用自己的手机,所以大家习惯于模拟器调试程序),所以leader交个我这个艰巨的任务,让我想办法,使程序可以支持模拟器调试。
结果
其他功能支持模拟器调试,涉及到EZ的功能仍需要真机调试。
经过
因为在集成EZ之前就在文档中了解到仅支持真机调试,所以在集成之后,出现下图的错误也是预料之中
思路很简单,运行编译时识别调试设备类型,如果是模拟器调试,不编译EZ或不编译引用EZ的地方,这样应该就可以实现需求。
思路一脚本
leader说写脚本可以实现动态添加或删除文件的功能,脚本我是一窍不通,于是开始了解脚本,经过努力,写下了下面的shell脚本
num1="x86_64"
num2="i386"
if test $ARCHS = $num1
then
echo $ARCHS
echo '64模拟器'
elif test $ARCHS = $num2
then
echo $ARCHS
echo '32模拟器'
else
echo $ARCHS
echo '真机'
fi
shell脚本写在TARGETS -> Build Phases -> Run Script
实现了区分调试设备类型,但是没有找到添加或删除文件的脚步代码(或许是有的,这个问题我会继续研究一下的,或者有大神看到希望能指点一下小弟),于是思路一卒。
思路二新建配置文件
PROJECT ->info ->configurations->1点击加号,选择要copy的配置->2
3修改名称
4新建scheme
5命名新scheme
6修改build configuration点击图4中Edit Scheme,保证切换scheme时,配置文件与之对应
7最重要的一点!!!之前不知道这一点,白白忙活了一阵子
TARGETS -> Build Setting -> Apple LLVM 8.1 - Preprocessing -> Preprocessor Macros
红色箭头所指的地方,一定要与新建配置文件对应,这里是设置全局宏的地方
绿色箭头所指的$(inherited)标签,网上说是表示继承路径,我的项目了删除了也没有任何问题,我认为是因为我所新建的debugSimulator与debug不存在路径不同的问题,所以删除了也没问题
8新的配置文件debugSimulator已经设置完成了,下面就是在具体引用EZ库的地方做条件编译处理
如图所示我们的需求是release和debug正常引用EZ,debugSimulator不引用EZ,只调试其他功能,所以debugSimulator时为空,release和debug正常引用EZ。其他类中引用EZ的代码,采取同样的方法处理。
总结
这个方法绝对不是最佳方法,因为最后一步的做法就很low,幸好项目用到EZ的功能不多,只有两个地方引用,所以工作量不大。
在网上查资料时,发现了新建TARGETS的做法,思路差不多,不同点在于,我的做法是一个targets,多个scheme,网上的做法是多个targets对应多个scheme,具体targets和scheme的区别我还需要多了解。
文章的不足之处,希望大家多多批评指正,斜体字体是本文遗留问题,也希望大家指点一二,希望文章能帮到其他的人。
后记
之后同事更新发现,我所新建的scheme并没有更新到,如图所示,每一个scheme都有一个shared属性,之前我没有打钩,所以其他人更新不的,勾选之后提交,同事就可以顺利的更新到了。