項目組件化時用的包管理技術(shù)。

要解除循環(huán)依賴吞获,引入包管理技術(shù)cocoapods會讓我們更有效率况凉。pod不允許組件間有循環(huán)依賴,若有pod install時就會報錯各拷。

cocoapods刁绒,提供私有pod repo,使用時把自己的組件放在私有pod repo里烤黍,然后在Podfile里直接通過pod命令集成膛锭。一個組件對應(yīng)一個私有pod,每個組件依賴自己所需要的三方庫蚊荣。多個組件聯(lián)合開發(fā)的時候初狰,可以再一個podspec里配置子模塊,這樣在每個組件自己的podspec里互例,只需要把子模塊里的pod依賴關(guān)系拷貝過去就行了奢入。

pod repo update命令。

有個場景媳叨,幾個人共同維護(hù)一個項目腥光,Podfile也是共同維護(hù)一份。有一天其中一個人糊秆,升級了Podfile中某個庫的版本武福,比如AFNetworking從3.0.4升級到了3.1.0, pod 'AFNetworking', '~> 3.1.0’痘番。然后捉片,你更新了最新的Podfile平痰,跑了一下pod install。伍纫。宗雇。。莹规。赔蒲。

1、先從pod install拋出的異常開始良漱,如下圖:


image.png

**1.Github **

創(chuàng)建自己的Repository舞虱,我創(chuàng)建了SDKLib,然后從本地上傳到github上母市, 這些步驟就不在這里贅述了砾嫉,經(jīng)常跑github的同學(xué)應(yīng)該都會。

**2 基于pod命令創(chuàng)建SDK **

具體的pod命令如下:

pod lib create SDKLib

調(diào)用以后terminal中會需要填寫以下問題,一般選擇創(chuàng)建Demo,其他選項根據(jù)需求填寫:

What languagedoyou want to use??[ Swift / ObjC ]

ObjC

Would you like toincludea demo application with your library? [ Yes / No ]

YES

Which testing frameworks will you use? [ Specta / Kiwi / None ]

None

Would you like todoview based testing? [ Yes / No ]

Yes

What is yourclassprefix?

SDK

