My Utility Tool

花了點時間把之前做的app中某些功能抽出來當元件,原本想來試試看Swift Package Manager也有考慮用Carthage,但後來還是決定用比較主流的Cocoapod。之前自己是有嘗試做過自己的podspec,但那已經是很久之前的事情了。所以就當在練習,再玩一次。

因為想要把常用的元件抽出來,方便以後可以重複使用,但我不想每個元件都做的podspec,因此我的初步架構就是把不同的元件切割成不同的subspec, 這樣只要一個podspec就夠了,想要哪個元件就用哪個subspec就可以了,此外一定還要附上sample project這樣才方便之後的功能測試。

Coacoapods Gudline絕對是入門的起手式,一開始我先自己弄專案,然後寫podspec,但不知道什麼原因就是在subspec會發生錯誤,pod spec lint一直跑不過去。卡了幾天,都不知道是什麼原因,後來決定用了pod lib create產生一個template專案,再從這個專案下去改subspec就OK了。

架構如下

APP_UtilityTool

  • Ads(處理廣告)

  • Shortcut(Siri捷徑)

  • IAP(內部購買)

  • Map(地圖相關)

Pod::Spec.new do |s|
  s.name             = 'APP_UtilityTool'
  s.version          = '0.1.0'
  s.summary          = 'iOS APP Utility Tool.'

  s.description      = <<-DESC
This is an utility tool for developing iOS app.
                       DESC

  s.homepage         = 'https://github.com/htaiwan/APP_UtilityTool'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  s.author           = { 'Cheng, Chien-Tai' => 'htaiwan@gmail.com' }
  s.source           = { :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => s.version.to_s }

  s.ios.deployment_target = '12.0'
  s.swift_version = '4.2'
  s.static_framework = true

  s.frameworks = 'UIKit', 'Foundation'

  s.subspec 'Ads' do |ss|
    ss.dependency "Google-Mobile-Ads-SDK"
    ss.source_files  = "APP_UtilityTool/Ads/Classes/**/*"
  end

  s.subspec 'Shortcut' do |ss|
    ss.frameworks = 'Intents', 'IntentsUI'
    ss.source_files  = "APP_UtilityTool/Shortcut/Classes/**/*"
  end

  s.subspec 'IAP' do |ss|
    ss.frameworks = 'StoreKit'
    ss.source_files  = "APP_UtilityTool/IAP/Classes/**/*"
  end


  s.subspec 'Map' do |ss|
      ss.frameworks = 'CoreLocation', 'MapKit'
      ss.source_files  = "APP_UtilityTool/Map/Classes/**/*"
  end


end

範例專案使用的podfile

use_frameworks!

target 'APP_UtilityTool_Example' do

  pod 'APP_UtilityTool/Ads', :path => '../'
  pod 'APP_UtilityTool/IAP', :path => '../'
  pod 'APP_UtilityTool/Shortcut', :path => '../'
  pod 'APP_UtilityTool/Map', :path => '../'

end

每個subspec都在範例專案有對應的範例,之後如果有寫到什麼好用東西就抽出來成一個subspec,再添加個範例,之後就可以重複使用了。

最後再把原本上架app的code再稍微整理一下,改用已經抽出來的元件。

target 'WhereIsCar' do

  use_frameworks!

  pod 'APP_UtilityTool/Ads', :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => '0.2.0'
  pod 'APP_UtilityTool/IAP', :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => '0.2.0'
  pod 'APP_UtilityTool/Shortcut', :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => '0.2.0'
  pod 'APP_UtilityTool/Map', :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => '0.2.0'

end

target 'WhereIsCarIntents' do
  use_frameworks!

  pod 'APP_UtilityTool/Map', :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => '0.2.0'

end

target 'WhereIsCarIntentsUI' do
  use_frameworks!

  pod 'APP_UtilityTool/Map', :git => 'https://github.com/htaiwan/APP_UtilityTool.git', :tag => '0.2.0'

end

Last updated

Was this helpful?