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
230
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/CD 完全に理解した 勉強会)
Graffity
August 04, 2024
Tweet
Share
More Decks by Graffity
See All by Graffity
AppleVisionProCICD
graffity
0
260
HandgestureTool for AppleVisionPro
graffity
0
30
NinjaGazeTyping
graffity
0
28
Graffity 採用候補者の皆様へ
graffity
1
14k
Other Decks in Technology
See All in Technology
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
270
Terraform Stacks入門 #HashiTalks
msato
0
350
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
190
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
150
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
28
12k
Lexical Analysis
shigashiyama
1
150
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
240
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
300
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
100
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
6
670
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Making Projects Easy
brettharned
115
5.9k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Teambox: Starting and Learning
jrom
133
8.8k
How GitHub (no longer) Works
holman
310
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
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をプロジェクトで使 用
していなかったのと、ツール側で余計なことしてほしく なかったので 自力 実装してる感じです)