Diverse developer blog

株式会社Diverse(ダイバース) 開発者ブログです。

ワイワイライブ、リリース!

こんにちは。Flutterエンジニアの id:yukioya-dvs です。 この度、YYC アプリ内ライブ配信コンテンツとしてワイワイライブをリリースしました!

f:id:yukioya-dvs:20210112105350p:plain

これまでのメッセージでのコミュニケーションではなく、ライブ配信しているユーザーとオンライン上でやりとりができるコンテンツになります。

※iOS/Androidのみ対応、Webサービスでは非対応

ワイワイライブの中身について

今回、ワイワイライブは既存のアプリ YYC の1つの機能として実装しました。 YYC アプリは、今まで Android/iOS 共にフルネイティブで開発を進めてきましたが、今回のワイワイライブではFlutterの Add-to-app を利用して開発しました。

f:id:yukioya-dvs:20201127182829p:plain

工夫した・つまづいたところ

Git

既存のAndroid/iOSのgit リポジトリが存在してましたが、それとは別に Flutterのコードを新規でリポジトリを作成し、git の submodule として Android/iOSに追加する形で、3つのリポジトリで運用するようにしました。

しかし、このまま作業していくと Android/iOS側のリポジトリ側に差分が発生して、毎回コミットする必要が出てきてしまいます。 実に面倒です。

そこで今回 Flutter側のコードを変更しても、Android/iOS側のリポジトリ側には手を加えず Bitrise上でのみ Flutter リポジトリのHEADを参照するようにしました。

CI(Bitrise)

弊社では CIにBitrise を使用しており、そこでつまづいた2点についてお話します。

1. Androidでreleaseビルドができない

Invalid argument(s): Cannot find executable for /root/flutter-sdk/flutter/bin/cache/artifacts/engine/android-arm-release/linux-x64/gen_snapshot.

今までdebug ビルドはできてたのにreleaseになると、上記のエラーがでてビルドできなくなってしまいました。

Flutter Install Stepをそのまま使うと、 /root/flutter-sdk/flutter/bin/cache/artifacts/engine 配下には commonlinux-x64 しかありません。

そこで、みんな大好き $ flutter doctor を実行するとあら不思議。

# /root/flutter-sdk/flutter/bin/flutter doctor
Downloading android-arm-profile/linux-x64 tools...                  1.7s
Downloading android-arm-release/linux-x64 tools...                  0.8s
Downloading android-arm64-profile/linux-x64 tools...                0.8s
Downloading android-arm64-release/linux-x64 tools...                0.4s
Downloading android-x64-profile/linux-x64 tools...                  0.4s
Downloading android-x64-release/linux-x64 tools...                  0.4s
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel unknown, 1.22.1, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
[!] Android Studio (not installed)
[!] Connected device
    ! No devices available
! Doctor found issues in 2 categories.

なんていうことでしょう。Androidに必要なtoolsがいっぱいdownloadしてくれるではないですか!

Flutter Install Stepで以下の設定がデフォルトでfalseですが、trueにしておきましょう。

f:id:yukioya-dvs:20201105192333p:plain

2. iOSでビルドできない

上だと、 .ios/Flutter/engine/Flutter.framework が存在しません。 そこで、Android/iOS側より前にFlutter 側のコードをビルドすることで上記のFrameworkが生成されます。

$ flutter build ios --no-codesiging

なんていうことでしょう。

最後に

いかがでしたでしょうか。 debugビルドだと何事もなく動いてたのに、releaseビルドになるとなにかしら問題が発生しやすいですね 😇 同じ問題に当たって困ってる一助になれば幸いです。

また、Flutterを導入する上でバイナリサイズがどれくらい増えるかについて公式FAQにありますが、

今回ワイワイライブをAdd-to-appで実装した結果、最終的にiOSは+5MB、Androidは+9MB近く増えました。 なかなかの量ですが、今後はこの資産を生かして、既存コードをFlutterに置き換えてスリムにしていこうと思います!

ワイワイライブも気になった方は、是非触ってみてください! We are hiring! \(^o^)/