美文网首页
iOS静态库(.framework)问题汇总

iOS静态库(.framework)问题汇总

作者: iOSLee | 来源:发表于2017-11-16 15:00 被阅读0次

    一、bitcode bundle could not be generated because ' XXXX' 错误

    这类错误是由于静态库不支持bitcode而你自己的工程支持bitcode,解决方案有两种:

    1、让静态库支持bitcode:Target -》 Build Settings -》Other C Flags 添加 -fembed-bitcode

    注意:(更详细的可自行百度)

    确保打包的时候使用的是fembed-bitcode, 而不是fembed-bitcode-maker 

    fembed-bitcode-maker:只是简单的标记一下在archive出来的二进制中bitcdoe所在的位置。

    fembed-bitcode: 真的会生成bitcode指令,并且嵌入到二进制中

    2、自己的工程关闭bitcode:Target -》 Build Settings -》Enable Bitcode 设置为NO(xcode9 默认创建的工程Enable Bitcode为YES)

    二、调用framework中的方法或framework内部调用方法导致unrecognized selector sent to class XXXX 错误

    此类问题多半是由于静态库添加了Category导致的,需要在自己的项目中配置,Target -》 Build Settings -》Other Linker Flags 添加-ObjC

    -ObjC原文链接

    解决这个错误的方法就是:将Category的方法链接到APP中,这样APP运行时,就能够找到对应的selector。而 –ObjC就可以完成这个任务。

     "-ObjC"的作用是:将静态库中任何Objective-C代码都链接到APP中。任何Objective-C代码当然也包括Category的方法。可以看出,使用-ObjC可能会链接很多静态库中未被使用的Objective-C代码,极大的增加APP的代码体积。

    "-ObjC" 的兄弟

    和 "-ObjC"作用类似的有以上的五种方案。可以看出,从增加APP代码体积来看,伪符号方案增加得最少"Perform Single-Object Prelink"、 "-force_load" 和 "–ObjC" 次之,"-all_load" 增加得最多。         在开发iOS SDK时,为了方便使用者手动集成,最好是减少使用者需要配置的信息,所以"伪符号"方案和 "Perform Single-Object Prelink"方案是推荐的。另外,第三方SDK常常是闭源的,对于使用者来说,伪符号是透明的,所以从简便性角度看,推荐"Perform Single-Object Prelink"方案。

    遇到问题会持续补充...

    相关文章

      网友评论

          本文标题:iOS静态库(.framework)问题汇总

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