CocoaPods 1.7でCDNを使ったらSpecs更新が爆速だった


tl;dr

CocoaPodsをv1.7系にしてCDNをsourceにして爆速!


CocoaPods v1.7

CocoaPodsのv1.7系が5/23にリリースされています。

あまりCocoaPodsは追っていなかったのですが、Specsの更新が爆速になってて感動したのでまだの人は使ったほうがいいです!


CDNサポート

v1.7からsourceとしてCDNがサポートされ

1.7.2からFinalizeされNetlifyでホストされているようです。

Specs.gitのかわりにcdnをsourceに指定しましょう。

- source 'https://github.com/CocoaPods/Specs.git'

+ source 'https://cdn.cocoapods.org/'

でも使ってみた感じだとbeta1で案内されていたjsdelivr.netの方が早かったです。


CDNソースだと必要なSpecだけ取得できる

以下のPodを利用している環境で試しました。

Crashlytics

DeallocationChecker
Fabric
Mockingjay
Periphery
SwiftFormat
SwiftGen
SwiftLint
URITemplate

ゼロからSpecs.gitを更新すると手元で2分かかるところが・・・

CDNだと利用しているPodのSpecだけDLされます

Resolving dependencies of `Podfile`

CDN: jsdelivr-cocoa Relative path downloaded: Specs/5/e/d/SwiftFormat/index.txt, save ETag: W/"2eb-6gklZWWeegEzBbq63V1uA8xQgu8"
CDN: jsdelivr-cocoa Relative path: Specs/5/e/d/SwiftFormat/index.txt modified during this run! Returning local
CDN: jsdelivr-cocoa Relative path downloaded: Specs/5/e/d/SwiftFormat/0.13/SwiftFormat.podspec.json, save ETag: W/"1ea-z72pQ1Xtukf7S9Ip+lU60dloSNg"
CDN: jsdelivr-cocoa Relative path downloaded: Specs/5/e/d/SwiftFormat/0.16/SwiftFormat.podspec.json, save ETag: W/"1ea-4yhY9JtA+tyAFcmG52nHey4IYGc"
CDN: jsdelivr-cocoa Relative path downloaded: Specs/5/e/d/SwiftFormat/0.16.3/SwiftFormat.podspec.json, save ETag: W/"1ee-EDv9/GnjwZJZpIb/nCzuPNfAy+o"
CDN: jsdelivr-cocoa Relative path downloaded: Specs/5/e/d/SwiftFormat/0.16.1/SwiftFormat.podspec.json, save ETag: W/"1ee-/+ETQMcayrjdya79gkc0dwEHyko"

bundle exec pod install --repo-update --verbose 1.75s user 1.37s system 78% cpu 3.955 total

約4秒で終わってしまいました!

なんてこった30倍速

みんな使おう!


CircleCI使ってる人向け

CircleCIではSpecs更新を高速化するために cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh が案内されています。

執筆時点のこのスクリプトの中身は従来のSpecs.gitを更新する内容になっています。

速いといっても4分ぐらいかかるので、上述のCDNからの必要Specだけの取得に比べると雲泥の差ですし

今後スクリプトの中身がCDN sourceに対応したのだとしても所要時間に意味のある差は生まれないと思いますので利用をやめて素朴な

[bundle exec] pod install [--repo-update]

するだけで良いと思います。