SlideShare uma empresa Scribd logo
1 de 31
Web系エンジニアが
iPhoneアプリ開発を
1年続けてみて学んだこと
自己紹介
• 渡邉 将人
 • Twitter  @nave_m




                                       2012/6/29
 • Facebook facebook.com/masato.nave




                                       BPStudy#58
• ゆめみ で 働いているプログラマ
 • スマートフォン アプリ、Web
 • C/C++, Objective-C , Python




                                         2
本日の内容
• iPhoneアプリ開発のノウハウ




                     2012/6/29
• 継続開発




                     BPStudy#58
• エンジニア視点



• 今回の対象外
 • 細かい設計・実装
 • 企画・プロモーション
                       3
発表の流れ
1.   iPhoneアプリ Nailbookのご紹介




                              2012/6/29
2.   開発前にすべきこと




                              BPStudy#58
3.   リリース後にすること

4.   バージョンアップを続ける上で

5.   まとめ

                                4
2012/6/29
                       BPStudy#58
ネイルの写真を共有するiPhoneアプリ

NAILBOOKのご紹介             5
Nailbookとは

• ネイル好きのためのiPhoneアプリ




                                                        2012/6/29
  • みんなのネイル写真を見る




                                                        BPStudy#58
  • 自分のネイルを投稿する



• App Store
  http://itunes.apple.com/jp/app/nailbook/id432831907

                                                          6
• Webサイト http://nailbook.jp/
ネイルの写真を見る・探す
       • 写真が豊富




                        2012/6/29
       • 検索機能
        •   色




                        BPStudy#58
        •   デザイン
        •   シーン
        •   ハンド/フット
        •   サロン / セルフ

                          7
写真をお気に入り登録
       • かわいい ボタン
        • フィードバック




                          2012/6/29
        • Facebookのいいね!




                          BPStudy#58
       • ランキング
        • 過去 1週間 集計
        • 実際にウケている
          旬のネイルがわかる
                            8
開発に関して
• 使用言語
 • アプリ:Objective-C




                                        2012/6/29
 • サーバ:Python + Django




                                        BPStudy#58
• プロジェクト開始時のPG経験
 • iPhoneアプリ: Web中心(ネイティブはほぼ未経験)
 • Python :3か月くらいGAEさわったことがある程度
 • Django : 未経験


• 開発期間
 • 初期開発 2011/2 – 2011/4
                                          9
 • 追加開発 2011/5 – 現在に至る (途中1ヶ月ほど別アプリも)
主なバージョンアップ
•   2011/2 開発着手
•   2011/5 Ver.1.0




                                2012/6/29
•   2011/7 Ver.1.4 写真の表示方法を変更
•   2011/8 Ver.2.0 メニューを大幅に変更




                                BPStudy#58
•   2011/10 Ver.2.3 Push通知に対応
•   2012/3 Ver.3.0 ユーザ検索
•   2012/3 Ver.3.1 写真検索



• 累計37回のアップデート (1ヶ月に3回のペース)
                                10
2012/6/29
                      BPStudy#58
Appleのプラットフォームを理解する

開発前にすべきこと             11
アプリが世に出るまで
1.   開発者登録、アプリ公開用登録をする




                            2012/6/29
2.   アプリを開発する




                            BPStudy#58
3.   申請してAppleによるレビューを受ける

4.   App Storeに公開




                            12
Appleによるレビュー
• レビューを通らないと公開できない
 • バージョンアップにも毎回レビューが要る




                          2012/6/29
• 「ガイドライン」と「レビュー担当者」が絶対




                          BPStudy#58
• レビュワーは米国にしかいないらしい




                          13
却下される条件を知る
• App Store Review Guideline
  • 閲覧にiOS Developer Program登録が必要




                                    2012/6/29
  • 英語




                                    BPStudy#58
• レビューで却下される条件は必読

• アプリ関係者全員で読んだほうがよい




                                    14
iOS開発環境を知る
どんな開発でも言語とフレームの理解は重要
• Objective-C




                                                           2012/6/29
  • 独特 (書式、メモリ管理)

