WWDC 2018: Automating App Store Connect メモ



# これは何

WWDC 2018 のセッション [Automating App Store Connect](https://developer.apple.com/videos/play/wwdc2018/303/) のメモです。

# セッション概要

> The new App Store Connect API provides a familiar and highly readable REST API designed to facilitate the automation of many tasks you would typically perform through the Apple Developer website and the App Store Connect browser interfaces. Learn how this API allows you to manage your apps and testers for TestFlight, create code signing resources, download reports, and even manage your organization. See how this API leverages JWT authentication and a JSON payload for all transactions to make this new service easy to integrate with your existing automated workflows.

新しいApp Store Connect APIは、Apple Developer WebサイトやApp Store Connectのブラウザインターフェイスを使って、通常実行する多くのタスクの自動化を容易にするように設計された使い慣れた読みやすいREST APIを提供します。 このAPIを使用してTestFlightのアプリケーションとテスターを管理したり、コード署名リソースを作成したり、レポートをダウンロードしたり、組織の情報を管理したりすることができます。この新しいサービスを既存の自動ワークフローと容易に統合するために、JWT認証とすべてのトランザクションのJSONペイロードをどのように利用するか御覧ください。

## Getting data

APIのURLは 

```
api.appstoreconnect.apple.com
``` 

のようなドメインになる。

様々な情報が取得できる。

![スクリーンショット 2018-06-08 15.06.45.png](https://qiita-image-store.s3.amazonaws.com/0/8292/738ea2af-7047-71a3-5c91-b8c5851aa720.png)


例えば

```
GET api.appstoreconnect.apple.com/v1/users
```

はユーザー情報を取得するAPI。次のようなレスポンスが返ってくる。

![IMG_6876.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/7d7ea2b0-26ae-84b3-0e71-f0c016461046.png)



## Changing data

HTTPメソッドは次のものを利用する。

![スクリーンショット 2018-06-08 15.07.25.png](https://qiita-image-store.s3.amazonaws.com/0/8292/b9ca9dfb-035f-237e-13d1-fdd76a2da458.png)


例えばユーザーにインビテーションを送る場合は `POST`。

![IMG_6878.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/62992ca1-723a-78ce-dc6b-5bf968d4b7e3.png)


ユーザーの属性を更新する場合は `PATCH`。

![IMG_6879.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/91c6bede-0b9b-5318-3e15-4594e4b51e3c.png)


ユーザーを削除する場合は `DELETE`。

![スクリーンショット 2018-06-08 15.47.12.png](https://qiita-image-store.s3.amazonaws.com/0/8292/6d87dcd9-7982-c66a-583e-ce73fe52b6bb.png)


## Relationships

![スクリーンショット 2018-06-08 15.37.11.png](https://qiita-image-store.s3.amazonaws.com/0/8292/8469dbcb-4700-3824-d785-c3b9b9357fa1.png)


[TestFlight](https://developer.apple.com/testflight/) にはテスターをグルーピングできる機能があるが、それらの管理（テストメンバーの取得や追加）も可能。

![IMG_6881.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/048a68fb-4bcb-3502-3270-a0d01c56f0ae.png)


`include=betaTesters` を付加することで各メンバーの詳細な情報も一度に取得可能。

![IMG_6884.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/38476925-676b-19d2-f8b0-8d79123f63dd.png)


## Errors

エラーの場合は次のようなJSONが返される。

![スクリーンショット 2018-06-08 15.49.03.png](https://qiita-image-store.s3.amazonaws.com/0/8292/3673a75d-153b-220a-73dd-439dba0d5129.png)


## Access and authentication

APIアクセスにはトークンが必要。トークンを使用せずにAPIにアクセスすると `NOT_AUTHORIZED` エラーになる。

![スクリーンショット 2018-06-08 15.50.06.png](https://qiita-image-store.s3.amazonaws.com/0/8292/859eb6c7-1665-2260-b2f9-acd658933633.png)


トークンは Public Key, Private Key から構成される。
前者はアップルのサーバーに保存されるが、後者はApp Store Connectから一度だけダウンロードできる（デモでは .p8 ファイルで保存されていた）。

![IMG_6891.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/354e3ded-9bde-1f92-a8a8-effdc0a6831e.png)


トークンを構成するキーなどはApp Store Connectから確認できる。

![IMG_6892.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/35b384e5-d503-184d-f5df-55ac1c22f4e9.png)


Private Keyはアップルでは管理しないので、ちゃんと自分で管理してね。間違っても拡散しないように。

![IMG_6893.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/4d2dc5cf-1460-7abd-5d59-e38fddb560ba.png)


JWT(JSON Web Token) を構成するフィールド。

![IMG_6896.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/6564e21e-0505-8bab-6f1b-78513d539248.png)


これらの情報をもとにトークンを生成する。

![IMG_6899.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/a1f3a5d4-d6b9-9828-061f-55b3c3397a5e.png)


APIリクエストの際、トークンを `Authorization: ` に含めることで情報が取得できるようになる。

![IMG_6900.PNG](https://qiita-image-store.s3.amazonaws.com/0/8292/526c3cbb-d5b7-044c-5793-6b2c1b216b80.png)



## Best practices

- Private Key をしっかり保管しましょう
- トークンは有効期限内であれば再利用しましょう
- 詳しくはドキュメントを読んでね

# リリース時期

App Store Connect APIはこの夏、利用可能になるとのことです。

![スクリーンショット 2018-06-08 16.22.50.png](https://qiita-image-store.s3.amazonaws.com/0/8292/299932ed-4a4f-8f2a-3188-1897c437a310.png)


楽しみですね！:relaxed: