over 7 years ago

最近專案長的太肥了,應該要來瘦身一下。CocoaPods是一個很方便的管理工具,可以把專案分成幾個小的模組(Pods)方便日後的管理。如果不想把程式碼放在Github上給別人看光光怎麼辦?很簡單,用bitbucket就好了,private repository不用錢,想開幾個就開幾個。不過私有的程式碼是沒辦法放在CocoaPods官方的spec裡面的。所以該怎麼辦呢?

解法1:使用development pod

產生development pod

用cocoapods內建的小工具來建立一個新的pod

pod lib create myDevelopmentPod

修改myDevelopmentPod.podspec
然後把.m、.h、.swift複製進去就行啦

把development pod加入專案

修改專案的Podfile,加入development pod

pod 'myDevelopmentPod', :path => '~/MyProjects/myDevelopmentPod'

然後執行

pod install

解法2:使用private pod

產生一個新的spec

要先創造一個private spec repository

mkdir MYSpecs
cd MYSpecs
git init
git remote add origin git@bitbucket.org:my_account/my_specs.git
git commit -m 'Initial commit'
git push -u origin master

上傳到bitbucket之後,就能把MYSpecs的資料夾給砍了

rm -rf MYSpecs

告訴CocoaPods我們要新增一個自己的spec

pod repo add MYSpecs git@bitbucket.org:my_account/my_specs.git

CocoaPods會把這個spec複製一份下來,放在~/.cocoapods/repos裡面

創建private pod

用內建的指令幫我們創建一個新的pod

pod lib create myPrivatePod

回答幾個問題就建好了

myPrivatePod.podspec的內容如下

Pod::Spec.new do |s|
  s.name             = "myPrivatePod"
  s.version          = "0.1.0"
  s.summary          = "A short description of myPrivatePod."
  s.description      = <<-DESC
                       An optional longer description of myPrivatePod

                       * Markdown format.
                       * Don't worry about the indent, we strip it!
                       DESC
  s.homepage         = "https://github.com/<GITHUB_USERNAME>/myPrivatePod"
  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
  s.license          = 'MIT'
  s.author           = { "" => "" }
  s.source           = { :git => "https://github.com/<GITHUB_USERNAME>/myprivatepod.git", :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'

  s.platform     = :ios, '7.0'
  s.requires_arc = true

  s.source_files = 'Pod/Classes/**/*'
  s.resource_bundles = {
    'myPrivatePod' => ['Pod/Assets/*.png']
  }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end

把要改的東西改一改吧
要注意預設的license是MIT,既然我們不想開源,就改成

  s.license          = 'proprietary'

改完之後存檔

另外LICENSE檔案也要改掉,在命令列下輸入

  echo -e "Copyright (c) 2015, MyCompany\nAll right reserved." > LICENSE

最後驗證podspec的內容是否正確

pod lib lint --allow-warnings

Cocoapods很龜毛,有可能產生一些警告訊息。但是我們是自己用,不用這麼麻煩,加入--allow-warnings讓驗證程式忽略這些錯誤

測試private pod

找一個專案修改它的Podfile,把創建出來的pod以development pod的形式加進去

pod 'myPrivatePod', :path => '~/MyProjects/myPrivatePod'

測試pod和專案的整合有沒有遇到問題

上傳private pod

測試通過之後,把private pod上傳到bitbucket

git tag -m "first release" 0.1.0
git push --tags

再把private pod加入到我們的spec裡面

pod repo push --allow-warnings MYSpecs myPrivatePod.podspec

安裝pod

簡單,指定private spec的位置,再把private pod加到專案的Podfile

source 'git@bitbucket.org:my_account/my_specs.git'
pod 'myPrivatePod'

再執行pod install

pod更新

別忘了myPrivatePod.podspec的版本編號也要修改
在把修改過的程式push之後,執行

git tag -m "second release" 0.2.0
git push --tags
pod repo push --allow-warnings MYSpecs myPrivatePod.podspec

刪除private spec

如果不想要再用private spec的話,用以下命令移除spec

pod repo remove MYSpecs

總結:該用那個呢?

development pod的好處是方便管理,想改code就直接在Xcode裡面改好。不必像private pod那樣改完之後還要commitpushpod install。缺點是無法和其它的專案分享程式碼。如果要在不同的專案內使用同樣的pod,那private pod是唯一的選擇。

← Ship.io初體驗 在DigitalOcean上自建個人專屬Heroku →
 
comments powered by Disqus