ばーちーぶろぐ

iOS関連の話をざっくりと。

Xcode Plugin を試しに作ってみた

f:id:tochiba:20140309004755p:plain

先日ヤフーで開催された「ヤフーvsクラスメソッド」というiOSのイベントのお手伝いをさせて頂きました。
どんなイベントだったかは、下記のイベントレポートをご覧になってください。
ヤフーvsクラスメソッド「iOS 炎の7番勝負」イベントレポート【前編】
ヤフーvsクラスメソッド「iOS 炎の7番勝負」イベントレポート【後編】

全てのセッションのレベルが高く。勉強になることが多くて、これからの開発に活かせることばかりでした。
その中でも一番興味を持ったのは、クラスメソッド 平井さんが発表されたXcodeプラグイン開発についてでした。

これを見た感想は、
おもしろい!
わかりやすい!
かっこいい!
作りたい!

でした

もしかしたら僕でも出来るかも?と思い、
僕も試しに作ってみました!

はじめにやったこと

こちらの記事を参考にHello worldから試してみました。
初めてのXcode 5 プラグイン開発
実際やってみると、設定が少しめんどく感じました。
plistの設定やシングルトンなどはお決まりなので、テンプレートを使いましょう!
こちら
Xcode5PluginTemplate
開発の流れを把握してから取り組んだ方がいいと思います。

しくみ

Xcode Plugin が盛り上がっているらしい
こちらに詳しく書いているのですが、Plugin の仕組みを使ってXcodeのロード時に読み込ませているとのこと。
Appleさん非公式のため、APIはない。そして情報が少ない。

はまったところ

僕自身、iOSアプリしか開発したことがなかったので、概念の違いで戸惑いはありましたが、慣れの問題かなと思いました。
プラグインを消すときは、クリーン(Cmd + Shift + K)で出来るのですが、プラグインにクラッシュするようなバグを含んでいる場合、Xcodeちゃんがたちあがらなくなります。
もうXcodeちゃん立ち上がらないので、僕のiOSアプリエンジニアとしてのキャリアも引退かなと思っていたのですが、どうやら下記のパスにある該当プラグインを削除すると大丈夫でした。

~/Library/Application Support/Developer/Shared/Xcode/Plug-ins

クラスメソッド 平井さんの記事にも書いてありました。。。

つくったもの

作ったのは5つのプラグインです。
1. ショートカットキーが割り当てられていないメニュー(Archiveなど)にショートカットキーを割り当てるプラグイン
2. Xcode上でiBeaconの電波を発信、停止するプラグイン
3. コード選択箇所をgistに投稿プラグイン(OAuth認証めんどくさくて途中)
4. ショートカットキーでtestFlightにアップロードするプラグイン(リファクタリング中)
5. ショートカットキーでDeployGateにアップロードするプラグイン(リファクタリング中)

長々と詳しく説明するより、実際のコードを見た方が分かると思うので公開します。
参考になれば幸いです。

ためしにMITライセンスつけてみました!
好きに使ったり、いじったりしてください!
プルリクお待ちしております!

今回公開するのは2つです!

TSKAddShortCutKeyXcodePlugin

TSKAddShortCutKeyXcodePlugin

ショートカットキーを追加するのXcodeプラグインです。
[command + shift + 0] -> Show in Finder
[command + shift + 7] -> Push
[command + shift + 6] -> History
[command + shift + =] -> Archive

使い方

ビルドしてXcode再起動で上記のショートカットキーに機能が割り当てられます。
自分の好きなショートカットキーを記述して、ビルドしてください。

TSKiBeaconXcodePlugin

TSKiBeaconXcodePlugin

iBeaconのテストをするためのXcodeプラグインです。

使い方

// UUID
static NSString *const mStringUUID = @"";
// major
static const unsigned short int mMajor = 0;
// minor
static const unsigned short int mMinor = 0;
// measurePower
static const int mMeasurePower = 0;
  1. 上記の値を設定(テストしたい値)
  2. ビルド (command + B)
  3. Xcode再起動
  4. デバッグメニューにアドバタイズ開始[command + shift + 8]機能追加
  5. デバッグメニューにアドバタイズ停止[command + shift + 9]機能追加

かんじたこと

一番感じたことは、情報の少なさ!
日本語の情報は皆無。
英語でも少ない。
上記の公開してるプラグインレベルなら苦労せず出来る。しかし、少し変わったことをやろうとすると難しい。
そんな時はどうするか。
公開されているプラグインのコードを読み解くしかない!

まとめ

情報の少なさで挫折していた人が多いのかなと思いました。
しかし、先日の「ヤフーvsクラスメソッド」でXcodeプラグイン開発方法が認知されたので、これから挑戦する人は増えていくと思います。
日本人のiOSアプリ開発界隈の人がどんどん取り組んで、作ったのもどんどん公開して、どんどん開発も効率化されて、情報もどんどん増えていくサイクルが作れたら素晴らしいのになと思いました。
ということで、僕は、
今、熱いXcode Plugin開発を盛り上げれたらなと思います。