一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Cocoapods完整使用教程

 宇智波瞬潤 2016-04-27

Cocoapods完整使用教程


由于在微信公眾號發(fā)的圖片,是有版權(quán)保護(hù)的,因此在這里就顯示不出來了,請移步閱讀:

微信公眾號文章:iOSDevShares

前言


對于iOS App的開發(fā),幾乎都采用了Cocoapods來管理第三方庫,那么對于我們開發(fā)人員來說,這是必備技能,必須要掌握如何使用。這篇文章就是介紹如何安裝和使用CocoaPods的。

這篇文章對哪些人群參考價值?

  • 對未使用過Cocoapods的人群有參考價值
  • 對使用過Cocoapods,但是未深入了解過的用戶有參考價值
  • 對有開源精神的,希望將自己的代碼貢獻(xiàn)到Cocoapods的用戶有參考價值

如果您不屬于以上人群,您是可以不閱讀本篇文章的,當(dāng)然閱讀完也會有很大的幫助。

溫馨提示:在篇文章中所使用的Xcode版本為Xcode7.

什么是CocoaPods?


簡單來說,就是專門為iOS工程提供對第三方庫的依賴的管理工具,通過CocoaPods,我們可以單獨(dú)管理每個第三方庫,可以更方便地管理每個第三方庫的版本,而且不需要我們做太多的配置,直接交由提供支持CocoaPods項(xiàng)目的作者來配置了,如此便可直觀、集中和自動化地管理我們項(xiàng)目的第三方庫。

為什么需要使用CocoaPods?


我們也許有過這樣的感受:
每添加一個第三方庫、Framework或者SDK,我們都需要手動添加相關(guān)依賴庫,在工程buildsetting中配置路徑,在build phases中添加依賴的系統(tǒng)庫。如果所導(dǎo)入的第三方庫還依賴其他第三方庫,我們也需要手動導(dǎo)入且分別添加工程配置。

當(dāng)我們需要更新某個第三方庫的時候,我們又要手動移除該庫,導(dǎo)入新的庫,然后再配置,這是相當(dāng)麻煩且沒有意義的工作。當(dāng)使用CocoaPods管理后,我們只需要修改為某個版本,再執(zhí)行pod update即可。

當(dāng)我們需要去掉某個第三方庫時,我們是怎么做的呢?是不是將該庫移除掉,然后還得把相關(guān)配置也移除掉,這樣工作才干凈。是不是很麻煩呢?當(dāng)我們使用Cocoapods管理后,我們是怎么做的?只需要在Podfile刪除該引入該庫的語句,然后執(zhí)行pod update即可。

當(dāng)我們開始使用CocoaPods管理第三方庫后,我們只需要相當(dāng)少的配置,其它的一切都交由CocoaPods來管理即可,我們使用起來就更省心了。

如何安裝CocoaPods?


CocoaPods is built with Ruby and is installable with the default Ruby available on OS X. We recommend you use the default ruby.

CocoaPods是通過Ruby來安裝的,MAC OSX都有一個默認(rèn)的Ruby版本,推薦我們通過默認(rèn)的Ruby來安裝CocoaPods。
使用下面的命令安裝:

sudo gem install cocoapods

事實(shí)上,這樣安裝未必能安裝成功,因?yàn)槟J(rèn)的cocoapods網(wǎng)址是國外的,需要VPN才能訪問,因此我們可以改一種方式:

  • 1、先輸入 gem sources --remove https:///
  • 2、等待有反映后,再輸入 gem source -a https://ruby./
  • 3、驗(yàn)證是否成功替換:gem source -l
  • 4、最后就可以通過sudo gem install cocoapods正常安裝cocoapods了。

等待安裝完成后,就可以開始使用CocoaPods了。

注意:source或者sources都可以.

如何使用CocoaPods?


要使用CocoaPods,就需要一個Podfile文件。我們是如何為所有的工程建立Podfile的,下面的方式是基本的方式。

cd Desktop/Demos/KVODEMO
touch Podfile
vi Podfile
  • 第一步:進(jìn)入到我們所建立的工程的目錄,這里是KVODEMO
  • 第二步:通過touch命令新建Podfile
  • 第三步:通過vi Podfile進(jìn)入編輯Podfile
  • 第四步:添加第三方庫,如下圖,我們添加了AFNetworkingObjectiveSugar庫,其中我們添加的AFNetworking版本是2.0版本,ObjectiveSugar版本是0.5.
