#目次
CocoaPodsでインストールできるオリジナルライブラリを作成する(1)
CocoaPodsでインストールできるオリジナルライブラリを作成する(2)
CocoaPodsでインストールできるオリジナルライブラリを作成する(3)
CocoaPodsでインストールできるオリジナルライブラリを作成する(4)
注意
この話を書く上の例として、
自作ライブラリの名前として"NeroBlu"
という名前をつけていますこれは自分の屋号から取ってきた名前なので、ただの「サンプル名」としてご認識ください
名前は各自でご自由につけなおしてくださいね
#まえがき
前回 では
他のプロジェクトから、自作したライブラリをインストールするところまで作りました
しかし中身はもぬけの殻です
今回は、中身を作ってみます
#ブランチに分ける
今回はお試しなので、master
とは別のブランチを使います
ブランチを分けた場合でも CocoaPods
はブランチを追跡することができます
前回までの状態の master
から派生した temporary
というブランチを切ることにしました
そして、使用するプロジェクト側の Podfile
にこう書きます
#before
pod 'NeroBlu', :git => 'https://github.com/xxxxx/NeroBlu'
#after
pod 'NeroBlu', :git => 'https://github.com/xxxxx/NeroBlu', :branch => 'temporary'
これで CocoaPods
のリポジトリの向き先は master
ではなく、temporary
ブランチになりました
まぁ、temporary
という名前はいかにもアレですが、
あくまで「お試し」なのでご了承ください
##ブランチごとに別ライブラリ
このライブラリを
ブランチごとに別のライブラリとして扱うことも可能です
まぁそれに何の得があるかは置いておいて・・・
とにかくできます
方法は簡単で
podspec
をブランチごとに書き換えてやればいいのです
前回作った NeroBlu.podspec
をこのようにしました
d::Spec.new do |s|
s.name = "NeroBluTemp"
s.version = "1.0.0"
s.summary = "NeroBlu: Library for iOS."
s.description = ""
s.frameworks = "Foundation", "UIKit"
s.source = { :git => "https://github.com/xxxx/NeroBlu" }
s.source_files = "NeroBlu/*"
end
前回のものから
s.name = "NeroBlu"
となっていたものを
s.name = "NeroBluTemp"
に変えています
すると、使用する側は "NeroBluTemp"
というライブラリとして
プロジェクトに取り込まれていきます
master
ブランチは NeroBlu
、temporary
ブランチは NeroBluTemp
ふたつの異なるライブラリが出来上がったものとして扱うことができます
ためしに Podfile
を
use_frameworks!
pod 'NeroBlu', :git => 'https://github.com/nakau1/NeroBlu'
pod 'NeroBluTemp', :git => 'https://github.com/nakau1/NeroBlu', :branch => 'temporary'
このように書き換えてpod install
すると
Xcode上で Pods
にはふたつのライブラリが棲み分けられたと思います
#ライブラリにクラスを実装する
さて、前項で作ったライブラリ NeroBluTemp
には何もありません
何もないと寂しいのでひとつ実装を加えます
名前はなんでもいいのでライブラリ内にswiftファイルをひとつ追加して
ここでの例では String+Echo.swift
というファイルにします
import UIKit
public extension String {
public func echo() {
print(self)
}
}
こんな処理を書きました
"Hello".echo()
って書くと、コンソールに出力されます
はてさて、何の役にも立たない extension ではありますが、
これもまた立派なライブラリ(?)です
ちなみにアプリ開発の時は意識しないことですが、
ライブラリ作りでは、スコープは必須です
ワークスペースを区切って開発したりしてる方には当然なことなのですが、
普段そうしてない人、ひとつのターゲット内で作業してる人にとっては、忘れがちかもしれません
import UIKit
extension String {
func echo() {
print(self)
}
}
こう書いてしまうと、public
ではなくinternal
扱いです
つまり、外からは見えません
ライブラリ内でしか使えないメソッドになってしまいます
ゆえに、外から隠蔽すべきではないものに対しては、ちゃんと public
を付けましょう
ここまでのものを temporary
ブランチに git push
します
そして、使用する側のプロジェクトにて pod install
してみます
すると、プロジェクト内に String+Echo.swift
ファイルが取り込まれたと思います
使用する側のプロジェクトを一旦ビルドしてから
試しにアプリに次のように実装します
import UIKit
import NeroBluTemp
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
"Hello".echo()
}
}
これで動作確認してみると
Hello
コンソールに出力されると思います