つばくろぐ @takamii228

知は力なり

Firebase App DistributionがApp Bundleに対応したらしいので試してみた(失敗)

先日のGoogle I/OでFirebase App DistributionでのAndoirdアプリの配信でApp Bundle形式での配信に対応したとの発表がありました。今まではapkファイル形式での配信に限られていました。

firebase.googleblog.com

ちなみにApp Bundleへの対応は2021年の8月以降の新規アプリでは必須の対応となっています。すでにapk形式で配信しているアプリはapk形式での配信は継続できます。

android-developers.googleblog.com

これからはApp Bundleが主流になっていくと思われるので、早速試してみます。

Firebaseのプロジェクトを作成する

Firebase App Distributionを使うFirebaseプロジェクトを作成します。

詳細については以前のブログへの参照としてスキップします。

takamii.hatenablog.com

App Bundleファイルを作成する

今回はAndroid Studioで新規プロジェクトをBasic Activityで作成したものをそのまま使います。

App Bundleファイルの作成はGradle taskのbundleタスクを実行すればよいです。

f:id:takamii228:20210626140835p:plain

なおAndroid Studio 4.2からGradle TaskがGradleのビューに出なくなってますが、設定で表示するように変更ができます。

stackoverflow.com

ターミナルで実行する場合は以下のコマンドを実行すればよいです。自分でproduct flavorを定義している場合はbunlde${xxxx}の形になります。

$ ./gradlew bundle  

実行するとapp-debug.aabapp-release.aabというファイルがapp/build配下に生成されます。

$ tree app/build/outputs/bundle 
app/build/outputs/bundle
├── debug
│   └── app-debug.aab
└── release
    └── app-release.aab

2 directories, 2 files

Firebase App Distributionにアップロードする

生成したファイルをFirebase App Distributionへアップロードしてみます。

アップロード画面に行くと以下の注意書きが出てきました。

f:id:takamii228:20210626145303p:plain

どうやら開発者登録済みのアカウントでのGoogle Playへのリンクが必要なようです。

f:id:takamii228:20210626145413p:plain

開発者登録したアカウントで連携すると無事リンクができましたが、下の方のApp Linkのstatusがオンになりません。

f:id:takamii228:20210626145554p:plain

ドキュメントをよく読んでみると、以下の記述がありました。

・The app you upload to Google Play and Firebase must share the same package name.

・The app in Google Play must be in a published state. An app is published when its app store listing has been completed and approved, and the app has been distributed to a following Google Play track: internal, closed, production, or open-testing.

日本語版は以下です。

Google Play と Firebase にアップロードするアプリのパッケージ名が同じであること。

Google Play のアプリが公開中であること。「公開中」とは、そのアプリのストアの掲載情報が完成して承認されており、かつそのアプリが Google Play のトラック(内部テスト、クローズド テスト、本番環境テスト、オープンテスト)に配布されていることを言います。

firebase.google.com

どうやらGoogle Playで公開済みのアプリでないと利用できないようです。ぐぬぬー。

残念ながら私は配信しているアプリを持っていないので検証はここまでしかできませんでした。

Google Play周りの機能を利用するのでGoogle Play側でいろいろ整ってる必要があるようです。なので未公開のアプリを開発版でテスト配信に使う場合はまだまだapkでやる必要がありそうです。

もし業務で利用できる機会があったらまた試してみようと思います。

AndroidのCIパイプラインでAndroid StudioのJDKを使う

AndroidのCIパイプラインでgradleタスク実行する場合にはJDKが必要になります。

Android Studio経由でgradleタスク実行する場合はAndroid Studioに内包されたJDKが用いられます。

一方でmacOSのTerminalでプロジェクト作成時にimportされるgralde wrapper経由でgradleタスクを実行すると、利用するJDKmacOSのものになります。

例えばCIパイプラインをmacOSのCI Runnerで実行する場合、何も設定しないとmacOS側のJDKが用いられてします。macOS側ではJava14、15を入れていた場合にはAndroid Studioで実行した結果と変わってしまう可能性があります。

例えばmacOSのTerminalでの./gradlew --versionの結果とAndroid Studio側での実行結果が微妙に異なっています。

# macOSでの./gradlew --versionの結果
$ ./gradlew --version

------------------------------------------------------------
Gradle 6.7.1
------------------------------------------------------------

Build time:   2020-11-16 17:09:24 UTC
Revision:     2972ff02f3210d2ceed2f1ea880f026acfbab5c0

Kotlin:       1.3.72
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM:          11.0.10 (Oracle Corporation 11.0.10+9)
OS:           Mac OS X 11.3.1 x86_64

# Android StudioのJREでの./gradlew --versionの結果
$ ./gradlew --version                                                        

------------------------------------------------------------
Gradle 6.7.1
------------------------------------------------------------

Build time:   2020-11-16 17:09:24 UTC
Revision:     2972ff02f3210d2ceed2f1ea880f026acfbab5c0

Kotlin:       1.3.72
Groovy:       2.5.12
Ant:          Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM:          11.0.8 (JetBrains s.r.o 11.0.8+10-b944.6916264)
OS:           Mac OS X 10.16 x86_64

