Evernoteクリッピングの実装手順

今回、ATND暦 ver0.9.2でEvernoteへのクリッピング機能を追加しました。実は、以前SOICHAで実装したことがあるので今回は2度目になります。 当時はCocoa用のソースがiPhone用にカスタマイズされてなく改変しながら組み込んだのですが、最新バージョンではiP…

Twitterへのツイートの実装方法

前のエントリーで書いたようにiOS5のSDKに標準で追加されたためTwitterへのツイート機能の実装のハードルが下がり、1時間もあれば余裕で実装可能となりました。ATND暦で行なった実装した手順について書きます。 Twitter.frameworkのインポートプロジェクト…

ATND暦の新バージョンが公開されました

申請から予想以上に早くに公開となりました。ver0.9.1の新機能は下記になります。 ・イベントのツイート機能を追加 (iOS5+) ・イベントのメール送信機能を追加 ・ATNDユーザーのプロフィール表示機能を追加 ・カレンダーのスケジュール編集機能を追加 公開さ…

ATND暦バージョンアップ申請しました

先週公開したATND暦ですが、すぐさまiOS5がリリースされたので対応しました。それに合わせて、幾つか機能追加を行なっています。 公開はおおよそ1週から2週間後(10/28くらい?)になると思います。ATND暦 0.9.1の新機能 イベントのツイート機能を追加 (iO…

ATND暦リリースしました

「ATND暦」を公開しました。 ATND、Facebookのイベントをカレンダー形式に管理が行えるiPhone用アプリケーションです。 イベントをブックマークしたり、iPhoneの標準カレンダーに予定を登録したりと便利に使えるように工夫を凝らしています。 起動アイコンは…

TapkuLibraryを使ってiPhoneカレンダーアプリを作ってみる

仙台iOS開発者勉強会にてTapkuLibraryの紹介を行いました。 Presentation of TapkuLibrary View more presentations from Hidetoshi Mori このライブラリは色々な便利なカバーフローやグラフ、プログレスアラート等のViewの部品の集合なのですが、目玉として…

iOS3用にUIAlertView,UIActionSheetを使いやすく拡張する

iOSのUIKitにあるUIAlertView、UIActionSheetは非常に使い勝手が悪いと思います。 問題としてはControllerで複数使う場合にdelegateメソッドが被ってしまうことと、ボタン分岐がindex管理されている点にあると思います。 標準のクラスをそのまま使うとContro…

バーに配置する左三角矢印ボタンを作る

SafariではBackボタン、Forwardボタンとして左右向きの三角ボタンが配置されていますが、 UIBarButtonSystemItemの中ではUIBarButtonSystemItemPlayの右向きしか用意されていません。実際には、用途が異なるので画像を自前で用意してCustomButtonとして作成…

FacebookAPI (iOS SDK)を拡張する

iPhone Dev THK(東北・仙台)勉強会でセッションを行いました。Facebook APIをネイティブアプリとして動かすには幾つかのハードルがあり、実際にアプリに組み込んで使うにはiOS SDKを拡張しないと現実的でないので、その拡張をライブコーディングで行いました…

Xcode4のデバッグコンソールを別ウィンドウにする

Xcode4になってからデバッグウィンドウやコンソールウィンドウ等が1ウィンドウに統合されました。InterfaceBuilderやInstrumentsもXcode4に統合され、1つにまとまった感を印象付ける内容ですが、Xcode3のデバッグ、コンソールウィンドウは分かれてたからこ…

Xcode4を軽くする

ようやくXcode4で機能的には統合環境としてマトモになってきたかと思いますが、Xcode3に比べ格段に重くなっています。普段はCore2Duo 2GHz メモリ4Gのマシンで開発していますが、これでもXcode4を毎回再起動しながら開発している状況です。色々と設定を変え…

iPhoneのマイクで一定以上の大きさの音を検知する

Hack for Japan 7/30 ハッカソン仙台会場で「堪忍袋」というアプリの根幹を実装しました。 アイディアとして、いびきなどの音に反応して爆発音を鳴らすという単純な仕掛けですが、 肝はマイクで一定以上の音の大きさを検知することが必須となります。今回は…

コレクションオブジェクトのnilについて

コレクションオブジェクト NSArray、NSDictionary、NSSet ではnilを格納することができません。nilが終端オブジェクトとして扱われているためだと思いますがエラーにさえなりません。 id k1 = @"k1"; id k2 = @"k2"; id k3 = @"k3"; id o1 = @"o1"; id o2 = …

Xcode4のTODOタグを警告に出力する

Xcode3以前ではTODO等のタグコメントでファンクションメニューに表示されていましたが、Xcode4からメソッド内でのTODOタグが拾われなくなりました。 !!!以外は、メソッド外ではちゃんと拾われるんですが、どうも挙動不審な感じなのでおそらくXcode4のバグか…

NSStringのpropertyはcopy属性にするべき

NSStringを引数にもつセッタのproperty定義で retainとcopyで議論がありますが、Google Objective-Cスタイルガイドでは copyを推奨しているようです。セッタではNSStringをコピーする(Google Objectieve-Cスタイルガイド 日本語訳) @interface Foo : NSObjec…

バージョンアップの判定

インストール直後やバージョンアップ直後の起動時にだけ行ないたい処理があります。例えば、データ移行処理や初期値設定処理などです。 アプリのバンドルバージョンの取得は下記のコードで取得できます。 [[NSBundle mainBundle] objectForInfoDictionaryKey…

ShadowOffsetのy座標について

「グラフィックスコンテキストに影を設定する CGContextSetShadow 関数の挙動が変わっている - 24/7 twenty-four seven」で紹介されていますが、iOS3.2以降からshadow関連のoffsetのy座標の正負が反転しました。 iOS3.1以前もターゲットに含めている場合は、…

iOSのバージョンの判定方法

SDKの挙動はバージョンによってガッツリに変わったりします。 その際にiOSバージョンを取得して判定する必要が出てきます。 UIDeviceからバージョン情報が取得できます。 NSArray *aOsVersions = [[[UIDevice currentDevice]systemVersion] componentsSepara…

実機の判定方法

実機の機種を判別したい時は次のコードでハードウェア名が取得できます。 struct utsname u; uname(&u); NSString *hardwareName = [NSString stringWithFormat:@"%s", u.machine]; ハードウェア名(hardwareName)と実機の組み合わせは下記の通りです。 ハー…

デバッグ用マクロの活用

デバッグ時のみにログを出力したい等、私の場合はプリプロセッサマクロの設定とifdefで切り分けるという原始的な方法で対応しています。具体的には Prefix.pchで色々な種類のマクロを定義し、DEBUGフラグで出力を制御するようにします。 プロジェクトのBuild…

サウンドアクションによるデバッグ

iOSの開発を行う上でメモリリークが非常に気になるところです。 Objective-Cの参照カウンタの仕掛けでいづれは開放されるとしてもdeallocが走るタイミングは検知しておきたいものです。 Xcodeには便利なbreakpointの機能が用意してあり、deallocの確認にオス…

URLスキーム名がバッティングしたアプリの挙動

1ソースを複数アプリとして公開する場合に気をつけなければならないことの一つにURLスキームがあります。通常はPro版、Free版とした場合でもURLスキームは分けるべきですが、申請時に分けるのを忘れて痛い目をみました。 実際にどうなるかというと、AppStore…

新たな道を模索して

7年間勤めてきた株式会社フライトシステムコンサルティングを退職しました。 専門的にサービスを技術も含め追求したいというのが大きな理由です。 当面はフリーランスエンジニアとして活動するつもりです。 フライトは元々、基幹業務開発を主に行っていたと…

配列オブジェクトの動的削除

シーケンシャルオブジェクトから指定の値を削除する際のバグ例を書いてみます。 プログラミング慣れした人は簡単に気が付くと思いますが意外に多いバグだと思います。下記は配列の中から"a2"という値をすべて削除するjavascriptの例です。 var a = new Array…

同nameにおける配列オブジェクト

ここ最近、少し鎮火したので久しぶりに書きます。ある程度のWeb開発経験者なら必ず経験したことがあるJavaScriptバグだと思いますが 今回、また目にする機会があったので記述します。 <html> <head> <script language="JavaScript"> <!-- function allCheck(a) { for (i=0; i<a.length; i++) { a[i].che</script></head></html>…

ensure句におけるreturnの問題

前回エントリーした「finally句におけるreturnの問題」についてrubyの場合はどうなるのか検証してみました。javaにおけるtry-catch-finallyは、rubyでのbegin-rescure-ensureと同じだと思っています。 def method puts "3: method start" begin raise Except…

finally句におけるreturnの問題

finally句でreturnしたコードを見かけることがあります。eclipseで開発している場合、finally句でreturnを記述すると警告が出るのですが何が問題なのかあまり知られていないようです。 try-finallyにおける様々の位置のreturnの検証 try-finallyでreturnする…

中括弧省略の弊害

可読性を落とすと思われるif文の中括弧省略についてです。 Javaにおいてif文の中括弧を省略した場合、その次の1文だけが対象となります。 if ( 式 ) a = 1; // 式が真の場合実行 b = 2; //必ず実行 上記程度であれば第3者でも判断できるのですが、次の場合…

デフォルトコンストラクタ自動生成の謎

半年位前に経験したバグなのですが、突然あるクラスのデフォルトコンストラクタが見つかりませんという内容のExceptionが発生しました。 原因は他プロジェクトのjarに梱包された型をデフォルトコンストラクタでインスタンス化していたのですが、このjar側の…

SAXパーサ作成時のバグ

以前作成したJavaのSAX方式(ストリーム読込)のXMLパーサのトラブルメモ。 長いXMLを読むだけであればメモリパフォーマンスを考慮してSAXパーサを使用しますが、ちょっと意識していないとバグ埋め込んでしまうかも知れません。 サンプルコード public class P…