iOS開発修行中に参考になった本を紹介

■木下誠 「たのしいCocoaプログラミング」

iPhoneのSDKが一般公開された頃から、自分でアプリ作ってみたいと思ってMac miniまで買いそろえたりしていたものの、昔から「C」と名のつく言語(というかポインタ?)が苦手だし、オブジェクト指向も概念はわかるもののいまいちとっつきにくくて、長らく放置していました。

が、MacBook Airを買ったり、ちょっと仕事絡みで相談を受けたりを機にようやく重い腰をあげてみたのがこの年末年始。でもやっぱりObjective-CもXcodeも敷居が高くてTwitterでプログラマの友人達に助言を請うたりしつつ、1月は本当に頭を悩ませていました。本を何冊も買っては、説明がスッキリしなかったりサンプルのビルドが通らなかったりで投げ出したりの繰り返し。

そんな中で急速にObjective-CやXcodeに関する理解が進んだ感があったのが、木下誠氏の「たのしいCocoaプログラミング」でした。この本は正確にはiOS開発について触れた書籍ではなく、MacOSXに関するものです。ただObjective-CやXcodeに関しては共通事項もおおいということで、随分前にTiger版を買ってあったのを手にとってパラパラと読み返してみたところ、その前に何冊か読んでいてイマイチすっきりしてなかったところが急激に納得いくようになりました。Xcode 2.xと現行の3.xでは随分作法もかわっているということなので改訂されたLeopard版を速攻で注文。

以前友人向けにVB.NETで作った簡単なWindowsアプリをOSXにさっくり移植できてしまいました。最初からこれ一冊で足りたかどうかは定かではありませんが、断片的だった知識をこの本が再構成してくれた感は高いです。特に他の書籍ではXcodeやInterface Builder上での操作が手順でしか示されていなかったのに対し、この本ではその意味についても触れてくれていたのが大きいような気がします。.hファイルと.mファイルがペアで1つのクラスを表している、といった極基本的な事も、この本でようやく気付いたというレベル(他の本は.hにこう書け、.mにこう書け、ほら動いたでしょ、というノリ)。Objective-Cについても、例えばimport文で宣言ファイルを指定するのに、<>で括るのと””で括る意味の違いまで触れていたのはこの本が初めてでした。そういうレベルの入門者には、(iOS開発を目的とした場合やや遠回りに思えるかも知れませんが)一読の価値があると思います。

■所友太「iPhoneプログラミング UIKit詳細リファレンス」

続けて重宝したのがこちら。「たのしい~」でObjective-CとXcodeの雰囲気がつかめたので、あとはiOS特有の部分を差分的に読めればいいやってことで。iOS 3.x世代の解説本ですが、入門レベルの要素は網羅されているので支障はない気がします。まぁ、もしかするとiOS4.xなら同じことをより簡単にできるようになったりはしてるかも知れませんが。

この本を参考にして、相談を受けた極簡単なアプリのデモ版を完成させることができました。データ保存もネット通信もしないごくごくプリミティブなアプリですが、何冊も投げてきたσ(^^)としては、格段の進歩という気がしています。詳しい人にソースを見せると、とてもオブジェクト指向的とは言えないような作りかも知れませんが、それは今までのVB.NETで作ってきたツールも同じだしw。

「あとは本でもネットでも公式リファレンスでも見ながら猿真似していけば(σ(^^)個人が作る規模のアプリなら)なんとかなるんじゃないか?」という気がVB並にしてきたのは(錯覚だったとしても)大きい。あとはそのドキュメントがVBに比べるとやはり少ないのが難点ですね。

■てことで逆引き本2冊

というワケで、やりたいことがサクっと調べられるよう、いわゆる逆引き本をObjective-CとiOSで1冊ずつ買って見ました。これらはまだ活用には至ってないので、(「原則として自分で使ってみたものをレビューする」という本ブログの主旨には反しますが)紹介まで。

1冊目はObjective-Cという言語に関するもの。「文字列を文字列で分割する」とかそういうレベルの調べもの用。おそらく現時点で日本語で読める逆引き本としては唯一なんじゃないかと。先日立ち寄った書店でも2010年のプログラミング関連書籍ランキングで3位になってました。

もう1冊はiOS特化の方で、「アプリ内から写真撮影をするには」とかいったAPIレベルのノウハウが数多く収録されているようです。世代的にもiOS4.x対応なので心強いです。

 

当面この後マスターしたいのはテーブルビュー(リスト画面)とCoreData(データの保存関係)ですね(フルグラフィックなアプリを作ることはないだろうし)。それを習得できれば簡単な実用アプリは書けるようになる気がします。なんか手頃なお題を物色中。

