タグ

ブックマーク / son-son.sakura.ne.jp (12)

  • sonson@Picture&Software - [iPhone SDK] PushNotificationのバグ?

    ※バグ再現方法 ・PushNotificationで通知を受けるアプリを作り,Developmentの証明書を使って,通知を受け取る. ・そして,そのアプリを削除する ・Distributionの証明書を使って,AdHocビルドでビルドし,実行する ・アプリケーション起動中にSpringBoard毎クラッシュする どうやら,DevelopmentとDistributionの証明書を切り替えて,実機でテストすると,PushNotification対応アプリはクラッシュする模様です. んで,偶然発見した対処療法は, 1.自分で別のプロファイルのPNSアプリを作って,インストールし,PNSを使う 2.AppStoreで,上と同じようにPNSを使うアプリをインストールし,PNSを使う 3.iPhoneを丸ごとリストアする です. 2番目の方法は,AppleのBBSにもありましたし,PushNo

  • sonson@Picture&Software - [iPhoneSDK] iPhoneOS2.2.1→3.0で注意したい5つのポイント

    1.アクセサの仕様変更 クラスのアクセサがより厳格になった.派生元のクラス上でアクセサを定義している状態で,子クラス上でsynthesizeでアクセサを定義するとコンパイラ側でエラーとなるようになった.まぁ,これは,コーディングの仕方が悪いのだが,2.2.1ではコンパイラが通ってしまい,さらに子クラスのアクセサが呼ばれるような仕様になっていたっぽい. 問題はここからで,2.2.1で作ったバイナリ(2.2.1バイナリとする)は,上のエラーをすり抜けた状態となっている.2.2.1ではコンパイラでエラーとならないためだ.この2.2.1バイナリをOS3.0上で実行すると,3.0では仕様上不適当なアクセサがコールされたことにより,アクセサが返す値がnilになってしまうのだ.ハマった. 2.カメラ周り,UIScrollerView周り カメラビューの仕様がかなり変わった.UIImagePickerVi

  • sonson@Picture&Software - MacOSXでNTFSのドライブに読み書きする

    MacFUSEとNTFS-3Gを使う. MacFUSE ・http://code.google.com/p/macfuse/ NTFS-3g ・http://www.ntfs-3g.org/ ※NTFS-3G for Mac OS Xからダウンロード 二つを両方インストール. これで,Windowsとの巨大なUSB-HDDドライブも共有できます.

  • sonson@Picture&Software - [iPhone SDK] SecRandomCopyBytesはiPhoneOSのみ

    乱数をセキュアに発生させられるらしい,SecRandomCopyBytesは,iPhoneOSでしか,実装されていない. Simulatorでのデバッグ用に,プリプロセッサで分岐させて,ビルドするとよい. uint16_t randomized_code = 0; #if TARGET_IPHONE_SIMULATOR randomized_code = 0; #else SecRandomCopyBytes(kSecRandomDefault, sizeof(randomized_code), (uint8_t*)&randomized_code); #endif

  • アプリ高速化のための5つのノウハウ

    sonsonの経験則です. 1.大量のメモリを使わない,メモリの確保と解放の繰り返しは避けて,再利用 ・メモリを大量に使用すると目に見えて実行速度が低下する.また,memoryWarningによる割り込みのメッセージが多発する可能性があるため,その処理にも時間がかかる. ・TableViewでセルの再利用APIが提供されているようにインスタンスの確保と解放の繰り返しは大きく速度に影響を与える.(SDKが出る前,Jailbreak時代は再利用関数を自前で作ってたなぁ・・・) 2.恒久的に使いそうなオブジェクトはなるべく保持する ・利用しているクラスにメモリリークがあると,それの確保・解放を繰り返している内にメモリがどんどんいつぶされる.怪しいクラスは特に注意して使うようにする.まぁ,なんら抜的な解決策ではない気もしますが(アップル頼むよ). 3.背景に透明色を使わない ・ついつい

  • sonson@Picture&Software - [iPhone SDK] クラスが持っているメソッドを見る

    メモ書きです. クラスのメソッドは,これで出力できる. #import <objc/objc-runtime.h> ------ unsigned int outCount; Method *p = class_copyMethodList( classObject, &outCount ); int i; for( i = 0; i < outCount; i++ ) { SEL sel = method_getName( *(p+i) ); NSLog( @"%s", sel_getName(sel) ); } objc-runtimeを使えば,色々ハックできますね.ハイ.

  • sonson@Picture&Software - [iPhone SDK] 多数の文字列を高速に書き出す試み

    2tchではスレッドデータを保存する必要がある. たとえば,今のv4のフォーマットだと,レイアウト情報込みのスレッドのデータは,1000〜1500個くらいのデータくらいからなる. これをそのままNSCoderやNSDictionaryで書き出すと遅い. Obj-Cのクラスのallocも少ないし,直接ファイルに書き出せることから,バイナリ形式で書き出すと爆速になると予測. 反面,バイナリ形式は,当然汎用性が下がるし,コードやデータのの可搬性も下がってしまう(まぁ,でもどうせ2tchでしか読み書きしないわけだから,バイナリでもさして将来的には困らないだろう). そこで,速度を上げるために直接バイナリ形式で書き出してみた.100kB〜200kBくらいのデータだと,バイナリで書き出した方が6倍くらい速かった. 今回は,int型とNSStringのデータだけだったので,fread, fwriteで読

  • sonson@Picture&Software - [iPhone SDK] オリジナルapplicationBadgeを作ってみた

    アプリケーションアイコンとか,Tabbarには,OS純正のバッジが提供されているが,自由に使えるバッジを表示させるAPIは実はSDKで提供されていない.(例えば,カレンダーアプリの招待の未読数などにも小さいバッジはあるが,APIは提供されていないっぽい) ソースコードをダウンロード

  • sonson@Picture&Software - [iPhone SDK] UITextFieldを持つUIAlertView

    色々なサイトで議論されているが,UIAlertViewにUITextFieldを簡単に追加する術がない. 実は,Private methodで, - (UITextField*)addTextFieldWithValue:(NSString*)value label:(NSString*)label; - (UITextField*)textFieldAtIndex:(NSUInteger)index; - (NSUInteger)textFieldCount; - (UITextField*)textField; 以上のようなメソッドが用意されているのだが,Undocumentedなため,うかつに使えない. Jailbreak時代は使っていたのに・・・・(多分画面を回転させたときの挙動を考えて,APIを公開することを躊躇しているんじゃないかと推測.横向きの時は,そのまま表示すると,テ

  • sonson@Picture&Software - [iPhone SDK] 最適化PNGファイルの動的作成

    iPhone Application Programming Guide(developer only)にもあるように,PNG画像は圧縮した方がいいらしい. XCodeでリソースとして使用するPNG画像は,自動的に圧縮,最適化される.最適化はビルド時にcopypngというコマンドラインツールで自動的に処理される.以下,XCodeの設定項目.デフォルトでPNG画像は圧縮される. UIImageは,最適化PNGで作成したものの方が,描画が速いことがわかっている.あらかじめリソースとして使用するPNG画像は問題ないのだが,ネット経由でダウンロードしたJPEG,GIF,PNG画像は,そうではない.そこで,ダウンロードした画像や動的に作成した画像を最適化PNGに変換する必要がある. そこで,takiuchi氏が最適化PNGを解析し,それを作成するコードを作ってくれた(すばらしい).しかもMIT Li

  • sonson@Picture&Software - [iPhone SDK] UIVIewを再帰でdumpする

    UIViewに含まれるViewをダンプするときに使う void dumpSubview( UIView* view ) { NSLog( @"%s", class_getName([view class]) ); for( UIView *subview in [view subviews] ) { dumpSubview( subview ); } } 前に紹介したクラスのメソッドをダンプする関数と合わせて使うとよい? void classDump( Class classObject ) { unsigned int outCount; Method *p = class_copyMethodList( classObject, &outCount ); int i; NSLog( @"%s", class_getName( classObject ) ); for( i = 0; i

  • sonson@Picture&Software - [iPhone SDK] Avoid target="_blank" problem

    これは,@norio_nomura氏のハック. すばらしいハックです. 実は,UIWebViewのバックグラウンドでは,クリックされたりすることで,新しいウィンドウが生成される前に,UIWebViewWebViewDelegateというデリゲートオブジェクトに対して,webView:createWebViewWithRequest:というメソッドがコールされる.実は,UIWebViewが新しいウィンドウを開くtarget="_blank"のときにナビゲーションがうまくいかないのは,このメソッドが実装されていないためなのである. このメソッドを,新しいウィンドウを自分自身に指定するようなメソッドをCで実装し,Objective-Cの動的結合を利用して,無理矢理,UIWebViewWebViewDelegateにねじ込む. static id webViewcreateWebViewWith

  • 1