前段時(shí)間,由于公司和其他公司合作,需要用到我們產(chǎn)品的某些內(nèi)容進(jìn)行集成。公司決定封裝自己產(chǎn)品SDK,現(xiàn)在把經(jīng)驗(yàn)總結(jié)如下:
簡介:
庫分為靜態(tài)庫和動(dòng)態(tài)庫,靜態(tài)庫庫一般以.a或者.framework為后綴名,而動(dòng)態(tài)庫的后綴一般為.tbd(以前是.dylib)和.framework。
靜態(tài)庫:調(diào)用時(shí)會(huì)被完整的復(fù)制到可執(zhí)行文件中,被多次使用就有多份拷貝。
動(dòng)態(tài)庫:調(diào)用時(shí)不會(huì)復(fù)制,系統(tǒng)只加載一次,多個(gè)程序共用程序。運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,節(jié)省內(nèi)存。(系統(tǒng)的庫差不多都是動(dòng)態(tài)庫吧,注意??:如果使用自己封裝的動(dòng)態(tài)庫,會(huì)被拒)。
步驟:
一、創(chuàng)建靜態(tài)庫:

創(chuàng)建靜態(tài)庫 1
注意:默認(rèn)創(chuàng)建的是動(dòng)態(tài)庫,需要到,Build Settings 里面修改 Mach-O Type 為 static Library

創(chuàng)建靜態(tài)庫 2

創(chuàng)建靜態(tài)庫 3

創(chuàng)建靜態(tài)庫 4
二、調(diào)試靜態(tài)庫:
坑一、剛開始我們發(fā)現(xiàn),只是創(chuàng)建靜態(tài)庫時(shí),還要新建一個(gè)工程Demo來調(diào)試我們的庫(上級(jí)搞的),我就覺得這樣很不方便,感覺可以使用一個(gè)工程就能搞定的。
解決辦法:

調(diào)試步驟圖 1
坑二、還需要進(jìn)行一步才能進(jìn)行庫的調(diào)試

調(diào)試步驟圖 2
到此,你會(huì)發(fā)現(xiàn)我們的庫可以進(jìn)行調(diào)試了,而且不用先編譯我們的庫,直接運(yùn)行這個(gè) Demo 就可以直接調(diào)試了,非常方便。(去試試吧~~)
這樣子就差不多完成了。
如果想要讓模擬器和真機(jī)通用一個(gè)靜態(tài)庫,我們可以使用終端命令來實(shí)現(xiàn)(也可以參考這個(gè)博客)。注意??:framework靜態(tài)庫合并的不是framework,而是framework下的二進(jìn)制文件,命令為:

要合并的東西圖
lipo -create "真機(jī)版本路徑" "模擬器版本路徑" -output "合并后的文件路徑"
三、上傳pod
這個(gè)博客挺好cocoapods上傳.podspec文件流程,我也是看這個(gè)博客上傳的,我覺得最主要的就是 podspec 文件的配置,下面我只進(jìn)行對(duì)根據(jù)博客進(jìn)行商城遇到的問題進(jìn)行總結(jié),其他大家可以看他的博客。
四步:
1、 創(chuàng)建 git 遠(yuǎn)程倉庫
2、上傳文件到剛剛新建的 git 倉庫
1. git add . 添加當(dāng)前文件夾下的所有文件到git倉庫緩存區(qū)
2. git status 顯示代碼狀態(tài)
3. git commit -m '注釋' 提交代碼加注釋, 提交到本地git倉庫
4. git log 看本地git倉庫的提交記錄
5. git push origin master 推送到遠(yuǎn)程master分支
//打 tag
git tag -a '0.0.1' -m '新增0.0.1tag' 在本地倉庫增加0.0.1tag。
git push --tags 提交tag到遠(yuǎn)程倉庫。
3、配置 .podspec 文件
3.1.創(chuàng)建
pod spec create 工程名 //一般為工程名
3.2.配置,如果想簡單點(diǎn),去仿別人的 podspec 文件
Pod::Spec.new do |s|
s.name = "XXX" //名稱
s.version = "0.0.1" //??注意:版本號(hào),也是tag(必須和tag版本一致)
s.summary = "XXX summary" //Tools 的總結(jié)
s.description = <<-DESC XXX的描述,一些介紹。DESC //這里的描述,必須比s.summary的長度要長。
s.homepage = "https://github.com/xxx/XXX" //遠(yuǎn)程倉庫的首頁地址
s.license = "MIT" //MIT
s.author = { "xxx" => "xxxxxx@qq.com" } //作者,郵箱
s.platform = :ios, "5.0"
s.source = { :git => "https://github.com/xxxx/xxx.git", :tag => s.version } //git => 遠(yuǎn)程倉庫的clone地址, tag取版本號(hào)就行
s.requires_arc = true //ARC
s.source_files = "Classes", "Classes/**/*.{h,m}" //包含文件,Classes文件下的所有.h.m
s.resources = "XXX/XXXUIResource.bundle" //多個(gè)資源用逗號(hào)隔開 (某個(gè)文件夾下/某個(gè)資源文件 , 下同)
//
s.ios.preserve_paths = 'XXX/xxx.a'//設(shè)置.a文件,多個(gè)用逗號(hào)隔開
s.vendored_frameworks = 'XXX/XXXFramework.framework'//設(shè)置了framework,才會(huì)顯示在文件夾中
s.frameworks = "AudioToolbox", "AVFoundation", "CoreGraphics"http://引用的系統(tǒng)庫
s.libraries = "iconv", "xml2", "bz2", "z", "stdc++", "c++"http://引用一些lib庫
s.requires_arc = true //ARC
s.dependency "MJRefresh" //引用的第三方庫,配置,多個(gè)就寫多個(gè)
s.dependency "MJExtention"
end
3.3.檢驗(yàn) podspec
pod lib lint XXX --allow-warnings //加后面的參數(shù)比較容易成功
檢驗(yàn)成功記得,上傳到 遠(yuǎn)程 git 倉庫
git add .
git commit -m '增加Tools.podspec文件'
git push origin master
4.注冊(cè)cocoapods trunk,按照提示操作即可
4.1 注冊(cè) trunk
pod trunk register [EMAIL] [USERNAME] //郵箱,名稱
pod trunk register xxx@qq.com 'xxx'
4.2 上傳 xxx.podspec文件到git的Specs倉庫
pod trunk push xxx.podspec --allow-warnings //加后面的參數(shù)比較容易成功
最后搜索并使用我們的庫
終端上搜索 XXX,這個(gè)時(shí)候是搜索不到的。
pod search XXX
需要?jiǎng)h除 : 資源庫->Caches->CocoaPods中的search_index(索引文件),然后在終端pod search XXX,這個(gè)等待時(shí)間比較久,因?yàn)樾枰匦律伤饕募?
出現(xiàn)的問題匯總
1.xib 找不到,不能放在framework目錄下面,手動(dòng)加入的framework是可以的。pod 的話要加在bundle 里面。
- 動(dòng)態(tài)庫鏈接,還不知道怎么配,還需要手動(dòng)添加,如有知道請(qǐng)賜教,謝謝??。我看了這個(gè)博客能做到,但是自己嘗試并沒有成功。
CocoaPods 動(dòng)/靜態(tài)庫混用封裝組件化