Search results for

“sandbox”

10,540 results found

Post

Replies

Boosts

Views

Activity

In-App Purchase product not returned by StoreKit despite complete, correct configuration
App name: Hold My Bouquet Bundle ID: com.holdmybouquet.app App Store Connect App ID: 6807080553 In-App Purchase Product ID: com.holdmybouquet.app.page_unlock (Non-Consumable, £3.99) Our app was rejected on Guideline 2.1 because the reviewer could not complete this in-app purchase. Since the rejection, we have verified and corrected every configuration item we can control, but the purchase still fails identically in sandbox testing on a physical device. Confirmed correct: Paid Applications Agreement: Active com.holdmybouquet.app.page_unlock: status Ready to Submit, Cleared for Sale, pricing and availability set Bundle ID matches exactly across Xcode, App Store Connect, and our purchase provider (RevenueCat) Product ID matches exactly, no typos or case mismatches Sandbox tester account verified and signed in on-device (Settings → Developer → Sandbox Account) No local StoreKit Configuration file overriding real data (confirmed None in the Xcode scheme) To rule out our purchase provider
3
0
330
Sep ’26
Building a library playlist on macOS that mixes catalog songs and the user's own uploads in a fixed order – supported route, and how to know when an upload is registered?
Our sandboxed macOS app digitises audio cassettes and builds one playlist per cassette in the user's Apple Music library that follows the tape's order: catalog songs where a title was recognised, and the user's own recordings (AAC files the app exported from the tape) where it was not. The user has an Apple Music subscription and Sync Library on. On macOS every write on MusicLibrary is marked @available(macOS, unavailable) in the 26.5 SDK – add, add(_:to:), createPlaylist and edit (see thread 844114, which got no answer). So we build the playlist through Music.app's scripting interface: make new user playlist, duplicate to for catalog songs, add to for own recordings. That works, with one exception that leads to our questions. What we observe Reproducible on macOS 26.6.2 / Music 26; a standalone AppleScript is at the end. A playlist built in one go from 14 subscription tracks keeps all 14. The same playlist with one local file added after the second track: all 15 entries are there right after the
0
0
366
Sep ’26
In-App Purchase key returns 401 (4010000) on Advanced Commerce API but 200/404 on App Store Server API
Environment: Sandbox Bundle ID: com.fosssocial.app Key ID: L7DZYHGM62 Issuer ID: cf1f7bc7-452f-4bb8-a925-31ca29175fac Summary Our In-App Purchase key is accepted by the App Store Server API but rejected by the Advanced Commerce API, using the exact same bearer token. This appears to be an authorization grant that was never applied to the key, rather than a signing or request-format problem on our side. Reproduction — one token, two API families GET /inApps/v1/subscriptions/1 -> 404, errorCode 4040010 (token ACCEPTED, resource simply not found) POST /advancedCommerce/v1/subscription/changeMetadata/1 -> 401, errorCode 4010000 (token REJECTED) Same JWT, same key, issued seconds apart. A 401 on one family and a 404 on the other isolates this to key authorization. On-device symptom A signed SubscriptionCreateRequest passed to StoreKit as advancedCommerceData fails with StoreKitError.unknown / Unable to Complete Request. No payment sheet appears and no InvalidRequestError is returned, so there is no
0
0
260
Sep ’26
restorePurchases() returns zero transactions for Apple ID with confirmed active subscription
Hi all — hoping someone has run into this. restorePurchases() (via Flutter's in_app_purchase/in_app_purchase_storekit plugin, which wraps StoreKit) consistently returns zero transactions for an Apple ID that has a confirmed, currently active auto-renewable subscription to my app. Evidence the subscription is genuinely active: Settings → [Apple ID] → Subscriptions shows the subscription as active for this Apple ID. Independently confirmed via the App Store Server API (GET /inApps/v1/subscriptions/{originalTransactionId}) that Apple's servers currently recognize this subscription. Details: originalTransactionId: 2000000099299646, original purchase mid-2022 The App Store Server API's latest transaction for this ID resolves to environment: Sandbox, even though this Apple ID has also made real Production purchases over time — wondering if mixed Sandbox/Production history on one Apple ID could be affecting restorePurchases()'s results Tested on a real device, iOS [version], with and without an exp
1
0
633
Sep ’26
StoreKit Product.products(for:) / fetchProducts returns empty array for an Approved, correctly-configured auto-renewable subscription — regression since Aug 24, 2026
Our app's auto-renewable subscription (Product ID: istanbul.membership.monthly, Bundle ID: com.mehmetozenen.ustaistanbulapp) has been returning zero products from Product.products(for:) since August 24, 2026, blocking 100% of new iOS subscriptions on our live production app. Verified correct on our side: Subscription status: Approved Paid Applications Agreement: Active (continuously since Feb 2026, no gaps) Territory pricing: set, including Turkey Product ID matches exactly, correct app No changes to Agreements/Tax/Banking around the failure date Steps to reproduce: Call Product.products(for:) (or via react-native-iap's fetchProducts) with SKU istanbul.membership.monthly, type auto-renewable subscription. Result: empty product array, no error thrown. Purchase sheet never appears since there is no product to purchase. Reproduced on: 4+ independent physical iOS devices Multiple different Apple IDs Both Sandbox and Production StoreKit environments (identical failure in both) Both Wi-Fi and cellular netw
2
0
490
Sep ’26
Reply to Sandboxed Mac app denied mach-lookup com.apple.cloudd when signed with Mac Team Store Provisioning Profile on macOS 26
Adding a data point that may save others some time: the _ = CKRecord.self (or print(CKRecord.self)) workaround described here is not reliable — at least not in Release/Distribution builds with whole-module optimization. We had that exact line in our App.init(), added for this exact reason, and still hit sandboxd: deny(1) mach-lookup com.apple.cloudd / CKErrorDomain Code=6 on a shipped TestFlight build (reproduced on macOS 26.6.2 / 25G83). Running otool -L on the actual installed binary showed CloudKit.framework was not in the load commands at all, despite that line being present in source. Our read: since the expression's result is discarded and provably unused, the optimizer strips the reference entirely in Release builds — so the fix silently does nothing while looking correct in code review. The only thing that actually worked was adding CloudKit.framework explicitly under Build Phases → Link Binary With Libraries (not a source-level reference at all), then re-verifying with otool -L that it's really in th
Topic: App & System Services SubTopic: iCloud Tags:
Sep ’26
WKWebView IAP message handler works in Simulator but not TestFlight
Hi, I’m having an issue with an in-app purchase implementation using StoreKit and a WKWebView. The app uses a WKWebView with a WKScriptMessageHandler registered with the name iap to communicate between JavaScript and the native Swift code. The implementation works correctly when running the app through Xcode Simulator. The IAP buttons trigger the expected native code and the bridge functions correctly. However, when I install the same/latest build through TestFlight, the IAP functionality does not work as expected. The buttons/JavaScript-to-native communication do not appear to trigger the same way they do in the Simulator. The IAP products and configuration have been set up in App Store Connect. I have already checked the implementation and confirmed that the same code works when running from Xcode. Could there be any difference between Simulator and TestFlight regarding: StoreKit sandbox/TestFlight behaviour Entitlements or signing App Store Connect configuration WKWebView/WKScriptMessageHandler be
0
0
351
Sep ’26
Reply to TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
Apple Developer Forums Post Draft (English) Title StoreKit 2 Product.products(for:) returns an empty array for two non-consumable IAPs in TestFlight sandbox Post Hello, I am troubleshooting a StoreKit 2 product-loading issue in the TestFlight sandbox and would appreciate any advice. Issue When the iOS app is installed from TestFlight (Build 4), Product.products(for:) is called for two non-consumable In-App Purchases. The call doesn't throw an error, but it consistently returns an empty array, so no products appear in the purchase UI. products = try await Product.products(for: [ com.shidan.qieting.plus.trial.7day, com.shidan.qieting.plus.lifetime ]).sorted { $0.id < $1.id } The products are: Product ID Type Price App Store Connect status com.shidan.qieting.plus.trial.7day Non-consumable Tier 0 / US$0.00 Ready to Submit com.shidan.qieting.plus.lifetime Non-consumable US$5.99 Ready to Submit Diagnostic log On cold launch of the TestFlight app, the diagnostic log shows: 2026-09-03T08:12:08Z [
Topic: App & System Services SubTopic: StoreKit Tags:
Sep ’26
TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
大家好,我正在排查一个 TestFlight 沙盒环境中的 StoreKit 2 商品加载问题,希望获得建议。 一、现象 iOS App 通过 TestFlight 安装(Build 4)后,使用 Product.products(for:) 请求两个非消耗型内购项目。调用不会抛出错误,但始终返回空数组,因此购买页没有任何可购买商品。 products = try await Product.products(for: [ com.shidan.qieting.plus.trial.7day, com.shidan.qieting.plus.lifetime ]).sorted { $0.id < $1.id } 两个 Product ID 分别为: Product ID 类型 价格 App Store Connect 状态 com.shidan.qieting.plus.trial.7day 非消耗型 Tier 0 / US$0.00 可供审核 com.shidan.qieting.plus.lifetime 非消耗型 US$5.99 可供审核 二、日志 在 TestFlight App 冷启动后,诊断日志记录: 2026-09-03T08:12:08Z [settings] plus products loaded: trialAvailable=false, lifetimeAvailable=false 打开购买页时再次调用,结果仍然为空。没有捕获到 StoreKit 异常,也没有购买流程报错。 三、系统级沙盒验证结果 为排除 App UI 和 StoreKit 商品加载代码的影响,我们还使用同一开发团队创建的 Sandbox Apple Account,在 iOS 的“设置 > 开发者 > Sandbox Apple Account > 管理 > Test Transactions”中直接测试: Bundle ID:com.shidan.qieting Product ID:com.shidan.qieting.plus.lifetime 系统提示:“提供的产品 ID 或套装 ID 无效”。该工具不经过 App 内的购买页或 Product.products(for:) 结果,仍无法识别这组 Bundle ID 与 Product ID。
3
0
691
Sep ’26
Reply to AAUSBAccessoryManager does not fire didconnect
You’re using the wrong entitlement [1]. Consider this test app, where I added the Claim USB Accessory capability: % codesign -d --entitlements - Test831902.app … [Dict] … [Key] com.apple.developer.accessory-access.usb [Value] [Bool] true … IMPORTANT This is a restricted entitlement, which means it must be authorised by a provisioning profile. There’s no good way to associate a provisioning profile with a command-line tool. You have to embed it in an app-like wrapper. See Signing a daemon with a restricted entitlement. [quote='904111022, DominikDeJesusMoreira, /thread/831902?answerId=904111022#904111022, /profile/DominikDeJesusMoreira'] Is AccessoryAccess even supported for CLI-tools … ? [/quote] Successfully the correct entitlement will get you past the first hurdle, but they may be others. This API was definitely created with apps in mind. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = eskimo + 1 + @ + apple.com [1] com.apple.security.device.usb is an App Sandbox
Topic: App & System Services SubTopic: Core OS Tags:
Sep ’26
Reply to Sanboxed Apps Reading Extended Security Information (ACL)
Is it possible that YOU ended up calling getxattr yourself as part of the permission check? No, I do not call getxattr explicitly. Both setxattr and getxattr are called by the system and my filesystem just stores and retrieves the ACL EA from the server. I've built a test app with the following entitlements enabled: % codesign -d --entitlements - --xml SandboxedFileEditor.app | plutil -p - Executable=SandboxedFileEditor.app/Contents/MacOS/SandboxedFileEditor { com.apple.developer.applesignin => { com.apple.security.app-sandbox => true com.apple.security.files.bookmarks.app-scope => true com.apple.security.files.user-selected.read-write => true } com.apple.security.app-sandbox => true com.apple.security.files.user-selected.read-write => true com.apple.security.get-task-allow => true } I was able to successfully modify and save the contents of the test file residing on my custom filesystem: % cat /Volumes/myfs/f.txt line1 line2 With the following POSIX and ACL permissions
Topic: App & System Services SubTopic: Core OS Tags:
Sep ’26
Reply to AVSpeechSynthesizer Enhanced voices produce silent audio in sandboxed Mac Catalyst app
Hmmm, that sounds like a bug to me. Please file it as such, then post your bug number, just for the record. Make sure to include your test project and a sysdiagnose log taken shortly after seeing the issue. Coming back to your real app, are you sandboxing it because you’re targeting the Mac App Store? Or simply because it’s the right thing to do? Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = eskimo + 1 + @ + apple.com
Topic: Media Technologies SubTopic: General Tags:
Sep ’26
StoreKit Sandbox returns 0 products after TN3186 checks — catalog association issue?
We are testing two auto-renewable subscriptions for a new iOS app. In Apple Sandbox, StoreKit 2 Product.products(for:) always returns an empty array. Legacy SKProductsRequest independently reports both identifiers as invalid. Environment: Physical iPhone, iOS 26.5 Xcode development build with automatic signing Storefront.current = USA (143441) canMakePayments = true No StoreKit Configuration file in the Run scheme Direct native StoreKit 2 diagnostics, without a third-party purchase SDK TN3186 checks completed: Explicit Bundle ID matches the App Store Connect app, installed app, and provisioning profile In-App Purchase is enabled for the App ID Developer membership, Paid Apps Agreement, banking, and tax are active One subscription group with monthly and yearly subscriptions is visible Pricing, localizations, and availability are configured Neither subscription is Rejected or Developer Action Needed The scheme is using real Sandbox data, not local StoreKit testing Results: StoreKit 2 batch que
0
0
367
Sep ’26
TestFlight + Sandbox: consumable second purchase fails (DuplicateTransaction) on some devices, and product price sometimes returns USD — expected behavior, and recommended test setup?
We're testing In-App Purchases for our app distributed via TestFlight, using Sandbox Apple Accounts. We observe two device-dependent behaviors and have two questions. (App-specific details, including the bundle ID, are in our Feedback report FB24632077.) Observation 1 — Consumable second purchase fails with DuplicateTransaction on some devices The first purchase of a consumable succeeds and the transaction is finished. A second purchase of the same consumable then fails with PurchaseFailureReason.DuplicateTransaction (This In-App Purchase has already been bought) on some devices. It correlates with sandbox session persistence: on devices where the purchase prompts for password only (e.g., iOS 26.x, iPadOS 18.4.1) the second purchase succeeds; on devices where it prompts for the account (email) + password every time (e.g., iOS 18.3.2, iPadAir2 15.6), the second purchase fails. The same Sandbox Apple Account behaves differently on different devices. An Ad Hoc (development-signed) buil
0
0
299
Sep ’26
MusicKit on HarmonyOS — playback approach for a platform without an official SDK, licensing question
Hello Apple Developer community, I'm building an Apple Music client for HarmonyOS (Huawei's operating system) and would like to clarify the licensing and technical approach before submitting to a third-party app store (Huawei AppGallery). I've read the Apple Developer Program License Agreement and App Store Review Guideline 4.5.2, but there are platform-specific constraints I'd like to discuss. Background Apple currently does not provide a MusicKit SDK for HarmonyOS. The available options are: MusicKit for iOS/macOS — not applicable (different OS) MusicKit for Android — ships as proprietary .aar binaries that cannot be redistributed and are not compatible with HarmonyOS's runtime MusicKit JS — available, but HarmonyOS WebView does not support FairPlay or Widevine EME, so full-song DRM playback through MusicKit JS does not work on this platform The only Apple Music API access path available to a HarmonyOS app is the REST API (api.music.apple.com) with a Developer Token (JWT, ES256) and a Music User Token obtai
0
0
397
Sep ’26
In-App Purchase product not returned by StoreKit despite complete, correct configuration
App name: Hold My Bouquet Bundle ID: com.holdmybouquet.app App Store Connect App ID: 6807080553 In-App Purchase Product ID: com.holdmybouquet.app.page_unlock (Non-Consumable, £3.99) Our app was rejected on Guideline 2.1 because the reviewer could not complete this in-app purchase. Since the rejection, we have verified and corrected every configuration item we can control, but the purchase still fails identically in sandbox testing on a physical device. Confirmed correct: Paid Applications Agreement: Active com.holdmybouquet.app.page_unlock: status Ready to Submit, Cleared for Sale, pricing and availability set Bundle ID matches exactly across Xcode, App Store Connect, and our purchase provider (RevenueCat) Product ID matches exactly, no typos or case mismatches Sandbox tester account verified and signed in on-device (Settings → Developer → Sandbox Account) No local StoreKit Configuration file overriding real data (confirmed None in the Xcode scheme) To rule out our purchase provider
Replies
3
Boosts
0
Views
330
Activity
Sep ’26
Building a library playlist on macOS that mixes catalog songs and the user's own uploads in a fixed order – supported route, and how to know when an upload is registered?
Our sandboxed macOS app digitises audio cassettes and builds one playlist per cassette in the user's Apple Music library that follows the tape's order: catalog songs where a title was recognised, and the user's own recordings (AAC files the app exported from the tape) where it was not. The user has an Apple Music subscription and Sync Library on. On macOS every write on MusicLibrary is marked @available(macOS, unavailable) in the 26.5 SDK – add, add(_:to:), createPlaylist and edit (see thread 844114, which got no answer). So we build the playlist through Music.app's scripting interface: make new user playlist, duplicate to for catalog songs, add to for own recordings. That works, with one exception that leads to our questions. What we observe Reproducible on macOS 26.6.2 / Music 26; a standalone AppleScript is at the end. A playlist built in one go from 14 subscription tracks keeps all 14. The same playlist with one local file added after the second track: all 15 entries are there right after the
Replies
0
Boosts
0
Views
366
Activity
Sep ’26
In-App Purchase key returns 401 (4010000) on Advanced Commerce API but 200/404 on App Store Server API
Environment: Sandbox Bundle ID: com.fosssocial.app Key ID: L7DZYHGM62 Issuer ID: cf1f7bc7-452f-4bb8-a925-31ca29175fac Summary Our In-App Purchase key is accepted by the App Store Server API but rejected by the Advanced Commerce API, using the exact same bearer token. This appears to be an authorization grant that was never applied to the key, rather than a signing or request-format problem on our side. Reproduction — one token, two API families GET /inApps/v1/subscriptions/1 -> 404, errorCode 4040010 (token ACCEPTED, resource simply not found) POST /advancedCommerce/v1/subscription/changeMetadata/1 -> 401, errorCode 4010000 (token REJECTED) Same JWT, same key, issued seconds apart. A 401 on one family and a 404 on the other isolates this to key authorization. On-device symptom A signed SubscriptionCreateRequest passed to StoreKit as advancedCommerceData fails with StoreKitError.unknown / Unable to Complete Request. No payment sheet appears and no InvalidRequestError is returned, so there is no
Replies
0
Boosts
0
Views
260
Activity
Sep ’26
restorePurchases() returns zero transactions for Apple ID with confirmed active subscription
Hi all — hoping someone has run into this. restorePurchases() (via Flutter's in_app_purchase/in_app_purchase_storekit plugin, which wraps StoreKit) consistently returns zero transactions for an Apple ID that has a confirmed, currently active auto-renewable subscription to my app. Evidence the subscription is genuinely active: Settings → [Apple ID] → Subscriptions shows the subscription as active for this Apple ID. Independently confirmed via the App Store Server API (GET /inApps/v1/subscriptions/{originalTransactionId}) that Apple's servers currently recognize this subscription. Details: originalTransactionId: 2000000099299646, original purchase mid-2022 The App Store Server API's latest transaction for this ID resolves to environment: Sandbox, even though this Apple ID has also made real Production purchases over time — wondering if mixed Sandbox/Production history on one Apple ID could be affecting restorePurchases()'s results Tested on a real device, iOS [version], with and without an exp
Replies
1
Boosts
0
Views
633
Activity
Sep ’26
StoreKit Product.products(for:) / fetchProducts returns empty array for an Approved, correctly-configured auto-renewable subscription — regression since Aug 24, 2026
Our app's auto-renewable subscription (Product ID: istanbul.membership.monthly, Bundle ID: com.mehmetozenen.ustaistanbulapp) has been returning zero products from Product.products(for:) since August 24, 2026, blocking 100% of new iOS subscriptions on our live production app. Verified correct on our side: Subscription status: Approved Paid Applications Agreement: Active (continuously since Feb 2026, no gaps) Territory pricing: set, including Turkey Product ID matches exactly, correct app No changes to Agreements/Tax/Banking around the failure date Steps to reproduce: Call Product.products(for:) (or via react-native-iap's fetchProducts) with SKU istanbul.membership.monthly, type auto-renewable subscription. Result: empty product array, no error thrown. Purchase sheet never appears since there is no product to purchase. Reproduced on: 4+ independent physical iOS devices Multiple different Apple IDs Both Sandbox and Production StoreKit environments (identical failure in both) Both Wi-Fi and cellular netw
Replies
2
Boosts
0
Views
490
Activity
Sep ’26
Reply to Sandboxed Mac app denied mach-lookup com.apple.cloudd when signed with Mac Team Store Provisioning Profile on macOS 26
Adding a data point that may save others some time: the _ = CKRecord.self (or print(CKRecord.self)) workaround described here is not reliable — at least not in Release/Distribution builds with whole-module optimization. We had that exact line in our App.init(), added for this exact reason, and still hit sandboxd: deny(1) mach-lookup com.apple.cloudd / CKErrorDomain Code=6 on a shipped TestFlight build (reproduced on macOS 26.6.2 / 25G83). Running otool -L on the actual installed binary showed CloudKit.framework was not in the load commands at all, despite that line being present in source. Our read: since the expression's result is discarded and provably unused, the optimizer strips the reference entirely in Release builds — so the fix silently does nothing while looking correct in code review. The only thing that actually worked was adding CloudKit.framework explicitly under Build Phases → Link Binary With Libraries (not a source-level reference at all), then re-verifying with otool -L that it's really in th
Topic: App & System Services SubTopic: iCloud Tags:
Replies
Boosts
Views
Activity
Sep ’26
WKWebView IAP message handler works in Simulator but not TestFlight
Hi, I’m having an issue with an in-app purchase implementation using StoreKit and a WKWebView. The app uses a WKWebView with a WKScriptMessageHandler registered with the name iap to communicate between JavaScript and the native Swift code. The implementation works correctly when running the app through Xcode Simulator. The IAP buttons trigger the expected native code and the bridge functions correctly. However, when I install the same/latest build through TestFlight, the IAP functionality does not work as expected. The buttons/JavaScript-to-native communication do not appear to trigger the same way they do in the Simulator. The IAP products and configuration have been set up in App Store Connect. I have already checked the implementation and confirmed that the same code works when running from Xcode. Could there be any difference between Simulator and TestFlight regarding: StoreKit sandbox/TestFlight behaviour Entitlements or signing App Store Connect configuration WKWebView/WKScriptMessageHandler be
Replies
0
Boosts
0
Views
351
Activity
Sep ’26
Reply to TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
Apple Developer Forums Post Draft (English) Title StoreKit 2 Product.products(for:) returns an empty array for two non-consumable IAPs in TestFlight sandbox Post Hello, I am troubleshooting a StoreKit 2 product-loading issue in the TestFlight sandbox and would appreciate any advice. Issue When the iOS app is installed from TestFlight (Build 4), Product.products(for:) is called for two non-consumable In-App Purchases. The call doesn't throw an error, but it consistently returns an empty array, so no products appear in the purchase UI. products = try await Product.products(for: [ com.shidan.qieting.plus.trial.7day, com.shidan.qieting.plus.lifetime ]).sorted { $0.id < $1.id } The products are: Product ID Type Price App Store Connect status com.shidan.qieting.plus.trial.7day Non-consumable Tier 0 / US$0.00 Ready to Submit com.shidan.qieting.plus.lifetime Non-consumable US$5.99 Ready to Submit Diagnostic log On cold launch of the TestFlight app, the diagnostic log shows: 2026-09-03T08:12:08Z [
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Sep ’26
TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
大家好,我正在排查一个 TestFlight 沙盒环境中的 StoreKit 2 商品加载问题,希望获得建议。 一、现象 iOS App 通过 TestFlight 安装(Build 4)后,使用 Product.products(for:) 请求两个非消耗型内购项目。调用不会抛出错误,但始终返回空数组,因此购买页没有任何可购买商品。 products = try await Product.products(for: [ com.shidan.qieting.plus.trial.7day, com.shidan.qieting.plus.lifetime ]).sorted { $0.id < $1.id } 两个 Product ID 分别为: Product ID 类型 价格 App Store Connect 状态 com.shidan.qieting.plus.trial.7day 非消耗型 Tier 0 / US$0.00 可供审核 com.shidan.qieting.plus.lifetime 非消耗型 US$5.99 可供审核 二、日志 在 TestFlight App 冷启动后,诊断日志记录: 2026-09-03T08:12:08Z [settings] plus products loaded: trialAvailable=false, lifetimeAvailable=false 打开购买页时再次调用,结果仍然为空。没有捕获到 StoreKit 异常,也没有购买流程报错。 三、系统级沙盒验证结果 为排除 App UI 和 StoreKit 商品加载代码的影响,我们还使用同一开发团队创建的 Sandbox Apple Account,在 iOS 的“设置 > 开发者 > Sandbox Apple Account > 管理 > Test Transactions”中直接测试: Bundle ID:com.shidan.qieting Product ID:com.shidan.qieting.plus.lifetime 系统提示:“提供的产品 ID 或套装 ID 无效”。该工具不经过 App 内的购买页或 Product.products(for:) 结果,仍无法识别这组 Bundle ID 与 Product ID。
Replies
3
Boosts
0
Views
691
Activity
Sep ’26
Reply to AAUSBAccessoryManager does not fire didconnect
You’re using the wrong entitlement [1]. Consider this test app, where I added the Claim USB Accessory capability: % codesign -d --entitlements - Test831902.app … [Dict] … [Key] com.apple.developer.accessory-access.usb [Value] [Bool] true … IMPORTANT This is a restricted entitlement, which means it must be authorised by a provisioning profile. There’s no good way to associate a provisioning profile with a command-line tool. You have to embed it in an app-like wrapper. See Signing a daemon with a restricted entitlement. [quote='904111022, DominikDeJesusMoreira, /thread/831902?answerId=904111022#904111022, /profile/DominikDeJesusMoreira'] Is AccessoryAccess even supported for CLI-tools … ? [/quote] Successfully the correct entitlement will get you past the first hurdle, but they may be others. This API was definitely created with apps in mind. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = eskimo + 1 + @ + apple.com [1] com.apple.security.device.usb is an App Sandbox
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Sep ’26
Reply to Sanboxed Apps Reading Extended Security Information (ACL)
Is it possible that YOU ended up calling getxattr yourself as part of the permission check? No, I do not call getxattr explicitly. Both setxattr and getxattr are called by the system and my filesystem just stores and retrieves the ACL EA from the server. I've built a test app with the following entitlements enabled: % codesign -d --entitlements - --xml SandboxedFileEditor.app | plutil -p - Executable=SandboxedFileEditor.app/Contents/MacOS/SandboxedFileEditor { com.apple.developer.applesignin => { com.apple.security.app-sandbox => true com.apple.security.files.bookmarks.app-scope => true com.apple.security.files.user-selected.read-write => true } com.apple.security.app-sandbox => true com.apple.security.files.user-selected.read-write => true com.apple.security.get-task-allow => true } I was able to successfully modify and save the contents of the test file residing on my custom filesystem: % cat /Volumes/myfs/f.txt line1 line2 With the following POSIX and ACL permissions
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Sep ’26
Reply to AVSpeechSynthesizer Enhanced voices produce silent audio in sandboxed Mac Catalyst app
Hmmm, that sounds like a bug to me. Please file it as such, then post your bug number, just for the record. Make sure to include your test project and a sysdiagnose log taken shortly after seeing the issue. Coming back to your real app, are you sandboxing it because you’re targeting the Mac App Store? Or simply because it’s the right thing to do? Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = eskimo + 1 + @ + apple.com
Topic: Media Technologies SubTopic: General Tags:
Replies
Boosts
Views
Activity
Sep ’26
StoreKit Sandbox returns 0 products after TN3186 checks — catalog association issue?
We are testing two auto-renewable subscriptions for a new iOS app. In Apple Sandbox, StoreKit 2 Product.products(for:) always returns an empty array. Legacy SKProductsRequest independently reports both identifiers as invalid. Environment: Physical iPhone, iOS 26.5 Xcode development build with automatic signing Storefront.current = USA (143441) canMakePayments = true No StoreKit Configuration file in the Run scheme Direct native StoreKit 2 diagnostics, without a third-party purchase SDK TN3186 checks completed: Explicit Bundle ID matches the App Store Connect app, installed app, and provisioning profile In-App Purchase is enabled for the App ID Developer membership, Paid Apps Agreement, banking, and tax are active One subscription group with monthly and yearly subscriptions is visible Pricing, localizations, and availability are configured Neither subscription is Rejected or Developer Action Needed The scheme is using real Sandbox data, not local StoreKit testing Results: StoreKit 2 batch que
Replies
0
Boosts
0
Views
367
Activity
Sep ’26
TestFlight + Sandbox: consumable second purchase fails (DuplicateTransaction) on some devices, and product price sometimes returns USD — expected behavior, and recommended test setup?
We're testing In-App Purchases for our app distributed via TestFlight, using Sandbox Apple Accounts. We observe two device-dependent behaviors and have two questions. (App-specific details, including the bundle ID, are in our Feedback report FB24632077.) Observation 1 — Consumable second purchase fails with DuplicateTransaction on some devices The first purchase of a consumable succeeds and the transaction is finished. A second purchase of the same consumable then fails with PurchaseFailureReason.DuplicateTransaction (This In-App Purchase has already been bought) on some devices. It correlates with sandbox session persistence: on devices where the purchase prompts for password only (e.g., iOS 26.x, iPadOS 18.4.1) the second purchase succeeds; on devices where it prompts for the account (email) + password every time (e.g., iOS 18.3.2, iPadAir2 15.6), the second purchase fails. The same Sandbox Apple Account behaves differently on different devices. An Ad Hoc (development-signed) buil
Replies
0
Boosts
0
Views
299
Activity
Sep ’26
MusicKit on HarmonyOS — playback approach for a platform without an official SDK, licensing question
Hello Apple Developer community, I'm building an Apple Music client for HarmonyOS (Huawei's operating system) and would like to clarify the licensing and technical approach before submitting to a third-party app store (Huawei AppGallery). I've read the Apple Developer Program License Agreement and App Store Review Guideline 4.5.2, but there are platform-specific constraints I'd like to discuss. Background Apple currently does not provide a MusicKit SDK for HarmonyOS. The available options are: MusicKit for iOS/macOS — not applicable (different OS) MusicKit for Android — ships as proprietary .aar binaries that cannot be redistributed and are not compatible with HarmonyOS's runtime MusicKit JS — available, but HarmonyOS WebView does not support FairPlay or Widevine EME, so full-song DRM playback through MusicKit JS does not work on this platform The only Apple Music API access path available to a HarmonyOS app is the REST API (api.music.apple.com) with a Developer Token (JWT, ES256) and a Music User Token obtai
Replies
0
Boosts
0
Views
397
Activity
Sep ’26