Apple이 Epic Games와의 법정 모독 판결에 대해 대법원에 상고했습니다. 2026년 9월 14일, Apple은 Apple Inc. v. Epic Games, Inc. (사건 번호 25-1311) 건에 대해 미국 연방 대법원에 상고 이유서를 제출했습니다. 이는 자사의 반스티어링(anti-steering) 규정 준수 프레임워크에 대한 민사상 법정 모독 판결을 파기하거나 취소해 달라는 요청입니다. 이번 상고는 2021년 반독점 판결 자체를 다투는 것이 아니라, 사법부의 법정 모독권 행사의 절차적 한계에 초점을 맞추고 있습니다. 구체적으로는 제9순회항소법원이 명령의 명시적 문구가 아닌, 명령의 '정신'에 근거해 당사자에게 민사상 모독 판결을 내린 것이 타당한지 여부입니다. 모바일 소프트웨어 설계자, 빌링 엔지니어, 사용자 확보 팀에게 이번 법적 분쟁은 앱-웹 결제 라우팅(App-to-Web Payment Routing)의 아키텍처적 측면에서 매우 중요한 시사점을 던집니다. 개발자가 인앱 결제(IAP) 외의 대체 구매 수단을 제공하기 위해 외부 결제 흐름을 도입할 때, 엔지니어링 팀은 탄력적인 양방향 라우팅 파이프라인을 설계해야 합니다. 이를 통해 유니버설 링크(Universal Links)를 사용하여 네이티브 앱이 백엔드 결제 서비스로부터 권한 있는 거래 상태를 안전하게 복구할 수 있도록 해야 합니다.
대법원 상고: 법정 모독권과 75단어 명령
이번 대법원 분쟁은 연방 민사소송 규칙 65(d) 및 확립된 연방 형평법 원칙에 따라 민사상 법정 모독을 부과하기 위해 필요한 법적 기준을 중심으로 전개됩니다.
2021년 9월, 미국 캘리포니아 북부 연방 지방법원은 Apple이 연방 반독점법상 불법 독점 기업은 아니라고 판결했지만, 스티어링(사용자 유도)을 금지하는 개발자 가이드라인이 소비자에게 정보적 피해를 주어 캘리포니아 불공정 경쟁법(UCL)을 위반했다고 결론 내렸습니다. 이를 시정하기 위해 지방법원은 Apple이 앱 내에 "인앱 결제 외에 구매 메커니즘으로 안내하는 버튼, 외부 링크 또는 기타 클릭 유도 문안(CTA)을 포함하는 것을 차단하지 말 것"을 명시한 75단어의 영구 명령을 내렸습니다.
핵심 요약
- 대법원 상고 이유서 제출: 2026년 9월 14일, Apple은 Apple Inc. v. Epic Games, Inc. (사건 번호 25-1311)에 대해 명령의 '정신'을 근거로 한 법정 모독 판결에 불복하며 상고했습니다.
- 핵심 쟁점: 대법원은 첫 번째 질문에 대해서만 심리를 결정했습니다. 명령문에 명시되지 않은 conduct(행위)에 대해 명령의 '취지'를 근거로 법정 모독을 부과할 수 있는지, 아니면 오랫동안 확립된 '합리적 의문의 여지가 없는(no fair ground of doubt)' 표준(Taggart v. Lorenzen)에 따라 명시적인 통지가 필요한지 여부입니다.
- 운영적 트리거: 법정 모독 판결은 2024년 1월 Apple의 준수 계획에서 비롯되었습니다. Apple은 외부 구매 링크를 허용했지만, 7일 이내에 이루어지는 외부 결제에 대해 12~27%의 수수료를 부과하고 버튼 표시 방식을 규제했습니다.
- 항소법원 판결: 제9순회항소법원은 '정신' 교리를 근거로 법정 모독 판결을 지지했지만, 외부 링크 수수료에 대한 지방법원의 영구 금지 명령은 파기하고 재심리하도록 환송했습니다. 현재 지방법원의 환송 심리가 진행 중인 가운데, Apple은 법정 모독 판결 자체를 무효화하고자 합니다.
MacRumors와 AppleInsider의 보도에 따르면, Latham & Watkins의 Gregory G. Garre 변호사가 준비한 Apple의 상고 이유서는 원래의 75단어 명령이 외부 링크 수수료나 구체적인 버튼 스타일에 대해 침묵하고 있었다고 주장합니다. Apple은 스티어링에 대한 포괄적 금지를 폐지하고 외부 구매 링크 가이드라인을 수립하여 개발자가 외부 링크를 포함할 수 있도록 했습니다. Epic이 수수료와 디자인 요구 사항에 대해 이의를 제기했을 때, 하급 법원은 명령의 광범위한 경쟁적 목표를 방해했다는 이유로 Apple에 법정 모독 판결을 내렸습니다.
Apple은 민사상 법정 모독을 명확한 문구적 명령으로부터 분리하는 것은 규칙 65(d)의 구체성 요건을 위반하며 규제 대상자에게 공정한 통지를 박탈하는 것이라고 주장합니다. 공식 대법원 사건 목록에 따르면, Epic Games는 2026년 11월 13일까지 답변서를 제출할 예정이며, 구두 변론은 2027년 법원이 정한 일정에 따라 진행됩니다.

