AppCodeの地味に便利な機能

懲りずにAppCodeの事を書きます。

言わずと知れたObjective-CのIDEであるAppCodeですが、地味に便利な機能があります。
順番に紹介していきます。

## LocalizadString
LocalizedStringの管理は非常に面倒ですが、AppCodeを利用する事で幸せになれます。
ただの文字列をLocalizedしてくれる機能があるのです。
これを利用しない手はありません。

```objc
    // 補完前
    label.text = @"ほげほげ";
    
    // 補完後
    label.text = NSLocalizedString(@"AdventCalendar_Hogehoge", @"ほげほげ");
```

`@"ほげほげ"`にフォーカスを当てて`⌥ + Enter` > `Localize the string`と入力することで補完されます。
これで各言語のLocalizable.stringsにも定義されます。

```
"AdventCalendar_Hogehoge" = "ほげほげ";
```

あとは各言語に合った文字列を定義していきましょう。
もちろん**リファクタリングも可能**です。
"AdventCalendar_Hogehoge"にフォーカスを当てて`⇧ + F6`です。

### Inspect Code
`Inspect Code`という機能も併用するともっと幸せになります。
これを実行すると、コードを解析した結果、イケてない箇所をリストアップしてくれます。
細かくは実際に使用してみるとわかるかと思います。

これはLocalizedしていないNSStringを抽出してくれるので、便利です。
（`@"%@"`なども抽出してしまうので、Localizedする必要のないものもリストアップしてしまいますが・・・）

ディレクトリを選んでからも実行できるので、範囲を絞って実行することもできます。


## Find Usages（⌥ + F7）
メソッドにフォーカスを当てている状態で、`⌥ + F7`です。
これを実行すると、メソッドの使用箇所をリストアップしてくれます。

![スクリーンショット 2013-12-18 1.23.46.png](https://qiita-image-store.s3.amazonaws.com/0/2920/f92fdb34-584e-bce9-6923-94831c76dc47.png)

`⌥ + ⌘ + ↑（↓）`を押すことで、フォーカスを次／前の使用箇所に移す事ができます。
Propertyの検索にも使えるので、何かと便利な機能です。


## Reformat Code（⌥ + ⌘+ L）
名前の通り、コードの自動整形を行ってくれます。
Eclipseあたりだと保存時に勝手にformatしてくれますが、AppCodeではできなさそうです。
formatterは`Settings` > `Code Style` > `Objective-C`から設定可能です。
また、設定はメニューの`File` > `Export Settings...`から出力できます。
チーム内で共有すると幸せになれるかと思います。

コミット前に一度formatをかけておく事をオススメします。


## 引数のNS_ENUMやBlocksの補完
以下のような状態のときにEnterを押すことで、引数から予測変換やコードの展開をしてくれます。

### NS_ENUMの場合

![スクリーンショット 2013-12-18 1.40.21.png](https://qiita-image-store.s3.amazonaws.com/0/2920/19483208-769e-4327-e654-421927bd2a58.png)

この状態でEnterを押すと、NS_ENUMの定義をリストアップしてくれます。

![スクリーンショット 2013-12-18 1.37.54.png](https://qiita-image-store.s3.amazonaws.com/0/2920/d074bf93-1fbe-5ccb-d480-c43c2bdcb539.png)

地味に便利。

### Blocksの場合

![スクリーンショット 2013-12-18 1.46.43.png](https://qiita-image-store.s3.amazonaws.com/0/2920/59289737-e4b5-4804-5aea-dbddc2ddfa2f.png)

この状態でEnterを押すと以下のようにコードを展開してくれます。

![スクリーンショット 2013-12-18 1.47.11.png](https://qiita-image-store.s3.amazonaws.com/0/2920/44acffe3-dcdc-42dc-cce1-f851665ba618.png)

自分で`typedef`などで定義したBlocksにも使えるので活用しましょう。


## リファクタリング豆知識

メソッド名の変更と、引数の変更などが実行できます。
その際に、引数の順番を入れ替える事ができます。

こんなメソッドがあるとして、

```objc
- (void)present:(NSString *)text withParams:(NSDictionary *)params withItemId:(NSInteger)itemId;
```

メソッドにフォーカスを当て、`⌃ + T` > `2. Change Signature`を選択します。
編集用ポップアップが表示されますが、その中で引数をドラッグすることで入れ替えが可能です。

![スクリーンショット 2013-12-18 2.01.08.png](https://qiita-image-store.s3.amazonaws.com/0/2920/1b7c37c2-c929-aef5-4c07-fff83e170609.png)

## ショートカットを利用するとき

↑のリファクタリング画面を見てみるとわかりますが、ボタン類のラベルに下線が入っている文字があります。
これらはショートカットのキーと対応している文字になっています。
`⌥`と対応している文字を押すとショートカットが動作します。

先程のリファクタリングの場合だと、`⌥ + R`を押すとリファクタリングが実行されます。
メイン画面の各ペインにも、`1: Project`、`4: Run`、`7: Structure`などなどがあると思います。
それぞれ数字に下線が入っているので、`⌥ + 数字`で各ペインの開閉ができます。
Projectのペインにフォーカス当てたり、Run時に開いちゃったウィンドウ消したいときとか地味に便利です。


## Watches

Debug時に特定の変数の値を確認することができます。
ブレークポイントで処理を止めている状態にこれを利用することができます。

![スクリーンショット 2013-12-18 2.18.50.png](https://qiita-image-store.s3.amazonaws.com/0/2920/0996343f-edb5-bf2f-b861-02781aa5cbd9.png)

これも地味に便利です。


## 最後に

いかがでしたか？
最近のAppCodeはCocoapodsに対応するなどもして、便利な機能が増えています。
もっと快適にコードを書くために便利な機能を活用していきましょう。
むしろ便利な機能があったら教えて下さい！