iOS开发中支持静态库与动态库,不过使用动态库,上架会有麻烦。这里讲到如果创建静态库.a文件,其实很早之前公司要求做wifi的SDK的时候就开始涉及这个东西了,但一直没写出来。
创建.a文件
首先新建一个静态库的项目
命名为CyhLib,再把一些功能代码放进来,我直接放入一个验证手机号的类别文件,如下图
然后把
#import "NSString+checkNum.h"
引入到CyhLib.h中。因为方便引用,待会儿我们只暴露出.h。接下来我们要创建两个.a文件,一个是模拟器用,一个是真机用的。但在打包之前,我们先要处理暴露文件。
commad + B
注意这里选择的不是模拟器运行,继续
commad + B
这时候就得到了两个.a文件。
把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
使用.a文件
新建项目或者随便找个已创建测试项目,可直接拖进来放在Frameworks目录下
再把暴露的.h文件引进来
下面是我的.a文件的功能测试
BOOL isPhoneNum = [@"15677194567" checkPhoneNumInput];
if (isPhoneNum) {
NSLog(@"是手机号");
}
else
{
NSLog(@"不是手机号");
}
集成到cocopods中使用
接下来,我把静态库和暴露的.h文件放入cocopods中使用,将静态库和暴露的.h上传至github上的仓库。并更新一个release版本。
但是,这里有个坑,必须先填完,把.a文件的名字加上前缀lib,就像刚生成那时候的名字
自动生成这个加前缀的名字不是没有道理的,不加前缀在添加到cocopods的podspec文件里面的时候,会找不到这个静态库,怎么弄都是瞎搞鼓。
更改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安装使用
#import <CyhLib.h>
BOOL isPhoneNum = [@"15777183567" checkPhoneNumInput];
if (isPhoneNum) {
NSLog(@"是手机号");
}
else
{
NSLog(@"不是手机号");
}