pod 'AFNetworking', '~> 2.0'  
pod 'ObjectiveSugar', '~> 0.5'
  • 按下esc鍵,然后輸入:wq,就可以保存了。然后在終端輸入pod install,就可以安裝第三方庫了。

在安裝完成后,我們不再是打開后綴為.xcodeproj的工程,而是打開后綴為.xcworkspace的工作空間了。

關(guān)于Podfile更高級的使用,請參考官方文檔

在Objective-C工程中的使用

在工程中,我們只需要通過引入改文件就可以直接使用了,比如我們引入了第三方庫Masonry(純代碼自動布局),我們在Objective-C工程中就可以通過import頭文件即可。

#import <Masonry.h>

注意,如果這么做提示找不到頭文件,那么我們可以嘗試這么引入:
#import "Masonry.h"或者通過#import "Masonry/Masonry.h"

如果仍然沒有效果,那么需要在工程配置一下.在工程的Build Settings搜索Search Paths,然后在User header search paths中添加$(SRCROOT)并選擇recursive(也就是遞歸查找)

在Swift工程中的使用


我相信大家在Swift工程中使用CocoaPods也遇到了不少問題,尤其是如何import模塊問題。
當(dāng)初我遇到這種問題時,也在網(wǎng)上搜索了很多的資料,但是都不是我希望的方案。在網(wǎng)上有兩種方式:
通過Swift工程可以橋接Objectice-C的方式,建立一個Bridge-head.h(名字隨便起),然后進(jìn)入到Build Settings,在搜索框中輸入bridg,找到Objective-C Bridging Header,選項(xiàng),把頭文件的路徑賦值給該選項(xiàng)。如下所示:


image

也就是:工程名/橋接文件名.h。
在剛才所建立的橋接文件中,通過#import "頭文件.h"就可以了。

雖然是Objective-C第三方庫,事實(shí)上我們也可以使用Swift的方式引入的,也就是通過 import 模塊名 的方式來引入。所以對于上面的方式,我是不喜歡的。那么再看看網(wǎng)上的另一種方式。

原文鏈接:http://blog./How-To-Import-3rd-Lib-Into-Swift-Project/

這是通過submodule的方式來管理的。
創(chuàng)建submodule,在當(dāng)前項(xiàng)目的同級目錄下執(zhí)行類似這樣的命令,如下:

git submodule add https://github.com/Masonry.git

然后將生成的Masonry.xcodeproj拖入到工程中。
xcode工程的general中,點(diǎn)擊embeded libraries中的+號,然后改我們的第三方庫framework,類似下圖:


image

最后就可以直接在工程中需要使用的地方,通過import模塊名來使用了。
如果是多人團(tuán)隊(duì)開發(fā),我們就需要共享了,那么其他成員就需要通過下面的命令來安裝:

git submodule update --init --recursive

這是通過遞歸來安裝或者更新submodule。這是挺麻煩的一件事。然后根據(jù)使用的經(jīng)驗(yàn),我們下載別人的工程下來后,執(zhí)行了上面的命令,安裝好相關(guān)模塊了,運(yùn)行工程經(jīng)常出現(xiàn)報(bào)錯的問題,也就是配置問題。因此,個人很不喜歡這種方式。

事實(shí)上,在Xcode7是不再需要這么做了,對于其他Xcode版本是否需要,未驗(yàn)證。
我們通過cocoapods安裝的第三方庫會自動生成為framework,然后我們只需要在使用的地方直接通過import 模塊名使用即可。但是有時候可能會出現(xiàn)某個第三方庫直接通過import 模塊名時,提示找不到,也就是沒有智能提示。這時候我們可以通過在xcode工程的general中的embeded libraries點(diǎn)擊+,然后導(dǎo)入該framework,就可以正常import了。另外如果導(dǎo)入的第三方庫在運(yùn)行時,報(bào)錯了,類似于:

dyld: Library not loaded: @rpath/ReactiveCocoa.framework/ReactiveCocoa 
Referenced from: /private/var/mobile/Containers/Bundle/Application/31ABC86A-C1BD-40DD-A117-D2C8F79A98FE/SwiftGithubClient.app/SwiftGithubClient Reason: image not found

那么我們可以這么解決:

Build Phases->Link Binary With Libraries->找到出錯的庫的名稱->修改requiredoptional即可。

如何升級CocoaPods版本?


升級CocoaPods是非常簡單的,只需要一個命令即可。
正常情況下,只需要一個命令就可以升級了:

