サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
son-son.sakura.ne.jp
iPhone,MacOSXのアプリケーションは,Localizable.stringファイルと,APIのNSLocalizedStrings()を使うことで簡単にローライズできる. たとえば,ソースコード中で以下のように書き, NSString* message = NSLocalizedStrings( @"key" , @"comment" ); バンドルのリソースファイルを以下のようにしておく. --- Japanese.lproj/Localizable.strings "key" = "キー"; --- English.lproj/Localizable.strings "key" = "Key"; こうすることで,変数messageには,実行時の言語環境に基づいて,文字列が入力される. ソースコードが3ファイルくらいだと,このNSLocalizedStringsの抜き出しも簡
色々なサイトで議論されているが,UIAlertViewにUITextFieldを簡単に追加する術がない. 実は,Private methodで, - (UITextField*)addTextFieldWithValue:(NSString*)value label:(NSString*)label; - (UITextField*)textFieldAtIndex:(NSUInteger)index; - (NSUInteger)textFieldCount; - (UITextField*)textField; 以上のようなメソッドが用意されているのだが,Undocumentedなため,うかつに使えない. Jailbreak時代は使っていたのに・・・・(多分画面を回転させたときの挙動を考えて,APIを公開することを躊躇しているんじゃないかと推測.横向きの時は,そのまま表示すると,テ
AppStoreのダウンロード,売り上げの集計ソフトを発見.しかもフリー.すごい.ダウンロードはこちら. 各ソフト毎の売り上げとダウンロード数,各国での売上比率を表示できる. 売り上げの通過は,ポップアップで設定できて便利である. 後,このソフトには,iPhone版も用意されており,ソースコードがGoogle Codeで公開されている. Mac版をもうちょっと拡充したいですな.アプリ毎にテーブルを変更するような感じで. うーむ.時間がないw
アプリケーションアイコンとか,Tabbarには,OS純正のバッジが提供されているが,自由に使えるバッジを表示させるAPIは実はSDKで提供されていない.(例えば,カレンダーアプリの招待の未読数などにも小さいバッジはあるが,APIは提供されていないっぽい) ソースコードをダウンロード
2tchではスレッドデータを保存する必要がある. たとえば,今のv4のフォーマットだと,レイアウト情報込みのスレッドのデータは,1000〜1500個くらいのデータくらいからなる. これをそのままNSCoderやNSDictionaryで書き出すと遅い. Obj-Cのクラスのallocも少ないし,直接ファイルに書き出せることから,バイナリ形式で書き出すと爆速になると予測. 反面,バイナリ形式は,当然汎用性が下がるし,コードやデータのの可搬性も下がってしまう(まぁ,でもどうせ2tchでしか読み書きしないわけだから,バイナリでもさして将来的には困らないだろう). そこで,速度を上げるために直接バイナリ形式で書き出してみた.100kB〜200kBくらいのデータだと,バイナリで書き出した方が6倍くらい速かった. 今回は,int型とNSStringのデータだけだったので,fread, fwriteで読
NSDictionaryを使用する方法とオリジナルのクラスを設計する方法の二つをデータのシリアライズと保持に使える. 2chのsubject.txtデータとすると, NSDictionaryを使ってやると,こんな感じ. NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: title, @"title", path, @"path", [NSNumber numberWithInt:dat], @"dat", [NSNumber numberWithInt:res], @"res", nil]; クラスの方は,こんな感じか. @interface SubjectData : NSObject { NSString *title_; NSString *path_; int dat_; int res_; } @pr
私は激しくSQLiteを誤解していました.その誤解を並べてみました. 1.INSERTは遅くない INSERTクエリは,トランザクションでまとめる.トランザクションとは,一旦,他からの処理をロックして,まとめて登録するような感じの処理らしい. 多くのデータをINSERTするときは, sqlite3_exec( database, "BEGIN", NULL, NULL, NULL ); for(){ insert---- } sqlite3_exec( database, "COMMIT", NULL, NULL, NULL ); とする. 2.VACUUMして,メモリを効率よく使う SQLiteは,削除した項目が残る.定期的にVACUUMをして,残ったゴミを掃除する. iPhoneでは,使えるメモリが少ないので,これはかなりクリティカルな問題となる. ただし,経験的にVACUUMはゴミが
iPhoneがガーベッジコレクションに対応してくれれば,こんなことしなくていいのだが・・・.@property (nonatomic, retain)の挙動を調べてみた. @property (nonatomic, retain)は,新しく外部からオブジェクトをセットすると,古いオブジェクトには,releaseが渡される. ただし,dealloc時に自動的にreleaseは投げられないので,dealloc時には,プロパティにreleaseを自前で投げる必要がある. - (void) setHoge:(id)newValue { if( hoge_ != nil ) [hoge_ release]; hoge_ = newValue; } セッターの内部はこんな挙動になってるはずだ. @Psychsさん,色々教えていただき,ありがとうございました.
絵文字アドレス帳をさらにちゃんと「ひらがな」を振ってみました. 絵文字アドレス帳 データ参考元リンク - http://trialgoods.com/emoji/?career=sb&page=1 データ参考元リンク - http://creation.mb.softbank.jp/web/web_pic_01.html 以下が入力できる項目. 画像は著作権が絡みそうなので,今回は非公開です.連想しながら使ってください. おとこのこee8081E001 おんなのこee8082E002 きすまーくee8083E003 おとうさんee8084E004 おかあさんee8085E005 ようふくee8086E006 ぶーつee8087E007 かめらee8088E008 でんわee8089E009 けいたいでんわee808aE00A ふぁっくすee808bE00B ぱそこんee808cE00C ぱ
さて. アドレス帳に絵文字を入れると,打ち込めることが判明したが,「ふりがな」がないと不便すぎる.しかし,500個近くある絵文字すべてに手作業で「ふりがな」を振るなんて・・・俺にはできねぇ.というわけで,自動的に作業することを考えた.手順は,インターネット上のリソースをたくさん利用させていただきました. 絵文字のコード,タイトルがセットになったデータはたくさんあるのだが,「ひらがな」のタイトルがセットになったデータがない.しかし,世の中にはすごいものがある.ホームページの漢字を全部自動的にひらがなにしてくれるサービスがあるのだ. ・絵文字,コード,タイトルの一覧でーた →http://trialgoods.com/emoji/?career=sb&page=all ・漢字→ひらがな変換サービス →http://www.learn-japan.org/ これで絵文字のタイトルが「ひらがな」つ
iPhoneのCPUはarmです. 浮動小数点の計算はどの程度のものなのか. そして,浮動小数点の計算が遅いなら,固定小数点はどうなるだろう. ということで,ベンチマークを取ってみた.お題は. ※512x512のグレースケールのレナ画像に分散1.5のガウシアンをたたみ込む ・分散1.5のガウシアンフィルタの窓の大きさは,5x5で打ち切った ・端のたたみ込みは無視した→実質たたみ込みの計算回数は508x508 ・つまり,1回の計算で25次元ベクトルの内積計算を508x508回することになる. ※以上のたたみ込み計算を100回繰り返し平均を測定 ・フィルタ作成時間も含めた ・固定小数点の場合は(float→255段階変換のための)量子化テーブル作成時間も含めた ※結果 ・armでビルド →浮動小数点 0.738466 seconds →固定小数点 0.503873 sec
hideHere sonson カテゴリ 写真 ユーティリティ バージョン 1.0 公開日 審査中 価格 115円 特徴 ・撮影した写真をFlickrのような写真共有サイトにアップロードするとき,顔や個人情報を隠したいときがありませんか? ・hideHereは,そんなときに撮影した写真・ダウンロードした画像にモザイク・スタンプで目隠しを入れられるソフトです. ・モザイク・スタンプを入れた画像は,iPhone/iPod touchに保存できます. ・主な機能 - モザイクを付ける - スタンプを付ける - スタンプに使う画像を変更する(右上の画像では作者が自分で作った画像をスタンプとして使っています) 実装予定の機能 既知の問題・課題・要望 ・スタンプ画像をもっと増やすか否か. FAQ ・スタンプ画像を選ぶときにどうしてiPhone/iPod touchの写真ライブ
beginIgnoringInteractionEventsとendIgnoringInteractionEventsメソッドは,アプリケーションへの操作をロックする. とにかくユーザに操作をされると困るときはこのメソッドを使う. [[UIApplication sharedInstance] beginIgnoringInteractionEvents]; こうすると,操作はロックされる.解除するには, [[UIApplication sharedInstance] endIgnoringInteractionEvents]; でよい. ただし,経験上こんなことがあったので補足すると, ユーザの操作→操作ロック→処理→操作アンロック→通常 という流れでプログラミングしていたときにendIgnoringInteractionEventsがうまく動かないことがあった.どうやらこれは,処理が短
UISegmentControllは,セグメントが二つの時はtoggle動作,つまり,どちらを押しても反応するようなデフォルト設定になっている. それを抑制する方法が,AppleのDiscussionにあったので,抜粋. @interface UISegmentedControl(StopToggle) - (BOOL) toggleWhenTwoSegments; - (void) setToggleWhenTwoSegments: (BOOL) flag; @end @implementation UISegmentedControl(StopToggle) - (BOOL) toggleWhenTwoSegments { return ( _segmentedControlFlags.dontAlwaysToggleForTwoSegments == 0 ); } - (void)
[iPhone SDK] Hack UIWebView - How to get a touch event completed 完成!!!私はソースコードをまとめただけかw今回のソース完成は,@Psychs, @norioのおかげ.完全に彼らのおかげ. それでは,UIWebViewのクリックイベントを取得する方法を説明していく. ・概要 UIWebViewは,subviewにUIScrollerを持ち,UIScrollerは,subviewにUIWebDocumentViewを持つ.残念ながらUIScroller,UIWebDocumentViewはともにprivateクラスなので,SDKからはアクセスできないし,ドキュメントにも詳細情報はない. このUIWebDocumentViewに対するtouchesXXXX:withEvent:のメソッドをオーバーライドできれば,実は,クリック
メモ書きです. クラスのメソッドは,これで出力できる. #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を使えば,色々ハックできますね.ハイ.
[iPhone SDK] Hack UIWebView - How to get a touch event(not completed) ご存じUIWebViewは使い勝手が悪い. ・はじめに stringByEvaluatingJavaScriptFromString:を利用して,Javascriptでだましだまし使えることは使えるが,Javascriptは遅いし,メモリ食いなので,なるべくネイティブでプログラミングしたいという欲求が沸いてくる. 悪いところ ・target="_blank"を処理できない ・クリックイベントを取得できない ・・・・・エトセトラ 特にクリックイベントについては,いろいろなところで議論されているが,http://discussions.apple.com/thread.jspa?messageID=8291598&tstart=0#8291598なか
こうすると,目的の行までアニメーションしてスクロールされる. かっこいい. id cell = [table_ cellAtRow:10 column:0]; [table_ scrollAndCenterTableCell:cell animated:YES];
・下記ムービーのHUDを実現するサンプル とりあえず動くレベル版 ・リリースノート ・表示するためのスレッドをクラスに内包したいがうまくいかない.スレッドがらみは難しい. ・ムービー ・実装例 以下のようなソースコードで実装します. - (IBAction)openHUD:(id)sender { [NSThread detachNewThreadSelector:@selector(openActivityHUDOfString) toTarget:self withObject:nil]; int i; for( i = 0; i
sonsonの経験則です. 1.大量のメモリを使わない,メモリの確保と解放の繰り返しは避けて,再利用 ・メモリを大量に使用すると目に見えて実行速度が低下する.また,memoryWarningによる割り込みのメッセージが多発する可能性があるため,その処理にも時間がかかる. ・TableViewでセルの再利用APIが提供されているようにインスタンスの確保と解放の繰り返しは大きく速度に影響を与える.(SDKが出る前,Jailbreak時代は再利用関数を自前で作ってたなぁ・・・) 2.恒久的に使いそうなオブジェクトはなるべく保持する ・利用しているクラスにメモリリークがあると,それの確保・解放を繰り返している内にメモリがどんどん食いつぶされる.怪しいクラスは特に注意して使うようにする.まぁ,なんら抜本的な解決策ではない気もしますが(アップル頼むよ). 3.背景に透明色を使わない ・ついつい
UIImage,CGImageにはいくつか小技がある模様. UIImageの引き延ばし ボタン,ビューなどの背景に画像をセットするとき,そのまま拡大されるとかっこ悪い.AppleがiPhone上で提供しているボタンなどは,すべて四方の隅をそのままに中央のピクセル値を繰り返して拡大するように引き延ばされている.この引き延ばしのセットもAPIが用意されている. UIImage *stretched = [original stretchableImageWithLeftCapWidth:5 topCapHeight:5]; 一つ目と二つ目の引数が四方の隅のサイズ.これで生成したUIImageをUIImageViewにセットして使用したり,drawInRectなどのUIImageのメソッドでサイズを大きくして描画するとちゃんと引き延ばされて描画される. UIImageのリサイズ UIImag
Quartz 2DまわりのAPIを使い,UIImageからCGImageRefを経由してピクセルの値を取得することができる. UIImage* source = [UIImage imageNamed:@"image.png"]; CGImageRef inputImage = [source CGImage]; これでCGImageのポインタを取得できる.CGImageからは,CGImageGetDataProviderとCFDataGetBytePtrを使い,ピクセルの値やピクセルのデータサイズ,1行ごとのバイトサイズなどを取得できる. CFDataRef inputData = CGDataProviderCopyData(CGImageGetDataProvider(inputImageRef)); unsigned char *pixelData = (unsigned char
今までのベータテストで得た情報(テスターからの)を書き留めます. 今後のベータテストのなにかしらの役に立てばと思います. UDIDの調べ方 ※Ad Hoc Helperを使う このツールを使うと,メールでUDIDを送ることができる. ※iTunes ・iPhone/iPod touchの設定画面で下のところをクリックすると識別子を表示させることができる.そこをクリックしている状態でCtrl+Cするとコピーできる.
Leopardから提供されたマルチスレッド用のクラス.マルチコア処理向けに提供されたものらしい.Appleのホームページにも以下のように書かれている.noviさんのTwitterでの発言で知ったAPIなのだが,非常に便利で使いやすい. アップルのエンジニアの成功の秘訣は、NSOperationを 使ったこと。 NSOperationは、マルチコア処理のために アプリケーションを最適化する、画期的な新しいAPIです 。NSOperationが計算(演算)のグループをNSOperati onQueueに追加し、現在のアーキテクチャをもとに、並 列処理の演算回数を動的に決定してくれます。複雑なスレ ッディングとロッキングのマニュアルコーディングは一切 不要。プログラムで演算と従属性を指定するだけで、あと はCocoaが処理してくれます。 NSOperationおよびNSOperationQueu
と,ぜんぜん違う結果になります.詳しくことは,行列計算は右から乗算していくからなのですが,意識せずに,先にしたい行列計算は後に書くという風に考えると簡単です.拡大縮小のglScaleもいっしょです. つまり先に書いたものは後のオブジェクトすべてに影響するということになります.しかし,これでは非常に不便です.オブジェクトをいくつも描画するときに一つ目はこう,2つ目はこうと,行列計算する方が絶対に楽です.1つ目の行列計算の影響を考えながら,2つ目以降をコーディングするのはすごく手間のかかる作業になります.そこでglPushMatrixとglPopMatrixが活躍します. glPushMatrixとglPopMatrix たとえば,黄色のティーポットをY軸まわりに45°回転させ,水色のティーポットをX軸方向に4平行移動したいとします.このとき,こういうコードを書くと間違いです. //1つ目の
(1)AppStoreにコミット →拒絶 ・「PINKちゃんねる」はアダルトだからダメ ・Localizationが甘いからそこ修正しなさい (2)修正後,再度コミット →拒絶 ・free版とか,そういうことを文章に書くな ・日本語コンテンツのビューアを世界公開するのはいかがなものか. (3)反論 ・そういう文章を載せているソフトウェアはAppStoreにたくさん あるじゃないか.レビューの基準を明確にしてくれ. ・ユーザはいるんだから,世界公開するのは俺の勝手だ →拒絶 ・<ここは言えない> ・イヤ,やっぱりダメだ.公開は認めない.主言語を日本語にして再提出してください (4)しぶしぶ承諾 ・わかった.けど,主言語が変更できない.どうすればいい? →対応 ・できるはずです.やってください. (5)試したけど,やっぱりできない→電話 ・できるって言われたけどできない
sonson@Picture&Software » Programming » [iPhone SDK] Ad Hocビルドで特定の人にアプリを配布する やっとiPhone SDKについて書ける項目ができた・・・・. 不特定多数の人にソフトウェアを公開するにはApp Storeを使うしかないと私も考えていたが,よくよく考えるとAd Hocビルドがある.Ad Hocビルドはソフトウェアを使用する人のデバイスをUDIDを登録した配布プロファイルを利用する.Ad Hocビルドを利用すれば,100台までのデバイスにApp Storeを介さずにアプリケーションをインストールすることができる. 概要 ビルドの流れを説明する.Xcodeの使い方やプロビジョニングファイルに関する説明はしない.NDAに抵触しそう. 1.配布したい相手のUDIDを教えてもらう. 2.UDIDを登録し,Ad Hoc配布プロビジ
相変わらずNDAは解除されない.NDAを続けるメリットがいまいちよくわからない.たとえば,今みたいにSDKに入っているコードから商品の開発計画とかがばれるからだろうか.うーむ. ※ここからはSDK一般のお話ですから.あしからず. Xcodeに付属のInstrumentsのleaks挙動が怪しい.リークを検出したり,しなかったりする. そこで,@takuma104にclangを勧められた. clangのMacOSX向けのツールはXcodeのプロジェクトのファイルを全部舐めて解析してくれるらしく,使いやすそうと考えたので,試してみたので報告する. ・本家サイト http://clang.llvm.org/index.html ・説明サイト http://kirika.la.coocan.jp/acts/cocoastudy/200807/clang-static-analyzer.ht
次のページ
このページを最初にブックマークしてみませんか?
『sonson@Picture&Software』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く