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
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/C...
Search
Graffity
August 04, 2024
Technology
0
290
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/CD 完全に理解した 勉強会)
Graffity
August 04, 2024
Tweet
Share
More Decks by Graffity
See All by Graffity
AppleVisionProCICD
graffity
0
340
HandgestureTool for AppleVisionPro
graffity
0
50
NinjaGazeTyping
graffity
0
34
Graffity 採用候補者の皆様へ
graffity
1
15k
Other Decks in Technology
See All in Technology
Building Scalable Backend Services with Firebase
wisdommatt
0
110
Cloudflareで実現する AIエージェント ワークフロー基盤
kmd09
0
280
今年一年で頑張ること / What I will do my best this year
pauli
1
220
When Windows Meets Kubernetes…
pichuang
0
300
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
130
コロプラのオンボーディングを採用から語りたい
colopl
5
950
Evolving Architecture
rainerhahnekamp
3
250
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.3k
Goで実践するBFP
hiroyaterui
1
120
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
150
月間60万ユーザーを抱える 個人開発サービス「Walica」の 技術スタック変遷
miyachin
1
130
「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
fujiwara3
6
6.3k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
It's Worth the Effort
3n
183
28k
Docker and Python
trallard
43
3.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Six Lessons from altMBA
skipperchong
27
3.6k
Transcript
Unity CI/CD 完全に理解した 勉強会 AppStoreConnectAPIを使って 端末登録作業を 自 動化しよう!
目 次 1. 自己 紹介 2. AppleDeveloperでの端末登録について 3. AppStoreConnectAPIって何? 4.
使い 方 ・事例紹介
自己 紹介 • Gra ffi ty Inc所属 • 運 用
型のARゲーム開発ばっかやってる珍しい 人 です • 副業とかで専 門 学校講師やったりUnity使ったプロダクトの開発にいくつか関わってたりします 3 お前誰だよ X: Azukiidx Github: azukizuki
AppleDeveloperの端末登録について SECTION 2
AppleDeveloperの端末登録について 5 端末登録とは UnityでiOS向けアプリを作っている 人 はご存知だと思いますが、UnityのiOSビルドはXcodeプロジェク トの作成であり、そこから更にMacを使ってXcodeを使いアプリをビルド→端末にインストールする必 要があります。(AndroidはUnityで完結するのにね) しかも、全てのiOS端末に 入
れれるわけではなく、 事前に登録した端末のみが起動できる仕組みになっています 登録してる端末はアプリが 起動&配布できる
AppleDeveloperの端末登録について 6 作業 自 体は簡単なんです この作業はAppleDeveloperを開いて ・端末の登録作業(作業 自 体は端末名と端末の識別 子
(UDID)を 入力 するだけ) ・ProvisioningPro fi leに追加した端末を登録(チェックボックス 入 れて保存するだけ) という2作業を 行 う必要があります
AppleDeveloperの端末登録について 7 補 足 用 語解説: ProvisioningPro fi le
AppleDeveloper上で作成する アプリに対して証明書と起動可能な端末を紐づけるファイル(ざっくり) com.super.omoshiro.game というアプリがあったとしたら、 そのアプリ向けのPro fi leが1つ存在し、 中に証明書と起動可能な端末情報が含まれています。
AppleDeveloperの端末登録について 8 めんどいんじゃ〜 この作業 自 体はエンジニアであれば(なんならエンジニア以外でも)数分あればできる内容ですが ・AppleDeveloperを誰でもいじれる状況はあまり好ましくない ・間違って証明書消されたりすると 大 惨事
・権限管理も 大 変(退職者のアカウント消したり..) といった理由により、属 人 化しがちです。1プロジェクトに1 人 はいる「ビルド周り詳しい 人 」が 毎回やってるパターンが多いです(あるある) ビルド詳しい 人 →
AppleDeveloperの端末登録について 9 自 動化しよう! しかし、ビルド詳しい 人 が休暇などで不在なタイミングに、 誰も作業できず開発に影響が出てしまうのはとってもイケてないです。 なので 自
動化を 行 い、Jenkinsジョブを叩くだけで端末の登録ができる仕組みを構築することにしました。 この仕組みの実現に使ったのが今回のタイトルになっている AppStoreConnectAPIです
AppStoreConnectAPIって何? SECTION 3
AppStoreConnectAPIって何? • Appleが提供してくれているAppleDeveloper、AppStoreConnect上で 行 う作業を実 行 できるAPIです • 証明書の発 行
や端末登録、ProvisioningPro fi leの作成、TestFlightの管理など、幅広い作業が可能 11 #とは https://developer.apple.com/documentation/appstoreconnectapi
使い 方 ・事例紹介 SECTION 4
使い 方 ・事例紹介 13 使うまでの道のり AppStoreConnectAPIを使うにはまず、AppStoreConnectのページからKeyの発 行 が必要です ユーザとアクセス→統合 →AppStoreConnectAPI
を開き、キーを新規で発 行 します ※権限によってはAccountHolderじゃないと作業できないことがあります。 情シス的な 人 に聞きましょう
使い 方 ・事例紹介 14 使うまでの道のり 発 行 されるとこのような表 示 になります
APIを利 用 するときは Issuer IDとキーID、ダウンロードした.p8ファイルが必要です。 p8ファイルは1度DLすると 二 度とページからDL出来なくなるので間違えて消さないようにし ましょう
使い 方 ・事例紹介 15 使うまでの道のり P8ファイル、キーID、IssuerIDが揃ったら実際に APIを叩く実装をしていきます。 今回は(書き慣れてるので)Pythonでやってます。 APIを叩くための認証の実装はこんな感じです (認証
方 法が変わるかもしれないので公式Docを参照してください) https://developer.apple.com/documentation/appstoreconnectapi/ generating_tokens_for_api_requests
使い 方 ・事例紹介 16 端末登録 認証ができたら端末登録のAPIを叩いてみ ます payloadに Attributesというオブジェクトを作り、 中にデバイス名(任意の名前)、
UDID(端末固有識別 子 )、 platform(iphoneなどを登録する場合は IOSでOK)を 入 れてPostで叩くだけです
使い 方 ・事例紹介 17 端末登録
使い 方 ・事例紹介 18 端末登録 成功するとこのように登録されている端末のリストが返却されます。これだけで端末追加ができる!便利! マジで 見 せれる場所が無いけど…
使い 方 ・事例紹介 19 Profile更新だるい話 次にProvisioningPro fi leの更新にトライします ちょっと厄介なのが、AppStoreConnectAPIにはPro fi
le の更新APIが存在しません。作成と削除のみです そのため今回は Pro fi leの情報を取得し、同じ内容で Pro fi leを複製(バックアップを作成)→複製元を削除 →Pro fi le情報に登録した端末情報を追加して新規作成 というめんどくさいフローを実装しました
使い 方 ・事例紹介 20 Profile更新だるい話 ということでまずPro fi leの情報取得APIを叩く 実装をしました 実
行 するとPro fi leの詳細が出 力 されます
使い 方 ・事例紹介 21 Profile更新だるい話 Pro fi leのレスポンスを 見 ていくと、端末の情報や証明書の情報の部分にURLが記載されています。
これらの情報は追加でAPIを叩き取得してあげる必要があります。 こんな感じで証明書、デバイス、bundleIdの情報を別途取得しておきます(コードは後ほど公開)
使い 方 ・事例紹介 22 Profile更新だるい話
使い 方 ・事例紹介 23 Profile更新だるい話 バックアップ 用 に複製するリクエストを作成し、 作成APIを叩きます relationshipsの中の
bundleId,devices,certi fi catesには先程別で取得 した情報をセットしてあげます こうすることで全く同じ内容のPro fi leが作成でき ます
使い 方 ・事例紹介 24 Profile更新だるい話
使い 方 ・事例紹介 25 Profile更新だるい話 バックアップが作成できたので今度はもともとあっ たPro fi leを削除します。 これは削除APIにPro
fi leのID 入 れて投げるだけです
使い 方 ・事例紹介 26 Profile更新だるい話 最後に、新しく登録した端末の情報を取得するためにデバイス 一 覧のAPIを叩き、取得します。 そのレスポンスを利 用
して新規作成APIのリクエストボディを作成します 200件が上限なのでlimit=200を指定して叩きます。必要に応じてフィルタかけることも可能です(名前とかで)
使い 方 ・事例紹介 27 Profile更新だるい話 バックアップを作成したときと同じ感じで リクエストを作成します。 Devicesの部分だけ、先程取得したデバイス 一 覧からの情報を使います
このリクエストでPro fi le作成APIを叩けば Pro fi leの更新完了です!
使い 方 ・事例紹介 28 Profile更新だるい話
使い 方 ・事例紹介 29 大 勝利 あとはこれらの処理をJenkinsから叩けるようにpythonを調整します。 端末登録だけやるジョブや、FirebaseAppDistributionで 入手 できるテスター端末のtsvファイ
ルなどから 自 動登録するジョブなどがつくれます
使い 方 ・事例紹介 30 大 勝利
使い 方 ・事例紹介 31 大 勝利
使い 方 ・事例紹介 32 終わり! 最後に、今回紹介したコードなどはGithubで公開しています。 自 分 用 に作ったものなのでコードは結構雑ですが参考にはなるかと思います
サンプルとしてPro fi leのダウンロード、FirebaseAppDistributionのTSVからの端末登録、 ProvisioningPro fi leに全端末をセットして更新の3つのコードを 入 れています。 皆様の良き 自 動化ライフの助けになれば幸いです👏 AppStoreConnectApiUtils https://github.com/azukizuki/AppStoreConnectApiUtils
余談 33 終わり! 完全に余談ですがもしプロジェクトでFastlaneを導 入 している場合は似たような事をやってく れるツールが存在します https://docs.fastlane.tools/actions/match/ (今回はFastlaneをプロジェクトで使 用
していなかったのと、ツール側で余計なことしてほしく なかったので 自力 実装してる感じです)