在上篇文章CocoaPods與SVN的配合使用(一)中我們使用CocoaPods制作了基于SVN地址的開發庫,然后通過Pod命令將開發庫以源代碼方式引入工程中。但是,有時我們不希望開發庫以源代碼方式提供給別人,這時就要制作靜態庫,這種靜態庫有兩種形式:
- .framework
- .a文件 加 .h頭文件
CocoaPods 提供了cocoapods-packager來創建靜態庫,安裝此工具的過程在此不再贅述。(需要更新CocoaPods到較新的版本)
制作靜態庫的過程:
- 制作好源代碼開發庫,參考CocoaPods與SVN的配合使用(一)
- 重新編輯.podspec文件,用cocoapods-packager將源代碼開發庫打包成靜態庫,配置.podspec文件支持靜態庫的Pod集成,本文將重點討論此過程。
下面我們緊接CocoaPods與SVN的配合使用(一)中創建支持CocoaPods的開發庫的流程,從SVN中的tag
分支入手。
-
從
tags
文件夾0.1.0
分支上創建一個新分支0.1.0-framework
放入branches
中,現在以新分支0.1.0-framework
為當前開發分支,這一步主要是為了方便開發。
svn路徑.png 重新編輯
.podspec
文件,然后在終端.app
中使用pod package XXX.podspec --force
命令來打包生成framework。
打包工具cocoapods-packager會根據.podspec
文件中的s.source
和s.source_files
來確定源碼庫的路徑和所包含文件,其中s.source
不支持本地路徑,請確保打包的文件被正確提交到了svn。
根據上圖分支的svn路徑,我們使用的路徑為
s.source = { :svn => 'svn://IP_ADDRESS/app/Common/ios/XXX/branches/0.1.0-framework'}
,
s.source_files = 'XXX/Classes/**/*'
編輯完成,在
終端.app
中定位到.podspec
文件的上級目錄,使用pod package XXX.podspec --force
命令生成framework。查看剛才的目錄中,已經生成了包含
XXX.framework
的文件夾。將新生成的文件夾和framework文件提交到svn。- 配置
.podspec
文件支持framework的Pod集成。
三種集成配置方式(源碼方式、framework方式、.a文件方式)見圖中紅框,這里我們使用framework下載方式設置項,將framework的路徑設置給s.vendored_frameworks
項。
配置.podspec文件支持Pod下載.png
之后通過終端.app
在0.1.0-framework/Example
文件夾使用pod install --no-repo-update
來安裝,打開Xcode目錄,發現framework被添加進了工程,接下來運行測試。
下載framework.png
我在測試中出現了Expected a type
的問題,而使用源代碼方式集成卻沒有問題,經查證是由于生成的framework的頭文件中沒有顯示添加#import <UIKit/UIKit.h>
,導致無法識別UIView
,顯示添加之后再次打包framework,問題解決。 - 制作tag分支,并刪除tag分支上的源代碼。
我們將XXX.podspec
中的s.source
還原為
s.source = { :svn => 'svn://IPAddress/app/Common/ios/XXX', :tag => s.version.to_s }
根據:tag => s.version.to_s
,在SVN的tag中打包為相應版本。這里為了和源碼版本的區別開來,我們將s.version
的值設置為0.1.0-framework
還原s.source.png
制作tag分支,步驟(以Cornerstone為例):
制作tag分支.png
制作完成后記得刪除掉tag分支上的源代碼。
下面是在其他工程中使用剛剛配置好的framework
1. 使用CocoaPods引入framework
在已有工程中的Podfile文件中編輯
pod ‘XXX’,:svn =>'svn://YourSvnPath/XXX’,:tag =>'0.1.0-framework'
可參考 Profile文件 Pod語法然后使用pod install --no-repo-update
進行安裝
更新后可以看到XXX.framework已經被下載下來了,現在你就可以在工程中使用這個framework了。