zoukankan      html  css  js  c++  java
  • 【转】iOS bitcode实战 -- without full bitcode

    原文网址:http://www.voidcn.com/blog/GrowingGiant/article/p-5012705.html

    关于bitcode的介绍,直接看下边两篇:

    理解Bitcode:一种中间代码 

    Xcode 7 Bitcode的工作流程及安全性评估 

    大牛们已经把bitcode说的很清楚了,我结合自己的实践梳理出以下流程:

    主工程引用静态库有两种形式(参考:在iOS中创建静态库

    ①:代码依赖

    ②:引用.a 

    对应的,让静态库支持bitcode也有不同的地方。

    先来看第一种:直接上图配置

    注意代码依赖的工程配置

    主工程的头文件搜索路径配置

    打开子工程的bitcode 

    看到第三张图片,就能看出来,代码依赖可以在主工程中动态修改。

    再来看第二种:

    打开.a工程的bitcode

    添加到主工程中

    配置主工程头文件

    这个时候,build一下没发现什么问题,但是如果archive就会报错:

    ld: bitcode bundle could not be generated because '/Users/xxx/work/test-demo/bitcode/BitcodeTest/BitcodeTest/TestLibA/libTestLibA.a(TestLibA.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决这个错误就需要在.a工程中添加一下配置:

    other c flags 添加-fembed-bitcode,之后在run一下生成新的.a,然后替换主工程中的.a即可

    然后在对主工程archive,即可:


    现在系统的总结下:

    一、代码依赖 

    方便控制,但是每次build花费的时间就长了。

    如果碰到静态库有分类,报错unregistered selector ....,只需要在主工程other link flags 添加 -all_load即可。

    二、.a引用

    .a稍微复杂了点,不过一般引用的.a都是第三方的,也无需考虑太多。如果是自己制作,就参考上边。

    对于.a引用还有另一个问题,如何判断.a支持bitcode?

    进入到.a所在的目录,
    使用以下命令:
    otool -arch armv7 -l  xxxx.a | grep bitcode
    otool -arch arm64 -l  xxxx.a | grep bitcode 
     
    能看到bitcode字样,至少有支持bitcode的可能,为什么说可能呢,最后要看archive

    实践:


    二、

    lipo -info xxxx.a
    lipo -thin arm64 xxxx.a -output xxxx-arm64.a
    ar -x  xxxx-arm64.a //这一步完成会得到一个.o文件,共下部使用
    otool -l xxxx.o | grep bitcode


    通过这两种方法,能方便的查看.a是否支持bitcode.

    最能直接检验的方法就是archive。在最后打包的时候能看到如下就说明完全没有问题了。

     
  • 相关阅读:
    python实例26[查询修改文件的属性]
    [SCM]源码管理 VisualSVN Server+TortoiseSVN
    持续集成之“依赖管理”
    Spoon:在“云”上运行桌面应用程序
    数字签名的验证
    判断Linux/Unix为32位或64位
    持续集成理论和实践的新进展
    [SCM]源码管理 SVN Server
    [BuildRelease Management]Parabuild
    为VM增加磁盘空间
  • 原文地址:https://www.cnblogs.com/wi100sh/p/6206472.html
Copyright © 2011-2022 走看看