CocoaPods中podsepc檔案設定詳解
theme: smartblue
「這是我參與2022首次更文挑戰的第13天,活動詳情檢視:2022首次更文挑戰」。
在前面的文章中,我們有講過如何如何使用CocoaPods製作私有庫,在製作私有庫中,有一個關鍵點就是配置.podsepc
檔案,所以在這篇文章中我們將整理出.podsepc
檔案的配置。
想要了解cocoapods官方文件的詳細設定點這裡 podspec.html
基礎設定
這裡的設定都是最基礎的,一般會有預設的文案,或者在生成podsepc檔案時,自動生成的。如果瞭解過的,可以自行忽略。
設定名稱:
名稱將會幫助別人找到你的庫 pod search XXXX
spec.name = "XXXX"
設定版本號:
設定的版本號,這裡設定的版本號需要和git
上tag
對應。
spec.version = "0.0.1"
設定概要:
為你的庫設定一個較為簡潔的概要
spec.summary = ""
設定描述:
描述資訊將用於生成標籤和改進搜尋結果
spec.description = ""
設定主頁:
spec.homepage = "https://github.com/xxxx"
設定許可:
官方許可,目前主流使用的 'MIT'
, 'BSD'
,詳情可以檢視文件
spec.license = { :type => "MIT", :file => "LICENSE" }
設定作者資訊:
指定這個庫的作者的名稱以及郵箱地址,一般會預設生成了這些資訊;
spec.author = { "xxxx" => "[email protected]" }
spec.authors = { "xxxx" => "[email protected]", "xxxy" => "[email protected]" }
設定平臺資訊:
指定平臺版本版本資訊(支援最低ios版本),如果有多平臺的話,可以使用以下引數設定;
spec.platform = :ios, "9.0"
// 使用多平臺
spec.ios.deployment_target = "5.0"
spec.osx.deployment_target = "10.7"
spec.watchos.deployment_target = "2.0"
spec.tvos.deployment_target = "9.0"
設定原始碼地址:
spec.source = { :git => "https://github.com/xxxx/project.git", :tag => "#{spec.version}" }
檔案路徑設定
我們在庫中使用到的原始碼(包括.h/.m/.pch
檔案)和資原始檔的路徑需要使用到以下的設定,這些設定是比較重要的,如果檔案的路徑錯誤,會造成後面的報錯。
設定原始碼檔案路徑:
設定原始檔(包括.h和.m檔案)、標頭檔案、pch檔案的路徑
// 原始碼目錄
spec.source_files = "Classes", "Classes/**/*.{h,m}"
// 標頭檔案
spec.public_header_files = "Classes/**/*.h"
// pch檔案
spec.prefix_header_file = 'Pod/Classes/**/*.pch'
以下是檔案匹配規則
- *
匹配所有檔案
- c*
匹配以名字c開頭的檔案
- *c
匹配以名字c結尾的檔案
- *c*
匹配所有名字包含c的檔案
- **
資料夾以及遞迴子資料夾
- ?
任意一個字元(注意是一個字元)
- [set]
匹配多個字元,支援取反
- {a,b}
匹配名字包括a 或者 b的檔案
設定資原始檔:
專案如果使用了圖片資原始檔,那麼需要設定這些屬性;\
resources:配置的檔案都會被放到mainBundle路徑中 \
resource_bundles:配置的檔案會放到你自己指定的bundle中
spec.resource = "icon.png"
spec.resource_bundles = "Resources/*.png"
依賴關係設定
當自己的庫中引用了本地庫或者依賴第三方的pod庫時,你需要新增以下這些依賴關係。
本地依賴:
如果依賴本地的lib
庫或者framework
,則需要設定這些依賴,不然在後面的驗證中將不會通過。
framework, frameworks:一個庫就是用framework
,多個庫設定frameworks
並使用,
分割。\
library, libraries:同上,需要注意的是設定lib
依賴庫時,省略其名稱的lib字首,以及.字尾。
``` spec.framework = "SomeFramework" spec.frameworks = "SomeFramework", "AnotherFramework"
spec.library = "iconv" spec.libraries = "iconv", "xml2" ```
第三方依賴:
依賴的其他的第三方庫
// 依賴pod庫
spec.dependency "JSONKit", "~> 1.4"
工程設定
工程設定:
user_target_xcconfig
,這個設定會影響到使用者專案設定,不建議使用;\
pod_target_xcconfig
,是修改當前pod工程中的專案設定,不會影響到其他的工程設定,這個也是官方推薦。
有關xcconfig
相關的設定取決你的專案中某些設定是否修改,有些朋友可能對此不知道如何設定,我來簡單說下,這裡的設定其實對應的是你在工程檔案中改動的地方,比如說:
在你的pod庫中依賴了一些第三方庫,而其中某個依賴庫的ENABLE_BITCODE
為NO
,那麼你的私有庫中則無法支援ENABLE_BITCODE
為Yes
了,所以你需要在這裡去設定。否則在後面的驗證中會無法通過;
spec.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' }
或者,某些你的私有庫中不支援模擬器設定,那麼你也需要在這裡設定。
spec.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64', 'ENABLE_BITCODE' => 'NO' }
也就是說,當你的工程設定無法通過驗證時,你需要講你的工程設定內容記錄在這裡。這個你可以根據報錯資訊來提示你哪些設定。
說下具體的做法吧,在訪達中找到專案工程.xcodeproj
,右鍵包管理,開啟檔案project.pbxproj
,在檔案中找到需要的設定,然後寫在這裡就可以;
如下圖:
// 設定ARC
spec.requires_arc = true
// 配置資訊,根據需求填寫
// 新增到該Pod target下的xcconfig檔案
spec.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }
// 新增到 使用者 target下的xcconfig檔案
spec.user_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' }
模組設定
如果想要在自己的庫中模組化,則需要按照以下來設定;使用這種子模組可以將一個大的專案庫劃分的非常清晰,也包括依賴關係。
子模組設定:
如果需要設定子模組,那麼依賴庫,pod,資原始檔設定都是繼承父模組的,所以可以重寫這些屬性: ``` # Animation s.subspec 'Animation' do |subp| subp.source_files = 'UtilityComponent/Classes/Animation/*' subp.framework = 'QuartzCore' end
# Audio s.subspec 'Audio' do |subp| subp.source_files = 'UtilityComponent/Classes/Audio/*' subp.frameworks = 'AudioToolbox' end
# Authorization s.subspec 'Authorization' do |subp| subp.source_files = 'UtilityComponent/Classes/Authorization/*' end
# Cache s.subspec 'Cache' do |subp| subp.source_files = 'UtilityComponent/Classes/Cache/*' subp.frameworks = 'MapKit', 'CoreGraphics' end
# Camera s.subspec 'Camera' do |subp| subp.source_files = 'UtilityComponent/Classes/Camera/*' subp.frameworks = 'AVFoundation', 'AVFAudio' end
# String s.subspec 'String' do |subp| subp.source_files = 'UtilityComponent/Classes/String/*' end
... ```
上面的一些設定都是常常會用到的,當然還有一些不常用的方法就不在此一一說明了;
以上內容就是本篇的全部內容。
- LeetCode 初級演算法之陣列(上),看看你都學會了嗎?
- LeetCode 初級演算法之連結串列,看看你都學會了嗎?
- LeetCode 初級演算法之字串(上),看看你都學會了嗎?
- 純程式碼佈局,也可以一樣的簡潔
- UIStackView之一問一答
- 使用UIStackView來簡化iOS的介面佈局
- 夏天來了,iOS開發者們該如何減少App耗電?(上)
- 夏天來了,App開發者們如何看待手機發燙問題?
- 聊聊iOS中UITableView複用的那些事
- 曾經經典的微信打飛機遊戲還有人記得嗎?
- iOS 原生渲染與 Flutter 有什麼區別 (上)
- 瞭解 Mach-O檔案
- CocoaPods中podsepc檔案設定詳解
- iOS 原生渲染與 Flutter 有什麼區別 (下)
- 簡單瞭解 iOS CVPixelBuffer (上)
- 談談 iOS 包瘦身方案
- 播放器重構的探索之路
- 如何使用CocoaPods製作私有庫
- iOS 元件化方案