BPStudy58 第1部...
-
Upload
masato-watanabe -
Category
Documents
-
view
8.966 -
download
0
description
Transcript of BPStudy58 第1部...
Web 系エンジニアがiPhone アプリ開発を1 年続けてみて学んだこと
自己紹介• 渡邉 将人• Twitter @nave_m• Facebook facebook.com/masato.nave
• ゆめみ で 働いているプログラマ• スマートフォン アプリ、 Web• C/C++, Objective-C , Python
2012
/6/2
9BP
Stud
y#58
2
本日の内容• iPhone アプリ開発のノウハウ
• 継続開発
• エンジニア視点
• 今回の対象外• 細かい設計・実装• 企画・プロモーション
2012
/6/2
9BP
Stud
y#58
3
発表の流れ1. iPhone アプリ Nailbook のご紹介
2. 開発前にすべきこと
3. リリース後にすること
4. バージョンアップを続ける上で
5. まとめ
2012
/6/2
9BP
Stud
y#58
4
NAILBOOKのご紹介ネイルの写真を共有する iPhone アプリ
2012
/6/2
9BP
Stud
y#58
5
Nailbook とは
• ネイル好きのための iPhone アプリ
• みんなのネイル写真を見る
• 自分のネイルを投稿する
• App Store http://itunes.apple.com/jp/app/nailbook/id432831907
• Web サイト http://nailbook.jp/
2012
/6/2
9BP
Stud
y#58
6
ネイルの写真を見る・探す• 写真が豊富
• 検索機能• 色• デザイン• シーン• ハンド / フット• サロン / セルフ
2012
/6/2
9BP
Stud
y#58
7
写真をお気に入り登録• かわいい ボタン• フィードバック• Facebook のいいね !
• ランキング • 過去 1 週間 集計• 実際にウケている
旬のネイルがわかる
2012
/6/2
9BP
Stud
y#58
8
開発に関して• 使用言語• アプリ: Objective-C• サーバ: Python + Django
• プロジェクト開始時の PG 経験• iPhone アプリ: Web 中心(ネイティブはほぼ未経験)• Python : 3 か月くらい GAE さわったことがある程度• Django : 未経験
• 開発期間• 初期開発 2011/2 – 2011/4• 追加開発 2011/5 – 現在に至る ( 途中 1 ヶ月ほど別アプリ
も )
2012
/6/2
9BP
Stud
y#58
9
主なバージョンアップ• 2011/2 開発着手• 2011/5 Ver.1.0 • 2011/7 Ver.1.4 写真の表示方法を変更• 2011/8 Ver.2.0 メニューを大幅に変更• 2011/10 Ver.2.3 Push 通知に対応• 2012/3 Ver.3.0 ユーザ検索• 2012/3 Ver.3.1 写真検索
• 累計 37 回のアップデート (1 ヶ月に 3 回のペース )
2012
/6/2
9BP
Stud
y#58
10
開発前にすべきことApple のプラットフォームを理解する
2012
/6/2
9BP
Stud
y#58
11
アプリが世に出るまで1. 開発者登録、アプリ公開用登録をする
2. アプリを開発する
3. 申請して Apple によるレビューを受ける
4. App Store に公開
2012
/6/2
9BP
Stud
y#58
12
Apple によるレビュー• レビューを通らないと公開できない• バージョンアップにも毎回レビューが要る
• 「ガイドライン」と「レビュー担当者」が絶対
• レビュワーは米国にしかいないらしい
2012
/6/2
9BP
Stud
y#58
13
却下される条件を知る• App Store Review Guideline• 閲覧に iOS Developer Program 登録が必要• 英語
• レビューで却下される条件は必読
• アプリ関係者全員で読んだほうがよい
2012
/6/2
9BP
Stud
y#58
14
iOS 開発環境を知るどんな開発でも言語とフレームの理解は重要• Objective-C • 独特 ( 書式、メモリ管理 )
• iOS SDK• パターンさえを覚えてしまえば生産性は高い• Reference に従わないコードは Reject されます
• 例 ) ファイル保存のディレクトリ• App Store Review Guideline - 2. Functionality を読む
• その他• 非同期通信、 タッチ処理、画面のコントローラなど
イベント駆動なアプローチがたくさん
2012
/6/2
9BP
Stud
y#58
15
iOS Developer Library を読むアプリ全体、概念的な設計• iOS Human Interface Guidelines • iOS App Programming Guide
画面構成、 ある画面におけるイベント管理• View Controller Programming Guide for iOS• View Programming Guide for iOS
2012
/6/2
9BP
Stud
y#58
16
サンプルをたくさん動かす• ドキュメントとサンプルを行ったり来たり
• 慣れてきたら 3rd Party ライブラリを使ってみる
• 困ったら StackOverflow
2012
/6/2
9BP
Stud
y#58
17
リリース後にすること計画外のことばかり
2012
/6/2
9BP
Stud
y#58
18
いざリリースしてみると計画外のことだらけ
• ライバルアプリの出現
• 新しい iOS で動かない
• AppStore のユーザ評価が荒れる
2012
/6/2
9BP
Stud
y#58
19
AppStore のユーザ評価• 評価点数 ( 1☆ ~☆ 5) がダウンロードに影響• ☆1評価 をなんとかして回避したい• できれば ☆ 5 をつけてほしい
2012
/6/2
9BP
Stud
y#58
20
エンジニアができること• 品質を高める
• バグをすぐに修正する
• よい評価を促す仕組みを作る
2012
/6/2
9BP
Stud
y#58
21
品質を高めるiOS 開発ではメモリ管理に特に気をつける
• メモリの解放忘れ
• Nailbook では 画像関連のメモリ管理• カメラ撮影、画像の加工、大量のダウンロード
2012
/6/2
9BP
Stud
y#58
22
ゆめ技: Objective-C の Property の解放忘れを見つけるスクリプトBy @mokemokechickenhttp://yumewaza.yumemi.co.jp/2012/01/objectivecproperty.html
ゆめ技: iOS シミュレータでメモリ警告を定期的に発生させるBy @mokemokechickenhttp://yumewaza.yumemi.co.jp/2012/03/memorywarningsender_in_ios_simulatorios.html
バグをすぐに修正する• 1 週間ごとに機能追加 Ver. を申請し、
バグ修正もそこに含めてしまう
• レビューで Reject されたら指摘事項を修正して、その間に作った機能もマージして最申請 → Git 大活躍
• 機能追加は可能な限り小分けにする→ チケット駆動開発
2012
/6/2
9BP
Stud
y#58
23ゆめ技: Git-Redmine: Git のコミットと Redmine を連携する。チケット駆動開発にも。By @coiledcoilhttp://yumewaza.yumemi.co.jp/2011/08/git-redmine-integration-using-rest-api-python.html
奥の手: Expedited Review• 通常 1 週間ぐらいかかる Apple のレビューを即日で通してもらう• Apple のサイトから英語で申請• 本当に困ったときだけ使う
• 例 )外部インフラが障害で乗り換えが必要になった
2012
/6/2
9BP
Stud
y#58
24
よい評価を促す仕組みを作る• アプリのお得意様にレビューしてほしい
• ある回数起動したら、依頼のダイアログを出す
2012
/6/2
9BP
Stud
y#58
25
バージョンアップを続ける上で
2012
/6/2
9BP
Stud
y#58
26
アプリバージョンが混在する• 古い Ver. のアプリを使い続けるユーザがいる• アプリと WebAPI との整合性をどうやって保つのか?
• 強制バージョンアップ• クライアントの混在を許す設計
2012
/6/2
9BP
Stud
y#58
27
強制バージョンアップ• アプリ起動時に最新バージョンを問い合わせる
WebAPI を用意
• 現在のアプリよりも新しいものがあれば、AppStoreへ移動させるダイアログ表示
2012
/6/2
9BP
Stud
y#58
28
クライアントの混在を許す• API のレスポンスボディ の拡張方法• JSON へ 新しい要素の追加は OK• 既存の要素の削除・改名は NG
• パース時にデフォルト値になってしまう
• レスポンスの仕様を大きく変える場合、 API を分ける• URI に Ver番号を入れる
• GET /1/app/action
2012
/6/2
9BP
Stud
y#58
29
まとめ• Apple のルールを理解し、適応する
• 細かく、継続的に改善する• 開発言語に Python を使っているのなら
書籍 「 Python プロフェッショナルプログラミング」はぜひ読んでおきたい
さりげなく重要• 技術英語 ( Reading )
2012
/6/2
9BP
Stud
y#58
30
2012
/6/2
9BP
Stud
y#58
31
ありがとうございました