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 組件化方案