Loggerライブラリを公開しました。rizumita/CTFluentLoggerまだアルファ段階なので、開発時のみご利用ください。Fluentd+elasticsearch+Kibana3が動作するVagrant+Chefも入っているので、簡単に使い始められるようになっています。iOSを御覧ください。commentiOSのバージョンチェック用マクロiOSでバージョンのチェックをいろいろ行いたかったので、便利なマクロを探してみた。Overflowから。これを.pchファイルに記述すると便利。commentReactive-Evernote-SDK-iOSを作りましたReactive-Evernote-SDK-iOSを作りました。SDKをReactiveCocoaで使えるライブラリーです。GitHubで公開しています。下記のように使います。createSignal:]で既存のEDAM系のクラスを呼んでいます。listNotebookとlistTagsしか試してないので、お暇な方は試してバグ報告よろしくです。podspecもあるのでCocoaPodsで簡単に導入できると思います。SDKを利用する簡単にAdhocアプリを配布できるTestFlightからSDKがリリースされました。セッションクラッシュリポートアプリ内での質問チェックポイントリモートロギングアプリ内アップデートといった機能があるようです。組み込んでみたいと思います。SDKのページからSDKをダウンロードして解凍します。libTestFlight.aとTestFlight.hをXcodeプロジェクトに追加します。“TestFlight.h”を記述します。ADHOCのように分岐するといいと思います。http://testflightapp.com/dashboard/team/にアクセスしてeditをクリックしてチームトークンを取得します。takeOff:@”チームトークン”];}と記述します。チームトークンのところは書き換えてください。結果はすべてビルドページで閲覧できます。ProductをNoに設定します。アプリがクラッシュするとビルドページに表示され、スタックとレースなどを確認することができます。passCheckpoint:@”CHECKPOINT_NAME”];とします。チェックポイントを通過したデバイスの割合をビルドページで確認できます。openFeedbackView];とします。フィードバックが送信されるとビルドページで確認して、返信することができます。commentUINavigationControllerのアニメーションをカスタマイズする方法UINavigationControllerでビューコントローラーをpush/popするときのアニメーションはスライドです。このアニメーションをカスタマイズしてみます。ここではフェードを行ってみます。}pushする対象はSubViewControllerです。現在のビューと同じサイズに設定して、透明にして、現在のビューにaddSubviewします。アニメーションですが、alphaを1.0にして不透明にします。アニメーションが完了したらpushViewController:animated:でpushを行います。animatedにはNOを指定して、デフォルトのスライドアニメーションを行わないようにします。pop後に表示される前のビューコントローラーを取得します。viewControllers配列の後ろから2番目に入っています。このコントローラーのビューのalphaを0.0に設定して透明にして、現在のコントローラーのビューに載せます。アニメーションも同様にalphaを1.0に設定して、不透明にします。アニメーションが終了したらpopViewControllerAnimated:でpopします。これもNOを指定してデフォルトアニメーションを行わないようにします。このように、UINavigationControllerでのフェードアニメーションは、push/popはどちらも、これから表示するビューを上に載せて、透明から不透明にアニメーションを行い、アニメーションが終了したタイミングでpush/popを行うことになります。commentスレッド毎にNSManagedObjectContextを管理する基本的にはNSManagedObjectContextはスレッド毎に作成して利用しなければいけません。以下は、その為にスレッド毎にContextを作成して管理するためのコードです。複雑なアプリでなければ、この管理法で十分でしょう。シングルトンなManagerクラスでコンテキストを管理する方法は簡単ですが、スレッドを多用する場合はスレッド毎に管理する方が良いでしょう。save:&error]のように、クラスメソッドを呼びます。保存するとNSNotificationでコンテキスト自身のmanagedObjectContextDidSave:が実行され、メインスレッドのコンテキストに変更が反映されます。スレッド毎に自動的にthreadDictionaryにNSManagedObjectContextを登録し、スレッドが破棄されるとコンテキストも破棄されるようになっているので、明示的にコンテキストを破棄する必要はありません。commentiOS5はサードパーティにとってどのような意味があるかiOS5の標準アプリが充実して、サードパーティつぶしだ、いや開発者ががんばればいいんだ、というような記事が散見されますが、私はそのようなレベルの話ではないと考えています。私の知人にiPhone4ユーザがいます。その人のPCはネットに繋がっていません。Storeからアプリもほとんどダウンロードしていないようです。iTunesすら知らないのです。今後はiPhoneとiPadだけしか使わないという人も現れるでしょう。(既に存在するかな)そのような人がiPhoneを使うことを考えると、自然と標準アプリの充実やiCloudに行き着くと思うのです。私は、AppleがiOS5はそのような「ライトユーザ」に向けで開発したものではないかと考えています。ある人の言ですが「新しい携帯としてスマホを選ぶ」という状況になりつつあり、iPhoneもAndroidも同じような状況ではないでしょうか。AppleはiOS5でサードパーティに「ライトユーザ」という新しい顧客を連れてきてくれます。サードパーティではないのです。Apple、というのがiOS5がサードパーティにとって意味するところではないでしょうか。commentUIAlertViewとUIActionSheetをblocksで使いやすくするUIAlertViewやUIActionSheetはdelegateで選択結果を取得して処理を分岐します。このdelegateでというのが結構面倒ですが、iOS4からはblocksが利用できるので、blocksを利用すればUIAlertViewをつくると同時にボタンに対応する動作も記述できて使いやすくなります。ネット上にはblocksでの拡張情報がいくつかありますが、以下がネットの情報を元に私が作成したblocks版UIAlertViewとUIActionSheetです。show];のようにします。キャンセルタイトルは指定しなければキャンセルボタンは作成されません。キャンセルボタンコールバックを指定しなくても動作します。callback:(CTActionSheetButtonCallback)callbackで行います。テストは不十分なので、バグがあればコメントよろしくです。commentUIButtonのハイライトを持続する方法UIButtonは標準動作ではタップするとハイライト(青くなる、もしくは画像を設定している場合は黒っぽくなる)した後に元の状態に戻る。これをハイライトしたままにするには以下のように一瞬時間を置いて、ハイライトを設定し、enabledをオフにする。}この方法ではボタンのタッチには反応しなくなるのでトグル動作は出来ない。ハイライトを消してタッチに反応するようにするには、highlighted=NO/enabled=YESを設定する。トグル動作が可能かUITapGestureRecognizerを設定してみたが、やはりenabledがNOの場合はジェスチャにも反応しないので、トグル動作にはならなかった。Agreementを更新するといいXcode4が出ました。ネットで調べたらキーチェーンがどうちゃらこうちゃら。その通りに調べてみても問題なし。Agreementのアップデートをしてくれと表示される。ハッ!と思って、アップデートして、再度Xcode4をダウンロードしてみたら正常に開始。Agreementの更新でダウンロードができたと返事が。Agreementの更新をしてなかったのが原因みたい。