了解
许多时在项目中,往往对于积累沉垫下来很少改动的代码(高内聚,低耦合的代码),为了增加重用性,常常都进行库的封装好存。
在WIN上封装为DLL(动),LIB(静)。在LINUX上封装为.SO(动),.a(静)。
IOS中静态库的方式有*.a或*.framework。不论是.a还是.framework其实无外于对源码进行隐藏的一种表现方式
objc也由类库的概念,不过在在objc上一般叫库,库表示程序代码集合,可以共享给其他程序使用,库是编译后的二进制文件,因此不能看到源代码,多用于一些开放sdk(如百度地图sdk),商用库,
objc上的库一般分为两类
静态库: .a 和 .framework
.a文件:纯二进制文件,需要配合.h文件一起使用,通过.h文件引用库里面的内容
.framework文件:包含二进制文件
链接时,静态库会被完整地复制到可执行文件中,例如iOS程序打包的时候会包含所有引用的静态库
动态库: .dylib 和 .framework
iOS项目不支持动态库,每个APP都是独立运行的,并且不能直接互相访问,APP只能访问系统自带的动态库,动态库系统只加载一次,并可以用于多个程序共享的,一般在用于桌面系统,链接时不会被添加到可执行文件,如果动态链接库不存在,程序可能执行失败
下面正文:
library search paths 库引用路径
other linker flags 编译标示参数
创建并且编译出静态库来。
1.创建自己的静态库
2.添加自己的类和category target->Build Phases ->Copy Files 点下面“+
”添加,一般的.h文件会自动引用,分类需要手动加进来.
3.设置支持的最低版本和最高版本 Build Settings ->Base SDK :当前类库是哪个版本的SDK开发的,也就是最高支持的SDK
Deployment Target :类库支持的最低版本 Build Settings-> Deployment Target
4.配置编译选项:
由于编译的是类库,在使用时候需要支持Debug和Release俩种模式,需要编译所有的architecture版本
Build Settings-> Build Active Architecture Only debug和Release都改为No.
4.编译Cmd+B
分别切换到模拟器和真机模式进行编译,在编译完成后,Products中的文件会变正常(原来为红色)。注意需要设置Build Release 版本
Edit -> Info -> Build Configuration 设置为Release
5.编译完成后得到多个.a文件,从Product下的.a 文件进入Finder查看
iphoneos真机用
iphonesimulator 模拟器用的。
使静态库同时支持模拟器和真机的方法:
1.合并.a文件
可以用lipo -create终端命令合并真机和模拟器的多个.a 文件,这样合并后的.a文件模拟器和真机都支持(合并后文件大小为原来俩个文件的大小之和)。
2.动态的引用静态库,通过配置工程的库引用路径和编译标示,编译的适合Xcode会根据当期的环境自动找到相关的.a库。
使用时:.a和.h文件都拖到项目中,Xcode会自动把静态库添加到工程,在Linkd Framework with Library里查看
如果静态库里有category分类,那么需要在添加-ObjC编译标识,否则可能会报错:unrecognized selector sent to instance
在other linker flags 里添加
终端命令:lipo -info查看文件信息 lipo -create 参数 参数 -output 参数 合并文件 pwd 获取当前所在文件路径
/Users/admin/Library/Developer/Xcode/DerivedData/libsql-gzhehbchiqciolgwkaazfwloklqq/Build/Products
~/Library/Developer/Xcode/DerivedData/libsql-gzhehbchiqciolgwkaazfwloklqq/Build/Products
.a文件文件信息: Architectures in the fat file: libsql.a are: i386 armv7 x86_64 arm64
进入文件目录下 ,然后lipo -info 文件名
合并俩个文件 lipo -create 第一个文件文件名 第二个文件文件路径 -output 合并后的文件名
比如:在/Build/Products/release-iphonesimulator下有liblibsql.a文件,在/Build/Products/release-iphoneos下也有liblibsql.a文件,想要合并这俩个文件,可以先进入/Build/Products/release-iphonesimulator文件下,然后
可以这么写:
lipo -create liblibsql.a /Build/Products/release-iphoneos/liblibsql.a -output libsql.a
结果是在/Build/Products/release-iphonesimulator文件下生成子文件libsql.a.