iOS開發(fā)中支持靜態(tài)庫與動態(tài)庫,不過使用動態(tài)庫,上架會有麻煩。這里講到如果創(chuàng)建靜態(tài)庫.a文件,其實很早之前公司要求做wifi的SDK的時候就開始涉及這個東西了,但一直沒寫出來。
創(chuàng)建.a文件
首先新建一個靜態(tài)庫的項目

image.png
命名為CyhLib,再把一些功能代碼放進來,我直接放入一個驗證手機號的類別文件,如下圖

image.png
然后把
#import "NSString+checkNum.h"引入到CyhLib.h中。因為方便引用,待會兒我們只暴露出.h。接下來我們要創(chuàng)建兩個.a文件,一個是模擬器用,一個是真機用的。但在打包之前,我們先要處理暴露文件。

屏幕快照 2019-08-21 下午12.04.17.png

image.png

屏幕快照 2019-08-21 下午12.08.00.png

屏幕快照 2019-08-21 下午12.08.21.png
commad + B

image.png

image.png
注意這里選擇的不是模擬器運行,繼續(xù)
commad + B
這時候就得到了兩個.a文件。

屏幕快照 2019-08-21 下午12.13.32.png

image.png
把Release-iphoneo和Debug-iphonesimulator復(fù)制到桌面新建的文件夾
最后使用命令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

image.png
使用.a文件
新建項目或者隨便找個已創(chuàng)建測試項目,可直接拖進來放在Frameworks目錄下

image.png
再把暴露的.h文件引進來

image.png
下面是我的.a文件的功能測試
BOOL isPhoneNum = [@"15677194567" checkPhoneNumInput];
if (isPhoneNum) {
NSLog(@"是手機號");
}
else
{
NSLog(@"不是手機號");
}
集成到cocopods中使用
接下來,我把靜態(tài)庫和暴露的.h文件放入cocopods中使用,將靜態(tài)庫和暴露的.h上傳至github上的倉庫。并更新一個release版本。

image.png
但是,這里有個坑,必須先填完,把.a文件的名字加上前綴lib,就像剛生成那時候的名字

image.png
自動生成這個加前綴的名字不是沒有道理的,不加前綴在添加到cocopods的podspec文件里面的時候,會找不到這個靜態(tài)庫,怎么弄都是瞎搞鼓。

image.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安裝使用

image.png
#import <CyhLib.h>
BOOL isPhoneNum = [@"15777183567" checkPhoneNumInput];
if (isPhoneNum) {
NSLog(@"是手機號");
}
else
{
NSLog(@"不是手機號");
}