podSpec檔案相關知識整理

2021-09-23 20:41:48 字數 4142 閱讀 6191

podspec中spec的全稱是「specification」,說明書的意思。顧名思義,這是用來描述你這個私有pod的說明資訊的。

podspec是cocoapods的一種檔案格式,有一套自己的語法,我們可以到cocoapods官網進行詳細了解(

建立podspec很簡單,只要建立乙個以.podspec為字尾的檔案即可,或者直接拷貝別人的進行修改也可以。

它的建立命令是:$pod spec create testfile

podspec檔案的常用配置字段介紹

pod::spec.new do|s|

框架名字:框架名字一定要寫對,pod search "框架名"就是搜的這個

s.name         = "gedeyproject"

框架版本號

s.version      = "1.0.0"

框架簡介

s.summary      = "geddy框架"

框架的主頁

s.homepage     = ""

框架遵守的開源協議

s.license      = 'mit'

框架的作者

框架的資源路徑:路徑可以指向遠端**庫,也可以指向本地專案,例如:

1.指向遠端**庫: 

2.指向本地專案:    

s.source       =

框架被其他工程引入時,會匯入***x目錄下的.h和.m檔案

s.source_files = '***x/**/*.'

框架被其他工程引入時,會匯入geddy/resource目錄下的資源檔案

s.resources=

框架依賴的framework

s.framework    = 'coredata'

框架依賴的其他第三方庫

s.dependency 'magicalrecord', :git => '', :tag => 'sumigriddiary2.1'

s.dependency 'mbprogresshud'

框架是否需要支援arc

s.requires_arc = true

框架支援的最低平台版本

s.platform     = :ios,'7.0'

框架公開的標頭檔案

s.public_header_files = 'geddy/**/*.h'

end大型專案模組化管理

模組化有幾個方式:

1. 目錄結構管理:這是最原始的方式,僅僅通過目錄結構實現**層次的清晰化。但本質上並沒有解決**之間的依賴混亂的情況,模組化劃分也非常不清晰。

2. 子工程:通過子工程可以實現**依賴管理和模組化,但是需要引入複雜的設定,不利於管理。

3. 靜態庫:將依賴**打包成為靜態庫.a,不過由於不能看到原始碼,除錯不方便。

自從有了cocoapods,可以使用它來管理私有庫,從而實現了**模組化管理。例如下圖所示:

例如在github上面建立乙個空的git庫:

將這個git庫加入到cocoapods庫的列表中:

pod repo add myspecs [email protected]:***/myspecs.git

此時可以檢查下本地的pod repo

>$ pod repo list

myspecs

- type: git (master)- url: [email protected]:***/myspecs.git
- path: /users/***/.cocoapods/repos/myspecs
master
- type: git (master)
- url:  [email protected]:cocoapods/specs.git
- path: /users/***/.cocoapods/repos/master
確定私有庫的specs已經加到本地pod repo中。 

在私有庫專案中的根目錄,建立對應的podspec檔案,裡面會描述這個庫的基本資訊。

podspec規範可以檢視:

pod::spec.newdo|s|

s.name         ="podname"

s.version      ="0.0.1"

s.summary      ="a short description of podname."

s.homepage     =""

s.license      =

s.author       =

s.source       =

s.source_files ="**/*."

s.frameworks   ="foundation","quartzcore","uikit","webkit"

s.libraries    ="z"

s.dependency'afnetworking'

s.ios.deployment_target ='6.0'

end

resource: 可以指定資源檔案,建議使用bundle以避免資源檔案產生衝突。

frameworks: 指定這個pod依賴的系統framework

libraries: 指定這個pod依賴的系統動態庫。注意使用的名字:比如需要引用"libz.dylib", 那麼這裡只需要寫"z"

無論原始專案的目錄結構或者group結構,預設的pod裡面的**都會平鋪在根目錄裡面

如果需要增加目錄層次結構,則需要使用subspec,詳細使用規範:#subspec

注意:subspecs之間不能存在相互依賴關係,只能單向依賴

pod lib lint --sources='[email protected]:***/myspecs.git'--verbose --use-libraries --allow-warnings

sources引數可以指定私有庫的pod specs庫的位址。如果能夠通過,說明**編譯沒有問題

git tag -m"first release""0.0.1"

$ git push --tags#推送tag到遠端倉庫

pod repo push myspecs podname.podspec --sources='[email protected]:***/myspecs.git'--use-libraries --allow-warnings

這樣就完成了乙個cocoapods的私有庫的提交了,別人就可以在podfile裡面使用這個私有庫了

XMPP 相關知識整理

xmpp the extensible messaging and presence protocol 中文全稱 可擴充套件通訊和表示協議 簡介 可擴充套件通訊和表示協議 xmpp 可用於服務類實時通訊 表示和需求響應服務中的xml資料元流式傳輸。xmpp以jabber協議為基礎,而jabber是即...

patch,diff相關知識整理

diff 命令列選項 原始檔案 新檔案 幾個常用的選項說明 diff的內容預設輸出到stdout上,所以需要把它重定向到乙個檔案中才能儲存,如下 diff un test0 test1 test1.patch如果是資料夾就加個r 常用 rnu就行 patch 命令列選項 待打補丁的檔案或文件 補丁檔...

變數相關知識整理

何為變數?簡而言之就是儲存資料值的容器,js所有變數都擁有唯一識別符號,即我們通常說的變數名。關於變數,我們通常有兩個操作,宣告和賦值 函式作用域 塊級作用域 當某個變數被訪問時通常會經過以下步驟 判斷當前位置是否存在區域性作用域 即函式作用域和塊級作用域 存在區域性作用域,則判斷該區域性作用域內是...