Submit Search
Upload
COOKPAD tab 勉強会 2014.04.24
•
3 likes
•
1,763 views
A
akahira
Follow
COOKPAD さんとの勉強会(第1回)。 2014/04/24
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 45
Download now
Download to read offline
Recommended
(BizRobo!)対業務改善用大型変形合体ロボット開発計画
(BizRobo!)対業務改善用大型変形合体ロボット開発計画
ssuser040811
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
Takafumi ONAKA
すこやかRails
すこやかRails
Takafumi ONAKA
Build an iOS app with ConcourseCI
Build an iOS app with ConcourseCI
健仁 天沼
Jazug tokyo-night bot-frameworkとかbotとか
Jazug tokyo-night bot-frameworkとかbotとか
Tsubasa Yoshino
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
Nao Minami
Recommended
(BizRobo!)対業務改善用大型変形合体ロボット開発計画
(BizRobo!)対業務改善用大型変形合体ロボット開発計画
ssuser040811
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
Takafumi ONAKA
すこやかRails
すこやかRails
Takafumi ONAKA
Build an iOS app with ConcourseCI
Build an iOS app with ConcourseCI
健仁 天沼
Jazug tokyo-night bot-frameworkとかbotとか
Jazug tokyo-night bot-frameworkとかbotとか
Tsubasa Yoshino
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
DeNA×マネーフォワード×Wantedly Railsエンジニアセミナー
Nao Minami
running-elixir-in-production
running-elixir-in-production
Tsunenori Oohara
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
RSpecしぐさ
RSpecしぐさ
Takafumi ONAKA
About Reauire.js
About Reauire.js
Kyohei Morimoto
Zabbix モジュール間の通信を暗号化する
Zabbix モジュール間の通信を暗号化する
Takeshi Yamane
チャットサービス運用の舞台裏
チャットサービス運用の舞台裏
Hiroaki Nagata
IPアドレスのおねだん
IPアドレスのおねだん
Kei Onimaru
a-blog cms の基本 福岡版
a-blog cms の基本 福岡版
Kasumi Morita
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する
裕士 常田
PHPで使うIPv6の実際
PHPで使うIPv6の実際
Tetsuji Koyama
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
rina0521
PHPプログラミングのIPv6対応の実際
PHPプログラミングのIPv6対応の実際
Tetsuji Koyama
Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829
Rikiya Kawakami
20150228 Realm超入門
20150228 Realm超入門
Kei Ito
趣味でのCosmos DBとの付き合い方
趣味でのCosmos DBとの付き合い方
Koichi Ota
Firebase × Swift ~ときどきPython~
Firebase × Swift ~ときどきPython~
Yuya Oka
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Kenji Mori
hello waf, hello phoenix
hello waf, hello phoenix
Tsunenori Oohara
ApplicationTemplateのススメ
ApplicationTemplateのススメ
Takafumi ONAKA
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
More Related Content
What's hot
running-elixir-in-production
running-elixir-in-production
Tsunenori Oohara
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
RSpecしぐさ
RSpecしぐさ
Takafumi ONAKA
About Reauire.js
About Reauire.js
Kyohei Morimoto
Zabbix モジュール間の通信を暗号化する
Zabbix モジュール間の通信を暗号化する
Takeshi Yamane
チャットサービス運用の舞台裏
チャットサービス運用の舞台裏
Hiroaki Nagata
IPアドレスのおねだん
IPアドレスのおねだん
Kei Onimaru
a-blog cms の基本 福岡版
a-blog cms の基本 福岡版
Kasumi Morita
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する
裕士 常田
PHPで使うIPv6の実際
PHPで使うIPv6の実際
Tetsuji Koyama
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
rina0521
PHPプログラミングのIPv6対応の実際
PHPプログラミングのIPv6対応の実際
Tetsuji Koyama
Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829
Rikiya Kawakami
20150228 Realm超入門
20150228 Realm超入門
Kei Ito
趣味でのCosmos DBとの付き合い方
趣味でのCosmos DBとの付き合い方
Koichi Ota
Firebase × Swift ~ときどきPython~
Firebase × Swift ~ときどきPython~
Yuya Oka
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
Kenji Mori
hello waf, hello phoenix
hello waf, hello phoenix
Tsunenori Oohara
ApplicationTemplateのススメ
ApplicationTemplateのススメ
Takafumi ONAKA
What's hot
(20)
running-elixir-in-production
running-elixir-in-production
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
RSpecしぐさ
RSpecしぐさ
About Reauire.js
About Reauire.js
Zabbix モジュール間の通信を暗号化する
Zabbix モジュール間の通信を暗号化する
チャットサービス運用の舞台裏
チャットサービス運用の舞台裏
IPアドレスのおねだん
IPアドレスのおねだん
a-blog cms の基本 福岡版
a-blog cms の基本 福岡版
WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する
PHPで使うIPv6の実際
PHPで使うIPv6の実際
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
Raspberry Piで撮った写真を共有するアプリ on SoftLayer
PHPプログラミングのIPv6対応の実際
PHPプログラミングのIPv6対応の実際
Ruby用REST APIクライアントの紹介 20150829
Ruby用REST APIクライアントの紹介 20150829
20150228 Realm超入門
20150228 Realm超入門
趣味でのCosmos DBとの付き合い方
趣味でのCosmos DBとの付き合い方
Firebase × Swift ~ときどきPython~
Firebase × Swift ~ときどきPython~
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
ぼくのかんがえたさいきょうの Rails スタートダッシュ
ぼくのかんがえたさいきょうの Rails スタートダッシュ
hello waf, hello phoenix
hello waf, hello phoenix
ApplicationTemplateのススメ
ApplicationTemplateのススメ
Similar to COOKPAD tab 勉強会 2014.04.24
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
hideyuki ikeda
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
Ryo Iinuma
Api meetup LT
Api meetup LT
Daisuke Kasuya
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
takuma mori
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
拓将 平林
Hacker's meetup boost_vol1発表資料_20150902
Hacker's meetup boost_vol1発表資料_20150902
真一 藤川
TypeScript x Bot Framework
TypeScript x Bot Framework
Kazumi IWANAGA
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Yuhei Miyazato
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Noritada Shimizu
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Uchio Kondo
20181025 若手LT会 Codableあるある
20181025 若手LT会 Codableあるある
IgaHironobu
Windows azureって何
Windows azureって何
Kana SUZUKI
What is java_se_7
What is java_se_7
TakumiIINO
AWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャ
真吾 吉田
さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]
Yukihiko SAWANOBORI
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
Developers Summit
PowerShellでFunction Appしよう!
PowerShellでFunction Appしよう!
Tsubasa Yoshino
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
GoAzure
Similar to COOKPAD tab 勉強会 2014.04.24
(20)
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
オフラインファーストの思想と実践
オフラインファーストの思想と実践
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
Api meetup LT
Api meetup LT
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Hacker's meetup boost_vol1発表資料_20150902
Hacker's meetup boost_vol1発表資料_20150902
TypeScript x Bot Framework
TypeScript x Bot Framework
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
minneで学ぶクラウド脳
minneで学ぶクラウド脳
20181025 若手LT会 Codableあるある
20181025 若手LT会 Codableあるある
Windows azureって何
Windows azureって何
What is java_se_7
What is java_se_7
AWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャ
さくらのクラウドフォーメーション with Chef [XEgg session]
さくらのクラウドフォーメーション with Chef [XEgg session]
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
【デブサミ福岡B5】コードレビューの進め方~全員で行う品質の維持~
PowerShellでFunction Appしよう!
PowerShellでFunction Appしよう!
B 2-1 はじめての Windows Azure
B 2-1 はじめての Windows Azure
COOKPAD tab 勉強会 2014.04.24
1.
How tab for iPhone is
Made Yoshihiro Akahira (tab inc.)
2.
tab (iOS) iPhone iPad LatestVer.
v2.10.0 v1.2.6 Support OS iOS6∼ iOS5∼ Release 1 / 2~3 week 2013/9/14 • 開発体制 3 ∼ 4 人 • ARC 使用 • Auto layout 不使用(iOS5サポートしていた時の名残)
3.
今日話すこと • tab アプリの内側 •
API通信処理 • UI 工夫しているところ • iOS App 開発Tips • デバッグ • その他Tips
4.
API通信処理 Server JSON Model ネットワークライブラリ どうする? HTTPS
Mapping Dict Parsing
5.
ネットワークライブラリ • 非同期実行 • キャンセルできること •
コールバックがブロックで書きやすいこと • 安定していること
6.
MKNetworkKit • キャンセル可能 • 同じURLへのリクエストが複数あるとマージ してくれる •
レスポンスキャッシュ機構あり
7.
API通信処理 Server JSON Model MKNetworkKit 採用!! HTTPS
Mapping Dict Parsing パースはどうする?
8.
Parsing • Parser は特にこだわり無し •
速くて、安定してて、使いにくくなくて • じゃあ MKNetworkKit (NSJSONSerialization) で いいか
9.
API通信処理 Server JSON Model MKNetworkKit どうやって 保存する? ライブラリは? HTTPS
Mapping Dict Parsing MKNetworkKit 採用!!
10.
Mapping • ディスクに保存? メモリに保存? •
CoreDataを使う?リスクは??
11.
ディスクに保存? • アイテム等のデータは常に更新される →ネットワークから送られたものが常に正しい →揮発性で良い • 一方、画像データはディスクキャッシュ必須 •
投稿下書きデータはディスク保存必須
12.
メモリに保存? • 1ID =
1インスタンス のような構造 • 同じIDのインスタンスをメモリ上に複数持つのも無駄 →メモリ上でインスタンスを保持 • 注意 同じインスタンスを複数箇所で参照・変更すると 内容が意識外で変化することによる危険性がある
13.
CoreDataのリスク • マイグレーションのリスク マイグレーションシステム、コードの理解が難しい 慣れていないと予期しない動作をする場合がある • モデルのマージが難しい 複数人でいじりにくい
14.
じゃあ、どうする? • CoreDataを参考にして… • メモリ上にデータをキャッシュできる構造(1ID=1インスタンス) •
CoreData は使わず • RestKit でシリアライズ・デシリアライズする • CoreData を適用しようと思えば適用できる構造を意識 • 投稿下書きデータは KeyedArchiver で実装(AutoCoding ライブラリ)
15.
API通信処理 Server JSON Model MKNetworkKit RestKit 採用!! HTTPS
Mapping Dict Parsing MKNetworkKit CoreData
16.
今日話すこと • tab アプリの内側 •
API通信処理 • UI 工夫しているところ • iOS App 開発Tips • デバッグ • その他Tips
17.
UI
18.
Tap! Tap! tab帳 アイテム
19.
工夫したところ • ユーザを待たせない • 見やすい地図を表示
20.
ユーザを待たせない • UIが反応しない時間を短く NO!
21.
ユーザを待たせない • UIが反応しない時間を短く • 前ページまでに得られている情報のみで、 遷移先のページをまず表示する •
アイテムタイトル、アイテム説明 • 画像(サムネイル→精細画像)
22.
サムネイル
23.
ユーザを待たせない • 非同期取得・表示 • 別APIで取得するようなものは、非同期に 読み込み、読み込まれた時点で表示(更新) •
地図、同じ場所の別アイテム他
24.
見やすい地図を表示 Apple Map に難あり…
25.
見やすい地図を表示 • アイテムのマップには Google Static
Maps API 使用 • API 上限&遅延対策 Apple Map の上に Google Static Map を乗せて、上限 に達した時は非表示にし て下の Apple Map を表示
26.
http://youtu.be/9NLVfE8NwxM http://youtu.be/gR1yuXGe93k
27.
UI 系 ライブラリ •
AwesomeMenu 画面下のメニュー • CMPopTipView Tips吹出し
28.
UI 系 ライブラリ •
EGOTableViewPullRefresh PullTo Refresh • MBProgressHUD ローディング HUD
29.
UI 系 ライブラリ •
PSTCollectionView 2列表示ビュー • TSMiniWebBrowser 必要最低限の UI を持った WebView
30.
UI 系 ライブラリ •
IIViewDeckController サイドメニュー
31.
今日話すこと • tab アプリの内側 •
API通信処理 • UI 工夫しているところ • iOS App 開発 Tips • デバッグ • その他Tips
32.
iOS App 開発Tips
33.
デバッグコツ • BugSense でクラッシュ情報を収集 •
パンくずリストを併せて送信 →どういった操作でクラッシュするのか →Stacktrace が当てにならない時に有用
34.
デバッグコツ • MixPanel で統計的にバグを発見 •
新しいバージョンで ***ボタンを押す人が減った • 何か UI 変えた? → 変えてない → ある条件だと「***ボタンを押せない」等のバ グ発見
35.
位置情報系デバッグ方法 • シミュレータで SignificantLocationChange
を受ける方法 1.位置情報 無し に設定 2.シミュレータ終了 3.シミュレータ起動 4.位置情報を設定 → 発生! ❌GPS ✅Wifi ✅Cellular Battery Precision
36.
位置情報系デバッグ方法 • 位置情報をログに出力 • 読み出し
UI を用意 (DEBUGビルドのみ) • UserDefaults に保存
37.
位置情報系デバッグ方法 • でも、やっぱり最終的には… フィールドテスト • デバッグのため山手線一周など →荻窪駅周辺にバグを再現できるスポット発 見!
38.
iBeaconデバッグ (あしあと) • シミュレータは iBeacon
不可 • あしあと確認画面を用意
39.
今日話すこと • tab アプリの内側 •
API通信処理 • UI 工夫しているところ • iOS App 開発Tips • デバッグ • その他 Tips
40.
Continuous Integration Jenkins Developer GitHub ModuleTest UITest TestFlight Build TestFlight UploadDistribute Merge 社内 Polling Trigger Beta
Users Mail & HipChat Download
41.
コードレビュー • 誰か一人にレビューしてもらう • Git
の pre-commit で Uncrustify (コードフォーマッタ) →しょうもない指摘をしなくて済む →スタイル論争が不要になる
42.
Storyboard • 複数人開発するとマージでコンフリクト
43.
Storyboard • 複数人開発するとマージでコンフリクト • Storyboard
を分割 同時に Storyboard をいじる可能性が減る • マージの際 Classes を削除 • <inferredmetricstiebrakers> → 中の要素を削除 Git の pre-commit で自動削除
44.
Apple Review Reject •
マップの Google ロゴの上に UI を乗せてしまってアウト まだ Apple のマップがなかった時代 • ライセンスには気をつけよう • Reject ではないけれど… • どういうアプリかよくわからんから動画に撮って送って くれ
45.
今日話すこと • tab アプリの内側 •
API通信処理 • UI 工夫しているところ • iOS App 開発Tips • デバッグ • その他Tips ご清聴、ありがとうございました
Download now