通常咱們製做的pod公有庫或者是私有庫都放在遠程,而且每次修改都須要push;若是僅僅是放在本地進行調試的模塊/組件,那麼對應的podfile文件以及podspec應該如何編寫呢?html
1)先建立一個測試項目ios
2)建立一個framework,放到和測試項目同一個目錄下git
3)再建立一個類MTPopViewgithub
4)關掉MTPopView,而後在MTShopList項目中經過Add Files添加MTPopViewswift
5)按照正常的target相互調用那樣,添加framework,以及import MTPopControlruby
6)編譯MTShopList報錯網絡
須要在class MTPopView前面加上publicide
再編譯運行就ok了。測試
這裏swift報錯緣由你們應該是很熟悉了;swift訪問權限總共有private、fileprivate、internal、public、open 5種,默認狀況下是internal修飾,而咱們目前是2個不一樣的target進行訪問,屬於不一樣的模塊,因此另外一個target沒法訪問,須要修改訪問權限爲public便可(這裏可否用open,它們的區別你知道嗎?)。ui
1)如何編寫本地測試的podspec?
經過命令pod spec create MTPopControl生成自動的podspec文件,而後替換以及刪除本身不想要的命令;這裏就直接簡化寫了,以下:
Pod::Spec.new do |spec| spec.name = "MTPopControl" spec.version = "0.0.1" spec.summary = "A short description of MTPopControl." spec.homepage = "http://EXAMPLE/MTPopControl" spec.license = "MIT" spec.author = { "xk" => "" } #遠程push的寫法 #spec.source = {:git => 'https://github.com/xxx/xxxxx.git', :tag => spec.version} spec.source = { :path => '.' } spec.source_files = "MTPopControl" spec.requires_arc = true spec.swift_version = "5.0" spec.ios.deployment_target = "11.0" end
主要是關注屬性spec.source的寫法不一樣了,咱們這裏是本地
官方的示例:
pod 'AFNetworking', :path => '~/Documents/AFNetworking'
這個時候就不能經過命令 pod lib lint-本地驗證你的pod是否有效,會報錯的,由於咱們這裏是本地路徑。
xk$ pod lib lint MTPopControl -> MTPopControl - ERROR | spec: The specification defined in `MTPopControl` could not be loaded. Is a directory @ io_fread - MTPopControl [!] MTPopControl did not pass validation, due to 1 error. You can use the `--no-clean` option to inspect any issue.
2)podfile如何編寫?
首先刪除framework對應的target
關閉項目MTShopList
在項目MTShopList路徑下,經過命令:
xk$ pod init
打開Podfile文件,添加內容:
# Pods for MTShopList pod 'MTPopControl', :path => '../MTPopControl'
再安裝:
xk$ pod install
打開生成的workspace,這個時候就能看到pod對應的project比咱們平時的項目多了一個Development Pods文件夾,裏面放的就是剛導入的framework。
編譯運行項目Succeeded!
最後:本文采用這種Pod開發方式的好處就是能夠一我的快速開發調試,不用每次修改完依賴庫都把podspec 以及對應的庫 push上去,有時候網絡不穩定的狀況下會等好久,影響開發效率;待最後調試的模塊/組件穩定後或是多人開發仍是須要製做成私有庫push上去,進行統一版本管理。
參考文獻:
【1】 https://www.raywenderlich.com...