Objective-C

Xcodeのグループとディレクトリ構成を同期させてくれるツール「Synx」

皆さんはXcodeのグループをディレクトリ構成と合わせますか?

僕は、使い捨てのプロジェクト以外は合わせるようにしています。
やっぱり、プロジェクト名のフォルダに全部突っ込まれてるよりは、ある程度分かれていたほうが見やすいですしね。
(Xcode上ではどちらでも変わらないけど、GitHub上などで見る時に効率が全然違う)

ただ、この「グループをディレクトリと同期させる作業」めんどくさいんですよね。
グループを作って、File InspectorのLocationからディレクトリ作って選択…。
数が多くなってくるとかなり手間だし、プロジェクトを作る度に毎回やらないといけません。

そんな悩みを解決してくれそうなのが、Synx。最近、GitHub上で人気のようです。

まずはインストール。SynxはRuby製のツールでgemとして提供されています。
導入は以下の1コマンドで完了です。

では、早速使ってみます。

synx1

このようにせっせと「Controllers」「Models」「Views」にグループ分けしたプロジェクトがあります。

treeコマンドでディレクトリ構成を見てみます。
グループ分けの甲斐虚しく、SynxExampleフォルダに全てのファイルが並列にある状態です。

ここでsynxの出番です。この程度のファイル数であれば処理は一瞬で終わります。

再度treeコマンドで確認してみます。

「Controllers」「Models」「Views」それぞれのディレクトリが作成され、ファイルが格納されています。
これは便利ですね!

他にも使い方があるようですが、今回はここまで。
実開発で使ってみて便利だったところや、ハマったところなどあれば、また共有したいと思います。

 

 

 

「Xcode 5 徹底解説 for iOS/OS X」買った

発売以来、主にその大きさから購入をためらっていた(電子書籍化を待っていた)んだけど、この週末読む時間が取れそうだったので、ついに買った。


Xcode5徹底解説 for iOS/OSX

ちゃんと読み込んでものにすれば、アプリの開発効率がかなりあがりそうなので、手を動かしつつ、目を通していこうと思う。

それにしてもIT系の書籍はもう電子書籍デフォルトでいいんじゃないかと。
DRMフリーなら、紙より高くてもいいから!(自炊する手間や置く場所を考えればちょっとぐらい高くても電子書籍の方がいい)

広さ的な意味で住環境が劣悪な日本でこそ、電子書籍はもっと輝くはず!
そんなに本置けない!!

とはいえ、いろいろ事情があったりして難しいものもあるんですかね。
その場合は、こういう理由で電子書籍当面出ないよ!とか告知してくれると諦めがついて購入しやすい気がします。

 

The Blocks of the Dead: Objective-CのBlocks構文をひたすらタイプして覚えよう

「そろそろObjective-CのBlocks構文をスラスラ打てるようになりたい!」と思って作ってみた。
空白の扱いとかもうちょい改善したいところはあるけど。ひとまず動くようになったので公開。

The Blocks of the Dead

blocks_play

tnantoka/blocks

名前はセガの名作からパクりました。
「The Typing of the Blocks」じゃないのは、Blocks構文のややこしさにふさわしい”Dead”を残したかったから。

参考サイトはHow Do I Declare A Block in Objective-C?です。
(オリジナルはURLがよろしくないwordなので、公式のミラーサイトへリンクしてます。)

はじめてのAngularJS

以下Objective-CではなくJSの話。


AngularJSアプリケーション開発ガイド

を読んだので、AngularJSでやってみました。
(というか、AngularJSの勉強のために作った感じ。)

今までBackbone.jsしか使ったことがなかったので、初Angualrです。

Angularの方がいろいろ書き方が決まってたり、テストの仕組みまで揃ってたり、至れり尽くせりな印象を持ちました。

Backbone.jsは、Backboneで提供されるModelやViewを継承することは決まってるけど、その先は結構自由で、設計力が試されるイメージ。
※ 何も考えないとrender()がやばいことになったり

僕みたいなへっぽこには、Angularのガチガチ感が心地よかったです。Rails Way的な。
もうどうせならモデルの仕組みまで用意してくれたらいいのに、とも思ったり^^
(最近フレームワークに頼りすぎて、自分で1からクラス的なもの書かないからちょっとテンパったorz)

あと、公式で用意されてるangular-seedがコンパクトで良いテンプレートでした。(Gruntなし。NPMとBowerで管理。)Yeomanが生成するやつはちょっといろいろ入りすぎてウッってなるので…。

次もAngularでなんか作ってみようと思う。
HTML5 Japan Cupなんておもしろいものが開催されてるらしいから、何か応募してみようかなぁ。

UIViewControllerのinitではviewをいじらない方が良い

いや、考えれば当たり前なんですが、眠気と闘いながら書いてたりすると、背景色とかinitで設定しちゃってたり…。

例えば以下のようにAppDelegateからViewControllerを設定しているとします。

AppDelegate.m

こちらが問題のないViewController。

(問題のない)ViewController.m

出力されるログは以下のように、(1)-(I)-(2)-(II)-(3)の順になり、想定通りです。

2014-05-17 14:46:56.865 init[1497:60b] AppDelegate – (1)
2014-05-17 14:46:56.867 init[1497:60b] ViewController – (I)
2014-05-17 14:46:56.867 init[1497:60b] AppDelegate – (2)
2014-05-17 14:46:56.868 init[1497:60b] ViewController – (II)
2014-05-17 14:46:56.870 init[1497:60b] AppDelegate – (3)

次に問題のあるViewControllerの場合。initでself.view.backgroundColorを操作しています。

(問題のある)ViewController.m

ログが(1)-(I)-(II)-(2)-(3)の順で出力され、先ほどの例と変わってしまっています。

2014-05-17 14:49:21.885 init[1516:60b] AppDelegate – (1)
2014-05-17 14:49:21.886 init[1516:60b] ViewController – (I)
2014-05-17 14:49:21.887 init[1516:60b] ViewController – (II)
2014-05-17 14:49:21.887 init[1516:60b] AppDelegate – (2)
2014-05-17 14:49:21.889 init[1516:60b] AppDelegate – (3)

これは、init内でself.viewにアクセスしたことにより、そこでviewが読み込まれてしまい、発生した差異です。

多くの場合、問題は起きないと思いますが、いざハマると解決に時間がかかりそうな気がします。

気をつけよう…。

KIFでQuickDialogのフォームを操作

KIFでQuickDialog製のログインフォームのテストをしていた時、

のように追加した要素に対して、

としても入力できませんでした。

そこで、TableViewにAccessibilityIdentifierを設定し、セルをタップ。
その後、FirstResponderに対して入力することで解決しました。

また、QButtonElementは tapViewWithAccessibilityLabel: が反応しませんでしたが、これもセルをタップすることで解消しました。(QLabelElementは大丈夫のようでした。)

QuickDialog、KIF共に中身を見たわけではないので、正しいかはわからないですが、上記の対応で問題なく動いているようです。

 

Trico – Hello world without PC
カテゴリ: 仕事効率化, 教育

 

 

1 2  Scroll to top