RSS
0

iPhoneのシャッター音,非公開APIってやつか!?

(前エントリーの続き)

だったら,シャッター音を消して連射すればええんじゃないの!?っということで,調べた.

・・・,

無理.システム音のコントロールにアクセスできないんだと(公式ドキュメントから).
How do I access the hardware volume controller?

Global system volume, including your application's volume, is handled by iPhone OS and is not accessible by applications.
他で検索しても,シャッター音に関する記述が見つからないし,システム音のミュートも見つからない.消音の連射アプリがリリースされているのに,何も出てこないわ.これが非公開APIっていうやつか!

===追記===
OS3.0で追加されたMedia Playerの音量調節を噛ましてみたけど,やっぱりシャッター音だけはそのままだった.本当に,どうやってんの.直接,ファイルにアクセスしてリネームとかじゃないよね?!
Read more
3

iPhone:アプリ内でViewのスクリーンショットを取る

OS 3.1のcameraOverlayViewで大学時代に研究した時系列処理を実装してやんよっと意気揚々に始めたけど,カメラからの画像列はシャッターボタンを押すか,takePictureでシャッターボタンを呼び出さない限り取得できないということ.逐次,カシャカシャッと音を鳴らす訳にもいかず,挫折.動画撮影も同じでリアルタイムは無理だって.3.1ならできると思っていたのにー,わーわー.

半日を潰してしまったけど,調べてる最中に,アプリ内でUIViewのスクリーンショットを取るという他に転用できようなtipsを発見した.そのメモを以下に,ちなみにこのコードを一部書き換えてカメラのUIImagePickerControllerに対して行うと,真っ黒な画像が保存されるという,親切機能がOSに実装されている.意味わかんねーー
CGRect screenRef = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRef.size);

CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blueColor] set];
CGContextFillRect(ctx, screenRef);

[self.view.layer renderInContext:ctx];

UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenImage, nil, nil, nil);

UIGraphicsEndImageContext();
昔,UIGetScreenImage()なるメソッドで簡単に取得できたみたいだけど,今はこれはなぜかオミットされています.The 大人の事情.

続きのエントリです.
Read more
0

iPhone:画像をライブラリに保存するメソッドUIImageWriteToSavedPhotosAlbumの注意事項

画像(UIImage)を自分の画像ライブラリに保存するメソッドUIImageWriteToSavedPhotosAlbumを使用する場合には,注意が必要.保存が非同期処理で行われるので,呼び出し後すぐにアプリを終了すると画像は保存されない.これを防ぐためには,引数に保存完了を知らせるメソッドを与えればよい.
// 完了を知らせるメソッド
- (void) savingImageIsFinished:(UIImage *)_image
didFinishSavingWithError:(NSError *)_error
contextInfo:(void *)_contextInfo
{
NSLog(@"finished"); //仮にコンソールに表示する
}

// 保存処理を持つメソッド
-(void) hogehoge
{
...略...
// savedImageをライブラリに保存する
UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(savingImageIsFinished:didFinishSavingWithError:contextInfo:), nil);
...略...
}

これで小一時間ほど悩んでましたが,公式ドキュメントに思いっきり書いてありました.始めからよく読んでおけばよかった.
The use of the completionTarget, completionSelector, and contextInfo parameters is optional and necessary only if you want to be notified asynchronously when the function finishes writing the image to the user’s Saved Photos album. If you do not want to be notified, pass nil for these parameters.
Read more
0

感謝!「勝手に観光図」がランクイン


自作の「勝手に観光図」が,私が確認した限りApp Storeのナビゲーション(有料アプリ)で最高27位(今は31位)にランクインしていました.ありがとうございます!!
Read more
0

iPhone:Xcode付属のOpenGLサンプルを理解したい

OpenGL ESを勉強中.まずはXcode付属のOpenGL ESテンプレート(サンプルソース)の理解をと,色々と公式ドキュメントや他サイトを参考にしましたが,なんとなく分かってきたような気がします.あくまで気がするだけです.一応,ソースのメモ書きを公開.役に立たないと思いますが,間違いなどがあったら,ご指導ください.PDFで見たい/保存したい人はここからダウンロードできます.使用条件は自己責任です.もし参考になってアプリを組んだら,可能ならばそのアプリを教えてください.悩んでる人がいたら相談にのってあげてください.









Read more
0

iPhone:dSYMの意味,crashとsymbolicatecrash

iPhoneアプリをビルドすると実行ファイルの側にdSYMというディレクトリ(パッケージしてあって見た目はファイル)ができる.どういうためなのか,何のためにあるのかと気になっていた.

rejectを食らって,crashファイルについて色々と調べたら,その仕様用途が分かってきた.dSYMはデバッグシンボル群を記録していて,そのdSYMを使えば呪文のようなcrashファイルをシンボル付きに変換することができる.OS 3.0に上がって他サイトのシンボル付き変換の情報が若干使えなくなったので,その方法を以下にメモ.

【準備】変換してくれる実行ファイルsymbolicatecrash(OS 3.0になって,場所が分かった)をパスが通っている場所に移す.例えば,実行ファイルを/usr/local/binにコピーする.管理者権限が必要なのでsudoさん大活躍.
sudo cp /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin
そして,Permission deniedで怒られるので,続いて,sudoさんに仕事をしてもらう.
sudo chmod a+x /usr/local/bin/symbolicatecrash
もしくは,ファイルを左クリックして「情報を見る」で実行の許可を与える.

【変換】引数の一番目にcrash,二番目にdSYMを与えて,以下のように実行する.
symbolicatecrash hogehoge.crash hogehoge.dSYM > hogehogeWithSymbols.crash
シンボル付きが標準出力されるので,リダイレクトで別ファイルに書き込んでおく.これによって,
変換前:UIKit 0x33301a14 0x3314b000 + 1796628
変換後:UIKit 0x001b6a14 -[UITextView scrollRangeToVisible:] + 96
のようにcrashファイルが変わる.シンボルが分かれば,どこでクラッシュしたかが一目瞭然.ということで,ビルド後のdSYMは削除せずに大切に保存しておいた方がよいそうです.

ちなみに,rejectを食らったアプリは,そこまで解析しなくてもソースを眺めていたら分かるようなところで,クラッシュしてましたw.審査を浪費してしまった,ごめん.廉価版だったから,デバッグが足りんかったーーー.恥ずかしい
Read more
0

what is EAGL?

OpenGL ESの勉強を始めた.まずはサンプルからとソースファイルを眺めると,「EAGL」が頻繁に現れる.何の略??っと気になったので調べたら,
EAGL = Embedded Apple's OpenGL
だそうです.初見で「まさか,イーグル由来なのか!?」とも思ったけど,やっぱり「Embedded + なんとか + openGL」だろうなと思ったけど,Appleが入ってくるとは想像してなかった.あと関連して,
CAEGL = Core Animation Embedded Apple's openGL
だそうで,iPhone SDKは他にも
NS = NEXTSTEP(OS Xの前進になるNeXT社のOS)
だったりと,いろいろ略語が出てきます.形から入る身としてはソース云々よりもこういうのが気になる.
Read more