App Storeの法人・学校向けサブスクリプション一括購入が開始|既定で有効になった販売設定と、StoreKitで「ASSIGNED」の購入を開放するコード

Appleが10月22日、法人と学校向けのサブスクリプション一括購入を始めた

Appleは2026年10月22日、企業や学校がアプリのサブスクリプションをまとめて購入できる仕組みの提供を始めたと、開発者向けニュースで発表しました。組織はApple BusinessやApple School Managerから必要な席数を1回の購入で買い、デバイス管理の仕組み(MDM)を使ってメンバーに席を割り当てます。

開発者にとって大事なのは、この販売方法がApp Store Connectで既定で有効になっていることです。ファミリー共有を有効にしたものなど一部の例外を除き、設定を変えていなければ、StoreKit 2を使う自動更新サブスクリプションは、すでに組織から買える状態になっています。そして、組織から席を割り当てられた人のトランザクションは、これまでの「自分で購入」とも「ファミリー共有」とも違う、新しい持ち主の種類として届きます。

この記事では、Appleの公式資料をもとに複数席購入の仕組みと設定を整理します。そのうえで、手元のXcode 26.5とXcode 27.1 betaでStoreKitを調べて動かし、割り当てられた購入をアプリがどう受け取るか、既存のコードで機能を開放し損ねる書き方はどれかを確かめた結果をまとめます。

この記事の要点

組織から割り当てられた利用者は「ASSIGNED」として届く。自分で買った購入だけを有効とみなすアプリは、その利用者に機能を開放しない

販売の設定

既定で有効

StoreKit 2を使うサブスクリプションは、ファミリー共有を有効にしたものなどを除き、設定を変えていなければ組織から買える。

届く持ち主の種類

ASSIGNED

StoreKitでは .assigned。組織やグループから使えるようになった人を表す。

.assignedと名前で書けるXcode

Xcode 27のSDK

iOS 15まで遡って使える。Xcode 26.5では名前で書けないため、文字列で比べる。

席の取り消し

ASSIGNMENT_REVOKE

組織やグループの購入者が席を外したときの取り消しの種類。

出典: Apple Developer News(2026年9月16日・10月22日)、App Store Connectヘルプ、App Store Server API。StoreKitの値は筆者がXcodeで確認

組織は席数を買い、メンバーへ割り当てる

Appleは9月16日のニュース「Get your subscriptions ready for iOS 27」で、複数席の購入を2つの形で用意すると予告していました。10月22日に始まったのは、そのうちの組織向けの一括購入です。

複数席の購入は2種類

組織向けは10月22日に開始、個人のグループ購入はこの冬

開始済み(10月22日)

組織の一括購入

  • Apple BusinessとApple School Managerから購入
  • 組織がMDMでメンバーへ席を割り当てる
  • 購入画面はAppleが用意し、アプリ側の画面は不要

この冬に開始予定

App Storeのグループ購入

  • 購入者が席数を選んで買い、招待リンクを配る
  • 席数を選ぶ画面はアプリが作る
  • サンドボックスでの確認は11月から

出典: Apple Developer News(2026年9月16日・10月22日)、WWDC26「Offer subscriptions to groups and organizations」

席の値段は、既定では今のサブスクリプション価格がそのまま1席あたりの価格になります。WWDC26のセッションによると、席数に応じて1席あたりの価格を下げる区分を最大5つまで設定できます。

どちらの形でも、席が割り当てられると、App Storeはメンバー1人ごとにトランザクションを作ります。アプリはそのトランザクションを見て、メンバーに機能を開放します。

App Store Connectでは、多くのサブスクリプションが最初から組織に販売される

App Store Connectのヘルプによると、複数席の購入は、以前に設定を変えていない限り有効になっています。例外として、ファミリー共有を有効にしたものと、StoreKit 2を使っていないものは既定で無効です(ヘルプは、2026年9月14日より前に作ったサブスクリプションについての条件として書いています)。カスタムAppのサブスクリプションは無効にできず、Apple BusinessとApple School Managerで自動的に販売されます。

App Store Connectでの確認

