iphoneとandroidのアプリ開発最新潮流
DESCRIPTION
高橋 憲一、楽天株式会社 『第21回ソフトウェア開発環境展 専門セミナー』講演資料 iPhoneやAndroidが世に出てから数年経過し、ここにきて爆発的普及を見せており、 その上で動くアプリケーションはさまざまな分野から求められている。 開発環境の動向、陥りやすいポイント、テスト手法などについて、 アプリ開発者としてのこれまでの経験を踏まえて紹介する。TRANSCRIPT
iPhoneとAndroidの
アプリ開発最新潮流
Rakuten, Inc. May/9/2012
1
今日のトピック
1 開発環境の動向
2 アプリケーションの動向
4 テスト環境
3 陥りやすいポイント
2
1 開発環境の動向
3
標準のツール
• iPhone
– Xcode
– Simulator
– 言語 Objective-C
• Android
– Eclipse + ADT
– Emulator
• 最近 GPU サポートがついて幾らか使えるレベルに
– 言語 Java
– NDK を使って C, C++ で一部、及び全体を実装することも可能
• 一部をC,C++で書いた場合、JNI経由で関数を呼び出す。
• 既存のC,C++で書かれたライブラリを移植する際にも有効
4
iPhone
• 最新の環境は iOS 5.1
• 日本でデビューして間もなく4年
– 当時は iPhone OS 2.0 だった。
– 名前も iPhone OS から iOS に
• iOS 4.0 から
• デバイスの進化とともに OS も機能が増えて進化
– GPS, 電子コンパス, ジャイロスコープ、iPad
– 5.1では日本語のディクテーションもサポート
5
アプリの動作対象OSバージョン - iOS
• 新バージョンのOSでしか使えないAPIを使うとき
• 新バージョンのOSにしか存在しないフレームワークを使うとき
– 対象となるフレームワークを weak link にする。
if (NSClassFromString(@"UIDictationPhrase")) {
//使用出来る場合のコード
}
6
Android
• 最新の環境は4.0.x (ics … Ice Cream Sandwich)
• 日本での端末デビューからは3年だが、
– 開発環境はオープンだったため、デバイス登場以前から日本Androidの会の元となったAndroid勉強会などの活動でアプリ開発は進められていた。
• GPS, 電子コンパス, ジャイロスコープ、に加えてNFCもある。
7
メモリ管理
• iOS
– リファレンスカウント
– ARC
• iOS 5.0 より
• Android
– Java … garbage collection
8
iOS - ARC
• Automatic Reference Counting
– GC とは異なる。
– リファレンスカウントの自動化
• [object retain], [object release] が不要になる。
– 人の手だけでは漏れがちなメモリリーク、二重解放などを削減できる。
– コンパイラレベルで自動化されている。
• Apple LLVM compiler
– iOS 4以降が対象、積極的に使うべき
• フルに活用するには iOS 5 以降
– iOS4では __weak 修飾子が使えない
9
タブレット対応
• iOS
– Universal Application
• iPhone, iPad 両方で動くアプリ
• Android
– Fragment
• 画面の広さに合わせて動的にレイアウトを変更
– Multiple APK Support
• Google Play (旧 Android Market)
–一つのアプリ登録で複数のバイナリ(apk)を登録可能
10
Android - Fragment
• デバイスの画面に合わせて画面の構成を動的に変えられる。
• 例:メーラーアプリ
– 解像度が高く画面も広いタブレットではマルチペイン
– 画面の狭いフォン端末ではシングルペイン
11
Android – Multiple APK Support
• フィルター毎に別々のapkをビルドして提供出来る。
– Google Play上は一種類のアプリ
• フィルターの種類
– OpenGL の textuer 圧縮方式
– スクリーンサイズ
– API Level
12
デバイスの画面解像度
• 今やiOSデバイスも4種類!
– 320x480 … iPhone 3GS 以前
– 640x960 … iPhone 4 以降 (Retina Display)
– 1024x768 … iPad, iPad2
– 2048x1536 … New iPad (Retina Display)
• Android 多くの種類の解像度
– 320x480 … 初代Android端末 G1 等
– 480x800
– 480x854
– 540x960
– 1280x800
– …..
• 解像度に依存しない実装を!
13
解決方法
• iOSのアプローチ
– Pixel ではなく Point という概念
– XXX.png と [email protected] というリソースを用意する。
• 実行時に自動的に判断して読み分けられる。
• Android
– dip という単位
• Density Independent Pixels … 密度非依存のピクセル
• 同じ値ならば異なる解像度でも見た目は同じ大きさになるよう表示される。
– 解像度の細かさ毎のリソースを用意
• drawable-mdpi, drawable-hdpi 等
14
サードパーティ製の開発ツール
• Titanium
– Java Script
• PhoneGap
– HTML5 アプリケーションをネイティブアプリ化する
• Unity
– 3Dグラフィクスを活用したゲーム向け
– C#, Java Script
• これら3つに共通する特徴
– iPhone, Android どちらのアプリも作ることができる。
15
2 アプリケーションの動向
16
UI
• どんどん凝る方向に
– 例: Path, iPhoto, Clear
• Android
– ics でハードボタンは無くなる方向に
– Fragment
17
他アプリとの連携
• Android
– Intentでシームレスに
• iPhone
– URLScheme
– Androidほどシームレスではない
18
3 陥りやすいポイント
19
iPhoneとAndroid両方にあるアプリ
• ありがちなこと
– 「Android版もiPhoneと同じUIに」---×
• 事例: Twitter 公式アプリ
– iPhone版、Android版ともにリリースされている。
– タブバーの位置が異なる。
• iPhoneは下
• Androidは上
20
セキュリティ
• Android Manifest 設定
– 不要なものはセットしない
• 情報を抜き取るアプリではないかと怪しまれる。
• ユーザー識別にUDIDは使用しない
– iOS 5.0 以降 UDID取得APIはobsoleteに。
21
4 テスト環境
22
テストの自動化
• 各プラットフォーム固有のもの
– iPhone
• UIAutomation
– Android
• monkeyrunner
• 両方で使えるもの
– NativeDriver (Google, Open Source) --- 開発終了
– MonkeyTalk (GORILLA LOGIC)
23
CI
• Continuous Integration(継続的インテグレーション)
– 主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣。XPのプラクテイスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する。 … Wikipediaより
24
CIをサポートするツール
• Jenkins
– iPhone, Androidの開発でも使用事例が増えている。
– プラグイン
• Xcode用
• Android emulator 用
• コードレビューとの組み合わせ
– Gerrit
– Jenkinsでビルドが通ることを自動確認し、通らなければ自動でリジェクト