博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS静态库开发制作
阅读量:6903 次
发布时间:2019-06-27

本文共 1691 字,大约阅读时间需要 5 分钟。

库的种类

  • 开源库

  • 闭源库


闭源库分类

  • 动态库

    • 链接时不复制,程序运行时由系统动态加载到内存中,供程序调用。
    • 系统只加载一次,多个程序共用,节省内存。(使用自制动态库的程序不能上传Appstore,WWDC大会上,苹果对iOS 8开放了加载dylib的接口,开放了动态库挂载,但是很少用)
    • eg:*.dylib(iOS9取消了.dylib,使用.tbd替代) 和 *.framework
  • 静态库

    • 对于老旧的MRC实现的功能,可以通过编译成静态库文件在ARC环境下运行。
    • 方便代码移植,代码保密。
    • .framework 静态库制作需要将build settings -> Mach-O Type 设置成static Library,因为framework默认是动态库。
    • eg:*.a 和 *.framework

关于架构

  • 模拟器架构:

    i386 : 32位 4s和5  x86_64: 64位 5s之后机型复制代码
  • 真机架构:

    armv7 : 32位 4s/4  (静态库只要支持armv7,就可以跑在armv7s架构上) armv7s: 5/5c  arm64 : 64位 5s以后机型复制代码
  • 架构的兼容:

    • 选择target -> build active architecture only (只编译活跃的架构) -> NO


废话不多说,直接上手

    1. 新建工程
    1. .h 声明
    1. .m 实现
    1. 静态库的生成

调试版本 VS 发布版本

  • 调试版本会包含完整的符号信息,以方便调试
  • 调试版本不会对代码进行优化
  • 发布版本不会包含完整的符号信息
  • 发布版本的执行代码是进行过优化的
  • 发布版本的大小会比调试版本的略小
  • 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升

  • 查看静态库支持的架构 打开终端 : lipo -info 静态库.a
  • 静态库合并 打开终端 : lipo -create 静态库1.a 静态库2.a -output 新静态库.a

关于bitcode

  • 什么是bitcode

    Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary. 当我们提交程序到App store上时,Xcode会将程序编译为一个中间表现形式(bitcode)。然后App store会再将这个botcode编译为可执行的64位或32位程序。

  • 哪些需要支持bitcode

    iOS,bitcode是可选的。 watchOS,bitcode是必须的。 Mac OS不支持bitcode。

  • 如何支持bitcode

    • 1,选择静态库对应的target ->build settings ,搜索other c flags ,添加 -fembed-bitcode

这样编译出来的静态库就支持bitcode。

  • 如何检验是否已经支持bitcode

进入到.a所在的目录,使用以下命令: 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 最后通过这个,会输出sectname __bitcode字样,说明该静态库支持bitcode。


当你按以上方法可以写出自己第一个静态库的时候,你就会发现一个缺点,调试很不方便,想着如果能看到源码调试的话就好了,所以后边我们讲如何真正方便的调试静态库。

  • 1,新建single view application工程

  • 2,新建静态库target

  • 3,引用静态库,不然会报错

有不对的请指正。

转载地址:http://yhvdl.baihongyu.com/

你可能感兴趣的文章
Vue:v-model指令
查看>>
Software Engineering | Strategy pattern
查看>>
ios开发系列-准备工作
查看>>
Android Studio调试手机或者安装APK的时候出现install failed test only
查看>>
js闭包
查看>>
Xcode +SVN
查看>>
设置界面分析
查看>>
SQL中DateTime转换成Varchar样式
查看>>
java.util.AbstractList
查看>>
几个常见用于解决nginx负载均衡的session共享问题的办法
查看>>
setTimeOut、setInterval与clearInterval函数
查看>>
Appium原理及版本变化细节
查看>>
iphone ios 用xcode4.2开发 访问web service的功能
查看>>
Visual Studio 代码折叠快捷键(摘要)
查看>>
《2016ThoughtWorks技术雷达峰会----雷达新趋势》
查看>>
正则【备用】
查看>>
FeatureSelectors
查看>>
数据库防火墙DBShield安装
查看>>
sudo with no password
查看>>
Windows 局域网ping获取设备IP
查看>>