CocoaPods中podsepc檔案設定詳解

語言: CN / TW / HK

theme: smartblue

「這是我參與2022首次更文挑戰的第13天,活動詳情檢視:2022首次更文挑戰」。

在前面的文章中,我們有講過如何如何使用CocoaPods製作私有庫,在製作私有庫中,有一個關鍵點就是配置.podsepc檔案,所以在這篇文章中我們將整理出.podsepc檔案的配置。

想要了解cocoapods官方文件的詳細設定點這裡 podspec.html

基礎設定

這裡的設定都是最基礎的,一般會有預設的文案,或者在生成podsepc檔案時,自動生成的。如果瞭解過的,可以自行忽略。

設定名稱:

名稱將會幫助別人找到你的庫 pod search XXXX spec.name = "XXXX"

設定版本號:

設定的版本號,這裡設定的版本號需要和gittag對應。 spec.version = "0.0.1"

設定概要:

為你的庫設定一個較為簡潔的概要 spec.summary = ""

設定描述:

描述資訊將用於生成標籤和改進搜尋結果 spec.description = ""

設定主頁:

spec.homepage = "http://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 => "http://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_BITCODENO,那麼你的私有庫中則無法支援ENABLE_BITCODEYes了,所以你需要在這裡去設定。否則在後面的驗證中會無法通過; 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' }

模組設定

如果想要在自己的庫中模組化,則需要按照以下來設定;使用這種子模組可以將一個大的專案庫劃分的非常清晰,也包括依賴關係。

效果圖.png

子模組設定:

如果需要設定子模組,那麼依賴庫,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

... ```

上面的一些設定都是常常會用到的,當然還有一些不常用的方法就不在此一一說明了;

以上內容就是本篇的全部內容。