sudo gem install cocoapods

但是有可能需要更新gem才能升級cocoapods,因此我們可能需要這么做:

$ sudo gem update --system // 先更新gem,國內(nèi)需要切換源
$ gem sources --remove https:///
$ gem sources -a http://ruby./
$ gem sources -l
    CURRENT SOURCES
    http://ruby./
$ sudo gem install cocoapods // 安裝cocoapods
$ pod setup

然后查看版本號:

$ pod --version
0.39.0

如何讓自己的開源項(xiàng)目支持CocoaPods?


這里就介紹我寫的一個三方庫HYBMasonryAutoCellHeight讓其支持Cocoapods的步驟。

  • 1、第一步:打開終端并進(jìn)入到工程的目錄。這里是我所開源的一個HYBMasonryAutoCellHeight開源庫,用于自動計(jì)算cell的高度。
cd HYBMasonryAutoCellHeight
  • 2、第二步:創(chuàng)建一個Podspec文件。通過命令pod spec create創(chuàng)建,
pod spec create HYBMasonryAutoCellHeight
  • 3、第三步:編輯該podspec文件:
VI HYBMasonryAutoCellHeight.podspec

大家會看到,這自動生成的已經(jīng)是一個模板了,我們需要做的就是修改相關(guān)內(nèi)容,補(bǔ)充內(nèi)容就可以滿足我們的需求了。對于更高級的使用,就需要參考官方文檔,一步步地學(xué)習(xí)使用了。
看看我所提供的第三方庫的podspec文件的配置,去掉注釋后看一看最關(guān)鍵的配置:

Pod::Spec.new do |s|

s.name         = "HYBMasonryAutoCellHeight"
s.version      = "0.0.1"
s.summary      = "基于Masonry的自動計(jì)算cell的行高的擴(kuò)展庫"
s.homepage     = "http://hybios./cocoapods-support/"
s.license      = "MIT"
s.author       = { "huangyibiao" => "huangyibiao520@163.com" }
s.platform     = :ios, "6.0"
s.source       = { :git => "https://github.com/632840804、HYBMasonryAutoCellHeight.git", :tag => "0.0.1" }
s.source_files  = "HYBMasonryAutoCellHeight", "*.{h,m}"
s.requires_arc = true
s.dependency "Masonry", "~> 0.6"

這一步很關(guān)鍵,需要配置的東西比較多。主要是s.source這里必須提供我們的git路徑、指定tag號和s.source_files這里必須指定庫的源代碼文件。通常我們會把我們的庫放到與Demo工程的.xcodeproj同級,比較這里的HYBMasonryAutoCellHeight目錄是與.xcodeproj是同級的父級目錄,然后我們就可以更簡單的設(shè)置了。如下圖:


image

然后我們在設(shè)置s.source_files時,第一個就設(shè)置為HYBMansonryAutoCellHeight,第二個就是設(shè)置為所有的.{h,m}類型的文件。對于比較復(fù)雜的設(shè)置,可以參考AFNetworking中的podspec文件。

如果我們的開源庫依賴系統(tǒng)庫怎么辦?

# s.framework = 'SomeFramework'// 去掉#,設(shè)置依賴的系統(tǒng)庫名稱
# s.frameworks = 'SomeFramework', 'AnotherFramework'//設(shè)置多個系統(tǒng)庫名稱

# s.library = 'iconv'// 設(shè)置只依賴一個系統(tǒng)的library
# s.libraries = 'iconv', 'xml2' // 設(shè)置依賴多個系統(tǒng)的library

# s.xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }// 這里是工程配置,這樣使用者就不需要手動處理,由pod自動處理了。

如果的開源庫依賴其他第三方庫,怎么辦:

s.dependency 'JSONKit', '~> 1.4'//設(shè)置我們的開源庫依賴哪些第三方庫和依賴的版本號。
  • 4、第四步:這里呢,我們設(shè)置的版本號為0.0.1,那么tag號為0.0.1,因此我們還需要新建一個tag,名為0.0.1,然后推到git
$ git commit -m "如果當(dāng)前有變化,先提交到git上,再創(chuàng)建tag"
$ git tag 0.0.1
$ git push --tags
$ git push origin master

第四步可以不用。

接下來,我們需要驗(yàn)證我們的配置是否正確:

  • 5、當(dāng)然我們還可以直接使用:pod lib lint來驗(yàn)證所有,最后一個是設(shè)置允許警告:
