Hatena::Groupiphone-dev

iPhone / iPod touch プログラミングメモ

2011-04-22 (Fri)

MacAppStoreにリリースした話 14:00  MacAppStoreにリリースした話 - iPhone / iPod touch プログラミングメモ を含むブックマーク

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」を参考にして海賊版対策をやるといいんだって。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20110422

2011-03-09 (Wed)

アプリ開発をvimでやってる話 01:21  アプリ開発をvimでやってる話 - iPhone / iPod touch プログラミングメモ を含むブックマーク

先日 @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とかと連携する場合にも有用だと思ってるんだけど、ベタ置きの人が多い気がするんだよねぇ。他の人はあんま気になんないのかな。

実際好みの問題だと思いますけど、こうしてますよってことで。

以上です。

あとで気付いたことがあれば追加修正するかもしれません。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20110309

2011-01-31 (Mon)

UIDocumentInteractionController で、特定の拡張子のファイルを開けるアプリがあるかどうかを調べる方法 04:42  UIDocumentInteractionController で、特定の拡張子のファイルを開けるアプリがあるかどうかを調べる方法 - iPhone / iPod touch プログラミングメモ を含むブックマーク

任意の拡張子のファイルを開けるアプリがある時に、任意のボタンを出したりしたいじゃないですか。

結論から言うと、現時点ではこのための便利メソッドはまだないようです。

今日は、南東京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にアップデート 22:43  GMのやつをiPad4.2.1にアップデート - iPhone / iPod touch プログラミングメモ を含むブックマーク

NDAなやつをインストールしていたiPadなんですケド、この前の正式リリースの時にアップデート出来るかと思いきや、最新バージョンだとかって言われて全然アップデートなんて出来る気配がない、という場合は以下の手順で普通にアップデートできます。

  • ipswのファイルをゲットする
  • Optionキーを押しながら Check update するとファイルを選択する画面が開くので、ゲットしたipswを選択

ipswファイルは、3.2のiPadをつなぐと勝手にダウンロードして Library/iTunes/iPad Software Updates 以下に置いてくれます。それが出来ない場合は…、それはよくわからんっす、なかなか役立たずの記事でゴメン。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20101124

2010-11-14 (Sun)

SkyBook二周年で半額中 12:18  SkyBook二周年で半額中 - iPhone / iPod touch プログラミングメモ を含むブックマーク

もうすぐSkyBook登場から二年になろうとしています。デベロッパ歴も二年を越えた。ということで、少しのあいだ SkyBook が半額になっています。

この一年はTV CMやらDReaderやら色々ありました。勉強会もずいぶん続いてます。ここまでガッツリめり込むなんて考えてなかったのでビックリですよ…。

まだまだ頑張って参りますので、これからもみなさんどうぞよろしくお願いします。

paellapaella2010/11/24 23:27おめでとうございます!これからも頑張ってください。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20101114