CocoaPods后编译报错

作者: Leehf | 来源:发表于2017-03-25 20:08 被阅读479次

    Write In Frist:今天检测内存泄漏的时候,打算在我们的项目中集成下MLeaksFinder传送门使用。
    先天条件:我们的App今年第五年了,从来没有使用Pod。一些第三方SDK都是单独集成的。


    关于CocoaPods的使用。送上官网传送门和一个写的比较简练的简书@白开水ln

    集成遇到的问题:

    一、Target中的一些设置,CocoaPods 也做了默认的设置,如果两个设置结果不一致,就会造成如下警告。示例如下:
    报错信息
    修改方法:最直接的就是在对应项中添加一个字段 $(inherited)

    $(inherited) 百度了下字面意思是:继承的。实际上的含义,目前的理解是:继承自更高一级的配置。SO传送门

    看到网上有提及说直接清空整个对应项的配置字段。因为我们的项目有一些其他SDK配置,这种方法明显不可取。经过验证,添加$(inherited)可以在不改动原有配置的情况下,修复这个警告。

    1.1红色下划线标记了Debug 和 Release版本。说明两个配置项都需要修改。
    1.2、碰到的几种对应项

    • HEADER_SEARCH_PATHS 对应需要修改:Target -> Build setting -> Header Search Paths项目。
    • GCC_PREPROCESSOR_DEFINITIONS 对应需要修改:Target -> Build setting ->Preprocessor Macros
    • OTHER_LDFLAGS 对应需要修改:Target -> Build setting ->Other linker flags
    • OTHER_CFLAGS 对应需要修改:Target -> Build setting ->Other c flags
    • OTHER_CPLUSPLUSFLAGS 对应需要修改:Target -> Build setting ->Other c++ flags
      最后一项我没有碰到,但是我为了以防万一,直接添加了。
    二、编译报错文件丢失
    文件丢失

    自己单独写一个小demo编译没有问题。而我的项目却编译失败。针对性的去搜索了也没有解决。最后对比demo。发现pod下的.a文件都爆红,未进行编译。拿demo的针对性替换也不行。毕竟libPods.a无法替换。好在发现了问题根源。

    解决办法:Target -> Build setting ->Build Active Architecture Only 属性。设置debug项为YES。<如果你的是no,替换为YES进行尝试>。

    Build Active Architecture Only含义:
    这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。
    而设置为no时,会编译所有的版本。

    这个是设备对应的architecture:
    armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
    armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
    armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
    arm64(注:无armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、
    iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3
    

    编译出的版本在cpu内核结构向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,因为armv7s兼容armv7。但是armv6的设备就不能运行。
    所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。

    相关文章

      网友评论

        本文标题:CocoaPods后编译报错

        本文链接:https://www.haomeiwen.com/subject/duncottx.html