アプリのバージョン情報を取得するには
NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
これでInfo.plistのBundle versionを取得できます。
UIWebViewのバウンスを無効にするには
for (id subview in webView.subviews) { if ([[subview class] isSubclassOfClass:[UIScrollView class]]) { ((UIScrollView *)subview).bounces = NO; } }
UIWebViewからGoogle Mapsのアプリを開くには
iOSアプリのUIWebViewから「http://maps.google.com」を開くとUIWebView内にGoogle MapsのWeb版が開いてしまいますが、URLスキームを使って「maps:」の形式にするとGoogle Mapsのアプリが開きます。
<a href="maps:q=35.681382,139.766084">Google Maps</a>
Safariの場合は、UIWebViewとは異なり「http://maps.google.com」でも「maps:」の形式でもGoogle Mapsのアプリが開きます。
2011年の振り返り
2011年の振り返りエントリです。今年は達成度低めでした。
スマートフォンアプリ開発
iPhoneアプリ開発としなかったのは、Androidも視野に入れているため。Titanium Mobileなどのマルチプラットフォーム開発環境の導入を検討する。
とまあ今年のはじめは意気込んでいたもののやはり片手間でAndroidをやる余裕はありませんでした。Titanium Mobileについては、自社で開発した「懸賞チャンス」「アキの恋文」で試してみたのですが、環境の安定性、外部SDK(アドネットワークなど)の豊富さという観点ではObjective-Cのほうがいいかなという結論に至りました。
技術翻訳
去年はほとんど翻訳活動はできませんでしたが、今年は自分の理解度を深める意味でもiPhoneアプリ関連の翻訳をやってみようかと。
今年は皆無でした。海外の文献に関しては消化するのが精一杯でした。
勉強会を開催する
去年さんざんお世話になった勉強会ですが、今年は開催する側にまわりたいと思います。初心者向けiPhoneアプリ開発なら準備すればできるはず。
自己開催はできなかったが、発表する側にまわれたのは大きな成果でした。来年こそは開催する側にまわりたいと思います。以下、今年の発表資料です。
ブログでアウトプットする
去年達成できなかった50エントリをまずは達成しようかと。
数えてみたら16エントリ。。全く足りず。やはり意図的に時間を取らないと書けませんね。
読書数を増やす
去年達成できなかった50冊をまずは達成しようかと。技術書とその他のバランスを保てば達成不可能な数字ではないはず。
13冊。。こちらも大きく下回る。
去年何を思ってこの目標を立てたかは忘れてしまったのですが、iOSアプリ関連の勉強会などに行くとプログラミングもデザインも一人でやってますって人に今年は多く会ったような気がします。自分でもある程度できたほうが幅も広がるので来年も継続で。
総括すると、業務に追われインプット/アウトプットが不足した1年でした。振り返りのタイミングも1回/年になってしまっているので、最低でも月1回は振り返るようフローの改善をしたいと思います。
以上、2011年の振り返りでした。
10分でわかるGoogle Analytics SDK for iOS
(iOS Advent Calendar 2011 20日目の寄稿エントリです)
iPhone/iPadアプリをリリースした後にダウンロード数、ランキングをチェックするのは当然ですが、どれだけアプリが使われているのかをチェックすることも重要です。そこで今回はGoogle Analyticsを使ってiOSアプリの使用状況を計測をする方法を紹介したいと思います。
Google Analytics for iOSとは
iOSネイティブアプリ用のGoogle Analyticsなのですが、計測データの送信部分がObjective-Cで書かれているので、画面の表示回数やボタンのクリック数などを計測することが可能です。ちなみに計測結果はWeb版のGoogle Analyticsと同じ管理画面から確認することができます。
Google Analyticsの設定
Google Analyticsのアカウントを持っていない場合は、サイトから作成してください。最初に新しいプロファイルを作成します。
「新しいドメインのプロファイルを追加」を選択し、URLを入力します。ただし、今回はダミーのURLで構いません。「タイムゾーンの国または地域」が正しく設定されていることを確認し、「完了」をクリック。
トラッキングコードが設置されてない旨のアラートが出ますが、気にせずに次へ進みます。iOSアプリの場合は必要ありません。表示されている「ウェブプロパティID」(例:UA-xxxxxxxx-y)を控えておいてください。後ほど使用します。
Google Analytics SDKの導入
ライブラリの追加
ダウンロードしたSDKを展開し「Library」ディレクトリ内の「GANTracker.h」と「libGoogleAnalytics.a」をプロジェクトに追加します。
フレームワークの追加
Xcodeでプロジェクトファイルを開き「TARGETS」でアプリを選択、「Build Phases」「Link Binary With Libraries」の「+」ボタンを押して「CFNetwork.framework」と「libsqlite3.0.dylib」を追加します。
以上でGoogle Analytics SDKの導入は完了です。
トラッキングコードの実装
ライブラリのインポート
「<プロジェクト名>-Prefix.pch」で「GANTracker.h」をインポートしておくことで、各ViewControllerで個別にインポートする必要がなくなります。
#import <Availability.h> #ifndef __IPHONE_3_0 #warning "This project uses features only available in iPhone SDK 3.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import "GANTracker.h" #endif
トラッキングの開始
先ほど控えておいた「ウェブプロパティID」を開始メソッドに設定します。開始メソッドはapplication:didFinishLaunchingWithOptions:内で呼ぶようにします。dispatchPeriodは解析データの送信間隔(秒)となります。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[GANTracker sharedTracker] startTrackerWithAccountID:@"UA-xxxxxxxx-y" dispatchPeriod:10 delegate:nil]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; }
ページビューのトラッキング
各ViewControllerのviewDidLoadかviewWillAppearでtrackPageview:withError:を呼びます。
- (void)viewDidLoad { [super viewDidLoad]; NSError *error; if (![[GANTracker sharedTracker] trackPageview:@"/target_page" withError:&error]) { // エラーハンドリング } }
イベントのトラッキング
イベントのトラッキングには「カテゴリ」「アクション」「ラベル」の3段階にグループ分けができます。クラス名、メソッド名、パラメータあたりを対応させるのがいいのではないかと思います。ちなみに「カテゴリ」と「アクション」は必須です。
- (IBAction)buttonTapped { NSError *error; if (![[GANTracker sharedTracker] trackEvent:@"my_category" action:@"my_action" label:@"my_label" value:-1 withError:&error]) { // エラーハンドリング } }
計測結果の確認
新バージョンのGoogle Analyticsの「リアルタイム解析」を使用すれば、ほぼリアルタイムに計測のテストが行えます。Google Analyticsのトップにある[新しいバージョン]のリンクをクリックし、「ホーム」-「リアルタイム解析(ベータ版)」-「サマリー」をクリックします。アプリを操作し計測ログが送信されると、数秒後に計測結果が反映されます。
その他
オフライン時の計測データについて
Webと違いiOSアプリはオフライン時にも利用されます。オフライン時のデータは一旦端末に記録されて、オンラインでデータ送信可能なタイミングでまとめて送信されます。
gitコマンドの結果をカラー表示するには
git statusやgit diffなどの結果を見やすくカラー表示するには、以下のコマンドを実行します。
git config --global color.ui true
~/.gitconfigを直接編集してもOKです。
[color] ui = true
第九回 iPhone Developer Workshopで発表してきました
懸賞チャンスのリリースでだいぶTitanium Mobileのノウハウがたまってきたので、
7/24(日)にすくらむ21で開催された第九回 iPhone Developer Workshopで「Titanium Mobileはじめました」というテーマで発表してきました。そのときの発表資料を公開しておきます。
まだまだ不安定な面もありますが、簡単なアプリを作るにはものすごく楽できる開発環境なので、もうしばらくTitanium Mobileを使ってみたいと思います。