I currently have one subscription group with one approved subscription. It is live in production.
I am now adding more subscriptions to the same group. Different tiers and different durations.
Is there a way to get these new subscriptions approved by Apple, but not yet have them show as options within the group? Sort of an approved-but-inactive state?
There's a timing issue. I don't want the new options to show before the website/app descriptive text supports them. And I don't want the website/app descriptive text to describe purchase options that aren't yet available.
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
I do not understand how offline leaderboard submission is supposed to work in Game Kit:
While the documentation briefly states that offline submission is supported, how is that even possible when you first have to fetch a leaderboard object in order to then call its submitScore function? How can I get the leaderboard object in the first place when offline?
Can anyone enlighten me how this works? Or maybe point me to some relevant documentation?
In my impression, this issue has been around for years. In the Mac App Store, the app description is collapsed by default. After clicking "More" to expand it, the last few lines of the description are always cropped. It seems that the more content there is, the more content gets cropped.
The following screenshots are from the same app, one with the system language set to Chinese and the other to English.
I've spent the last few days researching the upcoming laws in Texas and other US states, and how these laws will impact on developers around the world. I want to share what I've learned so far with the community and get feedback on my current understanding. This post is not so much focused on a single API, but more of the bigger picture.
Background
The law essentially mandates that: (1) app store platforms implement age categorization and verification mechanisms, and (2) developers implement logic to listen to age categorization signals provided by the platform and respond accordingly. You can read the law itself here: https://capitol.texas.gov/tlodocs/89R/billtext/html/SB02420S.HTM
Most people seem to be interpreting the law as follows: All developers who distribute apps in the USA are effectively required to implement the new APIs (required by Texas, not by Apple). The penalties are heavy, but it's unclear whether developers would actually be pursued and by whom (e.g. would someone seriously pursue an alarm clock app because it could be accessed by a minor?).
Putting aside the ethical, privacy, and legal issues (and the damaging precedents this law sets), most people seem to agree that, from a technical perspective, this is a very silly way to implement age blocking (app store collects the info and passes it to dev, dev is responsible for blocking access). It would make way more sense for the platform to block the app directly for affected users (with optional API support for developers who wish to use it). However, I believe the law has specifically mandated that this is how they expect the system to work, so Apple's hands have been tied.
Apple has basically complied with their obligations by providing the relevant APIs to developers.
Because the law is vague and open-ended, there are a lot of legal and technical uncertainties about what developers actually need to do to be compliant. Understandably, Apple seems reticent to provide any guidance to developers that could be interpreted as legal advice. Apple's docs simply describe what the APIs do with no guidance on what the overall flow is meant to look like or how and when the APIs should actually be used in practice.
Americans familiar with the political situation seem to think there's the possibility of an injunction before this law goes into effect, but that looks increasingly unlikely given that it's two weeks away.
Developer solutions
Many devs seem to be exploring two main workarounds, at least as temporary solutions: (1) Raise your app's rating to 18+. Putting aside the fact that Texas law would effectively be forcing developers to raise their global age rating (resulting in lost revenue that extends far beyond Texas), it remains unclear whether this solution is actually legally compliant, since the law specifically mandates that apps must implement logic to respond to signals from the platform. (2) Geo-block Texas. Again, it remains unclear if this is compliant because geo-blocking is not 100% accurate and it doesn't actually do what the law says you have to do. It also creates issues if you already have users in Texas, and it means performing additional privacy-hostile checks (i.e., detecting the user's location, even users who are not subject to the law).
The DeclaredAgeRange API is actually pretty straight-forward to use – although there is still a lack of documentation on certain edge cases and it's difficult to test. In addition, the new APIs are only available in iOS 26.2, so it's unclear what you need to do if you're still supporting < iOS 26.2. Some people are of the opinion that developers can only reasonably respond to the signals that are available, thus pushing responsibility back to the platforms in regards to earlier OS versions.
The API provides a bool (AgeRangeService.shared.isEligibleForAgeFeatures), which allows you to determine if the user is someone to whom age checks need to be applied. https://developer.apple.com/documentation/declaredagerange/agerangeservice/iseligibleforagefeatures I'm not 100% sure, but perhaps the simplest action you can take is to check this bool on launch and block access if it's true. In any case, it looks like this API will be very useful because it means we can avoid applying the checks in other jurisdictions and for grandfathered-in users without needing to implement custom geo-tracking code (albeit only in iOS 26.2+).
To implement the API, my current thinking is that, on every launch, I should first check the above bool and, if it's true, do the following: (1) get the App Store age rating with let appStoreAgeRating = await AppStore.ageRatingCode ?? 18, (2) request the user's age with let ageRangeResponse = try await AgeRangeService.shared.requestAgeRange(ageGates: appStoreAgeRating), (3) check that the user has agreed to share their age, (4) check that lowerBound >= appStoreAgeRating, and (5) check that the verification method is not one of the self-declared methods. If this procedure fails, I should block access to the app and provide a link to Apple's support page: https://support.apple.com/en-us/122770 I stress, however, that this is just my current idea and there are some edge cases I'm unsure about.
Other issues
It is possible to do some basic testing of the API, but only using a sandbox App Store account on a physical device. From the Developer section in iOS Settings, you can select from a few different scenarios, like "Texas user aged 14 without parental consent", etc.
There's also a whole separate aspect to this law relating to "significant updates". Everyone seems kinda confused about this, but it seems like the general idea is that, if your app's age classification changes in the future, the app should be responsive to that change. My current interpretation is that if I use the AppStore.ageRatingCode as the age gate (as described above) then that should allow me to comply, but I haven't really looked into this aspect of the law yet.
There's also another aspect to this law requiring developers to revoke access to the app when requested by the parent. I have not looked into this yet, but as noted above, it doesn't make sense to me why this is the developer's responsibility given that the platforms already provide solid parental controls. Do I need to something else in addition to what I've sketched out above?
It goes without saying, of course, that everything above is not legal advice, and I still have some gaps in my understanding.
I would really appreciate any feedback on the above, perhaps with recommendations about better ways to approach this.
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
Family Controls
Declared Age Range
Title
iOS App detecting external USB mass storage connection without user interaction
Background
We are developing an iOS application that connects to an action camera device via Bluetooth and Wi-Fi for control and data transfer.
In addition to wireless connectivity, our product requirements include supporting USB Mass Storage mode, where the camera (or a generic USB flash drive) is connected to an iPhone using a Lightning / USB-C adapter and appears in the Files app as an external drive.
Requirement
Our app needs to detect when an external USB mass storage device is connected or disconnected, with the following constraints:
The app is already running in the foreground
No user interaction is performed (no button tap, no document picker, no import UI)
The USB device can be:
A generic USB flash drive
An empty USB drive (no photos or videos)
The app only needs to know:
Whether an external USB storage device has been connected or removed
No need to access device identity, vendor info, or low-level USB details
The expected behavior is simply to update the app’s internal state or UI when a USB storage device becomes available.
Investigation Performed
We have already investigated and tested the following public and documented approaches, all of which did not provide a reliable or any notification for USB mass storage insertion:
ExternalAccessory / MFi
Not applicable for generic USB storage devices
Darwin notifications / CoreFoundation
Using notify_register_dispatch and CFNotificationCenterGetDarwinNotifyCenter
System USB / storage related notifications do not fire for third-party apps
File system APIs
NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys
On iPhone, external USB drives visible in the Files app are not exposed as mounted volumes to third-party apps
FileProvider / DocumentPicker
Only provides access after explicit user interaction
No background or passive notification of availability
ImageCaptureCore
Limited to PTP camera devices
Does not apply to generic USB mass storage
Based on our testing, none of the public APIs provide a way to detect USB mass storage insertion automatically without user interaction.
Question to Apple
We would like to confirm the official platform behavior and capability boundary:
Is there any public, documented, App Store–approved API on iOS that allows a third-party app to be notified when a generic USB mass storage device is connected or disconnected, without user interaction?
If not:
Is this limitation intentional by platform design?
Is the recommended approach to rely exclusively on user-initiated document access flows (e.g. document picker, import UI)?
Are there any recommended best practices for apps that need to update their UI or internal state based on the availability of external USB storage devices?
Our goal is to ensure that our implementation fully complies with iOS platform guidelines and App Store Review requirements.
Environment
iOS versions tested: iOS 18 (latest public release)
Devices: iPhone models with Lightning / USB-C
USB devices: generic USB flash drives (including empty drives)
Closing
We appreciate clarification on whether this capability is intentionally restricted on iOS and how Apple recommends designing user experience around external USB storage access.
Thank you for your guidance.
Topic:
App & System Services
SubTopic:
Hardware
using iOS 26.2; Airpods 4
Long press stem to launch Siri
Speak "Record Voice Memo" -> Recording starts
Recording in progress...
Long press stem to launch Siri -> Nothing happens.
To stop recording need use phone.
is this intended behaviour?
i would like to be able to stop recording with Siri
I am able to launch Siri from phone while recording, but point is to keep phone in pocket and start/stop recordings only via Airpods.
I am trying to port my sandboxed macOS app completely over to iOS using a Catalyst target and SwiftUI.
There appears to be an issue when trying to drag to the Finder in Catalyst (and in SwiftUI in General). For some reason, the Finder will not accept multiple file drops, only a single file.
On my macOS (non-Catalyst AppKit target), I overcame this by dropping multiple files to a UTType of .folder, and the OS accepted the folder. This workaround is not available for iOS because .folder is a macOS-only option.
I have a test app to illustrate the issue. Hopefully someone can help.
Download Test App
Topic:
App & System Services
SubTopic:
General
I am trying to port my sandboxed macOS app completely over to iOS using a Catalyst target. In my macOS app, I use 'SwiftySandboxFileAccess' package to add a symlink to '~/Library/PDF Services' so that the 'share to my app' menuItem shows up in the macOS Print Panel (in the PDF menu). It is critical for the function of my app to have this work on macOS.
In the Catalyst target, I am having problems gaining access to '~/Library'. I have tried having the user select the folder, but the picker always returns 'canceled'. I have a test app that illustrates this.
The test app tries to coax the user into selecting the library folder and then it is supposed to bookmark the location, but I am unable to get this far.
As an aside, macOS should probably automatically add an entry to the Print Panel when the app includes PDF as a document type in XCode; it would save a lot of hassle and avoid having to go outside of the sandbox. However, I cannot wait for that. Hopefully someone can help.
Download Test App from iCloud
(If you have problems downloading the file, it might be because of some iCloud share setting that I am not aware of. Just tell me and I'll figure something out.)
Topic:
App & System Services
SubTopic:
General
Hello everyone,
I’m looking for advice from developers who may have faced a similar situation, as we appear to be stuck in a long-running loop of Guideline 4.3(a) rejections on iOS with no actionable feedback from App Review.
Over an extended period, our iOS app has been repeatedly rejected under Guideline 4.3(a) (“similar or repackaged”), regardless of the changes we make. The responses from App Review consistently use the same high-level language and do not indicate what specifically is considered problematic.
Some relevant context:
The app is built with Flutter using a single shared codebase.
The macOS version, built from the same codebase with the same overall structure and UI, has been approved without issues.
The iOS version, using that same implementation, continues to receive 4.3(a) rejections.
We do not use purchased templates and do not operate multiple developer accounts.
Like most apps, we use some third-party and open-source components where technically appropriate.
Across multiple submissions, we have tried to address the feedback as best we can by making changes to UI/UX, assets, metadata, internal structure, and overall product quality. However, App Review has not provided clarification even at a high level (for example, whether the concern is primarily related to UI/UX, code structure, metadata, user flows, or overall product framing). Requests for any directional guidance have resulted in the same generic responses, both in review replies and via support.
This leaves us making blind changes without a feedback loop. As a result, it’s difficult to understand whether the issue is realistically correctable, or whether the app is effectively blocked due to similarity clustering or other non-obvious review heuristics.
Any firsthand experiences, practical steps, or lessons learned would be extremely helpful.
Topic:
App Store Distribution & Marketing
SubTopic:
App Review
Tags:
App Store
App Review
App Store Connect
Hi all,
I'm encountering an issue with auto-renewable subscription upgrades in the App Store. Here's my setup:
Context:
Plan A: Base Plan (yearly auto-renewable subscription)
Plan B: Pro Plan (monthly auto-renewable subscription)
B is configured as an upgrade from A.
Issue:
When a user with an active Plan A subscription upgrades to Plan B, I correctly receive an App Store Server Notification v2 with DID_CHANGE_RENEWAL_PREF and UPGRADE subtype. According to Apple's documentation, a prorated refund is issued automatically in this scenario, and no separate REFUND event is sent, the refund information should be retrievable through the upgrade event itself.
Testing in Sandbox:
In my sandbox tests, Plan A has a 1-hour duration and Plan B has a 5-minute duration. After the user upgrades to Plan B, I immediately cancel the subscription to prevent auto-renewal.
Expected vs. Actual Behavior:
After the 5 minutes expire, Plan A still appears as the active current entitlement. I initially thought this might be because the prorated refund hadn't been processed yet. However, even after waiting the full hour (the original duration of Plan A), it continues to show as an active entitlement—which shouldn't be the case. As a result, when I attempt to restore purchases, Plan A is still identified as valid and the subscription gets reactivated.
Question:
Is this behavior expected in the sandbox environment, or am I missing something in how the prorated refund and entitlement expiration should be handled?
Topic:
Community
SubTopic:
Apple Developers
Tags:
App Store Server Notifications
App Store Server API
I'm developing a new feature for iOS 26.1 to upload photos in the background, but I'm finding it difficult to trigger background upload tasks efficiently. Are there any methods to quickly force the device to execute background backup tasks?
Additionally, I've already completed backups, but when using the API:
(PHFetchResult<PHAssetResourceUploadJob *> *)fetchJobsWithAction:(PHAssetResourceUploadJobAction)action
options:(nullable PHFetchOptions *)options
NS_SWIFT_NAME(fetchJobs(action:options:));
I frequently get no results—neither successful nor failed jobs—and I'm unable to retrieve pending UploadJobs.
Could the Apple development team improve these functionalities and provide a debugging method to quickly trigger background backup tasks? Thanks.
Topic:
Community
SubTopic:
Apple Developers
Am developing an application that creates custom VPN. I have enabled Sandbox properties. VPN will be granted based upon the device posture. Posture includes reading the disk encryption value, secureboot and Firewall values.
Application just tries to fetch the values to provides its posture.
Since the application is sandboxed, it is getting denied to read the above mentioned values.
How to achieve this with Sandboxed enabled?
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
各位网友大家好,有谁知道这个 tl 9655. com腾龙官方地址还能用吗?如果不能麻烦大家告知一个新的,184 7933 278这个身份是的薇,有的麻烦各位网友们告知一下。
After authenticating the user I'm loading my Game Center leaderboards like this:
let leaderboards = try await GKLeaderboard.loadLeaderboards(IDs: [leaderboardID])
This is working fine, but there are times when this just returns an empty array. When I encounter this situation, the array remains empty for several hours when retrying, but then at some point it suddenly starts working again.
Is this a known issue? Or am I hitting some kind of quota maybe (as I do it quite often while developing my game)?.
Edit: My leaderboards are grouped in sets if that makes any difference here.
The Send to Device in Reality Composer Pro no longer works for me. The progress spinner keeps spinning...
Happens with Wifi and Developer Strap (first gen).
Any known workarounds / ways to recover?
Hi, after upgrading MacOS (MB Air M1 Version 26.2 (25C56)) & Safari (Version 26.2 (21623.1.14.11.9)) to latest versions, we are experiencing a new bug occurring with our web extension (Click & Read) on local storage writing and getting this error :
Invalid call to browser.storage.local.set(). Disk I/O error.
This doesn't happen on other browsers (chromium, Firefox).
export const setLocalStorage = async (value: object) => {
try {
await browser.storage.local.set(value);
} catch (error) {
console.error("[Click & Read] Error setting local storage", error);
}
};
We have developed an iPad application using the ARCL (AR + CoreLocation) library to render Point of Interest (POI) annotations in both an AR view and a standard MapView. The application performs as expected on standard devices.
However, we have some iPad covered with strong magnet. This creates significant magnetic interference, resulting in a 90° to 180° heading offset, rendering the AR POI placement and MapView orientation unusable.
Technical Challenges & Constraints:
Hardware Lock: The magnetic cover is a mandatory business requirement and cannot be removed during field use.
Sensor Failure: The internal magnetometer cannot provide an accurate North reference due to the proximity of the cover’s magnets. While CoreLocation and CoreMotion use sensor fusion, the magnetometer remains the primary source for absolute heading.
Alternative Orientation Tracking: Is there a documented method to bypass the magnetometer and derive device orientation using only the Gyroscope and Accelerometer (e.g., relative tracking) while still maintaining alignment with geographic coordinates in CoreLocation?
Programmatic Offsets: Are there known APIs or mathematical workarounds to programmatically "nullify" or offset a constant magnetic bias once the device is inside the cover? so we can use that offset for ARView and in Mapview as well.
I'm struggling to implement required code for SB2420 compliance.
I try to learn on a very simple use case.
the app is UIKit
Build in Xcode 26.2
it displays a single Hello view with a button that will simply show a "Good day" label.
I assume the app will be rated 4+.
I tried the following code, using available information in Xcode (limited):
import UIKit
import DeclaredAgeRange
// other import needed ?
class ViewController: UIViewController {
@IBOutlet weak var welcomeLabel: UILabel! // initially hidden
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func testAgeRange() -> Bool {
if !isEligibleForAgeFeatures { // Not found. Which import needed ?
return true // Not called from Texas
}
// Following code from Xcode doc…
do {
let response = try await AgeRangeService.shared.requestAgeRange(ageGates: 13, 15, 18) // Compiler Error: Missing argument for parameter 'in' in call
// Can I add the 4 gate ?
guard let lowerBound = response.lowerBound else {
// Allow access to under 13 features.
return false
}
var ok = false
if lowerBound >= 18 { // Not needed ?
// Allow access to 18+ features.
ok = true
} else if lowerBound >= 15 { // Not needed ?
// Allow access to 15+ features.
ok = true
} else if lowerBound >= 13 { // Not needed ?
// Require parental consent ?
// Allow access to 13+ features.
ok = true // if consent OK
} else {
// Require parental consent ?
// Show age-appropriate content
ok = true // if consent OK
}
return ok // Authorized for all 4+
} catch AgeRangeService.Error.notAvailable {
// No age range provided.
return false
}
}
func executeStart() {
welcomeLabel.isHidden = false
}
@IBAction func start(_ sender: UIButton) {
if #available(iOS 26.0, *) {
if testAgeRange() {
// Need to test for parental control here ?
} else {
// Alert and exit the app ?
}
} else {
// do nothing ? Can we run the app ?
}
executeStart()
}
}
The logic would be:
before allowing action with the start button, check
is it IOS 26+ so that we can call API
if so, is verification needed (Texas SB2420)
if not, we can proceed
if required, test age range
As app is 4+, all ranges should be OK
But need to test parental control
Now, many pending questions in code:
line 14: get an error: Cannot find 'isEligibleForAgeFeatures' in scope
line 19: I used the documentation sample for AgeRangeService, but get a Compiler Error: Missing argument for parameter 'in' in call
line 35: how to implement parental control ?
In addition, in the metadata of the app, should I declare that parental control ?
Age verification?
Mechanism for confirming that a person's age meets the age requirement for accessing content or services
As there is no restriction on age, is it required ?
Any help welcomed as well as link to a comprehensive tutorial.
We are developing Apple AI for foreign markets and adapting it for iPhone models 17 and above.
When the system language and Siri language are not the same—for example, if the system is in English and Siri is in Chinese—it can cause a situation where Apple AI cannot be used. So, may I ask if there are any other reasons that could cause Apple AI to be unavailable within the app, even if it has been enabled?
I have been trying to get into my account for several days now and I have tried everything.
First of you cannot get support because you need to be logged in so had to make another account to be able to post this. And even then the support is not working. Send an email a while ago and tried the call option and I have gotten no response from both.
I was supposed to launch my app last week and I have just not be able to log into my account. I keep getting the 'Too many verification codes have been sent. Enter the last code you received or try again later.' I didn't even do that, I just tried to log in and had that there. I have waited days and it's still there. I have tried changing the number for which I waited a day and now it's told me to wait another 6 days. This has caused so many problem and the lack of support is unbelievable.
Can anyone please help me get into my account or advise on what I can do ASAP.
Thanks,
Usama
Topic:
Developer Tools & Services
SubTopic:
General