毎月開催しているiOS/AndroidのTips交換会、今回で15回になるpotatotipsに参加してきました。今回はSansan株式会社で開催されました。
iOS/Androidの発表をまとめていますが問題があれば@yimajoまでご指摘ください。
Realmビギナーが知っとくべき内容で打線組んだwww
@yimajoの発表。
- Realmあるあるを話したい
- nil/NSNullの保存はサポートしていない仕様
- NSStringはnilを突っ込めるため不思議だったが実は保存されるのは空文字
- NSDateはミリ秒以下を保存できない(バグかと思ってたが正確にはAndroid側と同じ仕様にしているらしい)
- NSDateでnil/NSNullを保存できないのは適当な値を入れにくいので困る
- 日付をNSStringで保存するのも方法としてある
- Realm周辺のライブラリやツールを説明
- Realm+JSONは自動の型変換が強力すぎて使ってない
- JSONExportの生成されるコードをカスタマイズがおすすめ
懇親会で出た質問
Q. そもそもDBを使う基準ってどうしてます?(質問者 @tokorom)
そのときの回答
- 永続化したいデータ数が多く、「検索」が必要な場合DB使いたいと思います
- そうでなければplistなんかに保存して充分そうならそれで
Q. SQLite, Core Data, Realm の使い分けとかある?(質問者 @tokorom)
そのときの回答
- SQLiteとFMDBを使ってオレオレORマッパーもどきをみんなが作ってるはず
- みんなもうそろそろ消耗してるはず
- Core DataはORマッパーとしても使えるしXcodeからクラスの関連図を書けて設計を確認しやすい
- SQLiteとFMDBを使うならRealmを使うぐらいの軽いノリで調査するのがいいと思う
その他
- Realmのサンプルコード分かりやすい。Realm Examples (@kitasuke)
Microframeworks
発表者は@cockscomb。
- 最近Webアプリで流行っているMicroservicesという用語はアプリ開発ではframework分割することに当てはまる
- メリットとしてコンパイルが別々なのでFramework毎にコンパイルできるので時間短縮も出来る
- モデルの部分はUIがないからテストは手動じゃなく自動テストになる
- アプリケーションをドメインごとに分離しようとする意識が芽生えて良い
AndroidのView再利用方法まとめ
発表者は@konifar
- Taptripというアプリを作っている
- TextView共通な部分があるからスタイルでくくる
WebとiOSアプリでパスワードを共有する(Shared Web Credentialについて)
スライドではなく自身のブログからの発表でした。
WebとiOSアプリでパスワードを共有する
- パスワードはランダムに生成することがあるのでよくわかんなくなってやめてしまったりする
- そういう機会を減らす
- アプリでパスワード入力時
- MacでログインしていたらiCloudでログインしてたらそれが選べる
- XcodeからWebサイトの関連付けの設定が必要
GradleTips
発表者は@hosokawa0825
http://hosokawa0825.github.io/slides/GradleTips/#/
- よくあるProduct Flavorの例
- いくつか問題点があるのでそれの解決策
Introducing Tuna
発表者は@dealforest
- TunaというXcodeのプラグインを作っている
- プリントデバッグをビルドしなおさなくて出来る
- 変数を出力できるBreakpointを設定
- Cmd+/でブレークポイントの追加削除ショートカット
- もともとプラグインじゃない方法があってそれが面倒だった
- Add Actionから[bt 5]とブレークしない設定にすれば同じことができる
カレンダーを自作する
発表者は@fumisac
ハンドメイドカレンダー(iOS用サンプル)を作りました (解説付)
- イケてるカレンダーがなかったので作った
- 参考にしたのはアプリはフリル
- GitHubにpushしている
- 祝日計算している
- 今はないけど未来に設定される祝日も調べて実装した
アプリ滞在時間を知るTIPS
発表者は@heki1224
- グノシーはアプリ滞在時間をActivityのStart/Stopで計測してる
- Activityについてライフサイクルをフックできるのでそのタイミングで測定
- onCreateで登録
- onTerminateで解除
- onActivityStartでハッシュコードをつめて計測開始
- onActivityStopした時、時間計測をやめる
バックグラウンドで無限にアップロードに挑戦した話
発表者は@ainame
- 見てねというアルバムアプリをリリースした
- 赤ちゃんの画像をアップロードするアプリ
- よくあるアルバムアプリなどは一枚ずつなので制限がある
- 画像アップロードをバックグラウンドで行えば制限がなくなる
- やり方
- バックグラウンド通信のNSURLSessionを使う
- 永続化JOBキューのEDQueueというライブラリを利用
- Silent Remote Notificationで繰り返しで無限できた
- あくまでやったら出来たという話で未検証な部分もある
アプリにおける「おもてなし」Tips
発表者は@shoby
- ユーザーにエラーでびっくりさせたくない
- エラーを表示させないための具体的な回避方法
- 表示させるときは「〜失敗しました」より「〜できません」
- ボタンを押す恐怖を和らげる
- ユーザーは初めてのボタン押すとき何が起こるか分かんない
- 迅速にフィードバック
- ユーザーの言葉で説明
- 頑張って入力されたデータを守る
- まとめ
- エンジニア妥協すなーー!
Effective UIScrollView
発表者は@hedjirog
- ジェスチャーを親ビューに譲渡
- UIScrollViewの背後にあるものもタップ可能に
- addGestureRecogNizerを利用
- hitTestも利用
CircleCIで消耗してみた話
発表者は@huin
- リポジトリにpushしてから10分ぐらいかかる
- なんとか早くならんものか
- 時間のかかってる時間をログから調べた
- これやっとけみたいなベストプラクティスがないので消耗したという話
Introducing APIKit
発表者は@ishkawa。
- SwiftはType Safeなのでそれに則したWeb API Clientをつくろう
- パラメータにEnum
- レスポンスは2パターンのみに制限(Enumなので網羅性ばっちり)
- Requestプロトコルを使う
- まるでドキュメントのような定義ができる
GooglePlayへのアップロード自動化を試してみた
発表者は@horie1024。
- gradle-play-publisherが既にあったので使ってみよう
- CircleCIを利用してGooglePlayにアップロード自動化出来る
WatchKitを使ってみて分かったこと
発表者は@akio0911
- データの共有方法など
ブログ枠
この第15回からpotatotipsに追加されたブログ枠。ブログ枠は最前列の机席で閲覧できるという特権があって面白い試みですね。
- 第15回はSansan開催! #potatotips で発表されたiOSとAndroidのtipsまとめ
- iOSとAndroidのtipsを語り合う potatotips 第15回に参加してきたまとめ!
おわりに
Tipsというのはすぐに役立つけれどすぐに役立たなくなるもので、はっきり言って対して重要な意味を持ってはいないものではないんですが、そのTipsを探しだした動機や見つけ方、もしくは自分が生み出した工夫を共有するというのはそれ自体が重要な意味があります。
また、今回もpotatotipsの発表に合わせてライブラリを公開してくれたりする人も居て、とてもいい勉強会でした。
次の第16回はサイバーエージェントで開催らしいです。 http://connpass.com/event/12791/