iOS本地項目依賴項(CocoaPods管理本地庫) – iPhone手機開發技術文章 iPhone軟體開發教學課程

iOS做本地依賴項其實是比較麻煩的,做靜態庫.a和.framework,但是當你用靜態庫去訪問靜態庫的時候,你的程序就會報錯,而且版本管理麻煩。

然後我們就想到用cocoapods做依賴庫,由於是公司的代碼所以不能可能放到github上面去,所以就要求建立本地依賴庫。

首先,我們要安裝git和cocoapods

git安裝和使用就看這篇文章 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

cocoapods的使用安裝就看這篇文章 https://code4app.com/article/cocoapods-install-usage

具體怎麼搭建這個環境就不細說瞭。

接下來申請一個github的賬號,找到頁面右上角 New repository

創建完成我們用git clone 到本地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 `’

那就看這篇文章吧

https://www.tuicool.com/articles/iaqU3im

我們的依賴項目就制作完成

參考

https://blog.csdn.net/djl4104804/article/details/25408395

https://www.iwangke.me/2013/04/18/advanced-cocoapods/

https://guides.cocoapods.org/using/the-podfile.html

You May Also Like