iOS 組件化- 把gitlab/github上的SDK 使用CocoaPods管理

場(chǎng)景1:在我自己寫(xiě)的SDK中集成其他SDK,又不想直接把別人的SDK直接放到我的SDK中
場(chǎng)景2:項(xiàng)目組件化
1.會(huì)讓自己的SDK包體積增加,每次發(fā)布更新比較麻煩,編譯慢, 提交慢
2.給公司其他部門(mén)使用的時(shí)候, 因?yàn)轶w積過(guò)大, 會(huì)下載很慢
3.github有對(duì)大文件體積的限制
4.自己的SDK, 有可能會(huì)和其他三方SDK,命名沖突,全局變量沖突,宏定義沖突等,極易crash

下面操作在github上同樣適用 , 只是使用gitlab沒(méi)有100mb大文件限制, 公司內(nèi)部下載更快
github上也能這么操作 , 1.往主倉(cāng)提交 2.自建spec倉(cāng)庫(kù), 提交


1.在GitLab創(chuàng)建兩個(gè)倉(cāng)庫(kù),一個(gè)SDK代碼倉(cāng),一個(gè)Spec索引倉(cāng)

image.png
在gitlib上創(chuàng)建兩個(gè)私有倉(cāng)庫(kù)(私有庫(kù)會(huì)有權(quán)限問(wèn)題,記得開(kāi)放權(quán)限) , 一個(gè)Spec倉(cāng)庫(kù) , 一個(gè)SDK倉(cāng) ,怎么創(chuàng)建就不用教大家了吧
SDK倉(cāng)放 .h .m /或者.a 或者.framework
Spec倉(cāng)放podspec索引 ``

2.將空的SDK倉(cāng)clone到本地

git clone git@git.google.net:Sibor/CPCiOSSDK.git

3.在SDK倉(cāng)中創(chuàng)建READEME ,LICENSE等

1.完全不需要自己手動(dòng)創(chuàng)建
2.先找個(gè)任意位置 輸入命令 `pod lib create 命令創(chuàng)建庫(kù)項(xiàng)目` 

任意位置是不想再當(dāng)前倉(cāng)庫(kù)使用 pod lib create ,目錄太多, 麻煩

Mac:~ Sibor$ pod lib create CPCiOSSDK
Cloning `https://github.com/CocoaPods/pod-template.git` into `RKBluetoothLEKit`.
Configuring RKBluetoothLEKit template.

------------------------------

To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide: 
 - http://guides.cocoapods.org/making/using-pod-lib-create.html
 ( hold cmd and double click links to open in a browser. )


What language do you want to use?? [ Swift / ObjC ]
 > ObjC

Would you like to include a demo application with your library? [ Yes / No ]
 > Yes

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

Would you like to do view based testing? [ Yes / No ]
 > No

What is your class prefix?
 > CPC

然后會(huì)成成下列文件

image.png

然后把這些文件都 拷貝 到剛才clone的目錄下

4.改寫(xiě)podspec文件 ,下面是我的podspec

Pod::Spec.new do |s|
  s.name             = 'CPCiOSSDK'
  s.version          = '0.1.0'
  s.summary          = 'A short description of CPCiOSSDK.'

  s.description      = <<-DESC
TODO: Add long description of the pod here.
                       DESC

  s.homepage         = 'http://www.itdecent.cn/u/5f9dd7c82945'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'Sibor' => 'Sibor@qutoutiao.net' }
  s.source           = { :git => 'git@git.qutoutiao.net:Sibor/CPCiOSSDK.git', :tag => s.version.to_s }

  s.ios.deployment_target = '8.0'

  s.source_files = 'CPCiOSSDK/Classes/**/*'
  
  # s.resource_bundles = {
  #   'CPCiOSSDK' => ['CPCiOSSDK/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit' ,'Foundation'

  s.dependency 'AFNetworking', '~> 3.2.1'
  s.vendored_frameworks = 'CPCiOSSDK/*.{framework}'

end
s.vendored_frameworks = 'CPCiOSSDK/*.{framework}' 是你倉(cāng)庫(kù)如果存放的不是.h .m 需要寫(xiě)這句
s.dependency 是你的倉(cāng)要依賴的第三方SDK
s.source_files 是你的倉(cāng)庫(kù)要使用的資源文件
s.source 是你當(dāng)前的存放源碼或者.a.framework的倉(cāng)要提交的位置

SDK放哪? 像AFNetworking那樣有源文件的放哪????

image.png

Classes 是放源碼的, 例如AFNetworking那樣

因?yàn)镾DK不想讓別人看到源碼,所以我直接把打包好的Framework放到了如下圖目錄,然后在CPCiOSSDK/Example目錄下執(zhí)行 pod install 如下圖

image.png

然后寫(xiě)頭文件, 寫(xiě)調(diào)用 , 沒(méi)問(wèn)題之后就可以提交了 這個(gè)就是個(gè)demo, 讓你驗(yàn)證別人install的時(shí)候是否有問(wèn)題, 如果這步都不行, 就先別著急提交了, 仔細(xì)修改podspec文件

4.檢查提交

pod lib lint --allow-warnings

如果沒(méi)問(wèn)題, 就會(huì)像下圖


image.png

然后提交代碼 , tag很重要哦