iOS対応高機能MP4を簡単に作るdgMP4Muxer完成

世間は三連休だったようですが、σ(^^)的には発生イベント皆無だったので、家に籠もって手持ちソフトをこないだ習得した方法でiOS対応MP4にしこしことエンコードしていました。

で、さすがにDOS窓でコマンドを手打ちするのに嫌気がさし、フロントエンドGUIツールdgMP4Muxerを作成、公開してみました。

画面写真

例によって我が家のローカルルールに特化した部分があるのであまり汎用性はないかも知れませんが、逆にそのルール(素材ファイルの命名規則)に従っておけば、簡単確実にiOS(iPhoneやiPad)で認識する音声多重、チャプター入りMP4ファイルが作れます。

mp4boxやmp4chapsに渡すオプションを自由に設定できるようにしてあるので、細かく指定した人にはyambより便利なんじゃないかと思います。

ただ、字幕系についてはほとんど考慮してません。現状でも適当なオプションを書いてやれば使えるかも知れませんが、それでもダメな時は要望として挙げてもらえれば対応してみます。

MP4タグ一括書き込みツールを公開しました

前エントリでも触れた、MP4にタグ情報をAtomicPersleyを使って一括で書き込むGUIフロントエンドツールを公開してみました。我が家ルールでの運用を前提にしてあまり汎用性がない作りなので、どれくらい役に立つかわかりませんが、、、

現状、日本で役立たずなiTunes/iPhone/iPadの「テレビ番組」画面を自炊動画で活用した方はお試し下さい。

”画面写真”

 

かんたんな利用イメージはこちらのマニュアルにて。

VBアプリでmy.settingsを上書きアップデート後に引き継ぐ方法

Visual Studio 2008で作成したセットアップで新バージョンを上書きした場合に、my.settingsに保存された設定が初期化されてしまう件に対処する方法を調べました。

ここの掲示板のスレッド(英語)にナイスな情報がありまして、上書きインストールした場合、設定はAppData下に新規に作成され、旧バージョンのものが上書きされるワケではないと。で、それを引き継ぐメソッドがMy.Settings.Upgrade()のようです。メソッドについてはこちらが詳しいです。。

ただ毎回これを実行してしまうのも無駄だし一抹の不安もあるので、上記スレッドに書いてあるコード、

If My.Settings.UpdateRequired Then
           My.Settings.Upgrade()
           My.Settings.UpdateRequired = False
           My.Settings.Save()
End If

では、

  • my.settingsの中に「UpdateRequred」というBoolean値を作っておきTrueにしておく
  • まっさらな設定では当然Trueなのでこのルーチンが実行される
  • Upgradeメソッドを実行し、上記Boolean値をFalseに変更した後保存
  • 2回目移行は実行されない

という仕組みです。

ナイスです!

MP4ファイルにタグをつける

最近、テレビ録画ファイルの保存形式をDivXからH.264/MP4に移行中なのですが、iTunesやiPhoneで見るのに、いくつかのメタデータを付与しておいた方が便利だということがわかりました。

例えば、iTunesで動画ファイルのプロパティを表示した際の、

  • 「オプション」タブの「メディアの種類」を「テレビ番組」に
  • 「情報」タブの「名前」フィールドにサブタイトル
  • 「情報」タブの「トラック番号」フィールドに話数
  • 「ビデオ」タブの「番組」フィールドに番組名

などを入れておくと、プレイリストを作らなくても番組毎にまとめて表示されたりして見た目ナイスです。iPhone/iPod touch上での見え方はこちらが参考になります。

ただちまちまiTunes上でファイル毎に設定するのは億劫なので、ツールを自作してみました。

といっても、AtomicParsleyというコマンドラインツールのフロントエンドを作っただけなんですが。

dgMP4Tagger

上記公式ページに既にいくつかのGUIフロントエンドがリンクされてたんですが、Java実装だったり一括処理できなそうだったりリンク切れだったり散々だったので。

また、我が家のライブラリでは

01「ユウシャ世界に起つ!」.mp4

のように話数とサブタイトルを含んだファイル名書式に統一してあるので、ここからデータを拾って半自動でメタデータを生成してくれると便利だろうと。

そういう意味ではまり汎用性はないので、公開は要望があればって感じで。(→公開しました

以下、覚え書き。

  • iPhone上ではエピソード番号ではなくトラック番号が表示される(エピソード番号だけだと「不明」となる)。
  • AtomicParsley 0.9.0で上書きオプションを使うとファイルが壊れる。バージョンアップ経過を見守る。