場(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)

在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ì)成成下列文件

然后把這些文件都 拷貝 到剛才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那樣有源文件的放哪????

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

然后寫(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ì)像下圖

然后提交代碼 , 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)

接下來(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ò)程)

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

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

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源碼的工程 例如這樣:
