Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/C...
Search
Graffity
August 04, 2024
Technology
550
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/CD 完全に理解した 勉強会)
Graffity
August 04, 2024
More Decks by Graffity
See All by Graffity
VisionOSTC_2025_ja
graffity
0
150
Introduce technical issue and solution of various genre games for Apple Vision Pro
graffity
0
57
Unity-Groq × AI × 音声認識
graffity
0
95
Craftrium で実現したObjectの両手操作による編集機能
graffity
0
68
AppleVisionProCICD
graffity
0
630
HandgestureTool for AppleVisionPro
graffity
0
210
NinjaGazeTyping
graffity
0
92
Graffity 採用候補者の皆様へ
graffity
2
26k
Other Decks in Technology
See All in Technology
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
140
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
440
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
890
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
7
2.7k
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
370
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
880
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
130
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
330
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
110
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1k
会社説明資料
persolserverworks
0
9.7k
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Deep Space Network (abreviated)
tonyrice
0
370
How to build a perfect <img>
jonoalderson
1
6.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
4 Signs Your Business is Dying
shpigford
187
23k
HDC tutorial
michielstock
2
960
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Facilitating Awesome Meetings
lara
57
7.2k
Faster Mobile Websites
deanohume
310
32k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
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をプロジェクトで使 用
していなかったのと、ツール側で余計なことしてほしく なかったので 自力 実装してる感じです)