サブスクリプションごとの「Purchase Options」で選ぶ

  1. 1. サブスクリプションを開く
    アプリを選び、サイドバーのSubscriptionsから対象のサブスクリプションを開く。操作できるのはAccount Holder、Admin、App Managerの役割。
  2. 2. Purchase OptionsのEditを押す
    「Can a customer purchase multiple seats for this subscription?」で、複数席を許可するかを選ぶ。
  3. 3. 販売する場所を選ぶ
    「Where can a customer purchase this subscription?」で、App Store、Apple Business、Apple School Managerから選んで保存する。組織向けの2つで販売するには、複数席の許可が必要。

出典: App Store Connectヘルプ「Manage purchase options for auto-renewable subscriptions」。画面の文言は英語表示のもの

設定を変えると、すでに契約している人や組織にも影響します。ヘルプは2つの操作を分けて説明しています。Apple BusinessやApple School Managerでの販売を止めた場合、その販売先の契約は自動では更新されず、次の更新日で終わります。審査を通ったサブスクリプションでこの2つの販売先を外せるのは、Account Holderだけです。複数席そのものを無効にした場合は、2つの販売先からも外れます。このときヘルプには、グループ購入者(group purchaser)の今の契約は購入者が解約するまで更新され、席の追加だけができなくなる、と書かれています。すでに組織の契約があるサブスクリプションで複数席を無効にしたとき、組織の契約がこの扱いと「次の更新日で終わる」扱いのどちらになるかは、ヘルプからは読み取れません。審査を通った後は、App Storeでの販売は外せません。

ファミリー共有を有効にしたサブスクリプションで複数席も許可すると、ファミリー共有が効くのは購入者の席だけで、ほかの席は1人用になります。ファミリー共有は一度有効にすると無効に戻せないので、組織向けの販売を考えているサブスクリプションでは、この組み合わせを先に決めておきます。

割り当てられた購入は「ASSIGNED」として届く

組織から席を割り当てられた人のトランザクションは、持ち主の種類が新しい値になります。App Store Server APIのinAppOwnershipTypeには、これまでの PURCHASED(購入者本人)と FAMILY_SHARED(ファミリー共有)に加えて、ASSIGNED(組織またはグループを通じて使える人)が載っています。

アプリ側のStoreKitでこの値がどう見えるかを、手元のXcodeで調べました。Xcode 27.0と27.1 betaのSDKに入っているStoreKitの公開インターフェースには、Transaction.OwnershipType.assigned と、席の取り消しを表す Transaction.RevocationType.assignmentRevocation がありました。説明文は「組織を通じてこのトランザクションを利用できる」「組織の管理者が取り消した」です。Xcode 26.5のSDKには、どちらもありません。

手元での確認(macOS 27.0.1)

Xcode 27のSDKなら名前で書け、iOS 15まで遡って使える

Xcode 26.5(Swift 6.3.2)

名前で書くとビルドエラー

  • .assigned: 「has no member 'assigned'」
  • .assignmentRevocation: 同じくエラー
  • 文字列 "ASSIGNED" から作った値は、.purchased とも .familyShared とも一致しない

Xcode 27.0 / 27.1 beta(Swift 6.4)

ビルドでき、値を確認できた

  • .assigned の値: ASSIGNED
  • .assignmentRevocation の値: ASSIGNMENT_REVOKE
  • .assigned はiOS 15以降、.assignmentRevocation はiOS 26.4以降で使える(@backDeployed)

2026年10月30日に筆者が確認。値はmacOS向けにビルドした小さなプログラムで表示し、公開範囲はiOS SDKのStoreKitのインターフェースで確認した

Xcode 27のSDKでは、.assigned に @backDeployed(before: iOS 27.0) が付いています。Xcode 27でビルドすれば、iOS 15以降のどの端末でも .assigned と書いて比べられ、これがいちばん確実な方法です。Xcode 26.5でビルドしたアプリにも、App Store Server APIと同じ ASSIGNED の文字列が届くと考えられますが、実際の購入での動作は、今回は実端末とサンドボックスで確かめていません。