pod lib lint HYBMasonryAutoCellHeight.podspec --allow-warnings

如果驗(yàn)證通過,會出現(xiàn)這樣的提示:

-> HYBMasonryAutoCellHeight (0.0.1)

HYBMasonryAutoCellHeight passed validation.

如果剛才我們的配置出錯,或者需要修改一些內(nèi)容,重新再推,則可以先刪除遠(yuǎn)程的tag 0.0.1,然后在修改后,重復(fù)上面的第四步。下面是刪除遠(yuǎn)程tag命令:

git push origin :refs/tags/0.0.1

6、第五步:在驗(yàn)證通過后,提交到cocoapods。也就是通過命令pod trunk push 庫名.podspec來推送到遠(yuǎn)程的cocoapods

pod trunk push HYBMasonryAutoCellHeight.podspec --allow-warnings

如果出現(xiàn)警告,需要修改相關(guān)內(nèi)容以去掉警告。當(dāng)操作成功后,我們就可以通過pod search命令來搜索我們的庫了。

$ pod search HYBMasonryAutoCellHeight

-> HYBMasonryAutoCellHeight (0.0.1)
   基于Masonry的自動計(jì)算cell的行高的擴(kuò)展庫
   pod 'HYBMasonryAutoCellHeight', '~> 0.0.1'
   - Homepage: http://hybios./cocoapods-support/
   - Source:   https://github.com/632840804/HYBMasonryAutoCellHeight.git
   - Versions: 0.0.1 [master repo]

更詳細(xì)地使用,請參考官方文檔:
https://guides./making/making-a-cocoapod.html

這里有一篇文章,寫得相當(dāng)不錯:http://www./cocoapods%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E5%8F%8A%E9%85%8D%E7%BD%AE%E7%A7%81%E6%9C%89%E5%BA%93/

如何生成Cocoapods私有庫?


要讓自己的庫變成私有庫,那么我們的代碼也是需要通過git來管理的。
這里假設(shè)我們新建了一個工程,名叫BookEffect,然后已經(jīng)pushgit遠(yuǎn)程服務(wù)器。

  • 第一步:按照第六節(jié)一樣,創(chuàng)建好podspec文件,并將整個工程推送到git服務(wù)器這邊。
  • 第二步:這才是引入私有庫的方式。pod 'DemoLib',:git=>"http://t"(替換為真實(shí)的git地址)

具體不細(xì)說,請參考:http://www.cnblogs.com/superhappy/p/3468377.html

使用Cocoapods打包靜態(tài)庫


這里就不細(xì)說,不過推薦一篇文章:http://www.cnblogs.com/brycezhang/p/4117180.html

寫得很不錯,如果需要,可以參考。

最后,感謝各位認(rèn)真閱讀本篇文章,感謝您的支持。

參考:https:///?q=blocksk

閱讀原文

關(guān)注我


微信公眾號:iOSDevShares
有問必答QQ群:324400294

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产毛片对白精品看片| 草草草草在线观看视频| 99热九九热这里只有精品| 91久久精品中文内射| 久久国产青偷人人妻潘金莲| 91亚洲精品综合久久| 亚洲中文字幕日韩在线| 亚洲国产成人一区二区在线观看| 青青操日老女人的穴穴| 一区二区三区日本高清| 情一色一区二区三区四| 日本高清中文精品在线不卡| 欧美日韩国产综合特黄| 国产老熟女乱子人伦视频| 丰满人妻熟妇乱又伦精另类视频| 亚洲欧洲精品一区二区三区| 老司机精品视频在线免费| 欧美一区二区三区喷汁尤物| 一区中文字幕人妻少妇| 国产免费无遮挡精品视频| 国产99久久精品果冻传媒| 日韩黄色一级片免费收看| 又色又爽又无遮挡的视频| 女同伦理国产精品久久久| 一区二区在线激情视频| 精品国产亚洲一区二区三区 | 男人和女人草逼免费视频| 免费在线播放不卡视频| 日韩成人动画在线观看| 99热在线播放免费观看| 成人午夜视频在线播放| 国产亚洲欧美日韩国亚语| 国产成人高清精品尤物| 精品精品国产欧美在线| 欧美一区二区黑人在线| 国产视频在线一区二区| 99久只有精品免费视频播放| 国产精品一区日韩欧美| 黄片免费观看一区二区| 精品综合欧美一区二区三区| 亚洲一区二区三区四区|