サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
www.awaresoft.jp
iOSアプリを作成する際に、アプリ内で使用する画像は通常のディスプレイ用とRetinaディスプレイ用の2種類を用意する必要がありますが、これが非常に面倒な作業です。 ほとんどのデバイスがRetina Displayになった今となっては、通常のディスプレイのサポートはもう辞めてしまいたいところですが、iOS 6でiPhone 3GSもサポートされることが決まり、やはり当面は通常のディスプレイもサポートしなければならなくなりそうなので、対策を考えました。 Photoshopを使って通常のディスプレイ用とRetinaディスプレイ用の2種類の画像を用意する方法にはさまざまなやり方が考えられますが、一例としてPhotoshopスクリプトを使った私のやり方を書いてみます。 1.Retinaディスプレイ用の画像ファイルを用意する まずは、Retinaディスプレイ用の画像ファイルを用意します。 Retin
facebookやTwitter、GoogleDataAPIなど、APIを公開しているサービスを利用するときに、OAuthを使うことが多くなってきました。OAuthをきちんと理解して使うのは結構たいへんな印象ですが、ライブラリを使うと手軽に利用できてしまいます。 ライブラリにもいろいろありますが、私が試した中では、かなりきちんとOAuthを理解していないと使うのが難しいようなライブラリもあるなかで、Google Toolbox for Mac - OAuth Controllers (GTMOAuth)は使い方が非常に簡単で、ほんの数行のコードを追加するだけで、自分のアプリケーションでOAuth認証が必要なサービスを利用することができます。 ただ、いくつか注意しなければならないことがあったので、使い方をメモしておきます。 0.利用したいサービスにアプリケーション登録 あらかじめ、利用したい
NSDateオブジェクトから、UNIXタイムスタンプを取得する。NSTimeIntervalはdoubleとして定義されているみたい。 NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970]; NSLog(@"%f", timestamp); 実行結果: 1293247007.415029 NSDateオブジェクトから日付と時刻を表す文字列を取得する。 NSDate *date = [NSDate date]; NSString *desc = [date descriptionWithLocale:[NSLocale currentLocale]]; NSLog(@"%@", desc); 実行結果: 2010年12月25日土曜日11時58分51秒 日本標準時 フォーマットを指定したい場合は、NSDateForma
iOSでサウンドを再生する方法はいくつかありますが、最も簡単に、短い効果音などを再生するには、AudioToolboxを使います。 この方法は、使い方がとても簡単な反面、途中で再生を中断したり、音量を調整したり、プレロードしたりといったことはできません。ボタンを押したときのクリック音などに使います。 1. AudioToolbox.frameworkを取り込みます 2. AudioToolbox/AudioServices.hをインポート #import <AudioToolbox/AudioServices.h> 3. SystemSoundIDを宣言 何度も使う場合は、メンバ変数として宣言しておくと便利。 SystemSoundID beepSoundId; 4. SystemSoundオブジェクトを作成 ここでは、Resourcesの下にある"beep.wav"を再生します。Audi
最近になって変わったObjective-Cのインスタンス変数の命名規則について。 プロパティに対応するインスタンス変数の変数名をプロパティ名と別にすべきか、また、インスタンス変数名をアンダースコア(_)で始めるべきかどうか、さまざまな場所で議論になっているのを見てきて、自分も長い間悩んだ結果、結論が出たのでその経過をまとめておきます。 背景をとばして結論だけ見たい人はこちらへ。 iTunes Uのスタンフォード大学の"CS193p: iPad and iPhone Application Development"の講義は、iPhoneアプリをこれから作ろうという人にはもちろん、既に作っている中級者の方にとっても、見る価値があると思います。 特に、Paul Hegartyによる2011年秋の講義はiOS5に完全に対応していて、説明も非常に分かりやすく、必見です。何と言っても、こんな白髪白髭の
大量のデータ処理等、時間のかかる処理をメインスレッドで実行してしまうと、UIが固まってしまってよろしくありません。これを防ぐためには、時間のかかる処理は別スレッドをつくってそちらで行うようにします。Cocoaにはこれを非常に簡単に実現する方法が用意されていますが、いくつか気をつけるべき点があったので書いておきます。 1.performSelectorInBackground:withObject:メソッドを呼ぶ NSObjectにはperformSelectorInBackground:withObject:というメソッドが用意されていて、バックグラウンドで処理を行うメソッドのセレクタを指定するだけで、非常に簡単に別スレッドで実行してくれます。 例えばこんな感じ。 - (void)runVeryHeavyMethodInBackground { [self performSelectorI
iOS4と5では、アプリケーションの起動時や終了時に呼ばれるアプリケーションとビューコントローラーのライフサイクルメソッドが呼ばれる順序に若干違いがあります。 起動シーケンスは、例えばアプリに暗証番号を設定して、ロックされていた場合はアプリケーションの画面を出す前にロック解除の画面を出さなければならない場合などには、初回起動時、ホームボタンでバックグラウンドに入ったとき、バックグラウンドから復帰したとき、スリープボタンを押されたとき・・・などあらゆる場面を想定して非常に綿密に検討する必要がでてきます。 iOS5だけをサポートして、iOS4はサポートしないのであればとてもシンプルなので問題ないのですが、両方をサポートする場合は気をつけなければなりません。 アプリケーションライフサイクルについては詳しくはこちら。 ビューコントローラーのライフサイクルについてはこちら。 下の内容はiOS4は4.
2010年 6月 26日(土曜日) 16:51 MS Office 2007以降の『リボンインターフェイス』はなぜ使いにくいのか? 初めてOffice 2007を使ったときは、とにかく、今まで使い慣れた機能が従来どおりに使えないことに非常にストレスを感じました。 ・フォントのサイズを変える ・オートフィルタを設定する など、非常に基本的でそれまではほとんど無意識でこなしていたことでいちいちつまずいて、本来の作業に集中できません。 それでも、時代の変化、新しい流れについていくには、労力をかけてでも新しいものに慣れるように努力をしなければ、と前向きにとらえて、がんばって使っているうちに何がどこにあるかは少しずつ覚えてはきましたが・・・ リボンインターフェイスの操作に慣れてきた今でも、ひとつの操作をするのに、クリックをする回数が以前のOfficeよりも確実に増え、生産性は確実に下がっていると感
iOSで線や図形を描画するには、Quartz 2Dを使います。Quartz 2Dは文字も描画できるのですが、UTF-8の日本語文字を描画する方法がどうしてもわからなかったので調べてみました。 こちらとかこちらのページによると、日本語のフォントを指定した場合は、文字の描画にCGContextShowTextAtPointが使えないらしい。代わりにCGContextShowGlyphsAtPointを使うことになるらしいのだけど、そのためにはGlyph(文字の形状)を用意しなければならず、そのために使えるCGFontGetGlyphsForUnicharsという関数は非公式APIなのでAppleにリジェクトされてしまうのだとか。 上のページにはそれを解決する方法とコードが書かれているのだけど、私には難しすぎるので、Quartz2Dで描画するのはあきらめて、もっと簡単な方法がないか探してみたとこ
Xcode 4には、ターゲットのサマリーに「Version」と「Build」の欄があります。このBuild番号をビルドの度に自動的に増やしていく方法のメモ。こちらのQ&Aページを参考にしました。 バージョン番号とビルド番号の付け方について ターゲットのサマリーの"Version"はInfo.plistの"Bundle versions string, short" (CFBundleShortVersionString)、"Build"は"Bundle Version (CFBundleVersion)"に相当します。 バージョン番号とビルド番号の使い方の流儀はいろいろあり、プロジェクトにあった方法を選べばよいわけですが、私の場合は上のQ&Aページで説明されているのとほぼ同じように、次のようなルールで付けることにしました。 バージョン番号は、 {メジャーバージョン}.{マイナーバージョン}
NSLogは実機ではApple System LogにWarningレベルのログを出力してしまうみたい。XcodeのOrganizerで見ると、Consoleにこんな感じでログが出てしまいました。 Mon Feb 7 11:46:55 iPhoney SimpleWeight[3044] : <0x14c500 GraphViewController.m:(315)> Single Tap Detected: (243.00, 172.00) これでは不要なログが大量に出てしまい、パフォーマンスにも影響してしまうので好ましくありません。(ちなみにConsoleを見ると、結構大手の出しているアプリでもデバッグログを出したままリリースしていたりします。-_-;) リリースの前に手でNSLogをコメントアウトするのは大変なので、うまくリリース時にだけNSLogを削除する方法がないかと調べたら、
2011年 1月 31日(月曜日) 10:58 iPhone/iPadアプリのローカライズ (i18n, l10n) 地域化(ローカライゼーション, Localization, l10n)とか国際化(インターナショナライゼーション, Internationalization, i18n)とか多言語化(マルチリンガライゼーション, multilingualization, m17n)とかいろいろ言い方があってそれぞれ意味が微妙に異なるようですが、IT用語集を調べるとそれぞれ違うことが書いてあるので、何と呼ぶかは気にしないことにします。 私は開発中は全て文字列を英語で書いておいて、最後に日本語化をするようにしています。 1. 多言語化が必要な文字列をNSLocalizedString()コールに置き換える 多言語化が必要な文字列を検索(Command+F, Command+Shift+F,
1. クラッシュログファイルを探す iOSアプリがデバイス上でクラッシュしたとき、デバイス上に自動でクラッシュログが生成されています。これを使えば、デバッガで接続していない状態でクラッシュした時でも、クラッシュの原因を調べることができます。 クラッシュログは、アプリがクラッシュしたデバイスを一度iTunesでMacかPCに接続して同期すると、デバイスから次の場所にコピーされます。 Macの場合: ~/Library/Logs/CrashReporter/MobileDevice Windows Vista/7の場合: C:\Users\<user_name>\AppData\Roaming\Apple computer\Logs\CrashReporter/MobileDevice Windows XPの場合: C:\Documents and Settings\<user_name>\A
iOSアプリの開発では、PCに比べてメモリやCPUの処理速度に限界があるので、パフォーマンスがとても気になります。 そこで、パフォーマンスの測定方法を考えてみました。 馴染みのあるCocoa Touchのクラスを使うなら、[[NSDate date] timeIntervalSince1970]などを使えば時間を取得できますが、秒単位でしか取得できず、処理時間を計るのには使えません。 NSLogを使えば、 2011-04-06 00:15:04.185 のように、ミリ秒単位の時刻が表示されますが、NSLog自体が非常に遅いので、これも細かい処理時間を計るのには向いていません。 調べてみると、より精細な時間を計るには、gettimeofdayシステムコールを使うのが良さそうです。これはマイクロ秒単位で計ることができる上、システム関数なのでこの関数自体の実行速度も高速なはずです。 使い方は、
GData APIを使うと、Google DocsやGoogle Calendarなど、Googleのさまざまなサービスを利用できます。ここではiOSアプリで使えるGData API Objective-C Client Libraryのダウンロードからアプリで利用するまでの方法を試してみました。 だいぶ前にGData APIを使ったときにも同じような記事を書きましたが、Xcode4になっていろいろ変わったので、Xcode4での注意点も含めて、以前よりも少し詳しく書いておこうと思います。 ※なお、Google Documents List Data APIをはじめ、Googleのサービスの多くは未だLabsに属していて、APIは予告なく変更されることがあるようです。こちらの記事のように、Google側で勝手に仕様変更されてしまって突然アプリが動かなくなってしまうこともあるようなので、自分の
iOS 5の正式リリースと共に、iOS 5 SDKを含むXcode 4.2の正式版がリリースされました。Xcode 4.2ではビルド関係で4.1から大きく変わったところがいくつかあってかなり手間取ったので、調べたことをまとめておきます。 Xcode4.2のArchitectures設定 Xcodeプロジェクトの設定で、ArchitecturesのところがXcode4.1.2までは"armv6 armv7"となっていたのが、Xcode 4.2からは、 のように、"Standard (armv7) - $(ARCHS_STANDARD_32_BIT)"などとなっていて、armv6が外されています。 このままビルドすると、Deployment TargetにiOS4.3以前を指定している場合に問題が発生するようです。 iOS4.3以前をサポートする場合は、 のように、armv6も追加しておく必要
AdWhirlを使って、iPhoneアプリに表示する広告のネットワークを、iAdとAdMobを切り替えられるようにしました。 AdWhirlは、AdMob、iAd、InMobiなど、複数の広告ネットワークから広告を取得して表示するためのオープンソースのツールです。AdMobによって管理されています。 これをつかって、iAdとAdMobを切り替えて表示する実装を試してみました。 1.AdWhirlに登録・アプリケーション登録 AdWhirlのサイトにアクセスし、"Get Started"をクリックして新規登録します。 登録が完了したら、ログインして、"Add Application"をクリックしてアプリケーションを追加します。 iAdの設定にはApple IDを、AdMobの設定にはPublisherIDを設定します。"AdServicing"をONにするのも忘れずに。 2.AdWhirl
デバッグ中にエラーが出てしまってエラー番号から内容が知りたい場合や、独自のNSErrorオブジェクトを作るときの参考に、既存のエラー番号を見たくなる時がありますが、いつもエラーの定義がどこでされていたか忘れてしまうのでメモ。 エラー番号については、Error Handling Programming GuideのError Objects, Domains, and Codesセクションに詳しく書かれています。 まず、Mac OS X(やiOS)のエラーは、エラードメインに分けられていて、NSError.hに次の4つのエラードメインが定義されています。 NSMachErrorDomain NSPOSIXErrorDomain NSOSStatusErrorDomain NSCocoaErrorDomain 他にも、フレームワーク毎に定義されたエラードメインがいろいろあります。 各ドメインの
2008年 8月 28日(木曜日) 23:04 【CakePHP】CakePHP + eclipse開発環境のセットアップ 私の開発環境は次の通りです。オープンソースまたは無料で利用可能なソフトをフルに組み合わせてお金をかけずに開発を行うのが私のモットーです。^^ Windows XP(←これは無料ではないですね。。。) Apache Web Server 2.2 MySQL 14.12 PHP 5.2.4 eclipse 3.3.2 + PDT 1.0.3 + Zend Debugger CakePHP 1.2.0 ※eclipse + PDTのインストール方法はこちらをご覧ください。 1. CakePHPのダウンロードと展開 CakePHPをダウンロードして、適当な場所に展開します。下のようなディレクトリ構造になっています。 cake_1.2.0.7296-rc2/ app/ ..
Xcode4からは、バージョンコントロールを正式にサポートしていて、SubversionとGitが使えます。ここではGitを使う方法を試してみました。 Xcode3から使っていた既存のXcodeプロジェクトでGitを使ってバージョンコントロールをするときに、AppleのXcode 4 User Guideの"Add Git or Subversion Version Control to an Existing Project"あたりを見ながら素直に従ってやると、Xcodeのプロジェクト関連のファイルやビルドされてできたオブジェクトファイルなどが全部リポジトリに追加されてしまい、後で困ったことになります。(私の場合はUserInterfaceState.xcuserstateというファイルがどうやらXcodeを起動しておくだけで常に書き換えられていくようで、これがリポジトリに入ってしまった
モバイルアプリの広告プロバイダとしてAdMobを使っていますが、私の場合、広告からの収益はクリック数よりもむしろクリック単価に大きく左右されている感じがします。時期により、急激に落ち込んだり、突然戻ったり。そこで、AdMobのクリック単価の傾向を調べてみました。 上のグラフは、私が作っているiPhoneアプリ『シンプル・ダイエット』のAdMob広告のクリック単価を、リリース直後の今年(2011年)の2月から最近までの傾向をプロットしたものです。AdMobの広告収入は米ドルで計上されるため、1USD = 80円で円に換算しています。 図中の4月28日の赤い点線は、この日以降、AdMobでGoogle AdSenseの広告が表示できるようになったことを示しています。 また、6月13日には『シンプル・ダイエット』の中国語版のリリースにより、それ以降、中国でのダウンロード数が増えています。それ以前
Mac OS X Snow Leopardで、PHPからメールを送信する方法。XAMPP for Macなどで、ApacheとPHPが動作していることを前提としています。 Mac OS Xには、メールサーバとしてPostfixがデフォルトでインストールされています。また、/usr/sbin/sendmailがありますが、これはPostfixとsendmailの互換インターフェイスとして存在しているもので、実態はPostfixのようです。(man sendmailを参照) 本格的なメールサーバとしてルーティングの設定をすることもできるようですが、ここでは開発でローカルのWebサーバからメールを送信するために使うことだけを考えて、GMailのSMTPサーバを利用する設定を行いました。 1. SASLパスワードファイルの作成 /etc/postfix/に、sasl_passwdというファイルを作
NSURLConnectionとNSURLRequestを使ってHTTP GET/POSTでWebにアクセスする方法。 URL Loading System Programming Guideが参考になりましました。 - (void)sendGetRequest { NSString *urlstr = @"http://www.yahoo.com/"; NSURL *url = [NSURL URLWithString:urlstr]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; if (conn) { buffer = [[NSMutable
Interface Builderで画面をデザインする時、基本的には1つの画面に1つのViewControllerと1つのXibファイルを用意することになります。しかし、これだと複数の画面や別のアプリでも使い回せるはずのUIパーツをそれぞれのXibファイルに用意しなければならなかったり、一つの画面に同じパーツを複数並べて使うといったことがやりにくくなります。 再利用可能なUIパーツをInterface Builderを使って簡単につくる方法を調べてみたのですが、基本的な事項の割にはドキュメントやサンプルが見つけられずに苦労してしまったのでまとめておきます。(Appleのサンプルでは一部をIBで、一部をコードで行うものはありましたが、できることなら極力IBを使うようにしたいところです。) まず、メインのViewControllerのXibファイルにViewControllerを追加してパーツ
Xcode4からは、バージョンコントロールを正式にサポートしていて、SubversionとGitが使えます。 Xcode3から使っていた既存のXcodeプロジェクトでGitを使ってバージョンコントロールをするときに、AppleのXcode 4 User Guideの"Add Git or Subversion Version Control to an Existing Project"あたりを見ながら素直に従ってやると、Xcodeのプロジェクト関連のファイルやビルドされてできたオブジェクトファイルなどが全部リポジトリに追加されてしまい、後で困ったことになります。(私の場合はUserInterfaceState.xcuserstateというファイルがどうやらXcodeを起動しておくだけで常に書き換えられていくようで、これがリポジトリに入ってしまったために、常にコンフリクトをおこしてmast
次のページ
このページを最初にブックマークしてみませんか?
『www.awaresoft.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く