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
460
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/CD 完全に理解した 勉強会)
Graffity
August 04, 2024
Tweet
Share
More Decks by Graffity
See All by Graffity
VisionOSTC_2025_ja
graffity
0
50
Introduce technical issue and solution of various genre games for Apple Vision Pro
graffity
0
27
Unity-Groq × AI × 音声認識
graffity
0
27
Craftrium で実現したObjectの両手操作による編集機能
graffity
0
48
AppleVisionProCICD
graffity
0
550
HandgestureTool for AppleVisionPro
graffity
0
110
NinjaGazeTyping
graffity
0
65
Graffity 採用候補者の皆様へ
graffity
2
23k
Other Decks in Technology
See All in Technology
20251222_サンフランシスコサバイバル術
ponponmikankan
2
150
通勤手当申請チェックエージェント開発のリアル
whisaiyo
3
600
Building Serverless AI Memory with Mastra × AWS
vvatanabe
1
780
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
780
Snowflake Industry Days 2025 Nowcast
takumimukaiyama
0
150
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
1.3k
Agent Skillsがハーネスの垣根を超える日
gotalab555
6
4.8k
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
120
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
130
普段使ってるClaude Skillsの紹介(by Notebooklm)
zerebom
8
2.5k
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
1.9k
LayerX QA Night#1
koyaman2
0
290
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
120
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
84
Git: the NoSQL Database
bkeepers
PRO
432
66k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
43
Everyday Curiosity
cassininazir
0
110
A Modern Web Designer's Workflow
chriscoyier
698
190k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
720
Being A Developer After 40
akosma
91
590k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
99
We Have a Design System, Now What?
morganepeng
54
7.9k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
980
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をプロジェクトで使 用
していなかったのと、ツール側で余計なことしてほしく なかったので 自力 実装してる感じです)