tag號(hào)要和podspec文件里面的s.version 保持一致

git add .
git commit -m "添加了SDK代碼"
git tag -a 0.1.0 -m "和podspec文件的s.version 保持一致" 
git push origin --tags
git push

5.添加私有Spec庫(kù)到本地pod庫(kù)

在當(dāng)前目錄下操作就可以

 pod repo add CPCiOSSDKSpec  git@git.qutoutiao.net:dinghao/CPCiOSSDKSpec.git

如果成功 ,會(huì)在隱藏目錄 ~/.cocoapods/repos目錄下生成CPCiOSSDKSpec
開(kāi)啟隱藏文件的方法:command + shift + 點(diǎn)

image.png

接下來(lái)的非常關(guān)鍵,這一步會(huì)將CPCiOSSDK.podspec文件從git上下載到上圖的CPCiOSSDKSpec文件夾里

6.提交本地庫(kù),向Spec Repo提交podspec(修改之后提交)

pod repo push CPCiOSSDKSpec CPCiOSSDK.podspec --allow-warnings --verbose

pod repo push CPCiOSSDKSpec(這個(gè)是遠(yuǎn)程存放podspec倉(cāng)的名字) CPCiOSSDK.podspec(本地要提交的podspec文件的名字) --allow-warnings (忽略警告) --verbose(展示詳細(xì)過(guò)程)

image.png

然后給你們看一下 ,成功之后git倉(cāng) 的樣子 如下圖:

image.png

0.01 就是自己打的tag, 不用糾結(jié)我這個(gè)和上面的名字不一樣, 因?yàn)槭橇硪粋€(gè)工程

7.pod search

命令行

 pod search CPCiOSSDK
image.png

8.編寫(xiě)Podfile和github開(kāi)源倉(cāng)上的區(qū)別

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
source 'git@git.qutoutiao.net:Sibor/CPCiOSSDKSpec.git'       #私有倉(cāng)庫(kù)地址
source 'https://github.com/CocoaPods/Specs.git'        #官方倉(cāng)庫(kù)地址


target 'podTest' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!
   pod 'CPCiOSSDK', '~> 0.1.0'
   #pod 'AFNetworking', '~> 3.1.2'

  # Pods for podTest

end

0.私有倉(cāng)庫(kù)是你的Spec索引庫(kù)地址, 不是SDK代碼庫(kù)地址, 切記!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1.CPCiOSSDK里面用到了AFNetworking ,但是再之前的podspec文件中dependency 了AF ,所以這里不需要再次引用,會(huì)自動(dòng)下載
2.私有倉(cāng)庫(kù)和官方倉(cāng)庫(kù)都要寫(xiě), 要不讓報(bào)錯(cuò), 會(huì)找不到的

然后pod install 之后就可以使用了

9.更新

1.修改podspec文件的版本號(hào)

例如:s.version = '0.1.0' -> s.version = '0.2.0'

2.提交

git add .
git commit -m "添加了SDK代碼"
git tag -a 0.2.0 -m "添加0.2tag" 
git push origin --tags
git push

3.更新podspec倉(cāng) ,會(huì)將podspec索引更新到podspec倉(cāng)

pod repo push CPCiOSSDKSpec CPCiOSSDK.podspec --allow-warnings --verbose

4.如果是別人要更新你的倉(cāng)庫(kù)

第一次  :pod repo add CPCiOSSDKSpec git@git.baudu.net:Sibor/CPCiOSSDKSpec.git
第二次 :pod repo update CPCMobAdSpec

別人如果要使用你私有庫(kù)的,就給對(duì)方上面的這2條命令 ,讓對(duì)方把你的spec索引目錄下載到本地 ,就可以pod search 了

10.錯(cuò)誤原因

. 錯(cuò)誤原因, 未完待續(xù)

1.[!] Unable to find a podspec in the working directory

缺少.podspec文件

2. - ERROR | [iOS] file patterns: The vendored_frameworks pattern did not match any file.

其實(shí)是找不到這個(gè)路徑下的SDK s.vendored_frameworks = 'CPCiOSSDK/*.{framework}'

3. - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone git@git.qutoutiao.net:dinghao/CPCMobAdSDK.git /var/folders/vv/_k5606496z5gnq22kdtxqjrh0000gn/T/d20181031-33291-xbfjvq --template= --single-branch --depth 1 --branch 0.0.1

版本號(hào)問(wèn)題, 提交的時(shí)候沒(méi)有指定tag

4. [!] Unable to find a pod with name, author, summary, or description matching CPCMobAdSDK

刪除/Library/Caches/CocoaPods/search_index.json 文件, 重新pod search 等一會(huì)兒就好了

``
[!] CPCBaiduMobAdSDK did not pass validation, due to 1 error.

``

11.SDK聯(lián)調(diào)

SDK 想聯(lián)調(diào) 可以下斷點(diǎn)的方式 , 我們都知道
1.創(chuàng)建workspase
2.在工作空間創(chuàng)建SDK工程 , 創(chuàng)建Test工程
3.Test工程的Link Binary With Libraries添加SDK工程的framework
這樣我們就可以 調(diào)試Framework了

重點(diǎn)!!!!

同樣我們可以在CPCiOSSDK 工程里面添加SDK源碼的工程 例如這樣:

image.png
最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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