iOS本地項目依賴項(CocoaPods管理本地庫)
iOS做本地依賴項其實是比較麻煩的,做靜態庫.a和.framework,但是當你用靜態庫去訪問靜態庫的時候,你的程式就會報錯,而且版本管理麻煩。
然後我們就想到用cocoapods做依賴庫,由於是公司的代碼所以不能可能放到github上面去,所以就要求建立本地依賴庫。
首先,我們要安裝git和cocoapods
git安裝和使用就看這篇文章 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
cocoapods的使用安裝就看這篇文章 http://code4app.com/article/cocoapods-install-usage
具體怎麼搭建這個環境就不細說了。
接下來申請一個github的帳號,找到頁面右上方 New repository
建立完成我們用git clone 到本地<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">git clone https://github.com/codesourse/podtest.git
這裡我們要用到LICENSE 和git的版本管理
CocoaPods強制要求所有的Pods依賴庫都必須有license檔案,否則驗證不會通過。license的類型有很多種,詳情可以參考網站tl;dr Legal。在建立github倉庫的時候,我已經選擇了MIT類型的license。
然後我們要在該目錄下建立.podspec的檔案
該檔案為Pods依賴庫的描述檔案,每個Pods依賴庫必須有且僅有那麼一個描述檔案。檔案名稱要和我們想建立的依賴庫名稱保持一致,我的podtest依賴庫對應的檔案名稱為podtest.podspec。
podspec的檔案內容
Pod::Spec.new do |s|
s.name = "podtest"
s.version = "1.0.0"
s.summary = "A marquee view used on iOS."
s.description = <<-DESC
It is a marquee view used on iOS, which implement by Objective-C.
DESC
s.homepage = "https://github.com/wangzz/WZMarqueeView"
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
s.license = 'MIT'
s.author = { "夏科傑" => "codesourse@gmail.com" }
s.source = { :git => '/Users/xiakejie/cocoapods/podtest', :tag => "1.0.0"}
# s.social_media_url = 'https://twitter.com/NAME'
s.platform = :ios, '4.3'
# s.ios.deployment_target = '5.1'
# s.osx.deployment_target = '10.7'
s.requires_arc = true
s.source_files = 'podtest/**/*.{h,m}'
# s.resources = 'Assets'
# s.ios.exclude_files = 'Classes/osx'
# s.osx.exclude_files = 'Classes/ios'
# s.public_header_files = 'Classes/**/*.h'
s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit'
end
自解析:
name: 匯入pod後的目錄名 version: 目前的版本號 deployment_target: 配置的target prefix_header_file: 先行編譯標頭檔路徑,將該檔案的內容插入到Pod的pch檔案內 source: 來源的具體路徑,是http連結還是本地路徑 requires_arc: 是否需要arc source_files: 指定該目錄下包含哪些檔案 其他選擇性參數還包括: dependency: 指定依賴,如果依賴的庫不存在或者依賴庫的版本不符合要求將會報錯 libraries: 指定匯入的庫,比如sqlite3 frameworks: 指定匯入的framework weak_frameworks: 弱連結,比如說一個項目同時相容iOS6和iOS7,但某一個framework只在iOS7上有,這時候如果用強連結,那麼在iOS7上運行就會crash,使用weak_frameworks可以避免這種情況。
整個podspec文法是一個嵌套結構從Pod::Spec.new do |s|到最後一個end是最大的迴圈,表示整個podspec匯入的檔案。中間每一個subspec到end結束是一個子目錄,Pods會為每個subspec建立一個邏輯目錄,相當於Xcode的group概念。|**|中間是subspec的名字,可以隨便命名,但後面使用的名稱必須一致。
萬用字元說明
a{bb,bc}def.{h,m}表示四個檔案abbdef.h abbdef.m abcdef.h abcdef.m
*.{h,m,mm}表示所有的.h .m .mm檔案
Class/**/*.{h,m}表示Class目錄下的所有.h .m檔案
配置完這個我們需要用git 打個tag,然後cocoapods打個tag最後拷貝到pod本地庫中
git tag 1.0.0
set the new tag to 1.0.0
pod lib lint
然後在你要依賴的項目中放入podfile,內容是
pod 'podtest', :podspec => '/Users/xiakejie/cocoapods/podtest/podtest.podspec'
最後我們只需要簡單一句pod install
如果這中間遇到
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/user_interface/error_report.rb:13:in `report': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/command.rb:58:in `report_error'
from /Library/Ruby/Gems/2.0.0/gems/claide-0.7.0/lib/claide/command.rb:300:in `handle_exception'
from /Library/Ruby/Gems/2.0.0/gems/claide-0.7.0/lib/claide/command.rb:274:in `rescue in run'
from /Library/Ruby/Gems/2.0.0/gems/claide-0.7.0/lib/claide/command.rb:264:in `run'
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/command.rb:45:in `run'
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/bin/pod:43:in `'
from /usr/bin/pod:23:in `load'
from /usr/bin/pod:23:in `'
那就看這篇文章吧
http://www.tuicool.com/articles/iaqU3im
我們的依賴項目就製作完成
參考
http://blog.csdn.net/djl4104804/article/details/25408395
http://www.iwangke.me/2013/04/18/advanced-cocoapods/
http://guides.cocoapods.org/using/the-podfile.html