「自分で買った購入だけ」を有効にする書き方は、割り当てられた人を締め出す

サブスクリプションの機能を開放するとき、持ち主の種類を見て判断しているアプリでは、書き方によって割り当てられた人の扱いが変わります。手元で、持ち主の種類ごとに「開放するか」を返す2つの関数を比べました。

import StoreKit

// 割り当てられた人も含めて開放する書き方(Xcode 27のSDK)
func grantsAccess(_ type: Transaction.OwnershipType) -> Bool {
    switch type {
    case .purchased, .familyShared, .assigned:
        return true
    default:
        return false
    }
}

// 自分で買った購入だけを有効とみなす書き方
func grantsAccessOld(_ type: Transaction.OwnershipType) -> Bool {
    type == .purchased
}

実行結果(Xcode 27.1 beta)

「.purchased だけ」の書き方では、ASSIGNEDとFAMILY_SHAREDが開放されない

持ち主の種類3種類すべてを開放する書き方.purchased だけ
PURCHASED開放する開放する
FAMILY_SHARED開放する開放しない
ASSIGNED開放する開放しない

2026年10月30日に筆者がmacOS 27.0.1で実行。FAMILY_SHAREDの行は、ファミリー共有を有効にしたサブスクリプションだけに関係する

Xcode 26.5でビルドするアプリで、文字列 "ASSIGNED" から作った値を switch に通すと、default へ進み、rawValue は ASSIGNED のままでした。default で開放しない作りで、すぐにXcode 27へ上げられない場合は、次のように文字列でも比べる条件を足しておけます。

// Xcode 26.5でビルドするアプリ向け(実際の購入では未確認)
let assigned = Transaction.OwnershipType(rawValue: "ASSIGNED")
if transaction.ownershipType == .purchased
    || transaction.ownershipType == .familyShared
    || transaction.ownershipType == assigned {
    // 機能を開放する
}

サーバー側でApp Store Server APIの inAppOwnershipType を見て開放を決めている場合も、同じ考え方で ASSIGNED を扱います。組織やグループの購入者が席を外したときは、取り消しの種類が ASSIGNMENT_REVOKE(StoreKitでは .assignmentRevocation)になります。.assignmentRevocation を名前で書けるのはiOS 26.4以降なので、古いOSも含めて機能を閉じるには、取り消し日(revocationDate)が入った購入を取り消し済みとして扱います。

持ち主の種類を見ずに、有効なトランザクションがあるかだけで機能を開放しているアプリは、判定を変えなくても割り当てられた人に機能が開くと考えられます(実際の購入では未確認)。

組織向けに売るかどうかで、確かめることが変わる

組織に売るかどうかを先に決めると、App Store Connectの設定とアプリのコードのどちらを直すかが決まります。

組織にも売る

  • 開放の判定に .assigned(または "ASSIGNED")を含める
  • 取り消し日(revocationDate)が入った購入で機能を閉じる
  • 席数に応じた価格の区分が必要か決める
  • ファミリー共有との組み合わせを決める

組織には売らず、グループ購入は残す

  • Purchase Optionsの販売先からApple BusinessとApple School Managerを外す
  • すでに組織の契約がある場合は、自動では更新されず次の更新日で終わる影響を確かめてから保存する

複数席の販売をすべて止める

  • Purchase Optionsで複数席を「No」にする(組織向けの販売先からも外れ、冬に始まるグループ購入も対象外になる)
  • 審査を通ったサブスクリプションで複数席を無効にするときは、保存の前にConfirmを押す
  • すでに組織の契約がある場合、その契約がどう扱われるかはヘルプから読み取れないため、Appleのサポートで確かめてから保存する

App Store Connectヘルプ、App Store Server API、手元での確認をもとに筆者が作成

個人のグループ購入がこの冬に始まると、購入者が友人や同僚を招待した場合にも ASSIGNED のトランザクションが届きます。組織向けの販売をすぐには考えていないアプリでも、開放の判定に ASSIGNED を含めておくと、どちらの購入が来ても同じコードで受け止められます。