Navigate the App Store landscape. Share strategies for app submission, distribution, marketing, and user acquisition. Discuss best practices for getting your app discovered and downloaded.

General Documentation

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

DeclaredAgeRange framework new cases and properties cause runtime crash with missing symbol
I'm making a wrapper library to abstract away some of the 'missing platform support' of DeclaredAgeRange until hopefully it expands to additional platforms. When I'm trying to fully enumerate all of the cases of AgeRangeDeclaration, which they all state available starting 26.0 (mysteriously added in Xcode 26.2 beta), the app crashes due to a missing symbol at launch time. This happens both for Xcode 26.1, 26.2 beta 2, and matching Xcode Cloud builds. So I've isolated it beyond "doesn't work on my machine". I just made a handful of crashes and attached a sysdiagnose to a fresh feedback. FB21121092 - DeclaredAgeRange: Eligibility property and new declaration cases unavailable on iOS 26.1 device contradicting documentation - causes runtime symbol not found crash If anyone is curious what these crashes look like I've attached the DiagnosticPayload.jsonRepresentation() generated from one of my favorite frameworks, MetricKit. Very clearly articulated in the diagnostic metadata you can see the symbol not found. "diagnosticMetaData" : { "platformArchitecture" : "arm64e", "terminationReason" : "Symbol not found: _$s16DeclaredAgeRange0bC7ServiceV0bC11DeclarationO14paymentCheckedyA2EmFWC\nReferenced from: <1894EDCB-3263-3604-8938-97D465FF3720> \/Volumes\/VOLUME\/*\/PerformanceOrganizer.app\/PerformanceOrganizer\nExpected in: <B8FD2C23-0CC9-3D94-902D-875900307A7A> \/System\/Library\/Frameworks\/DeclaredAgeRange.framework\/DeclaredAgeRange", "exceptionType" : 10, "appBuildVersion" : "745", "isTestFlightApp" : true, "osVersion" : "iPhone OS 26.1 (23B85)", "bundleIdentifier" : "dev.twincitiesapp.performanceorganizer", "deviceType" : "iPhone18,1", "exceptionCode" : 0, "signal" : 6, "regionFormat" : "US", "appVersion" : "2.0.0", "pid" : 22987, "lowPowerModeEnabled" : false } DiagnosticPayload.json This is the offending code in a type I control and make available on other platforms but leave unused. extension AgeRangeDeclaration { // A factory or initializer that takes the AgeRangeService.AgeRangeDeclaration and maps to the common AgeRangeDeclaration type public init?(platform value: AgeRangeService.AgeRangeDeclaration?) { guard let value else { return nil } switch value { // Xcode 26.1 visible cases case .selfDeclared: self = .selfDeclared case .guardianDeclared: self = .guardianDeclared // Xcode 26.2 visible cases // This is the first culprit, all of the following symbols would crash, this is just the first case .checkedByOtherMethod: self = .checkedByOtherMethod case .guardianCheckedByOtherMethod: self = .guardianCheckedByOtherMethod case .governmentIDChecked: self = .governmentIDChecked case .guardianGovernmentIDChecked: self = .guardianGovernmentIDChecked case .paymentChecked: self = .paymentChecked case .guardianPaymentChecked: self = .guardianPaymentChecked @unknown default: // Apple added new cases in Xcode 26.2 betas that were available in iOS 26.0, // so it is probable that this could happen again. If it does, assert to let developers // bring it to my attention. assertionFailure("Invalid or out of date knowledge of age range declaration \(value)") self = .unknown } } } For what it is worth, the same is also true for isEligibleForAgeFeatures which I suspect was also added to Xcode 26.2 somehow but not made available to real devices running [26.0 - 26.2). As a side note, thank you for this property, it will let me check what states I need to perform extra checks for in a clean way, I just will need it to now not crash my app on 26.0 and 26.1 runtime devices. :) Edit: DTS did confirm on a comment I had in another thread that this is a bug. Now just to wait for an Xcode beta update. https://developer.apple.com/forums/thread/807906?answerId=867205022#867205022 In any case, this is a great example of how MetricKit totally rocks capturing things other off the shelf crash tools might not have a chance to get. I did have to roll back my TestFlight to an earlier build, but MetricKit was there to send me the previous crashes as soon as the app could launch. Thanks MetricKit team!
1
0
200
6h
Family Controls (Distribution) entitlement — typical review timeline?
Hello! I recently submitted a request for the Family Controls (Distribution) entitlement for my app, and I’m trying to understand what kind of timeline to expect. I’ve seen posts suggesting anywhere from a few days to over a month for approval. Is there a typical review window for this entitlement? And is there anything I can do on my end to help the process move more smoothly? Thanks in advance!
0
0
23
8h
Declared Age Range: How to support age verification on iOS < 26?
Hello, we get in touch as we need some guidance from Apple regarding age verification for minors in our app. Our app supports iOS 17 and above. The Declared Age Range API is available only starting on iOS 26, but we must comply with legal requirements (e.g., Texas SB 2420) and ensure that minor users cannot access certain sections of the app, regardless of the version of the operating system. Our question: What is the correct and Apple-approved approach for handling age verification and restricting access for minor users on iOS versions prior to 26, given that the Declared Age Range API is not available on those systems? We want to ensure that our implementation aligns with the regulations, the App Store Review Guidelines and platform expectations.
0
1
41
16h
Unexpected expiresDate for monthly subscription renewal?
I'm an app developer, and I recently launched a monthly subscription product in my app on the App Store. However, I'm having trouble understanding the App Store's renewal date calculation policy. According to the official documentation, if a subscription is purchased on December 1st, the next renewal date should be January 1st. But the expiresDate is set to December 31st instead. At first, I thought this might be a timezone issue, but even after it became December 1st in UTC, the renewal date was still set to December 31st. Is the timezone used to calculate renewal dates not UTC+0? Or is there documentation on the renewal cycle policy that I might have missed? Any clarification would be greatly appreciated. Thanks in advance!
0
0
82
1d
App Store doesn't display WatchOS version requirement under compatibility
Hi DF I'm working on a watchOS app with an iOS companion app and have been updating the minimum deployments for both. After making the updates, when I upload the apps to TestFlight or App Store, the compatibility field for the watchOS has been removed. Instead of saying: Compatibility: Requires iOS 15.6 or later... Requries watchOS 10.6 or later... It says: Requires macOS... Requires iOS 15.6 or later... It is not a macOS app, so I don't know why that is displayed. How do I remove macOS and get it to display watchOS min requirement?
0
0
60
1d
Feedbacks for DeclaredAgeRange - missing platform support
I've been writing about the DeclaredAgeRange a bit on LinkedIn and now it is time to take to the developer forums. In my efforts to prepare my apps for new local requirements, I've run across some rough edges. The DeclaredAgeRange API is missing on several platforms, and extension types. First and foremost, watchOS. An Apple Watch is a clear single user platform and for standalone apps, the DeclaredAgeRange being absent is felt by developers. FB20954931 - DeclaredAgeRange: Framework not available on watchOS making compliance a challenge for watchOS standalone apps In the same vein of thinking, while users on Apple Vision Pro are far fewer numbers than Apple Watch, it is also a miss. The tricky part would be testing on the simulator. So far I haven't gotten the simulator and sandbox testing to work and give real values across any platform. I don't think an Apple Store will let me try my app out via TestFlight on their devices and they're still too expensive to reasonably buy for most developers. Too bad Feedbacks are not a currency that developers can trade in for gear. FB20955020 - DeclaredAgeRange: Framework not available on visionOS making compliance a challenge for visionOS apps I'll recognize that the user model is different on tvOS, and that as a user while I have family group setup, I don't have any children on the account. I have to imagine that child accounts on an Apple TV exist and would be able to account for the sharing of age ranges to apps. Yes, the user could just switch profiles, but, app developers could still integrate the age range into their apps. Maybe it needs more robust system level support but here is the feedback just the same. FB20955029 - DeclaredAgeRange: Framework not available on tvOS making compliance a challenge on tvOS apps And finally, let's not forget about App Clips. While the App Clips might not be 'downloaded' from App Store itself, it is powered by App Store technologies to an extent. I'd rather not bifurcate my code more than it already is for the shared code between my apps and app clips. Rounding out platform support to App Clips, since it is iOS, would close the loop. FB20954846 - DeclaredAgeRange / App Clips: Add support for DeclaredAgeRange framework for App Clip targets - capability exist, Xcode cannot generate entitlement for it Oh wait, actually, not quite. To fully close the loop, make the DeclaredAgeRange work fully on macCatalyst. The documentation says it is compatible, but from my experiments trying to get it to even compile when targeting macCatalyst apps simply doesn't build. FB21117325 - DeclaredAgeRange: API documentation states available on mac catalyst - but fails to compile in Xcode 26.2
1
0
129
1d
Age verification implementation in IOS Apps
Hi Team, We are planning to implement the age verification logic in our iOS app and our app rating in AppstoreCoonnect is 16+. Our app is like eComm Application. Our customer can login into our application and order the products. Now we want to introduce the Age verification logic when user tries to purchase products from App. Could you suggest which API we should use to adhere the Age verification in our Application?
0
0
131
1d
Delay in Developer Program Enrollment
I purchased the Developer Program (enrollment) two days ago, but still have not heard back. On the account page at developer.apple.com, it says please purchase your enrollment, even though I already did. When will the payment go through and when will my account be approved? Also, I don't have access to the email that the account is under, how do I change the email associated with my developer account?
0
0
141
3d
Pysical Goods Service Annual purchase
Hello, I’m developing an app that provides physical services such as equipment storage, maintenance, pickup, and delivery. The app does not provide any digital content, digital features, or any form of digital subscription. For payments, we are using an external payment gateway (similar to Stripe Billing or Braintree): iOS: Users are redirected to Safari to complete the payment. We also plan to support annual automatic renewal billing, using the payment gateway’s “billing key” or “recurring billing” feature. This is essentially a card auto-charge for a physical service, and it is not an in-app subscription. I want to ensure that our implementation is fully compliant with Apple’s App Store Review Guidelines, especially 3.1.5(a) regarding physical goods and services. I would appreciate guidance on the following: For apps providing physical services, is it acceptable to process payments through an external browser (Safari) instead of using In-App Purchase? Is recurring billing / automatic renewal with an external payment provider allowed, as long as the service being billed is physical and not digital? For apps offering only physical services, should we completely avoid using the Monetization → Subscriptions section in App Store Connect, since those subscription products apply only to digital content? Our goal is to ensure that the app follows Apple’s policies correctly and does not mistakenly fall under the category of digital subscriptions. Thank you very much for your help.
0
0
27
5d
Ask to buy pending state lacking transaction object
StoreKit ask to buy should have more data in pending state. When user try to purchase ask to buy, we should get at least transactionID, product itself, and time that user start the request. So we can keep track of the whole transaction flow jwsRepresentation should always available for every state, actually even failing state. And should attach state inside of it. Instead of only available after verified purchase. So we can use transactionID and everything relate to transaction for both waiting for purchase and Currently we only have jwsRepresentation after complete purchase, which is very limited its usage
0
0
19
6d
How to be listed in Ecudation Ecospace partner(k-12)?
We have a STEM learning app for kids, and I've been exploring ways to get it listed under the Education Ecosystem Partner (K–12) collection on the App Store. I couldn’t find a clear pathway or guidelines for eligibility. Could you please point me to the relevant documentation or let me know if there's someone I should reach out to for this?
0
0
23
1w
DeclaredAgeRange framework and types missing much needed Sendable and Hashable conformance
Like any good developer, I try to add tests where I can. The AgeRangeService.AgeRange type does not provide an initializer. I know the routine, create an interface or a simple struct that I control and use that instead. Thanks to extensive time with frameworks like Core Bluetooth or Core Location, this is a well understood practice (looking at you CBPeripheral...). Great I'll make my own 'AgeRange' struct. Make it Hashable, make it Sendable, use the framework types as properties. Scratch that, most of the properties on AgeRangeService.AgeRange type are not Sendable and many are also not Hashable. This is proving to be challenging. I hope to open source my little Swift Package wrapper library for DeclaredAgeRange which will add types with full Hashable and Sendable conformance. I hope Apple updates the API and makes this obsolete. I don't see why these simple types can't be Hashable and Sendable. They're structs, enums, and OptionSets (structs). FB20959748 - DeclaredAgeRange: DeclaredAgeRangeAction is not sendable causing main actor compile errors with default isolation settings FB20960560 - DeclaredAgeRange: AgeRangeService.AgeRangeDeclaration is not sendable as expected FB20960574 - DeclaredAgeRange: AgeRangeService.ParentalControls is not sendable as expected FB20960590 - DeclaredAgeRange: AgeRangeService.ParentalControls is not hashable as expected On the note of the library and using the types as-is, there are some issues using the new cases in AgeRangeDeclaration and the isEligibelForAgeFeatures property. I started another thread over here: https://developer.apple.com/forums/thread/808144
0
0
89
1w
How to Change Apple Developer Account Holder to a Non-Employee Email?
Hi everyone, I work in a large enterprise that maintains an Apple Developer account for developing and distributing internal and customer-facing iOS applications. Right now, the Apple Developer account is registered under the personal email of one employee. This creates operational challenges: if that employee leaves the company, transferring Account Holder responsibilities becomes a cumbersome and time-consuming process. We would like to change the Account Holder’s email to a role-based address that is not tied to any specific employee. This way, ownership and access remain within the company regardless of staff changes. Has anyone done this successfully? Is it possible to convert the existing Account Holder to a non-employee, role-based Apple ID, or is there an official process Apple recommends for this situation? Any guidance or steps would be greatly appreciated. Thanks!
0
0
43
1w
How to test an MDM-capable App Store iOS app?
Hi Everybody! I would like to develop an iOS app with MDM features and distribute it on App Store. The problem I got stuck with is how to QA-test the MDM features of such an app. The app is not yet on App Store, it's under development. I can upload builds to App Store Connect, invite testers, they can test the app using TestFlight, all fine. But features that require an MDM configuration don't work since the app is not deployed via an MDM solution. It cannot be deployed via MDM since it's not an enterprise app and it's not on App Store yet. There are ways to work around this only for dev-testing (like a hardcoded configuration) but I need to give this to QA engineers. AI answers suggest that Custom Apps in ASM/ABM might be the way out of this. Apple docs say I need to have the app reviewed by Apple first, only then can I assign it to organizations. But again, I need this for internal testing the app before releasing it. And before having to submit the build to Apple for approval. I am quite sure it's possible to do this, there are apps on App Store with such features (Jamf Self Service), and other platforms provide a way (private store on Android) for internal testing, but I haven't been able to find the Apple solution yet. Any help would be appreciated. Best regards, Balazs
1
0
71
1w
XCode StoreKit helper application failure - Purchase Fails with NSCocoaErrorDomain Code=4099 and ASDErrorDomain Code=5115
XCode version = 26 && macOS version = 26 Running the app from XCode (not in release mode) I want to implement in app purchases for my macOS application, for that i want to first test it locally through StoreKit config file. Steps i have done uptill now: Added the capability in target-> Signing & Capabilities -> In_App Purchase(while adding this i had got the popup: Make changes to In-App Purchase by changing all configurations - i have no idea about it, Researched on it - didnt got something) Added the storekit config file -> added Group for autorenewable subscription -> reference name & product ID (i have used same Bundle ID and product ID, also i have used different both but still the same issue in both case) - also added it to scheme Added the storeManager implementation that is: import StoreKit class IAPManager { // Shared instance (optional singleton pattern) static let shared = IAPManager() private init() { } // Array to store fetched products var products: [Product] = [] // MARK: - Fetch Products func fetchProducts() async { let productIDs = ["com.app.yearly"] do { // Fetch products from StoreKit let fetchedProducts = try await Product.products(for: productIDs) self.products = fetchedProducts print("✅ Successfully fetched products:") for product in fetchedProducts { print("----------------------------") print("Product ID: \(product.id)") print("Display Name: \(product.displayName)") print("Description: \(product.description)") print("Price: \(product.displayPrice)") print("Subscription Type: \(product.type)") } } catch { print("❌ Failed to fetch products: \(error)") } } } extension IAPManager { func observeTransactions() { Task.detached(priority: .background) { for await result in Transaction.updates { switch result { case .verified(let transaction): print("🔄 Transaction updated: \(transaction.productID)") await transaction.finish() case .unverified(_, let error): print("⚠️ Transaction unverified: \(error.localizedDescription)") func purchase(product: Product) async { do { let result = try await product.purchase() switch result { case .success(let verification): // Check if transaction is verified switch verification { case .verified(let transaction): print("✅ Purchase successful!") print("Product ID: \(transaction.productID)") print("Transaction ID: \(transaction.id)") print("Purchase Date: \(transaction.purchaseDate)") // Finish transaction to update entitlements await transaction.finish() case .unverified(_, let error): print("⚠️ Purchase verification failed: \(error.localizedDescription)") } case .userCancelled: print("❌ Purchase cancelled by user") case .pending: print("⏳ Purchase is pending...") @unknown default: print("❓ Unknown purchase result") } } catch { print("❌ Purchase failed with error: \(error.localizedDescription)") } } } I triggered the function from my Viewcontroller: swift // in viewDidLoad Task { await IAPManager.shared.fetchProducts() } // in button action Task { // Wait until products are fetched while IAPManager.shared.products.isEmpty { try? await Task.sleep(nanoseconds: 200_000_000) // 0.2s } guard let product = IAPManager.shared.products.first else { print("❌ No product available") return } print("Product to be purchased \(product)") await IAPManager.shared.purchase(product: product) } In App Delegate: swift // in applicationDidFinishLaunching IAPManager.shared.observeTransactions() Problem: Although the product is getting fetched correctly, but while purchasing it shows me the error in terminal as: `Error handling payment sheet request: Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service created from an endpoint was invalidated from this process." UserInfo={NSDebugDescription=The connection to service created from an endpoint was invalidated from this process.} Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=5115 "Received failure in response from Xcode" UserInfo={NSDebugDescription=Received failure in response from Xcode, NSUnderlyingError=0x600000c30c60 {Error Domain=NSCocoaErrorDomain Code=4099 "The connection to service created from an endpoint was invalidated from this process." UserInfo={AMSDescription=An unknown error occurred. Please try again., AMSURL=http://localhost:49409/WebObjects/MZBuy.woa/wa/inAppBuy, NSDebugDescription=The connection to service created from an endpoint was invalidated from this process., AMSStatusCode=200, AMSServerPayload= "app-list" = ( ); dialog = cancelButtonString = Cancel; defaultButton = Buy; explanation = "Subscribe to\U00a0myApp.\U00a0This subscription will automatically renew every week for $45.99.\n\n[Environment: Xcode]"; initialCheckboxValue = 1; "m-allowed" = 0; okButtonAction = buyParams = "bid=&bvrs=10.1.7&offerName=com.k.yearly&productType=A&quantity=1&deviceVerification=ab5eb999-1e70-5c91-9c69-6adf7a641e86"; itemName = "com..yearly"; kind = Buy; okButtonString = Continue; paymentSheetInfo = caseControl = true; confirmationTitle = Subscribe; countryCode = US; currency = USD; designVersion = 2; value = "For testing purposes only. You will not be charged for confirming this purchase."; ); requestor = AppStore; salableIcon = "http://localhost:49409/StoreKit/AppIcon?bid=[myappID- that i added]"; salableIconType = app; salableInfo = ( "my app Pro %%image_0%%", my app, Subscription ); "download-queue-item-count" = 0; dsid = 17322632127; failureType = 5115; jingleAction = inAppBuy; jingleDocType = inAppSuccess; pings = ( ); Purchase failed with error: Couldn’t communicate with a helper application.`
0
0
28
1w
App name under icon (CFBundleDisplayName) uniqueness
We are going to publish an app update that will change the Brand identity of our app. One of this changes will be the app name shown under the app Icon, we discovered that an app with the same name (CFBundleDisplayName) already exists. Is it allowed to have two apps with the same name on iOS (We own the rights to use the name on our country). I would like to explicitly say that I am talking about the name under the app icon and not the AppStore name, where I'm quite sure that two apps cannot have the same name. I would like to have an official response, since this would impact our marketing strategy. Thanks in advance for your help
0
0
35
2w