日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS架构-cocoaPods之Podfile语法(18)

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS架构-cocoaPods之Podfile语法(18) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

podfile語法

前言

iOS開發會經常用到cocoapods管理第三方,簡單、方便、高效。如何集成cocoapods在cocoapods官網和Podfile語法說明會有詳細介紹,本想介紹的是關于集成cocoapods時會用到的一個文件Podfile文件。

什么是Podfile
Podfile是一個規范,描述了一個或多個一套工程目標的依賴項,Podfile語法。需要不同復雜程度不同。

一個簡單寫法:
target ‘MyApp’ do
pod ‘AFNetworking’, ‘~> 3.0’
end

這是最簡單最普遍的寫法,針對MyApp這個target引入AFNetworking這個依賴庫,也是大家平時用的最多的一種方式。

下面是個更復雜的一個例子:

# 下面兩行是指明依賴庫的來源地址 source 'https://github.com/CocoaPods/Specs.git' #公共庫repo source 'https://github.com/Artsy/Specs.git' #私有repo# 說明平臺是ios,版本是9.0 platform :ios, '9.0'# 忽略引入庫的所有警告(強迫癥者的福音啊) inhibit_all_warnings!# 針對MyApp target引入AFNetworking # 針對MyAppTests target引入OCMock, target 'MyApp' do pod 'AFNetworking', '~> 3.0' endtarget 'MyAppTests' do inherit! :search_paths pod 'OCMock', '~> 2.0.1' end

在一個工程目錄下顯示多個target

$POD_SPEC_PATH 聲明變量

$POD_SPEC_PATH = '~/.cocoapods/repos/SNEBuy_repos/' $POD_EBUY_PUBLIC_RESOURCES = $POD_SPEC_PATH + 'EbuyResource/0.0.3'

