7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

株式会社ピー・アール・オーのアドベントカレンダー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に記載したバージョンを更新するだけで、最新のコードが利用できますので、作業の効率が良くなります。

参考サイト

Cocoapodsのインストール
Cocoapods Private Pods

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?