Epic v. Apple 반스티어링 소송 타임라인
| 날짜 / 기간 | 절차적 사건 | 운영적 배경 |
|---|---|---|
| 2021년 9월 10일 | 지방법원 판결 | UCL 명령으로 Apple의 외부 링크 차단 금지 |
| 2024년 1월 16일 | 준수 계획 제출 | Apple의 외부 구매 링크 규칙 도입 |
| 2025년 4월 30일 | 민사상 법정 모독 판결 | 지방법원, Apple에 모독 판결 및 수수료 금지 |
| 2025년 12월 11일 | 제9순회항소법원 판결 | '정신' 근거 모독 판결 지지, 0% 수수료 규칙 파기 |
| 2026년 6월 30일 | 대법원 심리 결정 | 법정 모독 관련 상고심(Q1) 허가 |
| 2026년 9월 14일 | 상고 이유서 제출 | Apple, 대법원에 상고 이유서(No. 25-1311) 제출 |
| 2026년 11월 13일 | 답변서 제출 기한 | Epic Games 답변서 제출 예정 |
앱-웹 결제 루프 엔지니어링
대법원이 법정 모독의 절차적 경계를 어떻게 결론짓든, 엔지니어링 조직이 직면한 실무적 현실은 분명합니다. 개발자는 외부 구매 링크를 구현하여 사용자를 웹 결제 페이지로 안내할 수 있습니다. 그러나 이를 실행하려면 스토어 전용 프레임워크와 일반적인 모바일 웹 결제 엔지니어링 요구 사항을 구분해야 합니다.
스토어 전용 프레임워크: 미국 정책 vs 지역별 StoreKit 외부 구매 프레임워크
모든 외부 결제 링크가 동일한 시스템 API에 의존한다고 오해하는 경우가 많습니다. 개발자는 스토어 지역과 해당 프로그램에 따라 구현 방식을 분리해야 합니다.
- 미국 스토어 프레임워크: 2021년 명령에 따라 Apple 앱 스토어 심사 지침은 미국 스토어 앱이 별도의 전문 StoreKit 외부 구매 링크 권한(Entitlement) 프로필 없이도 인앱 결제 외의 구매 메커니즘으로 안내하는 버튼이나 외부 링크를 포함할 수 있도록 허용합니다. 상업적 조건, 티어 평가 및 보고 메커니즘은 관련 개발자 계약의 적용을 받습니다.
- 지역별 StoreKit 외부 구매 프레임워크: 미국 이외의 지역에서는 구현 모델이 관할권 및 Apple 프로그램에 따라 다릅니다. 특정 스토어(예: 유럽 경제 지역 또는 러시아 외부 링크 프로그램 등)는
ExternalPurchaseLink.open()을 호출할 때 결제 페이지를 열고 Apple이 생성한 외부 구매 토큰을 감사를 위해 URL에 추가하는 특정 StoreKit 권한을 사용합니다. 한국의 대체 결제나 발전하는 EU 비즈니스 조건 등 다른 관할권과 프로그램은 별도의 StoreKit API, 공지 시트 및 보고 파이프라인을 사용합니다. 또한, EU의 경우 2026년 10월 1일부터 통일된 비즈니스 조건으로 전환될 예정이므로 구현 시점에 개발자의 해당 스토어와 계약에 따라 권한, API, 수수료 및 보고 요건을 평가해야 합니다.

