potatotips #60 (iOS/Android開発Tips共有会)

2019年4月3日

https://potatotips.connpass.com/event/123002/

開発・運営に関わっている 自動テストSaaS「Magic Pod」 が、 最近Bitriseのビルドワークフローの中から直接利用しやすいように改良されました。 ただ、自分はアプリ自体の開発を現状ガチガチにやっているわけでもないので、Bitriseがどういう風にアプリ開発者に受け入れられているのかなとかの空気感をあらためて知りたかったのと、Bitriseのメンバーがとてもフレンドリーな感じで一度会ってみたかったのとで、たまたまメンバーが来日中のところのちょうど良い感じのイベントに参加してみることにしてみました。純粋な聴講者枠は既に埋まっていて、ブログ書く人用枠で参加したので、気になったポイントを中心に記事を書いてみます。なお、当日のTwitter上の様子が Togetterでもまとめられています。

「意外に面倒じゃなかったXcode Template」 by ZOZOテクノロジーズ 坂倉勉

※当日資料は未公開です。

iOS側の発表です。
Xcodeを利用した開発で、新規作成時に選べるテンプレートにカスタムテンプレートを追加できることを最近になって知ったとのこと。
Xibはもちろん、Storyboardのテンプレートも作れる。
作ったテンプレートファイルは ~/Library/Developer/Xcode/Templates/ にまるごと入れればOK。シンボリックリンクでも問題無く開けるとのことで、共通するモジュールはシンボリックリンクで参照するなどのちょっとした構造化もできそうな感じでした。

「アプリのパフォーマンス改善を数値化」 by ZOZOテクノロジーズ 山田祐介

Android側の発表ですが、iOSでも利用できるものの紹介です。
パフォーマンス改善施策の評価をまず手軽なところからスタートするために、数値の取得には Firebase Performance Monitoring を、改善の前後の比較 特に同一バージョンでの比較に Firebase Remote Config を利用する事例を紹介されていました。
他に何か比較検討したものがあったか、たとえば Headspin とかどう思いますか、ということをおうかがいしましたが、他のツールは未検討とのことでした。

Bitriseの基本的な機能のデモンストレーション by Viktor and Tamás from Bitrise

Bitriseの基本的な機能について、プライベートリポジトリーにあるiOSプロジェクトと、パブリックリポジトリーにあるAndroidプロジェクトで、それぞれデモンストレーションを行なってくれました。
今後のロードマップの一部として、物理デバイスへの対応やドキュメントのローカライズについて教えてもらえたり、Androidのベータ版機能であるテスト実行中のビデオ録画を見せてもらえたりしました。

「iOSで正しく歩数を取得する」 by 株式会社WIT @sato-shin

iOS側の発表です。
食事記録アプリ「あすけん」で歩数を正確に取得するためにやっているtipsでした。
歩数取得のAPIの値を単純に使ってしまうと、iPhoneとApple Watchでダブルカウントになったりするため、 HKStatisticsCollectionQuery を利用してデータの特徴量を取得するようにしたり(このアプリでは累積和を取得)、データを登録したアプリのBundle Identifierまで参照して手動で不正入力されたかもしれない値をはじいたりなどの実践的なtipsを多く聞けました。

「Firestoreを使って純広告配信機能を作った話」 by リミア株式会社 樋口 雅拓

Android側の発表です。
2019年1月にGAとなったFirebaseの機能「Firestore」を、制約事項が多い純広告(自社販売の広告商品)の配信でさっそく活用した事例の紹介でした。
ターゲティングは UserProperty への属性設定と、 RemoteConfig での細かい制御で行なっているとのことでした。RemoteConfig 便利ですね。
GAになる前から使い込んでみたところ、バージョンアップでException返すべきところがnullableになる罠が3回くらいあったとのこと。。。大変でしたね。

「Azure PipelinesでiOSアプリをCI/CDしてみよう」 by @the_uhooi

iOS側の発表ではありますが、iOSに限った話では無くて Azure DevOps の1機能の紹介でした。
ビルドしたアプリを App Center 経由でインストールできるので社内テスト用の配布基盤として便利そう、という話は特に良さそうでした。

「Protobuf in Kotlin」 by @takusemba

Android側の発表です。
バイナリーデータを送受信できるようにデザインされたフォーマット Protocol Buffers について、定義ファイルから出力できるシリアライザー/デシリアライザー実装に最近になってKotlinも追加されたので便利な感じに使っちゃうぞ、という話でした。こんなフォーマットがあることをそもそも知らなかったですね。良さそうですね。
定義ファイルフォーマット「Proto」のうち、旧バージョンのProto2からの出力であればrequiredやoptionalなどの指定をよしなに扱ってくれるので今のところはおすすめ、という話はOpenAPI(Swagger)の状況を想起させるものがありました。

「WebView as Fancy and effective View」 by Ryo Sakaguchi

Android側の発表です。
ちょっと飛び道具的な演出をアプリ内に加えたいときに、iOSでのSceneKitくらいの感覚でAndroidで使えるものってなんだろう? というところでWebViewを継承した特別なViewで工夫してWebGLを扱ってみた話でした。
WebViewってところでつらみがありそうな気もしましたが(実際、特有のつらみがあるとのことでもありましたが)、紙吹雪やアニメーション付きチャートなどが手軽に実現できていたのは良い感じでした。

「iOSアプリで気になった動きや表現を上手にアレンジして活用してみる」 by Fumiya Sakai

iOS側の発表です。
他の実装を見ていてインスピレーションを受けた部分について実装を解析して自分のものにしていくプロセスを、TabBarを切り替えた時にアニメーションをともなう実装を題材にして追いかけるという内容の発表でした。

「僕は上スワイプでBottomSheetを出したかっただけなんだ」 by Wantedly株式会社 すみともたかお

https://docs.google.com/presentation/d/1PHc5DxdaOoB6uTZ1TI2EP3KagBMoqy6ZeoX7t92kf2U/edit#slide=id.p1

Android側の発表です。
画面下から出てくるドロワーのようなダイアログ BottomSheetDialog のようなものを、上向きにスワイプすることで出せるように実装したいというただそれだけの気持ちからどんどんえぐい沼にはまっていく様子でした。「NestedScrollは危険が危ない」実にいい話でした。

「つかおう! L2CAP」 by 株式会社Amazia 日向強

iOS側の発表です。
CBPeripheralManagerDelegate を使ってると現れる謎の peripheralManager をどうにか活用して、Bluetooth L2CAPで比較的大きいサイズのデータをやりとりできるようにしよう、という話でした。

「マルチモジュール化のTips」 by Wantedly株式会社 久保出雅俊

Android側の発表です。
マルチモジュール化による一般的なメリットと、実際にやってみたらどうなるかの検証、 Dagger によるDIをマルチモジュール化と合わせたときに効率良く書くために工夫したことなど、実践的なtipsの紹介でした。

宣伝


保護犬ふうちゃんとわたしたち
嫁が2016年からESSEonlineで連載しているマンガが電子書籍として販売されています。


MagicPod
ディープラーニングによる画面UI解析とAppiumを組み合わせた自動テストSaaSです。2016年頃からサービス運営・開発に関わっています。


エキスパートが教えるSelenium最前線
共著です。応用編です。


Selenium実践入門―自動化による継続的なブラウザテスト
共著です。第3刷が出ました。