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
320
AppStoreConnectAPIを使って端末登録作業を自動化しよう!(Unity CI/CD 完全に理解した 勉強会)
Graffity
August 04, 2024
Tweet
Share
More Decks by Graffity
See All by Graffity
Craftrium で実現したObjectの両手操作による編集機能
graffity
0
13
AppleVisionProCICD
graffity
0
380
HandgestureTool for AppleVisionPro
graffity
0
56
NinjaGazeTyping
graffity
0
37
Graffity 採用候補者の皆様へ
graffity
1
16k
Other Decks in Technology
See All in Technology
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
270
一度 Expo の採用を断念したけど、 再度 Expo の導入を検討している話
ichiki1023
1
170
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
740
トラシューアニマルになろう ~開発者だからこそできる、安定したサービス作りの秘訣~
jacopen
2
2k
MC906491 を見据えた Microsoft Entra Connect アップグレード対応
tamaiyutaro
1
540
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
720
技術負債の「予兆検知」と「状況異変」のススメ / Technology Dept
i35_267
1
1.1k
2.5Dモデルのすべて
yu4u
2
860
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
700
AndroidXR 開発ツールごとの できることできないこと
donabe3
0
130
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
570
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
320
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Six Lessons from altMBA
skipperchong
27
3.6k
Scaling GitHub
holman
459
140k
A better future with KSS
kneath
238
17k
How STYLIGHT went responsive
nonsquared
98
5.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
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をプロジェクトで使 用
していなかったのと、ツール側で余計なことしてほしく なかったので 自力 実装してる感じです)