양방향 웹 결제 루프 구축
다음 아키텍처는 가맹점이 직접 설계하는 일반적인 외부 링크 흐름을 보여줍니다. 전문 플랫폼 프로그램이 적용되는 스토어에서는 지역 전용 StoreKit API가 아웃바운드 발송 단계를 대체하거나 래핑할 수 있습니다.
- 아웃바운드 브라우저 발송: 애플리케이션은 적격한 CTA 또는 링크 버튼을 표시합니다. 사용자가 상호작용하면 앱은 표준 시스템 핸들러를 사용하여 외부 URL을 발송합니다(지역 권한 API에 의해 요구되는 경우 StoreKit 시트 사용). 애플리케이션은 사용자 의도를 연결하기 위해 불투명하고 수명이 짧은 결제 세션 참조 값(예:
https://checkout.example.com/pay?session_ref=chk_99182)을 URL에 추가합니다. 민감한 개인 데이터나 원본 계정 자격 증명을 URL 쿼리 문자열에 일반 텍스트로 전달해서는 안 됩니다. - 웹 결제 처리: 웹 결제 게이트웨이는 세션 참조 값을 수신하고, 고객 인증을 처리하며, 외부 결제 서비스 제공업체(Stripe 또는 Adyen 등)를 통해 결제를 실행합니다.
- 가맹점 백엔드 확인: 외부 프로세서가 결제를 확인하면 가맹점 백엔드는 권한 있는 데이터베이스에서 주문을 처리 완료 상태로 표시하고 완료 영수증을 기록합니다.
- 인바운드 리턴 내비게이션 (유니버설 링크): 결제가 완료되면 웹 결제 완료 페이지는 확인된 Apple 유니버설 링크(예:
https://checkout.example.com/payment-complete?order_ref=ord_8812)를 사용하여 네이티브 앱으로의 복귀 흐름을 시작합니다. - 기기 내 장면(Scene) 처리 및 권한 갱신: 운영 체제는 HTTPS 유니버설 링크를 가로채
scene(_:continue:)또는scene(_:willConnectTo:options:)를 통해UIWindowSceneDelegate로 페이로드를 전달합니다. 네이티브 애플리케이션은 불투명한 주문 참조 값을 파싱하고, 인증된 API를 통해 백엔드에 쿼리하여 거래 소유권을 확인한 후 사용자 권한을 적절하게 업데이트합니다.

+-------------------------------------------------------------------------+ | 양방향 앱-웹 결제 파이프라인 | +-------------------------------------------------------------------------+ | | | [ 네이티브 iOS 앱: 사용자 외부 구매 옵션 선택 ] | | | | | |-- (UIApplication.shared.open을 통한 링크 발송) | | v | | [ Safari / 기본 웹 브라우저: 결제 포털 열기 ] | | URL: https://checkout.example.com/pay?session_ref=CHK_99182 | | | | | v | | [ 웹 결제 게이트웨이: 외부 결제 처리 ] | | | | | |-- (가맹점 백엔드가 결제 확인 및 영수증 기록) | | v | | [ 웹 완료 페이지: 검증된 유니버설 링크 반환 흐름 시작 ] | | URL: https://checkout.example.com/payment-complete?order_ref=ORD_8812 | | | | | v | | [ iOS가 HTTPS 도메인 연결(AASA 유효성 검사) 가로채기 ] | | | | | +---------------------------------------+ | | | (메모리 내 실행 중인 앱) | (앱 콜드 시작) | | v v | | [ scene(_:continue:) ] [ scene(_:willConnectTo:) ] | | | | | | +-------------------+-------------------+ | | | | | v | | [ 앱이 가맹점 백엔드에 쿼리하여 권한 있는 상태 재수집 ]| | | | | v | | [ 장면 계층 구조가 확인 화면 표시 및 디지털 상품 잠금 해제 ]| | | +-------------------------------------------------------------------------+
이 아키텍처는 중요한 보안 경계를 강화합니다. URL 쿼리 매개변수는 절대 결제에 대한 권한 있는 증거로 사용될 수 없습니다. 유니버설 링크는 복귀 경로를 제공할 뿐이며, 권한 있는 디지털 이행(fulfillment)은 반드시 가맹점의 백엔드 결제 서비스로부터 직접 다시 검증받아야 합니다.
// 외부 웹 결제로부터 안전한 복귀 라우팅을 보여주는 예시 Swift 구현.
// UIWindowSceneDelegate 내에서 유니버설 링크를 검증하고, 불투명한 주문 참조 값을 파싱하며,
// 브라우저 쿠키에 의존하지 않고 권한 있는 백엔드 결제 서비스에 쿼리하여 권한을 업데이트합니다.
import UIKit
struct CheckoutCompletionPayload {
let orderRef: String
}
final class PaymentReturnRouter {
static let shared = PaymentReturnRouter()
// 심층 방어 라우팅 경계를 강제하기 위한 화이트리스트 호스트
private let authorizedHost = "checkout.example.com"
private let authorizedPathPrefix = "/payment-complete"
private init() {}
/// 유니버설 링크를 파싱하고 검증하여 권한이 없는 결제 완료 힌트를 추출
func parseReturnURL(_ url: URL) -> CheckoutCompletionPayload? {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true),
components.scheme == "https",
components.host == authorizedHost,
components.path.hasPrefix(authorizedPathPrefix),
let queryItems = components.queryItems else {
return nil
}
guard let orderRef = queryItems.first(where: { $0.name == "order_ref" })?.value else {
return nil
}
return CheckoutCompletionPayload(orderRef: orderRef)
}
/// 뷰 계층 구조 내비게이션을 지시하고 권한 있는 거래 검증을 백엔드에 위임
func handlePaymentCompletion(payload: CheckoutCompletionPayload, in window: UIWindow?) {
// 참고: URL 쿼리 매개변수는 결제 증빙 역할을 하지 않습니다.
// 네이티브 앱은 쿼리 매개변수와 무관하게 인증된 채널을 통해 권한 있는 백엔드 서비스에 쿼리합니다.
BackendBillingService.shared.verifyExternalOrder(orderRef: payload.orderRef) { result in
DispatchQueue.main.async {
guard let nav = window?.rootViewController as? UINavigationController else { return }
switch result {
case .success(let orderState):
if orderState.isPaid {
let successVC = OrderSuccessViewController(orderRef: payload.orderRef, entitlements: orderState.entitlements)
nav.pushViewController(successVC, animated: true)
} else {
let pendingVC = OrderPendingViewController(orderRef: payload.orderRef)
nav.pushViewController(pendingVC, animated: true)
}
case .failure(let error):
print("권한 있는 주문 검증 실패: \(error.localizedDescription)")
let failureVC = OrderFailureViewController()
nav.pushViewController(failureVC, animated: true)
}
}
}
}
}
// 콜드 시작 및 웜 세션 수명 주기 전반에서 유니버설 링크 전달을 캡처하는 SceneDelegate
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
// 시나리오 1: Safari에서 돌아올 때 실행되는 장면 연결
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
let window = UIWindow(windowScene: windowScene)
let navigationController = UINavigationController(rootViewController: StorefrontViewController())
window.rootViewController = navigationController
self.window = window
window.makeKeyAndVisible()
if let userActivity = connectionOptions.userActivities.first(where: { $0.activityType == NSUserActivityTypeBrowsingWeb }),
let incomingURL = userActivity.webpageURL,
let payload = PaymentReturnRouter.shared.parseReturnURL(incomingURL) {
PaymentReturnRouter.shared.handlePaymentCompletion(payload: payload, in: window)
}
}
// 시나리오 2: 메모리 내에서 실행 중인 장면으로 유니버설 링크 전달
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let payload = PaymentReturnRouter.shared.parseReturnURL(incomingURL) else {
return
}
PaymentReturnRouter.shared.handlePaymentCompletion(payload: payload, in: self.window)
}
}
struct OrderState {
let isPaid: Bool
let entitlements: [String]
}
// 애플리케이션 뷰 컨트롤러 계층 구조 및 빌링 서비스 스텁
final class BackendBillingService {
static let shared = BackendBillingService()
private init() {}
func verifyExternalOrder(orderRef: String, completion: @escaping (Result<OrderState, Error>) -> Void) {
// 보안 API를 통해 가맹점 백엔드에 쿼리하여 거래 상태 및 권한 자격 확인
completion(.success(OrderState(isPaid: true, entitlements: ["unlimited_access", "premium_tier"])))
}
}
class StorefrontViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = "Storefront"
view.backgroundColor = .systemBackground
}
}
class OrderSuccessViewController: UIViewController {
let orderRef: String
let entitlements: [String]
init(orderRef: String, entitlements: [String]) {
self.orderRef = orderRef
self.entitlements = entitlements
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
override func viewDidLoad() {
super.viewDidLoad()
title = "Order Confirmed"
view.backgroundColor = .systemGroupedBackground
}
}
class OrderPendingViewController: UIViewController {
let orderRef: String
init(orderRef: String) {
self.orderRef = orderRef
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
override func viewDidLoad() {
super.viewDidLoad()
title = "Order Processing"
view.backgroundColor = .secondarySystemBackground
}
}
class OrderFailureViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = "Payment Failed"
view.backgroundColor = .systemGroupedBackground
}
}
다운스트림 모바일 확보 및 설치 경계
앱-웹 라우팅이 설치된 앱을 벗어나는 기존 사용자를 제어하는 반면, 디지털 가맹점은 새로운 고객을 웹에서 확보하여 네이티브 앱으로 전환해야 하는 역설적인 운영 과제에 직면하는 경우가 많습니다.
다채널 마케팅 캠페인에서 잠재 고객은 소셜 미디어, 콘텐츠 마케팅 또는 웹 검색 광고를 통해 웹 스토어나 프로모션 랜딩 페이지를 접하게 됩니다. 이러한 웹 랜딩 페이지에서 고객은 네이티브 앱을 설치하기 전에 계정을 등록하거나 구독을 설정하거나 프로모션을 선택할 수 있습니다.