pod - 指定項目的依賴項

  • 如果后面不寫依賴庫的具體版本號,那么cocoapods會默認選取最新版本。
  • pod 'SSZipArchive'
  • 如果你想要特定的依賴庫的版本,就需要在后面寫上具體版本號,格式:
  • pod 'Objection', '0.9'
  • 也可以指定版本范圍
  • 0.1 高于0.1版本(不包含0.1版本)的任意一個版本
    = 0.1 高于0.1版本(包含0.1版本)的任意一個版本
    < 0.1 低于0.1版本(不包含0.1版本)的任意一個
    <= 0.1低于0.1版本(包含0.1版本)的任意一個
    ~> 0.1.2 版本 0.1.2的版本到0.2 ,不包括0.2。這個基于你指定的版本號的最后一個部分。這個例子等效于>= 0.1.2并且 <0.2.0,并且始終是你指定范圍內的最新版本。

    Build configurations(編譯配置)

    默認情況下, 依賴項會被安裝在所有target的build configuration中。為了調試或者處于其他原因,依賴項只能在給定的build configuration中被啟用。
    下面寫法指明只有在Debug和Beta模式下才有啟用配置

    pod 'PonyDebugger', :configurations => ['Debug', 'Beta']

    或者,可以弄白名單只指定一個build configurations。

    pod 'PonyDebugger', :configuration => 'Debug'

    注意:默認情況下如果不指定具體生成配置,那么會包含在所有的配置中,如果你想具體指定就必須手動指明。

    Subspecs

    般情況我們會通過依賴庫的名稱來引入,cocoapods會默認安裝依賴庫的所有內容。我們也可以指定安裝具體依賴庫的某個子模塊,例如:

    • 僅安裝QueryKit庫下的Attribute模塊
    pod 'QueryKit/Attribute'
    • 僅安裝QueryKit下的Attribute和QuerySet模塊
    pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']

    使用本地文件

    • 我們也可以指定依賴庫的來源地址。如果想引入我們本地的一個庫,可以這樣寫:
    pod 'AFNetworking', :path => '~/Documents/AFNetworking

    使用這個選項后,Cocoapods會將給定的文件夾認為是Pod的源,并且在工程中直接引用這些文件。這就意味著你編輯的部分可以保留在CocoaPods安裝中,如果我們更新本地AFNetworking里面的代碼,cocoapods也會自動更新。

    注意:Pod的podspec文件也應該被放在這個文件夾當中

    引用倉庫根目錄的podspec

    有時我們需要引入依賴庫指定的分支或節點,寫法如下。

    • 引入master分支(默認)
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
    • 引入指定的分支
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
    • 引入某個節點的代碼
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
    • 引入某個特殊的提交節點
    pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'

    特別注意:雖然這樣將會滿足任何在Pod中的依賴項通過其他Pods 但是podspec必須存在于倉庫的根目錄中。

    Podfile.lock文件:

    當團隊中的某個人執行完pod install命令后,生成的Podfile.lock文件就記錄下了當時最新Pods依賴庫的版本,這時團隊中的其它人check下來這份包含Podfile.lock文件的工程以后,再去執行pod install命令時,獲取下來的Pods依賴庫的版本就和最開始用戶獲取到的版本一致。如果沒有Podfile.lock文件,后續所有用戶執行pod install命令都會獲取最新版本的SBJson,這就有可能造成同一個團隊使用的依賴庫版本不一致, 這對團隊協作來說絕對是個災難!

    作者:一川煙草i蓑衣
    鏈接:https://www.jianshu.com/p/7c3fceaf4e92
    來源:簡書
    簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

    從外部引入podspec引入

    • podspec可以從另一個源庫的地址引入
    pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'

    podspec

    使用給定podspec文件中定義的代碼庫的依賴關系。如果沒有傳入任何參數,podspec優先使用根目錄,如果是其他情況必須在后面指明。(一般使用默認設置即可)例如:

    # 不指定表示使用根目錄下的podspec,默認一般都會放在根目錄下 podspec # 如果podspec的名字與庫名不一樣,可以通過這樣來指定 podspec :name => 'QuickDialog' # 如果podspec不是在根目錄下,那么可以通過:path來指定路徑 podspec :path => '/Documents/PrettyKit/PrettyKit.podspec'

    target

    在給定的塊內定義pod的target(Xcode工程中的target)和指定依賴的范圍。一個target應該與Xcode工程的target有關聯。默認情況下,target會包含定義在塊外的依賴,除非指定不使用inherit!來繼承(說的是嵌套的塊里的繼承問題)

    • 定義一個簡單target ZipApp引入SSZipArchive庫
    target 'ZipApp' do pod 'SSZipArchive' end
    • 定義一個target:ZipApptarget僅引入SSZipArchive庫,定義target:ZipAppTests引入Nimble的同時也會繼承target:ZipApp里面的SSZipArchive庫
    target 'ZipApp' do pod 'SSZipArchive'target 'ZipAppTests' do inherit! :search_paths pod 'Nimble' endend
    • target塊中嵌套多個子塊
    target 'ShowsApp' do # ShowsApp 僅僅引入ShowsKit pod 'ShowsKit' # 引入 ShowsKit 和 ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end # 引入了Specta和Expecta以及ShowsKit target 'ShowsTests' do inherit! :search_paths pod 'Specta' pod 'Expecta' end end

    抽象target

    定義一個新的抽象目標,它可以方便的用于目標依賴繼承。

    • 簡單寫法
    abstract_target 'Networking' do pod 'AlamoFire' target 'Networking App 1' target 'Networking App 2' end
    • 定義一種abstract_target包含多個target
    # 注意:這是個抽象的target也就是說在工程中并沒有這個target引入ShowsKit abstract_target 'Shows' do pod 'ShowsKit' # ShowsiOS target會引入ShowWebAuth庫以及繼承自Shows的ShowsKit庫 target 'ShowsiOS' do pod 'ShowWebAuth' end # ShowsTV target會引入ShowTVAuth庫以及繼承自Shows的ShowsKit庫 target 'ShowsTV' do pod 'ShowTVAuth' end # ShowsTests target引入了Specta和Expecta庫,并且指明繼承Shows,所以也會引入ShowsKit target 'ShowsTests' do inherit! :search_paths pod 'Specta' pod 'Expecta' end end

    abstract! 和 inherit!

    • abstract! 指示當前的target是抽象的,因此不會直接鏈接Xcode target。
    • inherit! 設置當前target的繼承模式。例如:
    target 'App' do target 'AppTests' do inherit! :search_paths end end

    iOS app多個開發環境變量(target)下配置Podfile文件

    Target configuration (目標項配置待補充。。。)

    使用target 配置來控制的cocoapods生成project。
    開始時詳細說明您正在使用什么平臺上。工程文件里允許您具體說明哪些項目的鏈接。

    platform

    platform用于指定應建立的靜態庫的平臺。CocoaPods提供了默認的平臺版本配置:

    #指定具體平臺和版本 platform :ios, '4.0'

    project

    如果沒有顯示的project被指定,那么會默認使用target的父target指定的project作為目標。如果如果沒有任何一個target指定目標,那么就會使用和Podefile在同一目錄下的project。同樣也能夠指定是否這些設置在release或者debug模式下生效。為了做到這一點,你必須指定一個名字和:release/:debuge關聯起來
    Examples:
    Specifying the user project

    # MyGPSApp這個target引入的庫只能在FastGPS工程中引用target 'MyGPSApp' do project 'FastGPS' ... end# 原理同上target 'MyNotesApp' do project 'FastNotes' ... end
    • 使用自定義的編譯配置
    project 'TestProject', 'Mac App Store' => :release, 'Test' => :debug inhibit_all_warnings!(強迫癥者的福音)

    inhibit_all_warnings!

    屏蔽所有來自于cocoapods依賴庫的警告。你可以全局定義,也能在子target里面定義,也可以指定某一個庫:

    # 隱藏SSZipArchive的警告而不隱藏ShowTVAuth的警告 pod 'SSZipArchive', :inhibit_warnings => true pod 'ShowTVAuth', :inhibit_warnings => false use_frameworks!

    通過指定use_frameworks!要求生成的是framework而不是靜態庫。
    如果使用use_frameworks!命令會在Pods工程下的Frameworks目錄下生成依賴庫的framework
    如果不使用use_frameworks!命令會在Pods工程下的Products目錄下生成.a的靜態庫

    Workspace

    默認情況下,我們不需要指定,直接使用與Podfile所在目錄的工程名一樣就可以了。如果要指定另外的名稱,而不是使用工程的名稱,可以這樣指定:

    workspace 'MyWorkspace'

    Source

    source是指定pod的來源。如果不指定source,默認是使用CocoaPods官方的source。(建議使用默認設置)

    CocoaPods Master Repository # 使用其他來源地址 source 'https://github.com/artsy/Specs.git' # 使用官方默認地址(默認) source 'https://github.com/CocoaPods/Specs.git'

    Plugin

    • 指定應在安裝期間使用的插件。使用此方法指定應在安裝期間使用的插件,以及當它被調用時,應傳遞給插件的選項。例如:
    # 指定在安裝期間使用cocoapods-keys和slather這兩個插件plugin 'cocoapods-keys', :keyring => 'Eidolon' plugin 'slather' pre_install
    • 當我們下載完成,但是還沒有安裝之時,可以使用hook機制通過pre_install指定要做更改,更改完之后進入安裝階段。
      格式如下:
    pre_install do |installer| # 做一些安裝之前的更改 end post_install
    • 當我們安裝完成,但是生成的工程還沒有寫入磁盤之時,我們可以指定要執行的操作。
      比如,我們可以在寫入磁盤之前,修改一些工程的配置:
    post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported' end end end def
    • 1.我們還可以通過def命令來聲明一個pod集:
    def 'CustomPods' pod 'IQKeyboardManagerSwift' end
    • 2.然后,我們就可以在需要引入的target處引入:
    target 'MyTarget' do CustomPods end

    這么寫的好處是:如果有多個target,而不同target之間并不全包含,那么可以通過這種方式來分開引入。

    Hooks

    Podfile提供了hook機制,它將在安裝過程中調用。hook是全局性的,不存儲于每個target中。

    .podspec:

    s.source_files = "*.{h,m}" //源碼文件類型 s.source = { :git => "", :tag => "0.01" } //git 地址s.dependency'AFNetworking','~> 1.0' //依賴的第三方 s.requires_arc = true //是否支持arc s.frameworks = "QuartzCore", "CoreData" //使用的框架 s.libraries ='xml2','z' //z表示libz.tdb,后綴不需要,lib開頭的省略lib,libraries 比如libz,sqlite3.0等,多個用逗號分開s.vendored_frameworks ='MyFramework.framework','TheirFramework.framework' //己的或者第三方framework,比qqSDK的TencentOpenAPI.frameworks.vendored_libraries ='libProj4.a','libJavaScriptCore.a' //自己的或者第三方.a文件,比如微信SDK的.a文件 s.resources = ['Images/*.png','Sounds/*'] //資源文件

    總結

    以上是生活随笔為你收集整理的iOS架构-cocoaPods之Podfile语法(18)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲不卡在线 | 日本三级视频在线 | 日韩欧美激情 | 亚洲欧美日韩在线一区二区 | 亚洲免费网站 | 美女黄污网站 | www.日韩在线观看 | 91免费看片 | 久久羞羞 | 日韩欧美一区在线 | 日本黄色高清视频 | 性盈盈影院中文字幕 | 少妇人妻偷人精品无码视频 | 欧美1区2区 | 亚洲一区二区色 | 欧美一级免费视频 | 在线观看黄色国产 | aa一级片| 日韩区一区二 | 国产综合社区 | 亚洲网站免费 | 麻豆av电影在线 | 国产主播中文字幕 | 亚洲精品在线免费看 | 亚洲区综合 | eeuss鲁片一区二区三区在线观看 | 韩日精品中文字幕 | 麻豆视频国产 | 国产最新在线视频 | 麻豆一区二区三区四区 | 无码人妻丰满熟妇啪啪网站 | 亚洲国产精品一 | 久久婷婷成人综合色 | 成人黄色一级视频 | 国产探花一区二区 | 成人av久久 | 一级a性色生活片久久毛片 爱爱高潮视频 | 免费久草视频 | 女人扒开腿让男人桶爽 | 久久久久亚洲精品国产 | 欧美在线视频网站 | 亚洲国产av一区 | 欧美日韩高清在线观看 | 国产99对白在线播放 | 亚洲天堂免费av | 国产欧美一区二区三区在线看蜜臀 | 无码黑人精品一区二区 | 久久久久久久成人 | 一级中文片 | 国产又粗又猛又黄又爽无遮挡 | 在线国产精品视频 | 天天躁日日躁狠狠躁 | 久久久久亚洲av无码专区喷水 | 国产又白又嫩又爽又黄 | 亚洲伦理在线视频 | 免费福利影院 | 激情五月婷婷色 | 国产精品久久久久久久久免费桃花 | 美女网站在线看 | 岳狂躁岳丰满少妇大叫 | 黄色香蕉网站 | 免费国产羞羞网站视频 | 91九色视频 | 中文字幕无码精品亚洲资源网久久 | 麻豆精品av | xxxx国产精品 | 国产欧美一区二区精品忘忧草 | 91精品久久香蕉国产线看观看 | 小镇姑娘国语版在线观看免费 | 欧美人与性动交g欧美精器 国产在线视频91 | 在线观看网址你懂的 | 丰满岳乱妇一区二区 | 精品妇女一区二区三区 | 国产精品无码人妻一区二区在线 | 久久精品亚洲一区 | 成人娱乐网 | 日本电影成人 | 亚洲精品久久久蜜桃 | 中文欧美日韩 | 桃谷绘里香在线观看 | 精品自拍偷拍 | 超碰伊人网 | 女女互慰揉小黄文 | 国产日产久久高清欧美一区 | 午夜一区 | 国产精品日本一区二区在线播放 | 成人黄色片免费 | a级免费毛片 | 久久99热这里只有精品 | av免费网址在线观看 | 日韩最新视频 | 亚洲精品无amm毛片 国内一区二区三区 | 国产精品成人久久久久久久 | 9191在线视频 | 国产在线v | 在线观看的毛片 | 91在线观看 | 欧美私人情侣网站 | 久久久久亚洲av成人无码电影 |