• iOS SDK




                                                           BPStudy#58
  • パターンさえを覚えてしまえば生産性は高い
  • Referenceに従わないコードはRejectされます
     • 例 ) ファイル保存のディレクトリ
     • App Store Review Guideline - 2. Functionality を読む


• その他
  • 非同期通信、 タッチ処理、画面のコントローラなど
    イベント駆動なアプローチがたくさん                                      15
iOS Developer Library を読む
アプリ全体、概念的な設計
• iOS Human Interface Guidelines




                                              2012/6/29
• iOS App Programming Guide




                                              BPStudy#58
画面構成、 ある画面におけるイベント管理
• View Controller Programming Guide for iOS
• View Programming Guide for iOS




                                              16
サンプルをたくさん動かす
• ドキュメントとサンプルを行ったり来たり




                               2012/6/29
• 慣れてきたら3rd Partyライブラリを使ってみる




                               BPStudy#58
• 困ったらStackOverflow




                               17
2012/6/29
             BPStudy#58
計画外のことばかり

リリース後にすること   18
いざリリースしてみると
計画外のことだらけ




                       2012/6/29
• ライバルアプリの出現




                       BPStudy#58
• 新しいiOSで動かない

• AppStoreのユーザ評価が荒れる




                       19
AppStoreのユーザ評価
• 評価点数(☆1~☆5)がダウンロードに影響
 • ☆1評価 をなんとかして回避したい




                          2012/6/29
 • できれば ☆5をつけてほしい




                          BPStudy#58
                          20
エンジニアができること
• 品質を高める




                  2012/6/29
• バグをすぐに修正する




                  BPStudy#58
• よい評価を促す仕組みを作る




                  21
品質を高める
iOS開発ではメモリ管理に特に気をつける




                                                                                     2012/6/29
• メモリの解放忘れ




                                                                                     BPStudy#58
 ゆめ技:Objective-CのPropertyの解放忘れを見つけるスクリプト
 By @mokemokechicken
 http://yumewaza.yumemi.co.jp/2012/01/objectivecproperty.html



• Nailbookでは 画像関連のメモリ管理
 • カメラ撮影、画像の加工、大量のダウンロード

 ゆめ技:iOSシミュレータでメモリ警告を定期的に発生させる
 By @mokemokechicken                                                                 22
 http://yumewaza.yumemi.co.jp/2012/03/memorywarningsender_in_ios_simulatorios.html
バグをすぐに修正する
  • 1週間ごとに機能追加Ver.を申請し、
    バグ修正もそこに含めてしまう




                                                                                          2012/6/29
  • レビューでRejectされたら指摘事項を修正して、




                                                                                          BPStudy#58
    その間に作った機能もマージして最申請
    → Git大活躍

  • 機能追加は可能な限り小分けにする
    → チケット駆動開発

ゆめ技:Git-Redmine: GitのコミットとRedmineを連携する。チケット駆動開発にも。
By @coiledcoil                                                                            23
http://yumewaza.yumemi.co.jp/2011/08/git-redmine-integration-using-rest-api-python.html
奥の手: Expedited Review
• 通常1週間ぐらいかかるAppleのレビューを
  即日で通してもらう




                               2012/6/29
 • Appleのサイトから英語で申請
 • 本当に困ったときだけ使う
  • 例 )外部インフラが障害で乗り換えが必要になった




                               BPStudy#58
                               24
よい評価を促す仕組みを作る
• アプリのお得意様にレビューしてほしい




                          2012/6/29
• ある回数起動したら、依頼のダイアログを出す




                          BPStudy#58
                          25
バージョンアップを続ける上で




                 BPStudy#58   2012/6/29
  26
アプリバージョンが混在する
• 古いVer.のアプリを使い続けるユーザがいる
 • アプリとWebAPIとの整合性をどうやって保つのか?




                                2012/6/29
                                BPStudy#58
• 強制バージョンアップ
• クライアントの混在を許す設計



                                27
