iOS 创建自己的SDK静态库(.a文件)并使用cocopods
2019-08-21 本文已影响0人
cyhai
iOS开发中支持静态库与动态库,不过使用动态库,上架会有麻烦。这里讲到如果创建静态库.a文件,其实很早之前公司要求做wifi的SDK的时候就开始涉及这个东西了,但一直没写出来。
创建.a文件
首先新建一个静态库的项目
![](https://img.haomeiwen.com/i2519829/c391208df0c8acd1.png)
命名为CyhLib,再把一些功能代码放进来,我直接放入一个验证手机号的类别文件,如下图
![](https://img.haomeiwen.com/i2519829/6ace5900d2f46d50.png)
然后把
#import "NSString+checkNum.h"
引入到CyhLib.h中。因为方便引用,待会儿我们只暴露出.h。接下来我们要创建两个.a文件,一个是模拟器用,一个是真机用的。但在打包之前,我们先要处理暴露文件。
![](https://img.haomeiwen.com/i2519829/d201ad53f233cc31.png)
![](https://img.haomeiwen.com/i2519829/171a786035ed2611.png)
![](https://img.haomeiwen.com/i2519829/3995c70b9a7bd1da.png)
![](https://img.haomeiwen.com/i2519829/695f1d0bc6fd5fb1.png)
commad + B
![](https://img.haomeiwen.com/i2519829/7c8d7c149ab18ddb.png)
![](https://img.haomeiwen.com/i2519829/c46d5c0e9b1d8cac.png)
注意这里选择的不是模拟器运行,继续
commad + B
这时候就得到了两个.a文件。
![](https://img.haomeiwen.com/i2519829/3f3ba4d9aa019377.png)
![](https://img.haomeiwen.com/i2519829/5e2efcd1d36f7ea3.png)
把Release-iphoneo和Debug-iphonesimulator复制到桌面新建的文件夹
最后使用命令lipo -create xxx.a xxx2.a -output xxx3.a
lipo -create /Users/chenhaige/Desktop/aFile/Debug-iphonesimulator/libCyhLib.a /Users/chenhaige/Desktop/aFile/Release-iphoneos/libCyhLib.a -output /Users/chenhaige/Desktop/aFile/newFile/CyhLib.a
![](https://img.haomeiwen.com/i2519829/5eac13704ab54f05.png)
使用.a文件
新建项目或者随便找个已创建测试项目,可直接拖进来放在Frameworks目录下
![](https://img.haomeiwen.com/i2519829/2c827ba7a9657b72.png)
再把暴露的.h文件引进来
![](https://img.haomeiwen.com/i2519829/e71aaccec14e55c1.png)
下面是我的.a文件的功能测试
BOOL isPhoneNum = [@"15677194567" checkPhoneNumInput];
if (isPhoneNum) {
NSLog(@"是手机号");
}
else
{
NSLog(@"不是手机号");
}
集成到cocopods中使用
接下来,我把静态库和暴露的.h文件放入cocopods中使用,将静态库和暴露的.h上传至github上的仓库。并更新一个release版本。
![](https://img.haomeiwen.com/i2519829/68aa9ed2a3b788e7.png)
但是,这里有个坑,必须先填完,把.a文件的名字加上前缀lib,就像刚生成那时候的名字
![](https://img.haomeiwen.com/i2519829/4a6600d93ffb046b.png)
自动生成这个加前缀的名字不是没有道理的,不加前缀在添加到cocopods的podspec文件里面的时候,会找不到这个静态库,怎么弄都是瞎搞鼓。
![](https://img.haomeiwen.com/i2519829/106ee59f25927548.png)
更改cyhCheckphoneNum.podspec版本号,与spec.source_files和spec.vendored_libraries
spec.version = "1.0.2"
spec.source_files = "checkphoneNum/**/*"
spec.vendored_libraries = "checkphoneNum/libCyhLib.a"
#spec.vendored_frameworks 引入framework后缀
更新github上的release版本
验证是否通过,通过上传至github
pod spec lint
上传至cocopods
pod trunk push cyhCheckphoneNum.podspec
最后使用cocopods安装使用
![](https://img.haomeiwen.com/i2519829/4f57a8586f11615f.png)
#import <CyhLib.h>
BOOL isPhoneNum = [@"15777183567" checkPhoneNumInput];
if (isPhoneNum) {
NSLog(@"是手机号");
}
else
{
NSLog(@"不是手机号");
}