はじめに
株式会社ピー・アール・オーのアドベントカレンダー3日目です。
今までiOSプロジェクトを開発時、共通で使えるユーティリティクラスを既存のプロジェクトからコピーして、新しいプロジェクト側に流用する形でした。しかし、ユーティリティクラスに修正や機能追加が入った場合、全てのプロジェクトにファイル更新を行う必要があり、効率は良くないです。
そこで、共通のユーティリティークラスをフレームワーク化し、Cocoapods経由で全てのプロジェクト内にインストールすれば今後楽になると思いました。フレームワークのソースコードは公開できない場合もあるため、CocoapodsにPrivateのフレームワークを作成する方法を調べて、作ってみました。
事前準備
- Cocoapodsのインストール
sudo gem install cocoapods
プライベートのSpecリポジトリを作成する
さて、一番最初に用意する必要があるのはSpecリポジトリです。今回はGitHub上にリポジトリを用意します。
※リポジトリ自体はpublicにする必要がないです。ただし、チームメンバー全員リポジトリのアクセス権限を持つ必要があります。
今回はpro-specs
のリポジトリを作りました。
作成したSpecリポジトリをローカルのCocoapodsに追加する
Specのリポジトリを作成した後、次は作成したリポジトリをローカルのCocoapodsに追加する必要があります。
pod repo add [リポジトリ名] [リポジトリのURL]
例)
pod repo add pro-specs https://github.com/lxlgarnett/pro-specs.git
追加したリポジトリが正しく追加されたかどうかをチェックする
cd ~/.cocoapods/repos/[リポジトリ名]
pod repo lint .
例)
cd ~/.cocoapods/repos/pro-specs
pod repo lint .
下のメッセージが表示すれば問題ないです。
All the specs passed validation.
フレームワークリリース用podspecファイルを作成する
次はリリース用のpodspecファイルを作成します。
※ここはすでにGitHubにリリース済みのプロジェクトが存在することを想定します。
まずは任意の場所に移動し、podspecファイルを作成します。
今回はDesktopにファイルを作成します。
cd ~/Desktop
touch Sample.podspec
Sample.podspecの中身は下記になります。
Pod::Spec.new do | spec |
spec.name = 'Sample'
spec.version = '1.0.0-alpha'
spec.license = { :type => 'MIT' }
spec.homepage = 'https://www.pro-japan.co.jp/'
spec.authors = { 'Xiaolei Li' => 'g.rei@pro-japan.co.jp' }
spec.summary = 'Qiita用サンプルフレームワーク'
spec.source = { :git => 'https://github.com/lxlgarnett/sample-ios-framework.git', :tag => 'v1.0.0-alpha' }
spec.source_files = 'Sample/*.swift'
spec.platform = :ios, '14.0'
spec.swift_version = '5.0'
end
- spec.name: フレームワーク名、podspecのファイル名はsepc.nameと同じにする必要があります。
- spec.version: バージョン
- spec.license: ライセンス
- spec.homepage: ホームページの情報
- spec.authors: 作成者
- spec.summary: フレームワークの説明
- spec.source: ソースコードの場所
- spec.source_files: 実際podに取り込むファイルのパスとファイルの形式
上記の項目は必須項目です。
作成したpodspecファイルをリモート上のSpecリポジトリにプッシュする
pod repo push pro-specs ~/Desktop/sample.podspec
Validating spec
-> Sample (1.0.0-alpha)
- NOTE | xcodebuild: note: Using new build system
- NOTE | xcodebuild: note: Using codesigning identity override: -
- NOTE | xcodebuild: note: Build preparation complete
- NOTE | [iOS] xcodebuild: note: Planning
- NOTE | [iOS] xcodebuild: note: Building targets in parallel
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')
Updating the `pro-specs' repo
Adding the spec to the `pro-specs' repo
- [Add] Sample (1.0.0-alpha)
Pushing the `pro-specs' repo
問題がなければ、上記のようにリポジトリに追加したのメッセージが表示されます。
公開したフレームワークを使ってみる
実際リリースしたフレームワークを利用する場合、プロジェクト内のPodfileに作成したSpecのリポジトリを追加し、フレームワーク名とバージョンを指定し、podインストールすればOKです。
source "https://github.com/lxlgarnett/pro-specs.git"
target 'ProjectName' do
pod 'Sample' => '1.0.0-alpha'
end
最後に
共通のソースコードをフレームワーク化すれば、変更があったとしても、全てのプロジェクト内もPodfileに記載したバージョンを更新するだけで、最新のコードが利用できますので、作業の効率が良くなります。