第二種:(使用xcode手動創(chuàng)建靜態(tài)庫窒篱,網(wǎng)上比較多的版本焕刮,需要做一些配置,這里個人覺得太不方便墙杯,如果喜歡xcode自己創(chuàng)建的可以參考這篇http://www.reibang.com/p/e588bb0411d8)費(fèi)力不討好的工程

3.建tag

打開終端配并,cd 到項目SDKLib目錄下,

git tag '1.0.0'//這個命令是本地創(chuàng)建tag高镐,1.0.0版本

git push --tags // 這個命令是把tag推送到遠(yuǎn)端溉旋。

4.創(chuàng)建項目的podspec文件

現(xiàn)在終端還是在項目QShare的目錄下,執(zhí)行以下命令

$ pod spec createSDKLib

在本地目錄下同時也生成了SDKLib.podspec文件

打開項目可以開到工程里都給你配置好了 畫的地方就是你開發(fā)自己靜態(tài)庫文件編碼的地方(怎么打包成靜態(tài)庫嫉髓,請往下看)這里因為特殊原因观腊,一些文件不能展開

image.png

$ vim SDKLib.podspec

編輯podspec文件,會發(fā)現(xiàn)這個文件已經(jīng)生成了部分的字段

以下是編輯好的podspec 文件 做一些解釋

Pod::Spec.new do |s|

s.name = 'SDKLib'

s.version = '0.4.9'

s.summary = 'A short description of SDKLib.'

s.platform = :ios

s.homepage = 'https://github.com/wangxiaokui'#

s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2's.license = { :type => 'MIT', :file => 'LICENSE' }

s.author = { 'xiaokui' => 'm18736056517@163.com' }

s.source = { :git => 'https://github.com/xiaokui/SDKLib.git', :tag => s.version}

s.source = { :git => '/Users/fan/SDKLib' } #加載本地自己的庫的引用

s.social_media_url = 'https://twitter.com/'

s.ios.deployment_target = '8.0'

s.source_files = 'SDKLib/Classes/*/'

s.resource_bundles = {

'SDKLib' => ['SDKLib/Assets/*.png']

}

s.public_header_files = 'Pod/Classes/*/.h'

s.frameworks = 'SystemConfiguration','MobileCoreServices','CoreGraphics','UIKit','AVFoundation','Photos','AdSupport','GLKit','MediaPlayer','MessageUI','CoreMotion','CoreTelephony'

s.dependency 'MBProgressHUD'

s.dependency 'MJExtension'

s.dependency 'SDWebImage'

s.dependency 'Masonry'

s.dependency 'MJRefresh'

s.dependency 'SVProgressHUD'

s.dependency 'Google-Mobile-Ads-SDK'

end

podspec中重要的幾個內(nèi)容解釋如下:

s.source中是表示使用pod package打包時候pod去尋找的打包的路徑,podspec默認(rèn)使用git commit tag作為路徑,也可以修改成本地路徑/Users/pp/Desktop/MyCustomLib,如果當(dāng)前沒有設(shè)置:tag,打包時候默認(rèn)使用當(dāng)前git commit的head節(jié)點(如果部分修改內(nèi)容沒有commit,那么使用git package不會將未commit的內(nèi)容進(jìn)行打包).

s.source_files表示具體的源碼的路徑,這里注意源碼一般放到Classes文件夾目錄下,而且實體文件中不要有非源碼內(nèi)容放到Classes文件夾.Classes文件夾的所有內(nèi)容都要Add Targets To: MyCustomLib.不要Classes文件夾或子文件夾中部分內(nèi)容被remove referrence.

s.resource_bundles中的資源.系統(tǒng)會自動將MyCustomLib/Assets文件夾下的內(nèi)容,cocoapod會將我們把Assets中的內(nèi)容自動打包成MyCustomLib.bundle.這里也可以使用簡單的方式

1 在Assets文件夾中放入我們自己寫好的MyCustomLib.bundle,bundle中是我們使用的資源.

2 使用s.resource = 'MyCustomLib/Assets/*'.最后會將這些資源打入framework中.

3 在Example中手動引用我們自己創(chuàng)建的*.bundle資源文件.

s.public_header_files用來指定需要對外部暴露的頭文件的位置

s.frameworks和s.libraries,表示當(dāng)前sdk依賴的系統(tǒng)的framework和類庫

s.dependency表示當(dāng)前podspec類庫對外部第三方庫的依賴.如果使用pod package打包sdk時候,這里的dependency會被自動添加前綴,防止重復(fù)引用沖突.而且這里的依賴只能是pod庫(公有或者私有)的內(nèi)容.

s.subspec用來引入我們sdk依賴的自己的framework或者.a等靜態(tài)庫

特別注意在.podspec 操作了s.dependency依賴了一些庫了后算行,就不需要再同一工程里使用podfile文件再次pod這些庫了梧油,它們會沖突,同時需要理解.podspec 里一些配置的意思相信會解決你不少問題

編輯好podspec文件后州邢,需要驗證一下這個文件是否能通過編譯儡陨。

$ pod spec lint SDKLib.podspec --verbose

然而并沒有通過

  • ERROR | [iOS] Encountered an unknown error (The'Pods'target has transitive dependencies that include static binaries:

找了一些相關(guān)的,這個錯誤是因為依賴庫(s.dependency)包含了.a靜態(tài)庫造成的量淌。雖然這并不影響Pod的使用骗村,但是驗證是無法通過的⊙绞啵可以通過 --use-libraries 來讓驗證通過胚股。使用以下的命令:

$ pod spec lint QShare.podspec --verbose --use-libraries

這種情況下使用 --use-libraries 雖然不會出現(xiàn)錯誤(error),但是有時候會帶來一些警告(waring)裙秋,警告同樣是無法通過驗證的琅拌。這時可以用 --allow-warnings 來允許警告缨伊。

$ pod spec lint QShare.podspec --verbose --use-libraries --allow-warnings

這里針對自己的項目情況判斷添加那些命令通過了。

5财忽、提交到pod (使用git命令,打上tag再次提交泣侮,版本號每次需要更新哦)這里不多說了

發(fā)布時也會驗證 Pod 的有效性即彪,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那么發(fā)布的時候也應(yīng)該使用相同的字段修飾活尊,否則出現(xiàn)相同的報錯隶校。

發(fā)布成功后,

終于可以使用 pod search 搜索到自己的 Pod 了蛹锰。

?fanpod search SDKLib

-> SDKLib (1.0.0)

Gather Some Auth Share Pay.

pod 'SDKLib', '~> 1.0.0'

6深胳、版本升級

當(dāng)需要更新 Pod 版本的時候,修改 .podspec 中的 s.version 為更高的版本號铜犬,并修改 s.source 中對應(yīng)的 Git 版本舞终。提交到Git,并打上對應(yīng)tag癣猾。然后再次執(zhí)行pod trunk push SDKLib.podspec將新的 .podspec 發(fā)布到 CocoaPods敛劝。更新完成!

為了更方便的修改版本號纷宇,用了以下的語句:

s.source = { :git => "https://github.com/xiaokui/SDKLib.git", :tag => "v#{s.version}" }

這樣與 s.version進(jìn)行了綁定夸盟,每次提交新的版本只需要修改s.version = "xxxx"。

7:將源碼打包成靜態(tài)庫.a或者.framework

需要安裝cocoapods-packager.(安裝命令:sudo gem install cocoapods-packager)

然后執(zhí)行pod package SDKLib.podspec --force --verbose.通過這個命令打包時候會自動將podspec中dependency的第三方庫進(jìn)行重命名.這樣打出來的是SDKLib.framework.

(打release 的包默認(rèn)打包成framework像捶,如果在后面加上參數(shù)“--library”則打包成.a文件上陕,--force是指強(qiáng)制覆蓋)前面資源文件都在SDKLib.framework/Reources/SDKLib.bundle里面可以手動把這個bundle拖出去.

前面提到過使用pod package打包時候需要注意.pod會根據(jù)當(dāng)前podspec中的s.source的地址去查找當(dāng)前sdk源文件的地址.如果使用的s.source = { :git => 'https://github.com/xiaokui/SDKLib.git', :tag => s.version.to_s },那么就會去git中拉取最后一個tag對應(yīng)commit的源碼.如果使用的s.source = { :git => '/Users/fan/Desktop/SDKLib'},那么會使用當(dāng)前sdk中g(shù)it 的HEAD位置的commit的源碼進(jìn)行打包編譯.(如果源碼有修改,一定要先git commit,然后再打包)

** 注意問題**

1、 重點問題一: Example中依賴某些類庫

舉例說明,如果SDKLib.podspec中依賴s.dependency 'AFNetworking', '~> 2.3',此時在Example中也需要使用AFNetworking,那么這里千萬不要在Example中引入AFNetworking的源碼,請在podfile中添加pod AFNetworking.

2拓春、 重點問題二: SDK中依賴的第三方庫無法使用BITCODE

在Example的podfile底部添加以下語句:

//    post_install do |installer|
//    installer.pods_project.targets.each do |target|
//        target.build_configurations.each do |config|
//            config.build_settings['ENABLE_BITCODE'] = 'NO'
//        end
//    end

3 释簿、重點問題三: SDK中調(diào)用資源的問題

對于podfile,常見的庫的地址引用寫法如下:

pod'庫名', :podspec =>'podspec文件路徑'#指定導(dǎo)入庫的podspec文件路徑pod'庫名', :git =>'源碼git地址'#指定導(dǎo)入庫的源碼git地址pod'庫名', :tag =>'tag名'#指定導(dǎo)入庫的Tag分支pod'庫名', :path =>'~/Documents/AFNetworking'#指定本地的某個庫,文件夾中要有podspec文件

用AFNetworking舉例:

// 使用倉庫中的master分支:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git'//使用倉庫的其他分支:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :branch=>'dev'//使用倉庫的某個tag:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :tag=>'0.7.0'//指定一個提交記錄:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :commit=>'082f8319af'//指定本地路徑的最近一次提交commitpod'庫名', :path=>'~/Documents/AFNetworking'

打包成功后會在SDKLib.podspec文件路徑下面生成一個打包文件,在iOS文件夾里面會看到生成的靜態(tài)庫包

8:可以驗證自己的pod地址了(這樣pod下來的是靜態(tài)庫源碼硼莽,你會發(fā)現(xiàn)自己開發(fā)的靜態(tài)庫文件辕万,到pod文件下面了,具體需要你自己驗證一篇)

** 再次創(chuàng)建一個項目沉删,在配置podfile文件在里面添加自己的git地址渐尿,pod install 試試 ,一路有坑矾瑰,根據(jù)特定的情況解決問題 **

特別注意:

** 7和8是不一樣砖茸,7是打包看不到源碼,8是在git上pod的下來的源碼殴穴,如果想在git上pod下來是打包好的靜態(tài)庫不是開源的源碼凉夯,可以把靜態(tài)庫配置好..podspec上傳上git货葬,你需要在git上重新建一個倉庫。**

為了解決這個異尘⒐唬可能嘗試一下:

(1)是不是Podfile和Podfile.lock 文件不同步震桶?刪掉.lock文件再pod install一次,仍然報錯征绎。

(2)是不是AFNetworking沒有3.1.0版本蹲姐?pod search afnetworking一下,版本存在人柿。

如果被我猜中了柴墩,證明你把焦點放在了異常前三行,而忽略了最關(guān)鍵的信息:None of your spec sources contain a spec satisfying the dependencies: AFNetworking (~> 3.1.0), AFNetworking (= 3.1.0)凫岖。

這句話的意思是說:你spec資源中不包含AFNetworking的3.1.0的配置信息江咳。這里面有個關(guān)鍵詞,spec資源和配置信息哥放。

然后最下面提醒pod repo update’ does not happen on ‘pod install’ by default歼指。意思是默認(rèn)情況下,執(zhí)行pod install不會自動執(zhí)行pod repo update命令甥雕。那么pod repo update做了什么东臀?

2、pod repo update

簡單來說犀农,pod repo update命名是用來更新本地cocoapods的spec資源配置信息惰赋。

安裝完cocoapods后,在用戶根目錄下有個隱藏文件夾呵哨,/Users//.cocoapods赁濒,里面是cocoapods收錄的所有庫的配置信息,/Users//.cocoapods/repos/master/Specs/孟害。比如AFNetworking就是/Users//.cocoapods/repos/master/Specs/AFNetworking拒炎,內(nèi)部分版本包含多個文件夾,每個文件夾內(nèi)包含一個配置文件挨务,比如AFNetworking.podspec.json击你。

image.png

上面報錯的原因就是,Podfile中AFNetworking的版本更新到了3.1.0谎柄,但是本地.cocoapods下找不到相應(yīng)的配置文件丁侄。

然后按照提示,執(zhí)行pod repo update朝巫,碰到網(wǎng)速慢的時候鸿摇,命令執(zhí)行完了就不動了,又被迫擺出葛優(yōu)躺等著劈猿。

重點來了拙吉,pod repo update實際是更新整個.cocoapods下的所有庫潮孽,其實我們可以只更新其中某個庫來達(dá)到快速可用的目的。下面提供兩個方法解決:

(1)正規(guī)方法:

指定更新單獨庫pod repo update /Users//.cocoapods/repos/master/Specs/

(2)野路子:

如果方法1仍然無法解決問題筷黔,而又著急使用往史。可以直接到相應(yīng)目錄下手動增加缺少的版本目錄和spec文件佛舱,/Users//.cocoapods/repos/master/Specs//3.2.0/.spec椎例。spec文件參考git上相應(yīng)庫的版本。

podspec

**1.Github **

創(chuàng)建自己的Repository名眉,我創(chuàng)建了SDKLib粟矿,然后從本地上傳到github上凰棉, 這些步驟上面有损拢,不過經(jīng)常跑github的同學(xué)應(yīng)該都會。

**2 基于pod命令創(chuàng)建SDK **

具體的pod命令如下:

pod lib create SDKLib

調(diào)用以后terminal中會需要填寫以下問題,一般選擇創(chuàng)建Demo,其他選項根據(jù)需求填寫:

What languagedoyou want to use??[ Swift / ObjC ]

ObjC

Would you like toincludea demo application with your library? [ Yes / No ]

YES

Which testing frameworks will you use? [ Specta / Kiwi / None ]

None

Would you like todoview based testing? [ Yes / No ]

Yes

What is yourclassprefix?

SDK

第二種:(使用xcode手動創(chuàng)建靜態(tài)庫撒犀,網(wǎng)上比較多的版本福压,需要做一些配置,這里個人覺得太不方便或舞,如果喜歡xcode自己創(chuàng)建的可以參考這篇http://www.reibang.com/p/e588bb0411d8)費(fèi)力不討好的工程

3.建tag

打開終端荆姆,cd 到項目SDKLib目錄下,

git tag '1.0.0'//這個命令是本地創(chuàng)建tag映凳,1.0.0版本

git push --tags // 這個命令是把tag推送到遠(yuǎn)端胆筒。

4.創(chuàng)建項目的podspec文件

現(xiàn)在終端還是在項目QShare的目錄下,執(zhí)行以下命令

$ pod spec createSDKLib

在本地目錄下同時也生成了SDKLib.podspec文件

$ vim SDKLib.podspec

編輯podspec文件诈豌,會發(fā)現(xiàn)這個文件已經(jīng)生成了部分的字段

以下是編輯好的podspec 文件 做一些解釋

Pod::Spec.new do |s|

s.name = 'SDKLib'

s.version = '0.4.9'

s.summary = 'A short description of SDKLib.'

s.platform = :ios

s.homepage = 'https://github.com/wangxiaokui'#

s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2's.license = { :type => 'MIT', :file => 'LICENSE' }

s.author = { 'xiaokui' => 'm18736056517@163.com' }

s.source = { :git => 'https://github.com/xiaokui/SDKLib.git', :tag => s.version}

s.source = { :git => '/Users/fan/SDKLib' } #加載本地自己的庫的引用

s.social_media_url = 'https://twitter.com/'

s.ios.deployment_target = '8.0'

s.source_files = 'SDKLib/Classes/*/'

s.resource_bundles = {

'SDKLib' => ['SDKLib/Assets/*.png']

}

s.public_header_files = 'Pod/Classes/*/.h'

s.frameworks = 'SystemConfiguration','MobileCoreServices','CoreGraphics','UIKit','AVFoundation','Photos','AdSupport','GLKit','MediaPlayer','MessageUI','CoreMotion','CoreTelephony'

s.dependency 'MBProgressHUD'

s.dependency 'MJExtension'

s.dependency 'SDWebImage'

s.dependency 'Masonry'

s.dependency 'MJRefresh'

s.dependency 'SVProgressHUD'

s.dependency 'Google-Mobile-Ads-SDK'

end

podspec中重要的幾個內(nèi)容解釋如下:

s.source中是表示使用pod package打包時候pod去尋找的打包的路徑,podspec默認(rèn)使用git commit tag作為路徑,也可以修改成本地路徑/Users/pp/Desktop/MyCustomLib,如果當(dāng)前沒有設(shè)置:tag,打包時候默認(rèn)使用當(dāng)前git commit的head節(jié)點(如果部分修改內(nèi)容沒有commit,那么使用git package不會將未commit的內(nèi)容進(jìn)行打包).

s.source_files表示具體的源碼的路徑,這里注意源碼一般放到Classes文件夾目錄下,而且實體文件中不要有非源碼內(nèi)容放到Classes文件夾.Classes文件夾的所有內(nèi)容都要Add Targets To: MyCustomLib.不要Classes文件夾或子文件夾中部分內(nèi)容被remove referrence.

s.resource_bundles中的資源.系統(tǒng)會自動將MyCustomLib/Assets文件夾下的內(nèi)容,cocoapod會將我們把Assets中的內(nèi)容自動打包成MyCustomLib.bundle.這里也可以使用簡單的方式

1 在Assets文件夾中放入我們自己寫好的MyCustomLib.bundle,bundle中是我們使用的資源.

2 使用s.resource = 'MyCustomLib/Assets/*'.最后會將這些資源打入framework中.

3 在Example中手動引用我們自己創(chuàng)建的*.bundle資源文件.

s.public_header_files用來指定需要對外部暴露的頭文件的位置

s.frameworks和s.libraries,表示當(dāng)前sdk依賴的系統(tǒng)的framework和類庫

s.dependency表示當(dāng)前podspec類庫對外部第三方庫的依賴.如果使用pod package打包sdk時候,這里的dependency會被自動添加前綴,防止重復(fù)引用沖突.而且這里的依賴只能是pod庫(公有或者私有)的內(nèi)容.

s.subspec用來引入我們sdk依賴的自己的framework或者.a等靜態(tài)庫

特別注意在.podspec 操作了s.dependency依賴了一些庫了后仆救,就不需要再同一工程里使用podfile文件再次pod這些庫了,它們會沖突矫渔,同時需要理解.podspec 里一些配置的意思相信會解決你不少問題

編輯好podspec文件后彤蔽,需要驗證一下這個文件是否能通過編譯。

$ pod spec lint SDKLib.podspec --verbose

然而并沒有通過

  • ERROR | [iOS] Encountered an unknown error (The'Pods'target has transitive dependencies that include static binaries:

找了一些相關(guān)的庙洼,這個錯誤是因為依賴庫(s.dependency)包含了.a靜態(tài)庫造成的顿痪。雖然這并不影響Pod的使用,但是驗證是無法通過的油够∫舷可以通過 --use-libraries 來讓驗證通過。使用以下的命令:

$ pod spec lint QShare.podspec --verbose --use-libraries

這種情況下使用 --use-libraries 雖然不會出現(xiàn)錯誤(error)石咬,但是有時候會帶來一些警告(waring)撕阎,警告同樣是無法通過驗證的。這時可以用 --allow-warnings 來允許警告碌补。

$ pod spec lint QShare.podspec --verbose --use-libraries --allow-warnings

這里針對自己的項目情況判斷添加那些命令通過了虏束。

5棉饶、提交到pod (使用git命令,打上tag再次提交镇匀,版本號每次需要更新哦)這里不多說了

發(fā)布時也會驗證 Pod 的有效性照藻,如果你在手動驗證 Pod 時使用了 --use-libraries 或 --allow-warnings 等修飾符,那么發(fā)布的時候也應(yīng)該使用相同的字段修飾汗侵,否則出現(xiàn)相同的報錯幸缕。

發(fā)布成功后,

終于可以使用 pod search 搜索到自己的 Pod 了晰韵。

?fanpod search SDKLib

-> SDKLib (1.0.0)

Gather Some Auth Share Pay.

pod 'SDKLib', '~> 1.0.0'

6发乔、版本升級

當(dāng)需要更新 Pod 版本的時候,修改 .podspec 中的 s.version 為更高的版本號雪猪,并修改 s.source 中對應(yīng)的 Git 版本栏尚。提交到Git,并打上對應(yīng)tag只恨。然后再次執(zhí)行pod trunk push SDKLib.podspec將新的 .podspec 發(fā)布到 CocoaPods译仗。更新完成!

為了更方便的修改版本號官觅,用了以下的語句:

s.source = { :git => "https://github.com/xiaokui/SDKLib.git", :tag => "v#{s.version}" }

這樣與 s.version進(jìn)行了綁定纵菌,每次提交新的版本只需要修改s.version = "xxxx"。

7:將源碼打包成靜態(tài)庫.a或者.framework

需要安裝cocoapods-packager.(安裝命令:sudo gem install cocoapods-packager)

然后執(zhí)行pod package SDKLib.podspec --force --verbose.通過這個命令打包時候會自動將podspec中dependency的第三方庫進(jìn)行重命名.這樣打出來的是SDKLib.framework.

(打release 的包默認(rèn)打包成framework休涤,如果在后面加上參數(shù)“--library”則打包成.a文件咱圆,--force是指強(qiáng)制覆蓋)前面資源文件都在SDKLib.framework/Reources/SDKLib.bundle里面可以手動把這個bundle拖出去.

前面提到過使用pod package打包時候需要注意.pod會根據(jù)當(dāng)前podspec中的s.source的地址去查找當(dāng)前sdk源文件的地址.如果使用的s.source = { :git => 'https://github.com/xiaokui/SDKLib.git', :tag => s.version.to_s },那么就會去git中拉取最后一個tag對應(yīng)commit的源碼.如果使用的s.source = { :git => '/Users/fan/Desktop/SDKLib'},那么會使用當(dāng)前sdk中g(shù)it 的HEAD位置的commit的源碼進(jìn)行打包編譯.(如果源碼有修改,一定要先git commit,然后再打包)

** 注意問題**

1、 重點問題一: Example中依賴某些類庫

舉例說明,如果SDKLib.podspec中依賴s.dependency 'AFNetworking', '~> 2.3',此時在Example中也需要使用AFNetworking,那么這里千萬不要在Example中引入AFNetworking的源碼,請在podfile中添加pod AFNetworking.

2功氨、 重點問題二: SDK中依賴的第三方庫無法使用BITCODE

在Example的podfile底部添加以下語句:

post_install do |installer|

    installer.pods_project.targets.each do |target|

        target.build_configurations.each do |config|

            config.build_settings['ENABLE_BITCODE'] = 'NO'

        end

    end

3 序苏、重點問題三: SDK中調(diào)用資源的問題

對于podfile,常見的庫的地址引用寫法如下:

pod'庫名', :podspec =>'podspec文件路徑'#指定導(dǎo)入庫的podspec文件路徑pod'庫名', :git =>'源碼git地址'#指定導(dǎo)入庫的源碼git地址pod'庫名', :tag =>'tag名'#指定導(dǎo)入庫的Tag分支pod'庫名', :path =>'~/Documents/AFNetworking'#指定本地的某個庫,文件夾中要有podspec文件

用AFNetworking舉例:

// 使用倉庫中的master分支:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git'//使用倉庫的其他分支:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :branch=>'dev'//使用倉庫的某個tag:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :tag=>'0.7.0'//指定一個提交記錄:pod'AFNetworking', :git=>'https://github.com/gowalla/AFNetworking.git', :commit=>'082f8319af'//指定本地路徑的最近一次提交commitpod'庫名', :path=>'~/Documents/AFNetworking'

打包成功后會在SDKLib.podspec文件路徑下面生成一個打包文件,在iOS文件夾里面會看到生成的靜態(tài)庫包

8:可以驗證自己的pod地址了(這樣pod下來的是靜態(tài)庫源碼疑故,你會發(fā)現(xiàn)自己開發(fā)的靜態(tài)庫文件杠览,到pod文件下面了,具體需要你自己驗證一篇)

** 再次創(chuàng)建一個項目纵势,在配置podfile文件在里面添加自己的git地址踱阿,pod install 試試 ,一路有坑钦铁,根據(jù)特定的情況解決問題 **

特別注意:

** 7和8是不一樣软舌,7是打包看不到源碼,8是在git上pod的下來的源碼牛曹,如果想在git上pod下來是打包好的靜態(tài)庫不是開源的源碼佛点,可以把靜態(tài)庫配置好..podspec上傳上git,你需要在git上重新建一個倉庫。**

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末超营,一起剝皮案震驚了整個濱河市鸳玩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌演闭,老刑警劉巖不跟,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異米碰,居然都是意外死亡窝革,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門吕座,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虐译,“玉大人,你說我怎么就攤上這事吴趴∑岱蹋” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵史侣,是天一觀的道長拴泌。 經(jīng)常有香客問我魏身,道長惊橱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任箭昵,我火速辦了婚禮税朴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘家制。我一直安慰自己正林,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布颤殴。 她就那樣靜靜地躺著觅廓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涵但。 梳的紋絲不亂的頭發(fā)上杈绸,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音矮瘟,去河邊找鬼瞳脓。 笑死,一個胖子當(dāng)著我的面吹牛澈侠,可吹牛的內(nèi)容都是我干的劫侧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烧栋!你這毒婦竟也來了写妥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤审姓,失蹤者是張志新(化名)和其女友劉穎耳标,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邑跪,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡次坡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了画畅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸琅。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轴踱,靈堂內(nèi)的尸體忽然破棺而出症脂,到底是詐尸還是另有隱情,我是刑警寧澤淫僻,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布诱篷,位于F島的核電站,受9級特大地震影響雳灵,放射性物質(zhì)發(fā)生泄漏棕所。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一悯辙、第九天 我趴在偏房一處隱蔽的房頂上張望琳省。 院中可真熱鬧,春花似錦躲撰、人聲如沸针贬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桦他。三九已至,卻和暖如春谆棱,著一層夾襖步出監(jiān)牢的瞬間快压,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工础锐, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留嗓节,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓皆警,卻偏偏與公主長得像拦宣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353