如何制作一個(gè)依賴pod庫和其他carthage庫的carthage庫

關(guān)于pod的制作就不細(xì)說了铆惑,這里主要說說carthage的模塊化的制作依賴過程范嘱。

其實(shí)carthage模塊化比pod化更簡單,這里只是梳理一下流程以及對工程配置的注意點(diǎn)

這里講解的demoSDK是依賴了pod庫和其他carthage庫的一個(gè)demo,也是最復(fù)雜的一個(gè)依賴類型

1. 新建一個(gè)framework工程

  1. 新建一個(gè)Cocoa Touch FrameWork類型的工程员魏,

這個(gè)時(shí)候CarthageMoudlesSDK只有一個(gè)xcodeproj工程丑蛤,并沒有工作區(qū)域,因?yàn)楹竺嫖覀冞€要為demoSDK配置一個(gè)demo,理應(yīng)先新建一個(gè)workspace撕阎,這里為了方便受裹,通過引入pod庫的方式自動(dòng)創(chuàng)建一個(gè)workspace(因?yàn)閐emoSDK本來就需要依賴pod庫)

  1. 新建Podfile文件,按照正常的流程先添加幾個(gè)庫闻书,然后執(zhí)行pod install名斟。將workspace文件生成出來

podfile文件內(nèi)容:

gitConfigUserName = %x{git config --get user.name}
gerritName = gitConfigUserName.split("\n")[0]
gerritURL = "ssh://#{gerritName}@internal.smartdevices.com.cn:29418/apps/Specs-iOS"
platform :ios, '9.0'
inhibit_all_warnings!

## 這里配置的是私有庫source
source gerritURL
source 'https://github.com/CocoaPods/Specs.git'

target 'CarthageMoudlesSDK' do
pod 'ZFPlayer', '3.1.6'
pod 'ZFPlayer/AVPlayer', '3.1.6'
pod 'ZFPlayer/ControlView', '3.1.6'
pod 'KTVHTTPCache', '~> 1.1.5'

end

2. 新建一個(gè)demo工程

  1. 打開CarthageMoudlesSDK.xcworkspace文件冒版,然后cmd+shift+N 新建一個(gè)Single View App,填好demo名稱呻待,點(diǎn)擊next,注意,這里一定要將新建的project添加到CarthageMoudlesSDK.xcworkspace工作區(qū)域

    添加project到workspace

  2. 完成之后的工程目錄應(yīng)該是這樣的


    工程目錄

ok,如果這個(gè)demo不需要依賴其他pod庫的話那就這樣序目。

3. 添加其他pod庫依賴

如果demo需要其他pod庫支持或者carthage庫支持的話坑律,那么就需要修改Podfile文件,其中指定workspace和project

在模塊化的過程中岩梳,這種情況很正常,因?yàn)槟愕哪K是從主項(xiàng)目剝離出來晃择,但是你的項(xiàng)目只依賴A庫冀值,可以要想整個(gè)demo運(yùn)行起來,并且可以跑單元測試宫屠,那么就需要依賴主項(xiàng)目的網(wǎng)絡(luò)庫和kiwi等庫文件,

修改后的podfile文件內(nèi)容:

gitConfigUserName = %x{git config --get user.name}
gerritName = gitConfigUserName.split("\n")[0]
gerritURL = "ssh://#{gerritName}@internal.smartdevices.com.cn:29418/apps/Specs-iOS"
platform :ios, '9.0'
inhibit_all_warnings!

## 這里配置的是私有庫source
source gerritURL
source 'https://github.com/CocoaPods/Specs.git'

##設(shè)置workspace文件
workspace 'CarthageMoudlesSDK.xcworkspace'

target 'CarthageModulesDemo' do
project 'CarthageModulesDemo/CarthageModulesDemo.xcodeproj'
pod 'AFNetworking', '~> 3.0'
end

target 'CarthageModulesDemoTests' do
project 'CarthageModulesDemo/CarthageModulesDemoTests.xcodeproj'
pod 'Kiwi'
pod 'OCMock', '3.4'
end

target 'CarthageMoudlesSDK' do
project 'CarthageMoudlesSDK.xcodeproj'
pod 'ZFPlayer', '3.1.6'
pod 'ZFPlayer/AVPlayer', '3.1.6'
pod 'ZFPlayer/ControlView', '3.1.6'
pod 'KTVHTTPCache', '~> 1.1.5'
end

執(zhí)行pod install成功列疗,目前情況是:
你的CarthageMoudlesSDK依賴ZFPlayer
你的CarthageModulesDemo依賴 AFNetworking來支撐運(yùn)行
你的CarthageModulesDemoTests 依賴Kiwi來支撐

上面我們已經(jīng)搞定了pod的依賴庫
現(xiàn)在我們?nèi)鄙俚木褪荂arthageMoudlesSDK依賴的carthage庫,和CarthageModulesDemo依賴的carthage庫

4. 添加其他carthage庫依賴

首先說一下浪蹂,carthage庫會(huì)被clone到主項(xiàng)目的本地目錄抵栈,然后通過carthage/Checkouts/.*中clone下來的cartfile文件去自動(dòng)fetch/pull相關(guān)的庫告材,而我們的demo依賴的cartfile庫又不需要主項(xiàng)目去fetch/pull,不然會(huì)浪費(fèi)時(shí)間去拉取一些不必要的庫,所以這里就需要提到cartfile.private

官文:


Frameworks that want to include dependencies via Carthage, but do not want to force those dependencies on parent projects, can list them in the optional Cartfile.private file, identically to how they would be specified in the main Cartfile.

