关于“不支持模拟器调试的第三方SDK”解决办法

起因

公司项目集成了萤石云SDK(EZOpenSDK,下文简称EZ),此SDK不支持模拟器调试,由于个人工作习惯不同,有些同事习惯模拟器调试(其实是因为公司不配发测试机,平时真机调试都在用自己的手机,所以大家习惯于模拟器调试程序),所以leader交个我这个艰巨的任务,让我想办法,使程序可以支持模拟器调试。

结果

其他功能支持模拟器调试,涉及到EZ的功能仍需要真机调试。

经过

因为在集成EZ之前就在文档中了解到仅支持真机调试,所以在集成之后,出现下图的错误也是预料之中


关于“不支持模拟器调试的第三方SDK”解决办法_第1张图片

思路很简单,运行编译时识别调试设备类型,如果是模拟器调试,不编译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


关于“不支持模拟器调试的第三方SDK”解决办法_第2张图片

实现了区分调试设备类型,但是没有找到添加或删除文件的脚步代码(或许是有的,这个问题我会继续研究一下的,或者有大神看到希望能指点一下小弟),于是思路一卒。

思路二新建配置文件

PROJECT ->info ->configurations->1点击加号,选择要copy的配置->2


关于“不支持模拟器调试的第三方SDK”解决办法_第3张图片
关于“不支持模拟器调试的第三方SDK”解决办法_第4张图片


3修改名称


关于“不支持模拟器调试的第三方SDK”解决办法_第5张图片

4新建scheme


关于“不支持模拟器调试的第三方SDK”解决办法_第6张图片

5命名新scheme


关于“不支持模拟器调试的第三方SDK”解决办法_第7张图片

6修改build configuration点击图4中Edit Scheme,保证切换scheme时,配置文件与之对应


关于“不支持模拟器调试的第三方SDK”解决办法_第8张图片

7最重要的一点!!!之前不知道这一点,白白忙活了一阵子

TARGETS -> Build Setting -> Apple LLVM 8.1 - Preprocessing -> Preprocessor Macros

红色箭头所指的地方,一定要与新建配置文件对应,这里是设置全局宏的地方


关于“不支持模拟器调试的第三方SDK”解决办法_第9张图片
关于“不支持模拟器调试的第三方SDK”解决办法_第10张图片


绿色箭头所指的$(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属性,之前我没有打钩,所以其他人更新不的,勾选之后提交,同事就可以顺利的更新到了。

关于“不支持模拟器调试的第三方SDK”解决办法_第11张图片

你可能感兴趣的:(关于“不支持模拟器调试的第三方SDK”解决办法)