好評販売中!!
2011-04-22 (Fri)
■ MacAppStoreにリリースした話 
Skypeのチャット機能は過去ログを表示するのが遅くて不便だったので、過去ログをさくさく見るためのソフトを作ってみました。
そしてサブミットして、結構長い時間かかりましたが今日RfSになりました。
チャット機能を使ってる人は便利だと思うんでどうぞ。いま無料ですが、そのうち有料にします。Skype for Macの5.1でしか動作確認してないんで、古いのだと動かないと思う。
以下、リリースするまでの流れ。あんまり整理してないですけど参考までに。
まずはアカウントの取得。
すでにiOSデベロッパなので、既存のアカウントに追加する形で購入する。\10800。しばらく待つと、メールが来るのでアクティベーションとか。
MacDevCenterの画面が変化しているので、マニュアルに目を通す。(Get Your Mac APps Ready for the Mac App Storeあたり)
次は証明書まわり。
Developer Certificate Utility で作業
Mac App IDsはワイルドカードで適当に「nantoka.*」みたいな。
その後Mac Certificatesで証明書を作成。
キーチェーンで「認証局に証明書を要求」ってやって証明書要求を作る。この辺はiOSと一緒。チェックを二つ入れるとうまくいかなかったので、片方ずつ二回作業するといい。
んでもって、最終的に「Mac App Software Certificate」と「Mac Installer Package Certificate」の二つの証明書が入手できる。
そしてInfo.plistまわりでiOSと違うなって部分。Submitting to the Mac App Store を見ながら準備すれば大丈夫でしょう。
| NSHumanReadableCopyright | コピーライト |
| LSApplicationCategoryType | アプリのカテゴリ |
| CFBundleShortVersionString | バージョン番号 |
| CFBundleVersion | ビルド番号 |
Xcodeのビルド設定もちょっと変更しないといけない、らしい。
| デバッグ情報フォーマット | DWARF dSYMファイルを選択 |
| 有効なアーキテクチャ | PPCを外す |
| コード書名ID | 3rd Party Mac Developer Application |
Xcodeで「ビルドとアーカイブ」が選択できなくてはまった。どうやら、Application toolsというのを入れておけばいいらしいんだけど、どこから入手できるのかさっぱり見付ける事ができなかった。そもそも、これはなんだ。以下、直リンク。
そして有料ソフトの場合は、「Validating APpStore Receipts」を参考にして海賊版対策をやるといいんだって。
2011-03-09 (Wed)
■ アプリ開発をvimでやってる話 
先日 @cocopon に「vimでアプリ開発したいんだけど、どうやってるか教えてくれコノヤロー」とは言われなかったけど、教えて欲しそうにしていたのに教えることが出来なかったので、ここに書いておきます。
まあ問題はプラグインなんだよね。便利プラグイン入れておけば、快適に開発できます。この辺がおすすめ。
cocoa.vim
とりあえずこれ。これは入れた方がいい。
キーマップの追加とか、オムニ補完の強化やらをやってくれる。
Cmd-Rでビルド出来たり\Aで.hと.mを行き来出来たり、色々あるので詳しくはdoc見てね。
Cmdキーのキーマップはgvimじゃないと動かなそうなので、ターミナルラブなんかの人は ftplugin/objc_cocoa_mappings.vim あたり見ながら自由にマッピングを変更するのがよいかと思います。ぼくは ga で.hと.mを行き来できるようにしていたりとかしてますよ。
nn <buffer> <silent> ga :cal<SID>AlternateFile()<cr>
同じく objc_cocoa_mappings.vim 内にある BuildAnd が、自分の環境だとうまく動かなかったので、書き換えてます。これは前書いたのでこちらを参照してください。
あとは、オムニ補完…。実はあんまり使ってないのでわからんのだけど、インサートモードで<C-x><C-o>かF5すれば便利に補完してくれます。辞書がちょっといまいちのように見えるのよねぇ。
AutoComplPop.vim
アプリ開発からは少し離れるけど、開発のお供に超必須な AutoComplPop も入れた方がいい。補完を便利にしてくれるやつ。
テキストを入力したそばから入力内容に見合った候補をリストで表示してくれるので、長いメソッド名とかいちいち全部入力しなくて済むから楽。ま、正直この辺はXcodeより劣る部分ではあるんで、vim大好きっ娘で進むかXcodeに戻るかはこの辺が分かれ道なのかなと思います。
UIKitのクラス名とかメソッド名とかを列挙したファイルを適当な所に置いといて、.vimrc で指定しておくといいです。こんな感じにやってる。
autocmd FileType objc let g:acp_completeOption = '.,w,b,u,t,i,k~/.vim/dict/objc.dict'
確か、所さんあたりが辞書の作り方を解説していたような気がするんだけど見付からない…。
こっちのブログに辞書を置いてくれてる人がいらっしゃるので、ありがたく使わせてもらいましょう。
新しいメソッドとかは自分で追加しないといけないけど、自分の場合は必要になった時に適宜追記したりしています。辞書ファイルを共有する仕組みってどっかに無いのかなー。Dropboxで共有してえ。
snipMate.vim
スニペット機能を実現するsnipMate。ようするにテンプレートですね。
例えば @sel と入力した後にタブキーを押すと、自動で「@selector()」と入力されて()の中にカーソルが移動します。そのまま目的のメソッドを入力してもう一度タブを押すと ) の右側にカーソルが飛びます。入力する内容を連続して書くと「@selタブhogeタブ」で「@selector(hoge)」という結果になります。
もう一例。alloc+タブキーで、「[[ alloc] init];」と入力されて、allocの前の位置にカーソルが移動します。そのままUIViewとか適当に入力してからタブを押すと、今度はカーソルがinitの後ろの位置に移動するので、WithFrameなどと入力してタブキーを押すと最終的にカーソルは ; の後ろにきます。という感じ。こっちも連続して書くと「allocタブUIViewタブWithFrame:CGRectZeroタブ」で「[[UIView alloc] initWithFrame:CGRectZero];」が入ります。文章で説明しづらいね。わかりにくくてすみません。
他にも snippets/objc.snippets を見るとかなり多彩なルールがあることがわかるので、覗いてみるといいでしょう。自分でルールを追加するのもすごい簡単なので、好みにカスタマイズするとスーパーハカーにも近ずけるんじゃないかと思います。snipMateが使いこなせるとかなり楽。
Xcodeについて
プラグインの話は終わって、Xcodeの方で注意していることとか。
Xcodeでクラスファイルを色々グループに分類しても、実在のファイルは全部Classesの下に入っちゃうじゃないですか。これだとターミナルとかから操作するにはちょっとわかりにくいよねーと言うことで、必ず実フォルダを作っています。
始めにプロジェクトを作った時にやるのは Classes の下に controllesr, models, views とフォルダを作って、それをXcodeにドラッグ&ドロップして、そこにクラスを追加していくようにしています。こうするとわかりやすくて何か幸せ。
これはgitとかと連携する場合にも有用だと思ってるんだけど、ベタ置きの人が多い気がするんだよねぇ。他の人はあんま気になんないのかな。
実際好みの問題だと思いますけど、こうしてますよってことで。
以上です。
あとで気付いたことがあれば追加修正するかもしれません。
2011-01-31 (Mon)
■ UIDocumentInteractionController で、特定の拡張子のファイルを開けるアプリがあるかどうかを調べる方法 
任意の拡張子のファイルを開けるアプリがある時に、任意のボタンを出したりしたいじゃないですか。
結論から言うと、現時点ではこのための便利メソッドはまだないようです。
今日は、南東京iPhone開発者勉強会 5回目 というやつに参加してきました。
iPhone開発界の神`k_katsumi`氏が UIDocumentInteractionController について発表してくださるというので、これはチャンスと参加して上記の件について質問してきましたが、やっぱ無いみたいです。内部にプライベートなやつでありそうだよねーなんて話してました。
といいつつも…。いまある駒でこの要求を満たしたい場合は、以下のようにすれば一応動作することは確認しています。
+ (BOOL) hasExt:(NSString *)ext { NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"check.%@", ext]]; UIDocumentInteractionController *doc = [UIDocumentInteractionController interactionControllerWithURL:url]; BOOL success = [doc presentOptionsMenuFromRect:CGRectZero inView:[UIApplication sharedApplication].keyWindow animated:NO]; if(success) [doc dismissMenuAnimated:NO]; return success; }
ただし、なんというか無理矢理感が非常に強いので、あんまりおすすめしません。自分のならいいけど、人のアプリの開発の場合は特に怖くて使えません。
例えば上の presentOptionsMenuFromRect を presentOpenInMenuFromRect にすると、iOS4.0 場合はメニューが表示されちゃいます。なかなか厄介な話です。
眠いから寝ます。オヤスミ。
2010-11-24 (Wed)
■ GMのやつをiPad4.2.1にアップデート 
NDAなやつをインストールしていたiPadなんですケド、この前の正式リリースの時にアップデート出来るかと思いきや、最新バージョンだとかって言われて全然アップデートなんて出来る気配がない、という場合は以下の手順で普通にアップデートできます。
- ipswのファイルをゲットする
- Optionキーを押しながら Check update するとファイルを選択する画面が開くので、ゲットしたipswを選択
ipswファイルは、3.2のiPadをつなぐと勝手にダウンロードして Library/iTunes/iPad Software Updates 以下に置いてくれます。それが出来ない場合は…、それはよくわからんっす、なかなか役立たずの記事でゴメン。
2010-11-14 (Sun)
paella2010/11/24 23:27おめでとうございます!これからも頑張ってください。