サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
iphone-dev.hatenadiary.org
画像ファイルの最後に @2x をつけることでRetinaに対応した大きな画像ファイルと通常のファイルを簡単に切り替えて使える。 たとえば btn_open.png というファイルがあったとして btn_open@2x.png を用意すると、Retinaに対応したデバイスでは、btn_open@2x.pngが自動的に使われる。 このとき、ちょっとやっかいなのはsubversionを使っている場合. subversionでは @以下はリビジョンの番号として使われるため、@2xがついたファイルを追加しようとするとエラーがでる。これを回避するにはファイル名の最後にもうひとつ@をつけてやるといい たとえば svn add btn_open@2x.png@ たくさんの画像を一気にaddしたければ... svn status | grep '^?' | grep @2x | sed -e 's/.png
3G SでOpenGL ES 2.0のShaderが使えるようになった。そこで役に立つサンプルを紹介。 http://developer.apple.com/Mac/library/samplecode/GLSLShowpiece/index.html ただし、モバイル機器用のOpenGL ES 2.0とPCのOpenGL 2.0では機能に違いがあるので、注意が必要です。 OpenGL Shader本(オレンジ本)に対応したShaderのサンプルが数多く紹介されています。 オレンジ本とあわせて読むのに最適!! OpenGL Shading Language (3rd Edition) Addison-Wesley Professional 2009-07-30 売り上げランキング : 9997 おすすめ平均 OpenGL開発者は必携です 遂に OpenGL にもプログラマブルシェーダ時代が
OpenGLのテンプレートのEAGLViewクラスを例に。 [ EAGLView.m ] Viewの背景色を透明に設定 self.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0]; Layerの不透明設定(opaque)をオフに eaglLayer.opaque = NO; // 変更箇所 OpenGLのClearColorを透明に glClearColor(0, 0, 0, 0); ここでどうせアルファがゼロだからといって、間違っても glClearColor(1, 1, 1, 0)とやってはいけない!! 白く表示されてしまう。 OpenGL(R) ES 2.0 Programming GuideAaftab Munshi Addison-Wesley Professional 2008-08-03 売り上げランキング :
Xcodeでプロジェクトを作るとソースコードの冒頭に // Created by ○○ on 3/3/09. // Copyright __MyCompanyName__ 2009. All rights reserved. // が挿入される。この_MyCompanyName_の部分を毎回自分の会社名に変えるのは面倒! そんなときはターミナルで、 defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{"ORGANIZATIONNAME" = "会社名";}' とやるといい。つぎから、ここで指定した会社名が自動的に挿入される。 追加 ORGANIZATIONNAMEを FULLUSERNAMEにすると、// Created by ○○の○○の部分のデフォルト値を指定できる
Audio Unitとは、OS Xから導入されたシステムレベルのオーディオプラグインのアーキテクチャです。平たく言うと、システム全体で使えるVSTプラグインのようなもの。 OS Xだけではなく、そのサブセットであるiPhoneにも同じ仕組みが用意されています。ただ、今のところ、iPhone用のAudio Unitを自作して、インストールすることはできないとのこと。もともとインストールされているものを使うことになります。残念! iPhoneにインストールされているAudio Unitは、以下の5個ののみのようです。 AUConverter ファイルフォーマットの変換 TimePitch ピッチシフトやタイムストレッチに使える AUiPodEQ その名の通り、イコライザー (EQ) AU3DMixerEmbedded オーディオの定位に使える RemoteIO 音声入出力のためのAudio U
Instrumentsは、アプリケーションの最適化を図る際に手放せないツールですが、たま〜にというかしょっちゅう実機で動かすことができなくなるときがあります。 アクティブなSDKをDeviceにして 「実行」 >> 「パフォーマンツツールを使って開始」しても、実機にアプリがインストールされるだけで、Instrumentsのセッションが開始しない.... orz そんなときは、 オーガナイザのウィンドウを開いて、使おうとしている実機をいったん削除します。 その後で、もう一度同じ実機をつないで認識してあげて、Xcodeを再起動すると、なぜかInstrumentsが動くようになります!! お試しあれー
CococaプログラマならおなじみのUtility. AppKiDoのラインナップに、iPhoneアプリ開発に特化したAppKiDo for iPhoneが加わっています!! 待ってました!!! http://homepage.mac.com/aglee/downloads AppKiDoは、Cocoa APIのリファレンスのブラウザーです。XcodeのDocumentationのウィンドウとほとんど同じなのですが、単体のアプリケーションとして動作するため、より高速かつ簡単に使うことができます。特にクラスの継承関係をきちんと理解して表示してくれる点が非常に便利です。 どういうことかというと.... たとえば、NSMutableArrayのインスタンスメソッドを調べているとします。XcodeのDocumentationのウィンドウ、もしくはヘッダファイルを直接参照した場合、NSMutable
このところ、OpenGL ESをつかったグラフィックにチャレンジしてます。そのなかで参考になった資料を軽く紹介。 まず前提として、僕自身もともとOpenGLのプログラミングを2年くらいやっていたということを理解していただく必要があります。もう4, 5年以上前の話で、当時はMac OS X上をプラットフォームとして使っていました。 当時、OpenGLを始めるにあたって参考にしたのは、ずばりこの三つです。 1. GLUTによる「手抜き」OpenGL入門 (和歌山大学 システム工学部 デザイン情報学科 床井浩平さん) http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html OpenGLはMacでもWindowsでも使えるプラットフォームによらないAPIですが、描画を行うウィンドウを作ったりするために、実際にはOSのAPIを叩かざるを得ない部分
ステータスバー - iPhoneのスクリーンの一番上の時刻や電波の強さがでているバー ゲームなどでフルスクリーンが必要な場合、このステータスバーを消すことになるかと思います。ステータスバーを消すのは簡単。 [UIApplication sharedApplication].statusBarHidden = YES; m19さんに教えていただきました。Info.plistを編集することでも同様の効果を実現できます。BooleanのUIStatusBarHiddenというキーを追加して、チェックボックスをチェックしてあげてください。こちらの場合は、アプリが起動した時点でビューがロードされる前にStatusバーが消えています。 あとは、フルスクリーンにしたいviewのサイズをスクリーンのサイズに合わせてあげればいいはず。 fullscreenView.bounds = [UIScreen ma
メモ: iPhoneでつかえるテクスチャの最大サイズ 1024 x 1024 GLint maxTex; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTex); NSLog(@"max texture size: %d", maxTex);
iPhoneアプリはアクセスできるファイルが厳密に制限されてます。アクセスできるディレクトリの中で特に重要なのが、アプリケーション自体のバンドル内のDocumentsディレクトリ。 NSArray *filePaths = NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory, NSUserDomainMask, YES ); NSString *documentDir= [filePaths objectAtIndex: 0]; ホームディレクトリ, テンポラリディレクトリを取り出のにはつぎのようなコマンドも使えます。 NSHomeDirectory() NSTemporaryDirectory() それぞれ実機で実行したところ Documentフォルダ - /var/mobile/Applications/(アプリケーション
iPhone/iPodタッチのIPアドレスを取得する NSHost *localHost = [NSHost currentHost]; NSString *ip = [localHost address]; 自分のメモとして
一定時間、ユーザからの入力がないと、画面が消えロックされますよね。普通のアプリだと、そんなに問題にはなりませんが、ずっとスクリーンをぼーっと眺めているようなアプリ (KoiPondとかBloomとか?)だと、困ったことになります。そこで強制的にスリープさせないようにすることもできます。 [UIApplication sharedApplication].idleTimerDisabled = YES; これだけ。Idle (何もしてない)とスリープするということで、Idle Timerと呼ばれているようですね。 スクリーンがつきっぱなしになるので、バッテリー消費などの点からいってもあんまり多用しない方がいいかと思います。
iPhoneでXMLを扱う際には、使いたいCocoaのXML関連クラスがiPhone上で使えるかどうかにまずは注意しましょう。 例えば、NSXMLDocumentやNSXMLElementといった、NSXMLNodeのサブクラスは、iPhone Simulator上では使えますが、iPhoneの実機では使えません。 シミュレータで開発を続けていて、いざ実機で動かそうとしてコンパイルが通らない!という段階になってから気づく...といった事態に陥らないためにも、注意が必要です。 逆にiPhone上で使えるのは、NSXMLParserクラス。 NSXMLParserのサンプルとしては、SeismicXMLというのがありますが、ちょっと複雑すぎます。その辺、うまくまとめたのが、このチュートリアルです。 http://blog.atrexis.com/index.cfm/2008/7/28/iPho
UIApplicationのヘッダをチェックしていてありました! [UIApplication sharedApplication].proximitySensingEnabled = YES; 手や顔がiPhoneのレシーバーに近づくと、画面が消えてロックされます。それだけ。 delegateとかでとれるといいんですけどね。
以前のポスト - dSYMファイルの使い方 の補足です。実際に使ってみました。 http://d.hatena.ne.jp/iphone_dev/20080924/1222256965 最近リリースしたアプリがある操作をすると落ちるという苦情をいただきました。その方にお願いして、クラッシュログを送っていただいたところ、だいたい下のような感じのログでした。 Thread 0 Crashed: 0 libSystem.B.dylib 0x31446cf0 0x313e3000 + 408816 1 libSystem.B.dylib 0x31446cde 0x313e3000 + 408798 2 libSystem.B.dylib 0x31446cd2 0x313e3000 + 408786 3 libSystem.B.dylib 0x314614b4 0x313e3000 + 517300
開発していて、viewLoadedが何度も呼ばれてしまうという現象に出会いました。 あるview AをUINavigationViewで表示 → view Bをpush -> view Bをpopしてview Aに戻る ところで、view AのviewLoadedが再度呼ばれる。本来ならview Aが最初に表示されたときに呼ばれるはず...おかしいなぁとおもっていろいろやっていたんですが、その鍵は didReceiveMemoryWarning にありました。 UIViewControllerは、didReceiveMemoryWarning(つまりメモリが少ない!という警告)をうけとったら、superviewのないviewをリリースするという実装になっています。上の例で、view Bを表示するときにメモリ不足に陥り、didReceiveMemoryWarningが呼ばれていたようです。d
CoreLocationをつかったアプリを書いていて面倒なのは、「シミュレータでは動かない」という点。ご存知かと思いますが、シミュレータ上でのCoreLocationは常にクパチーノのAppleの本社の緯度経度を返すようになっています。 世界全体をターゲットにしたアプリだったら、それでも簡単なテストくらいはできるかもしれませんが、日本限定のアプリの場合、かなり面倒なことになります。ちょっとした変更のたびにいちいちデバイスに転送するのは時間の無駄ですよね。そんなとき、「シミュレータで動いてるときだけは特定の緯度経度(例えば東京の自宅の位置)を決めうちで使う!」ことができないだろうか、といろいろ情報を探していて、みつけました。 マクロで対応できます。 シミュレータと実機を区別するためのマクロ #import #if (TARGET_IPHONE_SIMULATOR) // シミュレータで動作し
iPhoneアプリのクラッシュログとして、デバッグシンボルが入ってない意味不明のログしか取り出せないことってないですか? そんなときに使えるかもしれないハックです。 iPhoneアプリをコンパイルした時にbuildフォルダの中のアプリのとなりに、.dSYMという拡張子のファイルができることに気づいてますか? どうもこのファイルはストリップされたデバッグシンボルが格納されているようです。このファイルを使って、上述のわかりにくいクラッシュログをシンボルつきのログに変換することできるスクリプトがあります! /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/symbolicatecrash これを/usr/
* 実機でしか動きません。シミュレーターではエラーが出るはずです。ご注意ください。 ちょっとマニアックなAPI, AudioSession APIについてのサンプルプロジェクトを作ってみました。 iPhoneを使って最初に感動したのが、電話機能と他の機能のスムーズなインテグレーション。たとえば、iPod機能で音楽を聞いていて、電話がかかってくると、音楽がフェードアウトすると同時に着信音がフェードイン、電話が終わると今度は音楽がフェードインしてきてもとに戻る。といった具合です。同様にゲームを起動すると、iPod機能で再生中の音楽はフェードアウトするのに対して、音を使わないアプリ(MailやSafariなど)は音楽を再生しながら使うことができます。 こうしたアプリケーション間でサウンドの管理をしているのが、AudioSession APIです。各アプリケーションは、そのアプリケーションの用途と
Interface BuilderでラベルのフォントをHelvetica Neueにして使ったところ、実機の方で起動時にアプリが落ちるという現象に見舞われました。ログをチェックしたところ、FT_Load_Glyph errorで落ちている模様。どうもフォントのロード失敗して落ちているようです。 そこで改めてiPhoneで使えるフォントファミリーの一覧を作ってみました。 Courier Courier New Arial Arial Unicode MS AppleGothic Zapfino Hiragino Kaku Gothic ProN W3 Hiragino Kaku Gothic ProN W6 STHeiti SC STHeiti TC American Typewriter Helvetica 以上のようです。やっぱり Helvetica Neueはないようですね。 もちろん
AppStoreでアプリケーションを売るには、当然ながらApple/AppStoreとの契約が必要になります。そこで必要になるのが、銀行の情報と税金の書類です。特に厄介なのが税金。僕も詳しいことは分かってないのですが、 http://blogs.oreilly.com/iphone/2008/06/quick-tip-for-nonus-iphone-dev.html このポストなどを参考にすると、要するに日本の開発者は 「日本で税金を払うのでアメリカの税金は免除してくださいね!!」「源泉徴収しないでね!!」という申請をする と考えていいかとおもいます。 この申請には、W-8BENという書類が必要です。AppStoreのサイトで記入/提出することができるようになっているのですが、通常、W-8BENを出すには、アメリカのソーシャルセキュリティーナンバー(SSN)の記入が必要です。でも、もちろ
iPhone, iPod touchには、個体ごとに固有のデバイスIDが付与されている。 個体を識別してなにかやりたいような場合に便利だ。このIDを取り出すのは、次の一文ですむ。 [UIDevice currentDevice].uniqueIdentifier NSLog()してみると、c748e3570301******************** というような番号が取り出せた。オーガナイザウィンドウのIdentifierの欄と同一であることが確認できた。
今、ネットワークにアクセスしてますよーということをユーザに簡単に提示する方法。 ネットワーク上のデータをロードしてるようなときには、Activity Indicator(ぐるぐる回ってるやつね)を使うのが一般的ですが、自前で準備しなくてもシステム側が用意してくれているのを簡単に使う方法があります。iPhoneでMailアプリやSafariなどで、一番上のステータスバーに現れる小さいActivity Indicatorがそれです。 使い方は簡単。コードのどこかで、 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; を実行すれば良い! ネットワークへのアクセスが始まると自然にActivity Indicatorが表示されます。 消したいときは当然 [UIApplication sharedAppli
■ 自作のアプリケーションから、特定のWebページをSafariで開く NSURL *myURL = [NSURL URLWithString:@"http://d.hatena.ne.jp/iphone_dev"]; [[UIApplication sharedApplication] openURL:myURL]; ■ 自作のアプリケーションのURL schemeを指定する Info.pist内に、CFBundleURLTypesというDictionaryのArrayを用意。 各Dictionaryには、CFBundleURLName(reverse-DNSスタイルの一意な識別し)とCFBundleURLSchemes(schemeの文字列)を入れる。 CFBundleURLTypes CFBundleURLName jp.ne.hatena.iphone_dev.MyApp CFBu
数秒の短いファイルを再生したいという場合、AudioToolboxフレームワークのAudioServiceという仕組みを使うと簡単にできます。 使い方は簡単。 1. 最初に再生したいファイルを登録する AudioServicesCreateSystemSoundID( CFURLRef URL, SystemSoundID* outSystemSoundID); ファイルパスをCFURLRefのかたちでわたす。SystemSoundIDがかえってくる。 2. 再生する 1で得られたSystemSoundIDを使って再生。 AudioServicesPlaySystemSound(サウンドID); 同じように、 AudioServicesPlayAlertSound(サウンドID); だと、アラート音と同時に再生されます。 3. 再生が終わったら、ファイルの登録を解除する AudioServ
このアプリが使えます! http://jbullfrog.com/froglog/?p=323 人間の指先のサイズはiPhoneの画面上だと 44 × 44ピクセル (Retina Displayでは 88 x 88) の領域に相当. これ以下のサイズのボタンは避けるべし. 小さくて押せない!ということになりかねない. # iOS Human Interface Guidelineより http://blog.sallarp.com/iphone-ipad-appstore-like-uiscrollview-with-paging-and-preview/ main.mにつけたすといいのかも。アプリが立ち上がるたびにrandom()のシードが初期化される. int main(int argc, char *argv[]) { srand(time(NULL)); // ここ NSAuto
このページを最初にブックマークしてみませんか?
『iPhoneアプリケーション開発』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く