iOSのサンプルコードを全部入手

お久しぶりです。

最近のXcodeについてくるSDKドキュメントって、APIリファレンスの他にサンプルコードだの最初から色々と含まれていて、サンプルコードなんかは都度ダウンロードしてこなくてもよくなっている、ってことに気がついた次第です。

というわけで、SDKのドキュメントからサンプルコード全部を一気に書類フォルダに展開コピーしてみます。なお、手持ちの環境の都合で対象はXcode 4.5とiOS SDK 6.0です。他のバージョンの組み合わせではディレクトリの一部が違うと思います。

  1. XcodeのPreferences/Downloadsから iOS 6.0 Documentation Setをインストールしておきます。
  2. ターミナルを開きます。
  3. 書類フォルダに展開先ディレクトリを作ります。 (Finderで作っても可です)
    mkdir ~/Documents/samplecode
  4. iOSのSDKドキュメントに含まれているサンプルコードを、コマンドで一気に展開します。(下記は改行無しの1行です)
    find ~/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/samplecode -name “*.zip” -exec unzip “{}” -d ~/Documents/samplecode/ \;

これで書類フォルダにサンプルコードのディレクトリがプロジェクトごとに出来上がるので、Xcodeでプロジェクトを開いてビルドし放題です。全部ビルドできるかどうかわかりませんが、約160プロジェクトぐらいあるようです。

文節区切りが分かるemacs-app、バージョン24編

久しぶりにMacPortsのemacs-appを更新してみたら、バージョンが23系から24系に上がっていました。バージョン23の時は前に投稿した記事のように日本語入力がらみのパッチを色々拾ってきて手動で当てて使っていたのが、バージョン24ではパッケージに色々と取り込まれているようで(ATOKで全角英数が入力できなかったバグも直ってる)、オプションを足してインストールするだけでほぼ満足な感じです。

sudo port uninstall emacs-app
sudo port install emacs-app +patches

が、バージョン24ではpc-selection-modeとかが廃止になっているらしく拙者の .emacs/init.el がエラーになるという。バージョン別の初期化処理がどんどん増えていくのが美しくなくて、やや困ります。

jQueryでガントチャートの続きの続き

数週間ほど、jQueryから始まってCakePHP辺りまでをああでもないこうでもないといじくって遊んでいたら、ブログがすっかりご無沙汰になっておりました。

GitHubのアカウントを持っていないので、とりあえずブログにアップロードしておきました。おみやげにどうぞ。

jQuery.BookingsTimeline 2012-05-13

そろそろ、本家のものとは別物になりつつある…。

jQueryでガントチャート

HTMLに埋め込まれたデータをJavascriptで加工してガントチャートを表示しようと企んでみました。すでにオープンソースで色々と発表されているので、そこから一つをありがたく頂いて、激しくカスタマイズ。

うーむ。Javascript/jQueryに限らないですがこういう見た目コンポーネントを作ろうとしたときって、主眼をビューに置くかモデルに置くかですごく悩みます。

touchesMovedが呼ばれない

iOS 4.0のSDKで作ったプロジェクトをiOS 5.1のSDKへ移行してきたら、UIViewController の touchesMoved が1回しか呼び出されないとか、touchesEnded も呼ばれないとかの事象が発生。

作りとしては、UIScrollView の派生クラスで touchesBegan, touchesMoved, touchesEnded, touchesCancelled を定義して、それぞれのメソッド内でビューの処理を行ってから self.nextResponder が持っている同じ名前のメソッドを呼び出すことによって、UIViewController で続きのコントロールの処理をするようになっていたのですが、これがビュータッチ後のイベントがきちんとレスポンダチェーンを辿ってコントローラまで届いていないという状況のようです。

もしかしたらiOSの仕様が変わっちゃったのかも知れないけど、そんなのドキュメントのどこに書いてあるんだ…。

で。しようがないのでビューコントローラとの通信はレスポンダチェーンなんぞに頼らず、UIScrollView派生クラスに独自の@protocolとmyDelegateプロパティ(delegateは元々のUIScrollViewDelegateとぶつかってしまう)を追加して、呼び出している部分を

[self.nextResponder touchesBegan:touches withEvent:event];

から

[self.myDelegate touchesBegan:touches withEvent:event];

などとしてみました。動いた。よかった よかった。