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

AppStore search ignores my app name
Users that search for my exact app name need to scroll past 14 to 39 apps in the results, that don't match, before reaching the first and only exact match. My app is called 'cadance' specifically for the word 'dance' that is appropriate for my audience. But this assumed to be a spelling error for 'cadence' since there are a large number of assumed 'matching' apps presented before my exact match. I've had some luck with Apple Ads using an exact match on my product name but it seems unfortunate to be forced into a workaround for AppStore search issues.
0
0
47
11h
Apple’s age rating deadline: will apps be blocked after 31 Jan 2026?
Apple sent a final reminder asking developers to complete the updated age rating questions in App Store Connect. Final reminder: Answer the updated age ratings questions. We’re reaching out because you have not provided responses to the updated age ratings questions in the App Information section of your app in App Store Connect. If you don’t answer these questions by January 31, 2026, you won’t be able to submit app updates in App Store Connect. The email says that if the age rating questions are not answered by 31 January 2026, you will not be able to submit app updates. What is not clear is what actually happens after that date. Many of us are in the middle of development and may not be ready to submit a new build before the deadline. The email does not explain whether this means: A) You can still submit updates after 31 January 2026, as long as you complete the age rating questionnaire before submitting, or B) The app becomes locked and cannot be updated at all once the deadline passes This is not stated explicitly in the email, which makes it confusing for me. It would be helpful if Apple could clearly confirm what developers should expect after 31 January 2026, especially for apps that are still undergoing active development. Anyone knows?
5
3
522
11h
How to get tvOS app store app version using contentMetadataLookup url service?
Issue Description: Apps that support both iOS and tvOS can have different versions in App Store for each type(iOS and tvOS) but same Bundle Identifier and iTunesStoreID/trackID. For example, the iOS version of YouTube has the latest version in App Store as 17.30.3 the tvOS version of YouTube has the latest version in App Store as 2.07.01 This can be verified from two by two specific iTunes look Up API as shown below https://itunes.apple.com/lookup?id=544007664 https://itunes.apple.com/lookup?id=544007664&entity=tvSoftware Sample contentMetadataLookup URL: https://uclient-api.itunes.apple.com/WebObjects/MZStorePlatform.woa/wa/lookup?version=2&id=544007664&p=mdm-lockup&caller=MDM&platform=enterprisestore&cc=us&l=en Queries: What should we do to get the tvOS specific version of an app in contentMetadataLookup URL? The trackViewURL doesn't show tvOS specific version history of the app - https://apps.apple.com/us/app/youtube-watch-listen-stream/id544007664?platform=appleTV . How should we view this the apps' tvOS specific version history? Kindly help us with the queries.
2
0
1.3k
1d
Guidance on implementing Declared Age Range API in response to Texas SB2420
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.
8
1
688
1d
Rejected under Guideline 3.1.1 – B2B SaaS app, existing accounts only, no purchases in the app
Hi everyone, I am looking for guidance regarding a rejection under Guideline 3.1.1 – Payments / In-App Purchase. Our app is a **B2B SaaS platform for professional fitness coaches. Coaches subscribe through our website to access coaching management tools (client tracking, training programs, nutrition planning, messaging, etc.). The iOS app is only a companion app that lets existing coach accounts log in and access services they already purchased on the web. Important facts about our implementation: No subscriptions can be purchased in the app No pricing, plans, or commercial upsell screens in the app No sign-up in the app No external links to a website checkout or pricing The app is not usable at all without an existing paid account The content is professional B2B data, not consumer digital media Despite this, App Review keeps rejecting us for: “Your app accesses digital content purchased outside the app, and that content is not available through in-app purchase.” We tried referencing **3.1.3(b) Multiplatform Services, because our service is used on the web and mobile, and we only allow access with an existing account. We also provided examples of other coaching platforms in the App Store that appear to work the same way (Trainerize, Everfit for Coaches, Hubfit, etc.). But App Review still says the same thing, without pointing to a specific screen or UI element. I want to make sure we comply. To clarify: Do we need to completely block access to all content until login, even if the app already does this? Is it enough to display a disclaimer such as: “This app is for existing coach accounts only. No purchases, subscriptions, or account creation are available in the app.” For a B2B tool, does Apple still require In-App Purchase, even if users cannot sign up or buy anything inside the app? Is this considered a Reader-style app under Apple’s rules? Has anyone successfully passed review with a SaaS “login-only” model for professional software? We don’t want to violate any rule, we just need clear guidance on what is required to get approval. Any help or experience from other developers or Apple team members would be greatly appreciated. Thanks, Robin
0
0
37
1d
How to properly use PermissionKit to ask permission
For testing permission response we can use the sandbox account However, when testing permission requests using the AskCenter API, none of the ask API works for me in xcode 26.2 rc and iOS 26.2 rc. For SignificantAppUpdateTopic, I got errors like "The user is in a region that does not support this type of ask" in the console log, but I've already set my billing address to Texas. For CommunicationTopic, the console shows several XPC-related errors, and I’m not sure which of them are relevant. Both of them show an alert view of "Can't ask, An unknown error occurred" Can someone help to guide us how to test the request flow? Thanks
7
2
462
4d
App Clip Card Still Showing After Removal
Hi everyone, I’ve completely removed my App Clip: Deleted all Advanced App Clip Experiences Removed the App Clip target from my build Removed App Clip references from my apple-app-site-association file Deleted the meta tag from my website: However: When scanning the QR code, the App Clip card still appears with: "This App Clip is not currently available in your country or region." This link still works for my App Clip, which is not what I expected: https://appclip.apple.com/id?p=com.example.appclip Does anyone know why the App Clip card is still showing and how to fully remove it? Thanks!
1
0
74
4d
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!
5
1
814
5d
On macOS with Chinese language, app description in the App Store is displayed incompletely
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.
0
0
39
5d
Cannot Update Age Rating
Recently I got an email stating I need to update age rating questionnaire. I have tried to update age rating for my app in App Store using the account owner already. I have followed this tutorial (https://developer.apple.com/help/app-store-connect/manage-app-information/set-an-app-age-rating/), but the age rating cannot be updated. Anyone know how to update this, please let me know
24
5
3.2k
6d
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.
2
3
665
1w
watchOS architecture requirements
Hi Apple Team, I hope you are doing well. I am reaching out regarding the upcoming watchOS architecture requirements announced in your official communication. According to the notice, beginning April 2026, watchOS apps uploaded to App Store Connect must include the arm64 architecture and be built with the watchOS 26 SDK. zoom current watchOS app, however, only supports arm64_32, and the app size is already over 60 MB in its current form. If we add support for both arm64_32 and arm64, the binary will almost certainly exceed the 75 MB app size limit, and potentially violate the size constraints for each architecture slice as well. This raises practical concerns about how a dual-architecture watchOS app can remain within the required size limits. Could you please advise whether Apple has any recommended approach or best practice for this scenario? For example: Does Apple suggest that developers transition to arm64-only and drop support for arm64_32 devices? Are there any exceptions, additional guidelines, or alternative mechanisms for handling apps that exceed the size limit when including both architectures? Are there recommended techniques specifically for watchOS to reduce binary size when supporting multiple architectures? Any guidance would be greatly appreciated, as we want to ensure our watchOS app remains compliant with the new requirements while continuing to deliver a reliable experience for our users. Thank you very much for your support, and we look forward to your advice.
1
0
83
1w
App rejected, In-app lost, won't review again because in-app missing
Hi, at first I submitted an app where you asked for a way to review everything while you mentioned a demo mode would be fine. I added a demo mode and submitted the app together with in-app purchases. Now you are asking for an actual API token for an external service which I cannot provide. I responded with the info about the demo mode. The next review was rejected because the in-app purchases are kind of lost. I cannot map them. Next re-submit was rejected because the in-app purchases are missing. The in-app purchases are stuck in a waiting status. Please do whatever you need to do to either release the in-app and let me map them again or map them yourself. Regards, Vitali
0
0
29
1w
Critical Bug: "Session Bleed" during Enrollment - Payment renewed wrong account despite correct UI
I experienced a severe backend session handling error where the payment gateway used a wrong billing token, despite the frontend UI explicitly displaying the current user's details. This resulted in an accidental renewal of a different developer account. The Setup You opened the Developer App and logged in as ____. You filled in your details correctly (Name: AB, Last Name: CD). The screen confirmed this: "You are paying for ____." The Action You pressed the Enroll/Pay button. You approved the payment with your card/UPI. The Invisible Switch (The Bug) At the exact moment you clicked "Pay," the Apple App didn't look at the screen you were seeing. Instead, it looked deep into your phone’s history and said: "Wait, I know this phone! This phone belongs to an old account that already has a membership. I'll just renew that one." The Result The system took your money and sent it to the Old Account it remembered from history, completely ignoring the New Account (____) that was right there on the screen. The Outcome New Account (____): Still says "Pending" because it never got the money. Old Account: Got renewed instantly because the system prioritized the "device history" over the "logged-in user." It was a bait-and-switch by the app. You clicked "Pay" for AB, but the wire connected to Old Friend.
1
0
47
1w
How can I prevent Intel‑based Macs from downloading my app?
We have initiated the development of a new application, which is exclusively compatible with Apple silicon chips. As our application utilizes artificial intelligence, it is not operational on Intel-based systems due to specific technical constraints. Using the Transporter app, we tried to submit a package that only supports arm64 but we received the following message: "Validation failed (409) Invalid bundle. The “live-mac.moises.ai.pkg/Payload/Moises Live.app” bundle supports arm64 but not Intel-based Mac computers. Your build must include the x86_64 architecture to support Intel-based Mac computers. For details, view: https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary. (ID: 8b93f8c7-ac3d-4665-934a-e1a81832cc18)" Upon reviewing your documentation, I noticed that: "To only support Macs with Apple silicon, your application must require a minimum OS version of macOS Monterey 12 or later and must never have supported Intel-based Macs." Given that we launched a universal package as our initial version, I would like to inquire if there are any alternative approaches that would allow us to limit the distribution of this application to exclude Intel chips.
0
0
38
1w