Nakajijapan

生きるのに必死です。

【iOS勉強会】ヤフー vs クラスメソッド に参加してきた

面白そうな勉強会が開催されると耳にして【iOS勉強会】ヤフー vs クラスメソッド に参加してきました。

形式的にはYahoo!さんとクラスメソッドさんが交互にiOS開発に関連するテーマに対して発表してどちらグッドだったか競う会になっていました。よかったらその場でボタンを連打して投票する仕組みがあるのですが、リアルタイムにFacebook風ないいねの花火みたいなのでがドーンと別画面で表示されてわかるのはかなり面白かったです(Node.jsかな…)。

そのなかで便利そうなものをpickupして自分でもやってみました。

code snippet

Code Snippet Libraryを開いた状態にする

01

対象のコードを選択しといてそれLibrary側にドラッグアンドドロップ

01

そうするとMy Code Snippetが出来上がるのでそれを適当に編集すると終わりです。 作成されたSnippetは/Users/username/Library/Developer/Xcode/UserData/CodeSnippets/いかに保存されます。

試しにUIAlertViewをいれてみました。

1
2
3
4
5
6
7
8
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle : NSLocalizedString(@"Title", nil)
                                                    message : NSLocalizedString(@"Message", nil)
                                                   delegate : self
                                          cancelButtonTitle : NSLocalizedString(@"OK", nil)
                                          otherButtonTitles : nil
                          ];
[alertView setTag:1];
[alertView show];

Objective-Cって結構冗長になりがちなので、よく利用するものは登録しておくとよさそう。

code template

よくファイルを作成するときにはデフォルトでその親クラスに合わせたコードなりヘッダコメントなりテンプレートを作成してくれるのですが、カスタマイズしたくなったときは/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templatesにいっぱいテンプレートが用意されています。これを自分のディレクトリにコピーして利用するといいです。

1
2
3
mkdir -p ~/Library/Developer/Xcode/Templates/File Templates
cd    ~/Library/Developer/Xcode/Templates/File Templates
cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/* .

File TemplatesいかにCocoa Touchディレクトリがあるのですが自分がカスタマイズしたものだよとわかるようにMy Cocoa Touchとか作成してみる。

ファイルを作成するときにオプションで以下のような設定をするとオプションでテンプレートを利用するかしないか決定できるようです。Objective-C class.xctemplate/TemplateInfo.plistファイルで設定するのですがXML形式なっているのでそこのOptions以下に新しい設定を追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<dict>
  <key>Default</key>
  <string>false</string>
  <key>Identifier</key>
  <string>Nakajijapan</string>
  <key>Name</key>
  <string>Nakajijapan</string>
  <key>RequiredOptions</key>
  <dict>
      <key>cocoaTouchSubclass</key>
      <array>
        <string>NSObject</string>
        <string>UIViewController</string>
      </array>
  </dict>
  <key>Type</key>
  <string>checkbox</string>
</dict>

NSObject/___FILENAME___.hを上書きしてもよいのですが、念のため自分用に作成しておきましょう。NSObjectNakajijapan/___FILENAME___.hな感じで。(suffixは適当です。。。)

NSObjectNakajijapan/FILENAME.h

1
2
3
4
5
6
7
8
9
10
11
12
//
//  ___FILENAME___
//
//  Created by ___FULLUSERNAME___.
//  Copyright ___YEAR___ ___FULLUSERNAME___. All rights reserved.
//

___IMPORTHEADER_cocoaTouchSubclass___

@interface ___FILEBASENAMEASIDENTIFIER___ : ___VARIABLE_cocoaTouchSubclass___

@end

NSObjectNakajijapan/FILENAME.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//
//  ___FILENAME___
//
//  Created by ___FULLUSERNAME___.
//  Copyright ___YEAR___ ___FULLUSERNAME___. All rights reserved.
//

#import "___FILEBASENAME___.h"

@interface ___FILEBASENAMEASIDENTIFIER___ ()

@end

@implementation ___FILEBASENAMEASIDENTIFIER___

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
  // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

これで自分好みの設定にできました。

参加してみて

吉田 一星さんの発表が印象的で

既存のAPIをそのまま使うアイディアは他の誰かに実現されている Appleが未だ実現されていない機能を先に作れ

あえてブログでも書くようなものじゃなくてごくごく当たり前のことなのですが、これおもろくね?って思ったものはだいたいというかしょっちゅう世の中に出ちゃってるんですよね。その度に落胆しているnakajijapanですが。。。 まぁ、自分もまだAPIを利用してなんとかアプリを作っているレベルなのでドキュメントにものどこにもないような「え、そんなんできんの!!」っていわれるもの作っていきたいですね。もちろん、アプリのアイディアとか企画は別にして。技術的な観点からのはなしでした。まだまだ頑張りまっしゅ。

あと、自分でも使えそうなTipsが、今回のエントリ以外にたくさんあったのでちょこちょこ利用していこうと思います。