iOS SDK 開發(fā)之靜態(tài)庫framework開發(fā)、調(diào)試、及上傳pod

前段時(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 里面。

  1. 動(dòng)態(tài)庫鏈接,還不知道怎么配,還需要手動(dòng)添加,如有知道請(qǐng)賜教,謝謝??。我看了這個(gè)博客能做到,但是自己嘗試并沒有成功。
    CocoaPods 動(dòng)/靜態(tài)庫混用封裝組件化
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 1.靜態(tài)庫和動(dòng)態(tài)庫有什么異同? 靜態(tài)庫:鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗余拷貝。利用靜態(tài)...
    Ly夢(mèng)k閱讀 8,750評(píng)論 3 18
  • 僅以方便自己查閱記錄前言1.靜態(tài)庫和動(dòng)態(tài)庫有什么異同?靜態(tài)庫:鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗...
    190CM閱讀 4,526評(píng)論 0 4
  • 今日體驗(yàn),今天去給保養(yǎng)的奔馳去洗車, 在車轉(zhuǎn)彎的時(shí)候方向盤有異響、而且還很松,第一感覺就是不對(duì),在檢查的時(shí)候發(fā)現(xiàn)方...
    王全峰閱讀 158評(píng)論 0 0
  • 假如西游記里孫悟空和唐僧性格顛倒一下會(huì)怎樣? 壹 師父,我覺得,這個(gè)妖怪我下不了手。 “你怎么下不了手,你他媽一棒...
    笙九er閱讀 321評(píng)論 0 0

友情鏈接更多精彩內(nèi)容