marp | paginate |
---|---|
true |
true |
mrtry 2022/01/19
- とらい(@mrtry)
- Yamamoto Shinnosuke
- 株式会社JMDC
- Android / React Native
- 最近放送大学で心理学系をお勉強してる
- 対応を後回しにしがちで、ファーストリリース前に稀によくコケる
- 運用フェーズになったら、そんなに触らないので忘れがち
- 基礎的なところを完全に理解していきたい 💪💪💪
- 署名とは
- Platformごとの署名方法
- Androidの署名
- iOSの署名
- よくあるユースケースとその対応方法
- 「秘密鍵を用いて、アプリにデジタル署名する」プロセスのこと
- アプリの作者を保証し、改ざんやなりすまし防止のために行われる
- 各Platformごとに署名の手続きをする必要がある
Java Keystore
を作成し、それを用いて署名を行う- Developerが署名する鍵は
Upload Key
と呼ばれている
Java Keystore
とは
- 「秘密鍵」「公開鍵証明書」をセットにしたもの
Java Keystore
の作り方
- Android Studioをポチポチしてたらできる
- 公式ドキュメントが丁寧なので、読めば作れるはず
Keystoreを用いて署名する
android/app/build.gradle
にKeystoreの設定する
...
android {
...
signingConfigs {
release {
storeFile file(MYAPP_UPLOAD_KEYSTORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
...
$ cd android && ./gradlew bundleRelease
で署名されたApp Bundleができる
やることまとめ
Java Keystore
を作成するandroid/app/build.gradle
にKeystoreの設定する- Release buildをする
Provisioning Profile
をPackagingする必要がある
Provisioning Profile
とは
- 「App ID」「Device ID」「証明書」をまとめたもの
- インストールや実行時に参照され、不正なアプリではないかをチェックしている
証明書
の種類
- Development
- Production
Provisioning Profile
の種類
- AppStore
- Adhoc
- Development
今日はAppStoreから配信する際のパターンについて紹介します
- Production の証明書 x AppStore の Provisioning Profile
Provisioning Profile
の作り方
- App IDを登録する
- Device IDを登録する
- 証明書 (Production)
→ 作業や管理を簡略化するために fastlane
を利用する
fastlane
とは
App IDを登録する
$ fastlane produce --app_identifier [App ID] --company_name [company name]
[Option] Push通知などを利用している場合は、利用する機能を有効にしておく
$ fastlane produce enable_services [service name]
[Option] Device IDを登録する
- AppStoreに配信するだけならSkipして問題ない
- 実機で動作確認する場合は、実機のUDIDをApple登録する必要がある
- WhitelistとしてProvisioning Profileに保持される
- AppStore用のProvisioning Profileでは、Apple側で再署名される
- その際に、Device IDの項目がWhitelistがwildcardのようになってくれる
$ fastlane run register_device name:"[device name]" udid:"[udid]"
証明書とProvisioning Profileを作成する
fastlane match
を利用する- 発行した証明書とProvisioning ProfileをRepository管理する仕組み
証明書とProvisioning Profileを作成する
- Githubなどに管理用Repositoryつくる
証明書とProvisioning Profileを作成する
- パスワードの設定
$ fastlane match change_password
証明書とProvisioning Profileを作成する
- 初期化する
$ fastlane match nuke distribution --app_identifier [App ID]
証明書とProvisioning Profileを作成する
-
AppStore用の証明書とProvisioning Profileを発行
-
作成したRepositoryに保存
-
実行環境に証明書インストール
$ fastlane match appstore --app_identifier [App ID]
-
他の開発環境で証明書とProvisioning Profileを取得する際には
readonly
をつける$ fastlane match appstore --app_identifier [App ID] --readonly
Xcodeの設定を色々して、Release buildする
Automatically manage signing
を外す- 作成したProvisioning Profileを選択する
- Release buildする
やることまとめ
Provisioning Profile
を作成する- App IDを登録する
- Device IDを登録する
fastlane match
で証明書とProvisioning Profileを作成する
- Xcodeで証明書とProvisioning Profileの設定をする
- Release buildをする
補足
- Provisioning Profileは定期的に再発行イベントがある
- 証明書の期限が切れたとき
- Appleから発行された証明書は、有効期限が
1年
となってる- Androidのほうは
25年
なので、あんまり気にしなくていい
- Androidのほうは
- Appleから発行された証明書は、有効期限が
- Push通知などのCapabilities追加したとき
- Provisoning Profileに有効になっているCapabilitiesが書いてある
- 機能追加したら更新する必要がある
- 検証端末を増やしたとき
- UDIDが登録されていない検証端末では、アプリが動作しない
- 新しい検証端末のUDIDを登録してから、Provisioning Profileを再発行する
- 証明書の期限が切れたとき
Androidでやること
- package nameを環境ごとに分ける
- Staging用に新しくkeystoreを作る必要はない
- debug用のkeystoreがあるので、それを使えばいい
android.app/debug.keystore
iOSでやること
- package nameを環境ごとに分ける
- Staging用にProvisioning Profileを作る必要がある
- 検証端末のDevice IDを登録する
- 21枚目のスライド参照
- App IDをwildcardで指定して登録する
$ fastlane produce --app_indetifier [App ID].*
- Provisionig Profileを作る
$ fastlane match adhoc --app_identifier [App ID].*
- 検証端末のDevice IDを登録する
- 署名関連ファイルは基本リポジトリに含めないので、CIでビルドするときにそれらを取ってくる必要がある
- Androidは、keystoreをbase64してCIの環境変数にいれる
- iOSは、matchを利用して証明書をローカルにとってくる
- 各種設定ファイル
- keystore, google-services.json, sentry.properties, ...
- 大きく2パターンあるのでお好みでどうぞ
- 機密情報管理サービスを利用し、セットアップ時に設定ファイルを生成する
- AWS Secret manager
- GCP Secret Manager
- Hashicorp Vault
- 設定ファイルを暗号化し、git管理に含めてしまう
- git-secret
- git-cript
- 機密情報管理サービスを利用し、セットアップ時に設定ファイルを生成する