強制バージョンアップ
• アプリ起動時に最新バージョンを問い合わせる
  WebAPIを用意




                          2012/6/29
• 現在のアプリよりも新しいものがあれば、




                          BPStudy#58
  AppStoreへ移動させるダイアログ表示




                          28
クライアントの混在を許す
• APIのレスポンスボディ の拡張方法
 • JSON へ 新しい要素の追加はOK




                               2012/6/29
 • 既存の要素の削除・改名はNG
   • パース時にデフォルト値になってしまう




                               BPStudy#58
• レスポンスの仕様を大きく変える場合、API を分ける
 • URIにVer番号を入れる
   • GET /1/app/action




                               29
まとめ
• Appleのルールを理解し、適応する




                                  2012/6/29
• 細かく、継続的に改善する
  • 開発言語にPythonを使っているのなら




                                  BPStudy#58
    書籍 「Pythonプロフェッショナルプログラミング」
    はぜひ読んでおきたい


さりげなく重要
• 技術英語 ( Reading )


                                  30
ありがとうございました




     BPStudy#58      2012/6/29
31

Mais conteúdo relacionado

Destaque

【企画書】チャットワーク:社内検討用資料
【企画書】チャットワーク:社内検討用資料【企画書】チャットワーク:社内検討用資料
【企画書】チャットワーク:社内検討用資料Find Job Startup
 
女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -Shoko Tanaka
 
Cyta.jp_サービスEC説明資料
Cyta.jp_サービスEC説明資料Cyta.jp_サービスEC説明資料
Cyta.jp_サービスEC説明資料Find Job Startup
 
PIXTA_シードラウンド用事業プラン説明資料
PIXTA_シードラウンド用事業プラン説明資料PIXTA_シードラウンド用事業プラン説明資料
PIXTA_シードラウンド用事業プラン説明資料Find Job Startup
 
BASE_プレゼン用サービス説明資料
BASE_プレゼン用サービス説明資料BASE_プレゼン用サービス説明資料
BASE_プレゼン用サービス説明資料Find Job Startup
 
ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書Find Job Startup
 
メルカリ_サービス説明資料
メルカリ_サービス説明資料メルカリ_サービス説明資料
メルカリ_サービス説明資料Find Job Startup
 
創業時の「nanapiのナマ企画書」
創業時の「nanapiのナマ企画書」創業時の「nanapiのナマ企画書」
創業時の「nanapiのナマ企画書」Find Job Startup
 

Destaque (10)

【企画書】チャットワーク:社内検討用資料
【企画書】チャットワーク:社内検討用資料【企画書】チャットワーク:社内検討用資料
【企画書】チャットワーク:社内検討用資料
 
女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -女子の心をつかむUIデザインポイント - MERY編 -
女子の心をつかむUIデザインポイント - MERY編 -
 
Cyta.jp_サービスEC説明資料
Cyta.jp_サービスEC説明資料Cyta.jp_サービスEC説明資料
Cyta.jp_サービスEC説明資料
 
PIXTA_シードラウンド用事業プラン説明資料
PIXTA_シードラウンド用事業プラン説明資料PIXTA_シードラウンド用事業プラン説明資料
PIXTA_シードラウンド用事業プラン説明資料
 
Spc2015 53
Spc2015 53Spc2015 53
Spc2015 53
 
BASE_プレゼン用サービス説明資料
BASE_プレゼン用サービス説明資料BASE_プレゼン用サービス説明資料
BASE_プレゼン用サービス説明資料
 
ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書ストリートアカデミー_ローンチ前企画書
ストリートアカデミー_ローンチ前企画書
 
Spc2014 24
Spc2014 24Spc2014 24
Spc2014 24
 
メルカリ_サービス説明資料
メルカリ_サービス説明資料メルカリ_サービス説明資料
メルカリ_サービス説明資料
 
創業時の「nanapiのナマ企画書」
創業時の「nanapiのナマ企画書」創業時の「nanapiのナマ企画書」
創業時の「nanapiのナマ企画書」
 

BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと