• 【转】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。在最后打包的时候能看到如下就说明完全没有问题了。

     
  • 相关阅读:
    PAT (Advanced Level) 1086. Tree Traversals Again (25)
    PAT (Advanced Level) 1085. Perfect Sequence (25)
    PAT (Advanced Level) 1084. Broken Keyboard (20)
    PAT (Advanced Level) 1083. List Grades (25)
    PAT (Advanced Level) 1082. Read Number in Chinese (25)
    HDU 4513 吉哥系列故事――完美队形II
    POJ Oulipo KMP 模板题
    POJ 3376 Finding Palindromes
    扩展KMP
    HDU 2289 Cup
  • 原文地址:https://www.cnblogs.com/wi100sh/p/6206472.html
Copyright © 2020-2023  润新知