毎月開催しているiOS/AndroidのTips交換会、2014年最後になったpotatotipsに参加してきました。今回はpixiv社で開催され、LT時間5分順守の残り時間のみ質問というかなりメリハリある感じで行われました。
発表をまとめていますが問題があればご指摘ください
pixivのAndroidアプリの画像取り扱い事情
pixiv社@__chocomelonの発表。pixiv Androidアプリでのサムネイル画像の種類や取得方法についてでした。
詳細はPixiv Engineering Blogに書かれています
- pixvアプリのサムネイルの種類
- pixivではVolley+OkHttp
- ユーザーのネットワーク回線によってスレッド数を自動調整する
- Android 2系はもうサポートしない
- 水曜日はランチをやってるので暇があれば来てください
iOS・Android 徹底比較! Subscription課金のハマりポイント / iOS/Android
pixiv社@shobyshobyの発表。課金周りのハマリポイントが有用でした。
- pixivのアプリでiOS/Andoirdサブスクリプション課金の審査が通った
- ハマリポイント(共通)
- キャンセル
- キャンセルしたからといってすぐにユーザーがプレミアムじゃなくなるわけではない
- 不正なレシート対策が必要
- ユーザーの環境で独自証明書を置かれて中間者攻撃されるとつらい
- JB/root化に弱い
- iOS のハマリポイント
- Appleの審査ルールがある
- Android のハマリポイント
- 購入テストつらい
- Googleのテスト環境がない
- 価格変更がないのでアイテム作り直し
App Indexing のススメ(補足版) / Android
pixiv社@consomme72の発表。
- App Indexingとは
- Webのコンテンツとアプリのコンテンツをひもづける
- App Indexingにルールが有る
- First Click Free
スクリーンショットでビューをテストする
@k_katsumiの発表。
- スクリーンショットでViewのテスト
- 以外にやってみると簡単だった
- きっかけはCocoapodsでビューのテストの有無を聞かれたからやってみた
- 一度スクリーンショットをキャプチャして、それを比較する形
- Viewテストの銀の弾丸ではないが使いドコロがある
- NimbleでSwift用のマッチャーがある
会場内で出た質問と回答
- アニメーション中のテストは?
- できるけど途中の状態を比較することになるので難しいと思う
- 画面サイズ違いの時どうすんの?
- 固定サイズで特定のサイズのみテストやってる
- TravisCIでやるならGitHubのリポジトリにテスト画像入れるの?
- そうです
- スナップショットの比較はしきい値ある?
- 見た限りはpx単位で比較してそう
- あればいいと思うのでリクエスト出したい
安定性と柔軟性を備えたライブラリを作る
KeithYokomaのAndroidを中心としたライブラリの作成指針についての発表。
- イミュータブルでスレッドセーフに
- スレッドプール
- 初期化に時間かかるのでプールしとく
- シングルトンで遅延初期化は注意
- これもスレッドセーフに
- 柔軟性のためのAnnotations
- 柔軟性のためのリソースをカスタマイズする
ReactKitの紹介
最近注目されているSwiftで書かれたReactive ProgrammingのためのライブラリReactKitを作られている@inamiyの発表。自身はあまり勉強会にくるタイプではないけど参加してみたらとても楽しかったとのことでした。
- StateMachineできるようになった->そしたらPromissもできる->つまりReactiveができるっていう
- weakfiedは保持関係を逆転できる
- いつ使う?
- 通信
- ユーザーインターフェースバインディング
- ReaciveCocoaとかもReactKitに置き換えられる
- Carthage対応したよ
MultiDexApplicationの実装詳細について
saturday06のAndroid+Javaであるメソッド数制限を解決するためのMultiDexライブラリを使ってみた発表。
- 64K問題とかある
- 起動時のメソッド数をとりあえず64K以下にする
- proguardのように利用していないメソッドをまず切り落とす
- 実行時はクラスローダーの中身を書き換えることになる
グローバル対応の罠と技(仮)
oobaによるメルカリiOSアプリの多言語対応について。言語別にアプリのターゲットを分けて別バイナリにしているという話が印象的で、懇親会のときにいろいろな人にその理由を聞かれていたのが特徴的でした(LTの時間が足りなくて説明できなかったので発表時の資料にその点を追記されてます)。
- 言語ごとにxcconfigを分けている
- 内部的にはオリジナルなリージョンクラスを用意
- iOS5から対応しててAGi18n使ってた
- 通貨の罠
- 言語によって区切り位置が違う
- iOS自体の設定。英語ユーザーは日本人の端末設定と違う場合が多いので言語対応だけでは足りない
- 自動大文字入力
- 自動修正
- スペルチェック
- Caps Lock
- 予測
- ピリオドの簡易入力
Jack & Jill
@dageziによるAndroid環境について
http://dagezi.github.io/potatotips12/#/
- JACK & JILLっていうのは欧米の童話的な何かなので語呂合わせ
-
- JACK: Java Android Compiler Kit
- コンパイラ
- Javaから.dexに
- なんでJACK?
- Compileを早く?
- Oracleとのカラミ?
Swift Core Fondation
@nakajijapanによるSwiftで動画関係のライブラリの扱いについて。
- プライベートで動画関係のプラグインを作っている
- 自前のライブラリのSwift移植
- Opaque Type
- 構造体をヘッダに晒していない
OS XでJenkinsを運用する
ginrou799のOSX+Jenkins環境でCIの話。
- ビルドどうしてんの?会場のみんなにアンケート?
- OSXサーバーが0人
- 残りはJenkins, Travis
- mixiはOSXサーバーとJenkins
- XcodeやOSXのアップデートされてビルドできなくなる問題
- xcode-selectでxocdeを明示
- OSXサーバーにVNC繋ぐとGUIが動いてテストがコケてたりする
- Jenkinsいいとこ
- プルリクエストごとに自動テスト
- マージされたら自動ビルド
AndroidStudio,Gradle バージョン互換性
@tarotaro4のAndroidStuio+Gradleについて
- Android3兄弟は巨人軍
- Android Studioは使えるGradleのバージョンがある
- まだGradleビルド遅い
AppExtensionsのテストコードを書く
kitasukeによるApp Extensionsでのユニットテストのやり方について。
- App ExtensionsはWatchKitやTodayなど
- App Extensionsでターゲットはメインのアプリとは別になる
- 正式に単体テスト用にターゲットは指定できずサポートされていない
- Embedded Framework使うとどうにかなる
- デモはNSUserDefaultsのテスト
- ヘッダーはデフォルトだとprojectになってるのでpublicに
- よく触らない画面こそテストがあればいい
Androidの本「Android実践プログラミング」と「甘味アンドロイドパーク」をつくったよ
mhidakaによる今年のAndroid薄い本について
- GitHub上にコードを集約するように本にネタを集約
- 「甘味アンドロイドパーク」薄い本(ページ数が)
- 実践入門
- ダメパターン
- 「Type Script」薄い本(7mm)
- Android Studioセットアップガイド
- 入手方法12/30 C87 西く02b
いかにして不具合発見時のフィードバックを素早く行うか
@cutmailによるフリルiOSアプリでQA時に対応するためのBugshotKitについて。会場ではスライドの背景画像がよく見えなかったんですが、見なおしてみるとシュールで笑えました。
- QAしてるとき
- 表示崩れ
- 担当エンジニアに連絡→めんどくさい
- BugshotKitを使った場合のQA時
- 不具合時にスクショが取れる
- 間違ってる点のスクショにアプリから線が書ける
- コンソールのログ
- それらをメール送れる
- 自動でGitHubのissueに登録できるようにも
AnnotationProcessor を使ってコンパイル時にクラスを生成する
hydrakecatによるAnnotationProcessorについて
- AsyncTaskLoaderはインナークラスをたくさん書く必要が出てくる
- アノテーションでまとめたい
- アノテーションプロセッシング
- アノテーションは2通り
- ランタイム時
- リフレクションをバリバリ
- Compile時
Swiftのメソッドに関する引数の仕様について
最後は私、@yimajoによるSwiftのメソッドがややこしい話
- メソッドの引数は面倒なルールが有る
- Objective-CでSwiftのメソッドやイニシャライザを呼び出すと前置詞Withが付く場合がある
- 明示的に前置詞を指定するとWithが消える場合がある
トゥギャッターでまとめられてます
トゥギャッターで発言がまとめられていて@mhidakaのツイートがとても参考になります
会場風景
pixiv社はiOS/Androidアプリエンジニアを募集しているそうです