radioc@?

レディオキャットハテナ

【勉強会メモ】Mobile Act OSAKA #7

mobileact.connpass.com

今回もXamarinから仮想通貨、CI/CDまで様々な題材でモバイルアプリに関する知見を得ることができる場だったと思います。そら案内のバックエンドも含めた全体構成の貴重な事例も参考になります(10周年おめでとうございます)。クリーンアーキテクチャは10分間で全て理解するのは難しいですが本を読むモチベーションになる内容でした。懇親会ではいつものように美味しいビールを頂きました。

usami-k「Xamarin を使った iOS アプリ開発の現場から」

speakerdeck.com

  • 複数プラットフォームに対応
  • C#で書く
  • 使用実績:NHK紅白

IDE & storyboard

  • VS for MacXcode併用
    • VS for Macでひととおりできる
    • 他のIDEデバッグやstoryboard編集が難
    • Viewの配置やレイアウト調整はXcode

C#

  • 現在も進化
  • event
  • async / await
    • 実装例:アラートのボタン押下待ち
  • reactive extensions
    • いわゆるRx
    • ライブラリを入れなくても標準で対応している強み

shohei「仮想通貨アプリを作ったけどAppleReviwerに弾かれた話」

歩いたら仮想通貨をもらってお店でポイントとして使えるアプリをAppleで申請

  • リジェクト12回
  • 国際電話4回

App Store Reviewガイドラインにおける暗号通貨について

  • 組織として登録しているデベロッパに限り許可
    • 最近追加になった
    • 法人アカウントが必要

法人のかたにお願いする

  • Opening Lineに支援を依頼

仮想通貨アプリを法人アカウントでリリースする際の注意点

  • 事前情報が必要
  • そのまま申請すると仮想通貨の情報を教えろと言われる
    • 仮想通貨の市場がどれくらいか
    • 種類(NEM
    • どこで使えるか?
    • いつリリースされたか?
    • 歴史

Reviewに出す前にメモ欄に書くとすぐReviewが通りリリースできる

itok「そら案内の作り方」

speakerdeck.com

そら案内

  • 11/17で10周年

気象データ

  • 公開されている予報API
  • 契約に基づく予報データ
  • XMLJSONに変換
  • 画像⇒主にそのまま
  • 独自フォーマット⇒サーバorクライアントで処理

サーバ

  • push通知のために別系統
    • Parse独自構成
    • Firebase使用
  • AWS
    • EC2/DynamoDB/SQS/S3
  • さくらVPS
    • 配信用
    • 制限がない
  • ほぼ Node.js(Typescript書き換え中)
  • 独自フォーマットのサーバ処理は自作コマンド
  • 市町村2,000地点、アメダス1,300地点の一時ファイル
    • i-nodeを使い切ってしまう
  • 合併で地点コードが更新される
    • 事前準備大変

クライアントアプリ

  • 用途に応じたアプリ構成
    • そら気温などの単機能アプリもあり
  • 以下略

アプリリニューアル予定

Takanori Hirobe「Swift Package Managerについて」

近年のモバイルアプリ

  • 複雑で多機能
  • 自前で実装していたら途方もない時間
  • ライブラリ化して公開
  • 例)LINE
    • 100個以上

⇒便利なライブラリを自分のアプリで使いたい

ライブラリの管理

  • 依存管理
  • バージョン管理

iOS開発のためのライブラリマネージャ

SwiftPackageManager

  • Swift本体に組み込まれたパッケージマネージャ
  • ほとんど使わrてていない
  • iOSアプリを公式サポートしていない
  • 将来の対応を約束している

オススメ資料

developer.apple.com

minomata「モバイルアプリ開発に使える設計の話」

speakerdeck.com

設計実装でよくある悩み

  • FatViewControllerをなんとかしない
    • MVC/MVVM/MVPなど
    • 乱立するMVなんとか

MVVM+クリーンアーキテクチャ

クリーンアーキテクチャ(The Clean Architecture翻訳) | blog.tai2.net

基本原則

  • クリーンな設計にするためのルール
  • 依存関係を一方向にする
    • 内側は外側を知らないように依存関係を逆転させる
  • 層をまたぐ参照はインターフェイスを経由する
  • MV〜のような特定のクラス構成に縛るものではない
  • 原則を守れば MVC,MVP,MVVMなど任意のアーキテクチャと組み合わせてよい

基本4層

冗長だけど何が嬉しいのか

クリーンアーキテクチャのキモ:制御の反転

※参考

Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)

qiita.com

qiita.com

Hiron「4000のワーニングと戦え!これは警告だ!」

speakerdeck.com

マネーフォワードの事例で警告除去にとりかかる

moneyforward.com

  • 警告除去だけの時間は確保できないので合間で作業
  • チームメンバー間の温度差

警告除去を盛り上げていこう!

  • Slackにチャンネル作成
  • 警告数の遷移を可視化

警告を消すってどういうこと?

  • 警告⇒文法的には間違っていないがプログラムミスの可能性のある部分の指摘
  • 警告を消す⇒問題があれば修正、なければ問題がないことを意思表示

Xcode9.3へのアップデート

  • 4,000超え
  • Implicit retain of 'self' within blocks
    • UIスレッドで同期的に実行するユーティリティメソッドを作っていた(swiftなら@namescape)

どう解決するか

  • A案:人海戦術
    • 規模的な解決
  • B案:警告をNoにする
    • 警告は捨てる
  • C案:従来のコードには目をつむる

AとC採用

  • 確認する意思のある人は確認して手動追加
  • それ以外は機械的に追加

警告を増やさないために

  • エラー扱いにする⇒デバッグ時に煩わしい
  • CIのビルド時に警告をエラー扱いに

KatsukiNakatani「個人でもできる簡単CI/CD(Android)」

Androidの開発からリリースまでの作業

  • 少しずつめんどくさく感じる
  • 毎回apkやaabをアップロードして変更履歴
  • リリースビルドしてadbコマンド
  • ビルドに時間がかかる

Cricle CIでビルド環境を改善

  • 無料でプライベートリポジトリにアクセスができる
  • 1コンテナ1ジョブまでは無料
  • developブランチは無視でmasterはビルド

出来た結果のapkを配信したい

  • 実機端末にケーブルレスで配信したい
  • 内部テストとして必要なメンバーだけ配信
  • ストアに掲載する情報もできればリポジトリで管理したい

Deploy Gate

Google Playの内部テスト版トラック

  • リリース前レポートが実行されず即座に配信される
  • aabも使える

Gradle Play Publisherを使う

  • リリースするトラック情報の編集
  • build.gradleに書く
  • バージョン挙げ忘れなどもチェック

※参考

support.google.com

Kenta Nakai「Asset Catalog再入門」

speakerdeck.com

画像の管理

  • ベクターイメージを使える(PDF)
  • 1x,2x,3xと用意しなくても良い
  • Xcode 6から
  • Preserve Vector Data

Preserve Vector Data

  • Xcode9/iOS11~
  • PDFのベクターデータをバイナリに含めるように
  • 実行時に自動的に拡大・縮小

色の管理

  • 定義した色はコードでもInterface Builderでも使えて便利
    • UIColer(name: "xxxx")

その他データ管理

  • テキストデータ、オーディオなど
  • プロジェクトの中に入れるよりは一括管理しやすい

アセットが大量になったら?

  • Namespaces
    • アセットに名前空間を提供
    • Asset Catalog内のフォルダごとにnamespaceを設定
  • Asset Catalogごとに分ける
    • フォルダごとにはできない
    • Bundleを分けてBundleの中で作れば分けられる