Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
What you need to know about signatures by the t...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shinnosuke Yamamoto
January 19, 2022
Programming
650
1
Share
What you need to know about signatures by the time of release
https://gist.github.com/mrtry/008215c67f97ea5022bbacdf7bde23b7
Shinnosuke Yamamoto
January 19, 2022
More Decks by Shinnosuke Yamamoto
See All by Shinnosuke Yamamoto
textAlignVertical Best Practice
mrtry
1
510
import React.Suspense into Jetpack Compose
mrtry
0
160
How to create mobile apps like cup noodles
mrtry
0
280
(Deep|Web) Link support with expo-router
mrtry
1
470
Notify Slack with EAS Custom Build
mrtry
0
210
How to implement Deployment environment in Expo EAS Build
mrtry
0
5.1k
A story about writing to JD to clarify "what the team values".
mrtry
0
520
What I worked on when migrating from flow-typed to TypeScript in a react-native app.
mrtry
1
1k
Enabling team development of a secret React Native app that has been in operation for four years.
mrtry
1
3k
Other Decks in Programming
See All in Programming
Xdebug と IDE による デバッグ実行の仕組みを見る / Exploring-How-Debugging-Works-with-Xdebug-and-an-IDE
shin1x1
0
380
PDI: Como Alavancar Sua Carreira e Seu Negócio
marcelgsantos
0
120
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
210
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
980
Swift Concurrency Type System
inamiy
1
540
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
380
Making the RBS Parser Faster
soutaro
0
450
実用!Hono RPC2026
yodaka
2
240
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
620
[RubyKaigi 2026] Require Hooks
palkan
1
210
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
570
AIエージェントで業務改善してみた
taku271
0
540
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.2k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
170
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
370
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
170
Marketing to machines
jonoalderson
1
5.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
sira's awesome portfolio website redesign presentation
elsirapls
0
220
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
300
Transcript
リリース時までに知っておきたい署名まわりの話 mrtry 2022/01/19 1
自己紹介 とらい(@mrtry) Yamamoto Shinnosuke 株式会社JMDC Android / React Native 最近放送大学で心理学系をお勉強してる
2
署名まわり、あたふたしがち 対応を後回しにしがちで、ファーストリリース前に稀によくコケる 運用フェーズになったら、そんなに触らないので忘れがち 基礎的なところを完全に理解していきたい 3
目次 署名とは Platformごとの署名方法 Androidの署名 iOSの署名 よくあるユースケースとその対応方法 4
署名とは? 5
署名とは? 「秘密鍵を用いて、アプリにデジタル署名する」プロセスのこと アプリの作者を保証し、改ざんやなりすまし防止のために行われる 各Platformごとに署名の手続きをする必要がある 6
Platformごとの署名方法 7
Androidの署名 8
Androidの署名 Java Keystore を作成し、それを用いて署名を行う Developerが署名する鍵は Upload Key と呼ばれている 9
Androidの署名 Java Keystore とは 「秘密鍵」「公開鍵証明書」をセットにしたもの 10
Androidの署名 Java Keystore の作り方 Android Studioをポチポチしてたらできる 公式ドキュメントが丁寧なので、読めば作れるはず アプリへの署名 | Android
デベロッパー | Android Developers 11
Androidの署名 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ができる 12
Androidの署名 やることまとめ Java Keystore を作成する android/app/build.gradle にKeystoreの設定する Release buildをする 13
iOSの署名 14
iOSの署名 Provisioning Profile をPackagingする必要がある 15
iOSの署名 Provisioning Profile とは 「App ID」「Device ID」「証明書」をまとめたもの インストールや実行時に参照され、不正なアプリではないかをチェックしている 16
iOSの署名 証明書 の種類 Development Production Provisioning Profile の種類 AppStore Adhoc
Development 今日はAppStoreから配信する際のパターンについて紹介します Production の証明書 x AppStore の Provisioning Profile 17
iOSの署名 Provisioning Profile の作り方 App IDを登録する Device IDを登録する 証明書 (Production)
→ 作業や管理を簡略化するために fastlane を利用する 18
iOSの署名 fastlane とは 19
iOSの署名 App IDを登録する $ fastlane produce --app_identifier [App ID] --company_name
[company name] [Option] Push通知などを利用している場合は、利用する機能を有効にしておく see: Adding Capabilities to Your App | Apple Developer Documentation $ fastlane produce enable_services [service name] 20
iOSの署名 [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]" 21
iOSの署名 証明書とProvisioning Profileを作成する fastlane match を利用する 発行した証明書とProvisioning ProfileをRepository管理する仕組み 22
iOSの署名 証明書とProvisioning Profileを作成する Githubなどに管理用Repositoryつくる 23
iOSの署名 証明書とProvisioning Profileを作成する パスワードの設定 $ fastlane match change_password 24
iOSの署名 証明書とProvisioning Profileを作成する 初期化する $ fastlane match nuke distribution --app_identifier
[App ID] 25
iOSの署名 証明書とProvisioning Profileを作成する AppStore用の証明書とProvisioning Profileを発行 作成したRepositoryに保存 実行環境に証明書インストール $ fastlane match
appstore --app_identifier [App ID] 他の開発環境で証明書とProvisioning Profileを取得する際には readonly をつける $ fastlane match appstore --app_identifier [App ID] --readonly 26
iOSの署名 Xcodeの設定を色々して、Release buildする Automatically manage signing を外す 作成したProvisioning Profileを選択する Release
buildする 27
iOSの署名 やることまとめ Provisioning Profile を作成する App IDを登録する Device IDを登録する fastlane
match で証明書とProvisioning Profileを作成する Xcodeで証明書とProvisioning Profileの設定をする Release buildをする 28
iOSの署名 補足 Provisioning Profileは定期的に再発行イベントがある 証明書の期限が切れたとき Appleから発行された証明書は、有効期限が 1 年 となってる Androidのほうは
25 年 なので、あんまり気にしなくていい Push通知などのCapabilities追加したとき Provisoning Profileに有効になっているCapabilitiesが書いてある 機能追加したら更新する必要がある 検証端末を増やしたとき UDIDが登録されていない検証端末では、アプリが動作しない 新しい検証端末のUDIDを登録してから、Provisioning Profileを再発行する 29
よくあるユースケースとその対応方法 30
Staging環境つくりたい 31
Staging環境つくりたい Androidでやること package nameを環境ごとに分ける see: ビルド バリアントを設定する | Android デベロッパー
| Android Developers Staging用に新しくkeystoreを作る必要はない debug用のkeystoreがあるので、それを使えばいい android.app/debug.keystore 32
Staging環境つくりたい iOSでやること package nameを環境ごとに分ける see: XcodeでDevelop/Staging/Release環境を上手に切り分ける方法 - Qiita Staging用にProvisioning Profileを作る必要がある
検証端末のDevice IDを登録する 21枚目のスライド参照 App IDをwildcardで指定して登録する $ fastlane produce --app_indetifier [App ID].* Provisionig Profileを作る $ fastlane match adhoc --app_identifier [App ID].* 33
CIでSignging済みのパッケージファイルをつくりたい 34
CIでSignging済みのパッケージファイルをつくりたい 署名関連ファイルは基本リポジトリに含めないので、CIでビルドするときにそれらを取 ってくる必要がある Androidは、keystoreをbase64してCIの環境変数にいれる iOSは、matchを利用して証明書をローカルにとってくる 35
各種設定ファイルとかをfastlane matchのように管理した い 36
各種設定ファイルとかをfastlane matchのように管理した い 各種設定ファイル keystore, google-services.json, sentry.properties, ... 大きく2パターンあるのでお好みでどうぞ 機密情報管理サービスを利用し、セットアップ時に設定ファイルを生成する
AWS Secret manager GCP Secret Manager Hashicorp Vault 設定ファイルを暗号化し、git管理に含めてしまう git-secret git-cript 37