+-------------------------------------------------------------------------+ | 별도의 다운스트림 모바일 확보 여정 | +-------------------------------------------------------------------------+ | | | [ 외부 터치포인트: 웹 스토어 / 프로모션 랜딩 페이지 ] | | 캡처된 컨텍스트: ?campaign_id=fall_sale&promo_code=SAVE20&sku=8831 | | | | | v | | [ 사용자 캠페인 상호작용 / "모바일 앱 다운로드" CTA 클릭 ] | | | | | v | | [ Apple 앱 스토어로 리디렉션 ] | | | | | v | | [ 설치 경계: 표준 앱 스토어 다운로드 흐름은 최초 실행 시 | | 웹 컨텍스트를 자동 복구하지 않음 ] | | | | | v | | [ 사용자의 앱 최초 실행 (콜드 부팅) ] | | 기본 동작: 일반 홈 화면; 웹 캠페인 컨텍스트 유실. | | | | | v | | [ 지연된 딥 링크 엔진: 서버 지원 신호 매칭 ] | | | | | v | | [ 적격 컨텍스트 복원: 앱이 로그인 또는 상품 수령 화면으로 이동 ] | | | | | v | | [ 앱이 사용자 인증 및 백엔드가 개별적으로 권한 확인 ] | +-------------------------------------------------------------------------+
설치되지 않은 사용자가 모바일 웹 스토어에서 앱 스토어로 이동할 때, 표준 운영 체제 배포 채널은 캠페인 태그, 제휴 토큰 또는 보류 중인 주문 참조와 같은 임의의 웹 쿼리 매개변수를 새로 설치된 애플리케이션 바이너리로 전달하지 않습니다. 최초 콜드 부팅 시 애플리케이션은 어떤 특정 프로모션 캠페인이나 웹 카탈로그 항목이 다운로드를 유도했는지 원천적으로 파악할 수 없습니다.
이 설치 경계를 해결하기 위해 엔지니어링 팀은 고객 여정 전반에 걸쳐 여러 링크 처리 프레임워크를 평가합니다.
| 라우팅 아키텍처 | 대상 앱 상태 | 설치 전반의 매개변수 유지 | 운영 소유권 모델 |
|---|---|---|---|
| 사용자 정의 URI 스킴 | 대상 앱 설치됨 | 앱 부재 시 기본 목적지 없음; 별도의 폴백 처리 필요 | 애플리케이션 소유 (유지 보수 부담 높음) |
| 검증된 유니버설 링크 | 대상 앱 설치됨 | 폴백 웹 페이지로 확인; 스토어 다운로드 후 임의의 웹 컨텍스트 재구성 불가 | 도메인 + 애플리케이션 소유 (AASA 호스팅 필요) |
| 지역별 StoreKit 외부 구매 API | 대상 앱 설치됨 | 스토어 및 프로그램에 따라 다름; 특정 흐름은 Apple 권한, 시스템 공개, 토큰 및/또는 보고 필요 | 플랫폼 관리 (지역별 프로그램 규칙 적용) |
| 지연된 딥 링크 (DDL) | 대상 앱 미설치 | 최초 콜드 부팅 시 적격 설치 전 매개변수 복원 | SDK 지원 (관리형 어트리뷰션 및 라우팅 엔진) |
프로덕션 모바일 아키텍처에서 개발 팀은 Branch, AppsFlyer, Adjust 또는 Opoinstall과 같은 지연된 딥 링크 프레임워크를 배포합니다. Opoinstall과 같은 플랫폼은 사용자가 앱 스토어로 전환되기 전에 마케팅 캠페인 식별자나 제품 SKU 참조와 같은 적격한 설치 전 웹 클릭 메타데이터를 기록합니다.
애플리케이션의 최초 콜드 부팅 시, 클라이언트 SDK는 어트리뷰션 백엔드에 쿼리하여 첫 실행 인스턴스와 이전 웹 클릭 세션을 매칭합니다. Opoinstall 홈페이지의 공식 플랫폼 문서에 따르면, 이 지연된 매개변수 전달 프레임워크는 적격 인스턴스의 최대 98%까지 최초 실행 시 매개변수를 복원할 수 있어, 수동 프로모션 코드 입력이나 일반적인 첫 실행 내비게이션에 대한 자동화된 대안을 제공합니다.
정확한 아키텍처 경계를 유지하는 것은 필수적입니다. 지연된 딥 링크는 사용자 계정을 인증하거나 결제 소유권을 증명하거나 플랫폼 심사 정책을 우회하지 않습니다. 이는 권한이 없는 설치 전 컨텍스트(주문 참조나 추천 태그 등)를 복원하여 애플리케이션이 사용자를 적절한 로그인 또는 보상 화면으로 안내하도록 도울 뿐이며, 백엔드 ID 확인 및 권한 잠금 해제는 독립적으로 수행되어야 합니다.
자주 묻는 질문 (FAQ)
대법원이 *Apple v. Epic Games* 사건에서 결정하기로 합의한 핵심 쟁점은 무엇인가요?
모든 iOS 외부 구매 링크에 StoreKit 외부 구매 링크 권한(Entitlement)이 필요한가요?
모바일 앱은 외부 웹 결제에서 돌아올 때 어떻게 상태를 유지하나요?
모바일 엔지니어링 팀을 위한 전략적 지침
Apple v. Epic Games에 대한 대법원의 검토는 모바일 앱 시장을 지배하는 지속적인 법적 및 규제적 진화를 강조합니다. 그러나 소프트웨어 설계자와 빌링 엔지니어는 사법적 결과가 나올 때까지 결제 라우팅을 부차적인 것으로 취급해서는 안 됩니다.
글로벌 iOS 앱을 운영하는 엔지니어링 조직은 다음 세 가지 아키텍처 원칙을 중심으로 시스템을 구축해야 합니다.
-
지역별 결제 로직 분리: 표준 미국 외부 링크 규칙과 지역별 StoreKit 권한 프레임워크 간의 결제 라우팅 구현을 분리하여 다양한 스토어 규정을 준수하도록 보장하십시오.
-
인바운드 유니버설 링크 콜백 강화:
UIWindowSceneDelegate내에 예상되는 스킴, 호스트 및 경로를 검증하는 탄력적인 유니버설 링크 핸들러를 구축하고, 들어오는 쿼리 매개변수를 권한 있는 거래 영수증이 아닌 라우팅 힌트로 간주하십시오. -
어트리뷰션 컨텍스트와 결제 권한 격리: 지연된 딥 링크(Deferred Deep Linking)를 사용하여 앱 설치 퍼널 전반에서 사용자 의도를 보존하되, 계정 인증 및 디지털 권한 잠금 해제는 보안이 강화된 권한 있는 백엔드 서비스에 의해 엄격하게 시행되도록 해야 합니다.
참고 문헌
-
미국 대법원. (2026). 사건 번호 25-1311, Apple Inc., Petitioner v. Epic Games, Inc. 사건 목록.
-
미국 대법원. (2026). 청구인 Apple Inc.의 요약, No. 25-1311.
-
미국 제9순회항소법원. (2025). Epic Games, Inc. v. Apple, Inc., No. 25-2935, 161 F.4th 1162.
-
Apple 개발자. (2026). 앱 스토어 심사 지침. Apple 설명서.
-
Apple 개발자. (2026). StoreKit 외부 구매 링크 권한. Apple 설명서.
-
Apple 개발자. (2026). 앱에서 유니버설 링크 지원하기. Apple 설명서.
-
Apple 개발자. (2026). UIWindowScene을 사용한 앱 수명 주기 관리. Apple 설명서.
-
MacRumors. (2026). Apple, 대법원에 앱 스토어 모독 판결 취소 요청.
-
AppleInsider. (2026). Epic 앱 스토어 수수료 소송에서 입장을 고수하는 Apple.
-
Opoinstall. (2026). 지연된 딥 링크 및 매개변수 기반 앱 설치 개요.
Share this article



