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

... ```

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

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