Anything listed in the private Cartfile will not be seen by dependent (parent) projects, which is useful for dependencies that may be important during development, but not when building releases—for example, test frameworks.

大致意思就是說上游的項(xiàng)目不需要去關(guān)注的依賴可以列在private文件中古劲,也就是說你制作的SDK中如果有不需要被上有項(xiàng)目用到斥赋,但是你的demo有用到就可以使用cartfile.private文件,例如單元測試。

關(guān)于Cartfile.private的官文地址:

https://github.com/Carthage/Carthage/blob/9d1a67f47c7231eb2f1c33a719634ec4281b65c1/Documentation/Artifacts.md#cartfileprivate

所以這里為了測試产艾,再次加入一些單元測試的庫

4.1. 編寫cartfile文件
  1. 生成Cartfile.private和Cartfile文件

Cartfile:

github "CoderMJLee/MJRefresh" == 3.1.15

Cartfile.private:

github "rs/SDWebImage" == 4.1.0
github "specta/specta" ~> 1.0

specta的官文也推薦了使用Cartfile.private,這里不僅僅適用于測試庫疤剑,比如你的SDKDemo和主工程都需要依賴同一個(gè)庫B,但是最終你的SDK需要集成進(jìn)主工程闷堡,這時(shí)候庫B就應(yīng)該放在Cartfile.private

編寫完執(zhí)行carthage update --platform iOS

到現(xiàn)在為止sdk和sdkdemo該依賴的庫都基本完成隘膘,接下來是內(nèi)部依賴

5. framework工程配置

5.1. SDK工程配置
  1. 工程配置


    SDK工程配置

這里這樣寫,這就要求你carthage update之后你的carthage文件夾必須保持和project在同一個(gè)目錄路徑下
注意修改你的工程配置Valid Architectures, 保持和主工程目錄一直杠览,不然集成進(jìn)去會(huì)報(bào)arm相關(guān)的錯(cuò)誤

  1. public頭文件的暴露
  2. framework依賴處理
5.2. SDKDemo工程配置
  1. SDKDemo工程配置和集成Carthage庫一樣棘幸,
    build Phases中新建一個(gè)Run Script Phases

    image

  2. 然后從Carthage/Build/iOS文件夾中將幾個(gè)庫一一對應(yīng)的拖入到Linked Frameworks and Libraries

  3. 保證SDK的demo能夠成功運(yùn)行

5.3.分享SDK的scheme
  1. 將SDK的scheme分享出來


    image
  2. workspace的根目錄下執(zhí)行carthage build --no-skip-current --platform iOS

  3. 上傳項(xiàng)目到遠(yuǎn)倉庫,打上tag

6. 集成SDK

  1. 在主工程的cartfile文件中加入
github "chaserr/CarthageModulesDemo" "master"
  1. 執(zhí)行carthage update CarthageModulesDemo --platform iOS
    image

主工程會(huì)主動(dòng)從clone到Carthage/Checkouts/CarthageModulesSDK文件中去讀取相應(yīng)的cartfile文件和podfile文件倦零,不需要我們?nèi)リP(guān)心

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末误续,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扫茅,更是在濱河造成了極大的恐慌蹋嵌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葫隙,死亡現(xiàn)場離奇詭異栽烂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恋脚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門腺办,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糟描,你說我怎么就攤上這事怀喉。” “怎么了船响?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵躬拢,是天一觀的道長。 經(jīng)常有香客問我见间,道長聊闯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任米诉,我火速辦了婚禮菱蔬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己拴泌,他們只是感情好犹褒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弛针,像睡著了一般。 火紅的嫁衣襯著肌膚如雪李皇。 梳的紋絲不亂的頭發(fā)上削茁,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音掉房,去河邊找鬼茧跋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卓囚,可吹牛的內(nèi)容都是我干的瘾杭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼哪亿,長吁一口氣:“原來是場噩夢啊……” “哼粥烁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蝇棉,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤讨阻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后篡殷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钝吮,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年板辽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奇瘦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劲弦,死狀恐怖耳标,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邑跪,我是刑警寧澤麻捻,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站呀袱,受9級特大地震影響贸毕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夜赵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一明棍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寇僧,春花似錦摊腋、人聲如沸沸版。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽视粮。三九已至,卻和暖如春橙凳,著一層夾襖步出監(jiān)牢的瞬間蕾殴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工岛啸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钓觉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓坚踩,卻偏偏與公主長得像荡灾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子瞬铸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 主流的依賴管理有三大開源庫:最老牌的 CocoaPods, 新秀 Carthage, 官方的 Swift Pack...
    seedante閱讀 4,129評論 0 11
  • PS:本文旨在介紹Carthage的使用批幌,為初學(xué)者提供一個(gè)Carthage學(xué)習(xí)的入口,高手如不喜歡請繞行~ 在項(xiàng)目...
    小松wolf閱讀 5,984評論 5 9
  • Carthage v0.26.2(原文鏈接) Carthage的目標(biāo)是用最簡單的方式來管理Cocoa第三方框架嗓节。 ...
    iOSLee閱讀 3,586評論 0 7
  • 文檔地址https://github.com/Carthage/Carthage release v0.20.0...
    指尖彈灰閱讀 4,494評論 2 4
  • 十一回鄉(xiāng)逼裆,發(fā)現(xiàn)四線小城越來越像大城市了,青年變多了赦政,各種現(xiàn)代商業(yè)也很繁榮胜宇,這是個(gè)非常有趣的變化,未來5到10年的階...
    WFX閱讀 229評論 0 1