ちなみにAndroid Studio 4.2からBundleされるJDKが11系に変わったようです。

developer.android.com

build.gradleで利用するバージョンをきちんと指定していれば問題ないのですが、気になる場合はAndroid StudioJDKでgralde タスクを実行するようにしておきましょう。

具体的にはgradleタスクを実行する前にJAVA_HOMEの設定をAndroid Studioが内包しているものに変更すればよいです。

例えばCIパイプラインを実行するシェルスクリプトの最初にJAVA_HOMEを入れ替えるようにするとよいでしょう。

macOSの場合、Android StudioJDK/Applications/Android Studio.app/Contents/jre/jdk/Contents/Homeにあります。

!/bin/sh

set -e
set -x

...
JAVA_HOME="/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home"

./gradlew --version

./gradlew lint

./gradlew test

./gradlew connectedAndroidTest

iOSアプリ開発を自習したい人が見るとよさそうなコンテンツをまとめてみた

以前Androidの学習コンテンツについてまとめましたが、今回はそのiOS版について少し見通しがたったのでまとめてみることにします。

takamii.hatenablog.com

macOS端末とiOS端末を用意する

iOSアプリ開発Xcodeという開発キットを利用します。このXcodemacOSでしか動作しないため、iOSアプリ開発ではmacOS端末が必須になります。WindowsLinuxではXcodeは利用できません。実際に実機端末で動作させたい場合はiOS端末も用意しましょう。

Apple Developer Programへの加入を検討する

手元のiOS端末でデバッグをするだけでなく、TestFlightを利用したり実際にAppStoreでアプリをリリースしたい場合はApple Devleloper Programに加入しましょう。個人向けライセンスであれば税込み12980円で1年単位での更新が必要です。

なお1台のみの実機デバッグだったりApp Storeで公開されているXcodeの利用のみであればApple Developer Programに加入しなくてもよいです。

Apple Developer Program - Apple Developer

メンバーシップの選択 - サポート - Apple Developer

公式のチュートリアルをやる

Androidと同様にiOSも基本的には公式の情報をキャッチアップするのがよいでしょう。

チュートリアルについては以下のリンクにSwiftUI版とUIKit版が公開されています。

https://developer.apple.com/tutorials/app-dev-training

一番最初のXcodeの操作はここを見るとよいでしょう。

https://developer.apple.com/documentation/xcode/creating_an_xcode_project_for_an_app

昨年のWWDCでSwiftUIがリリースされたときに公開されたSwiftUIのチュートリアルもあるので、SwiftUIを使う場合は余裕があれば見ておくとよいでしょう。

https://developer.apple.com/tutorials/swiftui

WWDCの動画を見る

Appleは毎年の開発者向けイベントであるWWDCの動画をアーカイブとして公開しています。新しい技術やアップデート情報はこちらからキャッチアップするとよいでしょう。

Design and Development Videos - Apple Developer

動画内で触れているサンプルコードについても公開されています。

Sample Code - WWDC20 - Apple Developer

WWDC 2020ではSwiftUIのサンプルコードとしてFrutaが公開されていました。

https://developer.apple.com/documentation/swiftui/fruta_building_a_feature-rich_app_with_swiftui

役立つ公式のリンク集

Appleの公式ドキュメントはなかなかたどり着くのが手間なのでせめて入り口だけでもブックマークしておくとよいでしょう。

iBooksで公開されている情報

Apple EducationとしてiBooksで学習用のコンテンツも公開されています。書籍なので情報は少し古めです。

books.apple.com

非公式の参考となるコンテンツ

スタンフォードの講義やUdemyの動画で学習するのもよいでしょう。mixiのコンテンツが長らく有名でしたがメンテナンスされてないようです。最近ゆめみさんがコンテツを公開したのでそちらも見てみるとよさそうです。

Xcodeのバージョンと各OSの対応表はここを見るとひと目で分かるのでよく使っています。

xcodereleases.com

mixi groupの2021年新卒研修の資料が公開(2021/5/14追記)

mixiのSwiftUIの新卒向け研修のコンテンツが公開されていました。 SwiftUIの説明からCombineやXCTest、MVVMアーキテクチャについても触れられていてよいと思いました。

medium.com

Peaksや技術書展の本

Peaksで公開されている設計本やテストの本も参考になるので、興味がある方は手元においておくとよいでしょう。紹介リンク付きのツイートを載せておきます。

技術書展でもiOS関連の書籍を執筆している人がいるので、チュートリアルが物足りない方は合わせて見てみるとよさそうです。

techbookfest.org

RSS登録すべき情報

Appleは定期的に開発者向けにニュースで周知をしているので最新情報をキャッチアップするために以下をRSS登録しておくとよいでしょう。

developer.apple.com

OSやツールのアップデート情報は以下でRSS取得ができます。

developer.apple.com

Apple全体のニュースはこちらのようです。

www.apple.com

まとめ

以上がiOS関連の技術をキャッチアップするときに見るべき情報一覧になります。

GWにiOSアプリをやっていくぞ、という方の参考になればと思います。

私はまずはチュートリアルを完走しようと思います。