Hello,
I am currently in the process of gradually adding support for LiquidGlass to my app. The transition is taking place incrementally, i.e., new screens and minor features are gradually being adapted to the new design and already deployed.
Currently, the old design is still active via the feature flag UIDesignRequiresCompatibility, as the existing UI should remain locked for the public app store version until the transition is complete.
My challenge is as follows:
I would like to work with the new LiquidGlass design during development without having to manually change the UIDesignRequiresCompatibility flag with each deployment.
Ideally, I am looking for a solution where:
• the new design is only activated for me (e.g., specific account or specific devices)
• the old design remains active for all other users
• the App Store version can be delivered unchanged
So my question is:
Is it possible to control UIDesignRequiresCompatibility via remote config or server-side logic in order to activate the new design specifically for certain users or devices?
I have observed similar behavior on WhatsApp—two devices with the same app version, but only one shows the new design. This suggests server-side or remote config-based control.
Do you have any experience or recommendations on how to implement something like this cleanly?
Kind regards
Heinz
General
RSS for tagDive into the vast array of tools and services available to developers.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Created
I am developing an Augmented Reality (AR) navigation application for the iPad, utilizing the ARCL library to place Points of Interest (POIs) in the real world.
The application's behavior varies significantly based on the device's networking configuration:
Cellular Network (Expected Behavior): On an iPad with a cellular modem, when using the cellular network, all POIs are placed accurately with correct orientation.
Wi-Fi Only (Expected Behavior): On a Wi-Fi-only model (no GPS chip), POI placement is inaccurate, confirming the need for an external GPS receiver for that hardware configuration.
Cellular + Wi-Fi (Anomalous Behavior):
The iPad is a cellular model (equipped with GNSS/GPS).
The device is connected to a Wi-Fi network (enforced via an MDM profile, preventing the user from disabling Wi-Fi).
When actively connected to this specific Wi-Fi network, the AR POIs consistently display with an incorrect orientation and placement, even though the device hardware has a dedicated GPS chip. The placement error strongly suggests that the device's determined location or heading is erroneous. It appears that the active Wi-Fi connection is somehow interfering with or overriding the high-accuracy GNSS/GPS data, leading to a flawed Core Location determination that negatively impacts the ARCL world tracking and anchor placement.
Has anyone experienced a scenario where an active Wi-Fi connection on a cellular iPad model causes Core Location to prioritize less accurate location data (potentially Wi-Fi-based location services) over the device's built-in GNSS/GPS, resulting in severe orientation errors? We observed that on Apple map(native application) as well it is showing wrong location and orientation when it is connected to WiFi
I am developing a simple watch app and I use my personal watch for development with Xcode. Personal watch is series 10 gps only.
I have two other watches that I want to use for testing the app, but not needing them to be connected to Xcode. The test watches have cellular option, and I need a cell plan per watch because the watches need to be standalone, not counting initial setup.
To get the standalone cell plan the watches need to be configured using AWFK. Here is what I have tried/current issues.
I switch between all three watches on my phone using the watch app.
Originally tried to put test watches in developer mode, thinking I would connect to Xcode, developer mode is not available when watch is setup using AWFK.
Pushed the watch app to apple connect, setup TestFlight group, added the test users and my phone user, accepted invites
TestFlight is installed on my phone, I see the testflight setup for the watch app
I set a test watch using watch app on the phone, run install for the test app from TestFlight on the phone, spinner moves for awhile then goes back to Install.
I am not able to get the watch app installed on the test watches from the phone. Is what I am attempting to do supported? I haven't found much specific documentation on this. If I pair the test watches as regular watches, set them to developer mode, can I pair them again as AWFK and will developer mode survive the switch? Or is there something really simple that I'm overlooking?
Appreciate any help that can be extended.
Hey Im currently trying to use the weatherkit API and Im seeing the following returned:
{"reason": "OVER_QUOTA"}
Im using the correct service, key and bundle ID.
Ive generated a private key too.
I’ve officially given up trying to release my app on iOS.
Apple’s latest rejection quotes:
• Guideline 5.1.5 – Location Services
“The app uses location data for features that are not relevant to a user’s location. Specifically, the app is not functional when Location Services are disabled. To resolve this issue, please revise the app so that the app is fully functional without requiring the user to enable Location Services.”
• Guideline 5.1.1 – Data Collection and Storage
Complaining that the app “encourages or directs” users to go to Settings to enable location.
My app is literally built around live location. The entire point is: you walk the circuit, see telemetry synced with where you are. No location, no app. That is the product. Apple wants the app to be “fully functional” without the one thing it needs to exist. That’s like rejecting a camera app because it doesn’t “fully function” with no camera permission.
What makes this worse is the complete lack of consistency. Every time I fix what they ask, the next review comes back with a different problem, instead of a clear list of issues to solve in one go. No stable checklist, no coherent interpretation, just moving goalposts and copy-paste template replies that ignore reviewer notes and how the app actually works.
They don’t seem to understand how incapable this process is for serious, niche apps. It’s not about quality or privacy at this point, it’s about box-ticking and cover-your-back behaviour. Meanwhile, small devs are supposed to burn weeks rewriting core flows just to satisfy someone who clearly hasn’t even tried to use the app properly.
I’ve decided to keep the app Android-only. iOS simply isn’t worth fighting with a review system that can’t even be consistent with its own guidelines.
Has anyone else had similar problems with Apple inventing a new issue every review instead of giving you one clear, stable set of requirements to fix?
Topic:
Developer Tools & Services
SubTopic:
General
Hello, I have a question about running tests on multiple simulators.
Currently, my company has a WDIO+Appium test suite with XCUITEST driver that runs on a single simulator through a mockttp proxy (we are intercepting and mocking some of the responses from our APIs and pass through the rest). In order to route the traffic we are currently using 'networksetup -setsecurewebproxy '. Everything works as expected.
With growing number of tests we'd like to scale number of simulators on a single host to 3-5. We have a working setup but the problem are system-wide proxy settings routing traffic from multiple simulators, which we can't distinguish by UDID or any other means, we know of. We can spin multiple mock servers on the same machine but we are struggling to find the way to route the traffic on a simulator basis.
In the end, both options are viable:
1 mock server running for multiple simulators
N number of mock servers for N number of simulators
Has anyone had the same/similar problem? How to approach this? We are currently running on Sequoia OSX and platform version 18.6. Thanks!
Hi,
I accidentally upgraded my test device (iPhone 13 mini) to iOS 26. I really need to downgrade it to 18.7.X again. It seems this isn't possible since Apple doesn't sign the .ipsw anymore.
Is there really no way for a paying developer to downgrade her test devices?
(Please don't tell me to use the support forums, this is a concerning a developer test device)
Topic:
Developer Tools & Services
SubTopic:
General
I'm developing for compliance with Texas law in the United States.
Currently, I'm encountering an issue where I want to test the feature point "when the app undergoes significant changes, a supervised user initiates a request." However, during actual testing, the app pops up an error message: "Can't Ask, An Unknown error occurred."
Additionally, I see the following error message in the Xcode Console: "Error Domain=AskToCore.ATMessageComposeValidationError Code=4 'The user is in a region that does not support this type of ask.' UserInfo={NSLocalizedFailureReason=The user must be in a supported region to use this feature., NSLocalizedRecoverySuggestion=Please ensure the user is in an eligible region., NSLocalizedDescription=The user is in a region that does not support this type of ask.}"
I am indeed not in the Texas region.
I want to conduct full-process testing before the feature is released to the App Store.
What should I do?
Apart from Sandbox testing (which, in fact, doesn't show any pop-ups either), how can I test under real-world conditions?
Just recently, any pkg file that I create with pkgbuild will install the Payload's application as a zero-byte file in the /Applications directory. This has been working for years without issue for me.
Here are the commands I am using with company specific items replaced:
pkgbuild --analyze --root MyApplicationRootDirectory standalone.plist
plutil -replace BundleIsRelocatable -bool NO standalone.plist
pkgbuild --identifier MyIdentifier --version 1.0 --install-location /Applications --root MyApplicationRootDirectory --component-plist standalone.plist --sign 'Developer ID Installer: MyCompany (MySignId)' --timestamp installer.pkg
Any ideas on what could be causing the issue?
I have verified the following:
The application being added to the pkg is both signed and notarized using the correct Developer ID Application certificate.
The resultant pkg file is both signed and notarized using the Developer ID Installer certificate.
Verified the pkg contents using "pkgutil --expand" to dump the contents.
Verified the pkg's Payload contents by extracting the data using "cat Payload | gunzip | cpio -1". This results in an application file that is a binary match for file added in the "pkgbuild --root" argument.
My application is the only file within the directory passed to the "pkgbuild --root" argument.
There are no warnings in the System Settings / Privacy & Security Panel when running the package installer.
I have a valid Mac Developer account.
I am building the application and the pkg file on the same computer.
Thank you for any insight.
My application always crashes at the same position when I open it on my iPad Air. It doesn't crash in debug mode which makes it very difficult for me to find the issue.
My crash report from TestFlight:
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000016d5f26f0
Exception Codes: 0x0000000000000001, 0x000000016d5f26f0
VM Region Info: 0x16d5f26f0 is not in any region. Bytes after previous region: 546219761 Bytes before following region: 399632
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
MALLOC_LARGE 14c000000-14cd08000 [ 13.0M] rw-/rwx SM=PRV
---> GAP OF 0x2094c000 BYTES
Stack Guard 16d654000-16d658000 [ 16K] ---/rwx SM=NUL
Termination Reason: SIGNAL 4 Illegal instruction: 4
Terminating Process: ProjectiOS [745]
Triggered by Thread: 0
Thread 0 name:
Thread 0 name:
Thread 0 Crashed:
0 ProjectiOS 0x0000000107abf3b4 0x1026ac000 + 88159156
1 ProjectiOS 0x000000010e7d3be4 0x1026ac000 + 202537956
2 ProjectiOS 0x000000010e96c45c 0x1026ac000 + 204211292
3 ProjectiOS 0x000000010e96cadc 0x1026ac000 + 204212956
4 ProjectiOS 0x000000010e7d7ba4 0x1026ac000 + 202554276
5 ProjectiOS 0x00000001079cccc0 0x1026ac000 + 87166144
6 ProjectiOS 0x000000010945f33c 0x1026ac000 + 115028796
7 ProjectiOS 0x000000010945b648 0x1026ac000 + 115013192
8 ProjectiOS 0x0000000109458510 0x1026ac000 + 115000592
9 ProjectiOS 0x0000000107530430 0x1026ac000 + 82330672
10 ProjectiOS 0x0000000109459290 0x1026ac000 + 115004048
11 ProjectiOS 0x0000000109457584 0x1026ac000 + 114996612
12 ProjectiOS 0x00000001094b961c 0x1026ac000 + 115398172
13 ProjectiOS 0x00000001094bb8a0 0x1026ac000 + 115407008
14 ProjectiOS 0x00000001094c0340 0x1026ac000 + 115426112
15 ProjectiOS 0x000000010971e698 0x1026ac000 + 117909144
16 ProjectiOS 0x000000011104f7a4 0x1026ac000 + 244987812
17 QuartzCore 0x00000001879f4548 CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 64 (CADisplay.mm:6671)
18 QuartzCore 0x00000001879d1c64 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 880 (CADisplay.mm:5794)
19 QuartzCore 0x00000001879e5394 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 360 (CADisplay.mm:4886)
20 UIKitCore 0x000000018c936afc _UIUpdateSequenceRunNext + 128 (_UIUpdateSequence.mm:189)
21 UIKitCore 0x000000018c935f8c schedulerStepScheduledMainSectionContinue + 60 (_UIUpdateScheduler.m:1197)
22 UpdateCycle 0x000000027364b560 UC::DriverCore::continueProcessing() + 84 (UCDriver.cc:288)
23 CoreFoundation 0x0000000186f8c4cc __CFMachPortPerform + 168 (CFMachPort.c:604)
24 CoreFoundation 0x0000000186fbc0b0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 60 (CFRunLoop.c:2045)
25 CoreFoundation 0x0000000186fbbfd8 __CFRunLoopDoSource1 + 508 (CFRunLoop.c:2184)
26 CoreFoundation 0x0000000186f93c1c __CFRunLoopRun + 2168 (CFRunLoop.c:3205)
27 CoreFoundation 0x0000000186f92a6c _CFRunLoopRunSpecificWithOptions + 532 (CFRunLoop.c:3462)
28 GraphicsServices 0x000000022790d498 GSEventRunModal + 120 (GSEvent.c:2049)
29 UIKitCore 0x000000018c956ba4 -[UIApplication _run] + 792 (UIApplication.m:3902)
30 UIKitCore 0x000000018c8ffa78 UIApplicationMain + 336 (UIApplication.m:5577)
31 ProjectiOS 0x0000000110d93700 0x1026ac000 + 242120448
32 ProjectiOS 0x00000001109068f0 0x1026ac000 + 237349104
33 ProjectiOS 0x000000010f5885d4 0x1026ac000 + 216909268
34 ProjectiOS 0x000000010f588908 0x1026ac000 + 216910088
35 ProjectiOS 0x0000000107cf95b8 0x1026ac000 + 90494392
36 ProjectiOS 0x000000010e85dce8 0x1026ac000 + 203103464
37 ProjectiOS 0x0000000110fadbd4 0x1026ac000 + 244325332
38 ProjectiOS 0x0000000110f48e64 0x1026ac000 + 243912292
39 ProjectiOS 0x0000000110f50004 0x1026ac000 + 243941380
40 ProjectiOS 0x0000000110fb54f4 0x1026ac000 + 244356340
41 ProjectiOS 0x0000000110de715c 0x1026ac000 + 242463068
42 ProjectiOS 0x000000011102e55c 0x1026ac000 + 244852060
43 dyld 0x0000000183faae28 start + 7116 (dyldMain.cpp:1477)
Then I symbolicated all the lines starting with "ProjectiOS" in my crash report but I cannot find the issue. Which lines in my crash report cause the crash?
Lines 0-16:
alcCaptureSamples (in ProjectiOS) + 202259184
alcCaptureSamples (in ProjectiOS) + 203932520
alcCaptureSamples (in ProjectiOS) + 203934184
alcCaptureSamples (in ProjectiOS) + 202275504
alcCaptureSamples (in ProjectiOS) + 86887372
alcCaptureSamples (in ProjectiOS) + 114750024
alcCaptureSamples (in ProjectiOS) + 114734420
alcCaptureSamples (in ProjectiOS) + 114721820
alcCaptureSamples (in ProjectiOS) + 82051900
alcCaptureSamples (in ProjectiOS) + 114725276
alcCaptureSamples (in ProjectiOS) + 114717840
alcCaptureSamples (in ProjectiOS) + 115119400
alcCaptureSamples (in ProjectiOS) + 115128236
alcCaptureSamples (in ProjectiOS) + 115147340
alcCaptureSamples (in ProjectiOS) + 117630372
BrotliEncoderHasMoreOutput (in ProjectiOS) + 2126968
Lines 31-42:
alcCaptureSamples (in ProjectiOS) + 237070332
alcCaptureSamples (in ProjectiOS) + 216630496
alcCaptureSamples (in ProjectiOS) + 216631316
alcCaptureSamples (in ProjectiOS) + 90215620
alcCaptureSamples (in ProjectiOS) + 202824692
BrotliEncoderHasMoreOutput (in ProjectiOS) + 1464488
BrotliEncoderHasMoreOutput (in ProjectiOS) + 1051448
BrotliEncoderHasMoreOutput (in ProjectiOS) + 1080536
BrotliEncoderHasMoreOutput (in ProjectiOS) + 1495496
xamarin_get_original_working_directory_path (in ProjectiOS) + 4032
BrotliEncoderHasMoreOutput (in ProjectiOS) + 1991216
I want to keep an eye on the App Store Connect release notes to find out when builds created with Xcode 26.2 RC will be accepted. I tried to add https://developer.apple.com/help/app-store-connect/release-notes/ to my RSS reeder but the items listed are not the same, it’s the items from the latest news from Apple Developer instead. Can we get an RSS feed please? Seems will be useful to monitor these release notes over time.
I am a developer with a free developer account, and my account is under the legal age of majority. I know that, according to the terms in Section 6 of the Apple Developer Agreement, I must be the legal age of majority to use pre-release software, and yet the Software Update section of Settings on my device would allow me to install a beta release of iOS 26.
Is there a way for me to hide/remove this option without signing out of my account, and not have it appear again as an option until I reach the age of majority?
Topic:
Developer Tools & Services
SubTopic:
General
Tech stack: React Native + Expo. We are using two solo developer accounts (not a business or team account).
Context: Friend and I set out to make an app together. Friend created app and set it up on Apple.
We worked on it together. He controlled devops (builds and submission).
Friend no longer can commit to development.
Wants to transfer to me. I create apple developer account.
After app transfer, my phone (deviceid) underwent a 14 day soft ban preventing builds. That has since been lifted.
There seems to be something in place preventing me from making dev builds on the original dev bundleid. It says it's still owned by him despite the app transfer.
Bottom line: what needs to happen so I can make dev builds?
Nice to have: we can both make dev builds under the same bundleid
Tech stack: React Native + Expo. We are using two solo developer accounts (not a business or team account).
Context: Friend and I set out to make an app together. Friend created app and set it up on Apple.
We worked on it together. He controlled devops (builds and submission).
Friend no longer can commit to development.
Wants to transfer to me. I create apple developer account.
After app transfer, my phone (deviceid) underwent a 14 day soft ban preventing builds. That has since been lifted.
There seems to be something in place preventing me from making dev builds on the original dev bundleid. It says it's still owned by him despite the app transfer.
Bottom line: what needs to happen so 1 can make dev builds?
nice to have: is there a way for us to both make dev builds under the same bundleid?
Hi,
I am using Installer JS in Distrtibution file which is created using productbuild command. I am trying to read the installed version of app from the plist file present in the /var/db/receipts folder. It gives the following warning. If I enable the flag , notarization will fail.
FJS: Package Authoring Error: access to path "/var/db/receipts/com.xxx.xxx.plist" requires
Following is the function I have used to read the installed version.
system.files.plistAtPath()
I have also tried the following function to read the version from .app file.
system.files.bundleAtPath
Both the functions give the warning.
Is there are a way to avoid this warning or a better way to read the installed version?
Regards
Prema Kumar
We're having issues getting Sign in with Google to function on TestFlight (not experiencing these issues on iOS Browser) with user unable to be authorised and proceed to logged in screens of our app.
Below are the three sign-in methods tested and the exact results for each.
Button 1: Default
Standard Google Sign-In button (Google JavaScript SDK) embedded in the frontend.
Uses the normal OAuth browser redirect flow.
Auth URL: https://accounts.google.com/o/oauth2/v2/auth?...
Sometimes disallowed_useragent error.
Other times a 400 invalid_request error.
In most cases the callback is never triggered inside the wrapper.
Appears that the wrapper does not retain cookies/session data from the external Google window.
Button 2: Custom
Custom button calling Google OAuth through our own redirect handler.
Explicitly set a custom user-agent to bypass disallowed user agent logic.
Later removed user-agent override entirely for testing.
Added multiple ATS (App Transport Security) exceptions for Google domains.
Added custom URL scheme to Info.plist for OAuth redirect.
Changing the user-agent had no effect.
ATS exceptions + scheme support verified and working.
Redirect still fails to propagate tokens back to the WebView.
In tests a few weeks ago we got to Google’s login page, but it never returned to the app with a valid code. Now
we are consistently getting disallowed_useragent error.
Button 3: Default
Same as Button 1 however tested outside of Vue.js with just plain JavaScript.
Added new Google domain exceptions and updated redirect URIs.
Behaviour matches Button 1
Google account selection sometimes worked, however now consitently disallowed_useragent error
Additional Technical Attempts
User-Agent Modifications
Set UA to standard desktop Chrome → no effect.
Removed UA override → no effect.
ATS / Domain / Scheme Configuration
Added:
accounts.google.com
.googleusercontent.com
*.googleapis.com
I want to create a dynamic library for my iOS project, which would be loaded at runtime.
In Xcode, there are templates available for creating a static/dynamic lib for MacOS. But under the iOS tab, there is only a "static library" template.
So, I used the "static library" template and in its build settings I changed the Mach-O type to "dynamic library".
Now after building it, I use the file command on the generated file and it tells me it is a dynamic lib.
But the generated file still has .a extension, which is usually for static libs.
I'm aware we can tell Xcode in build settings to change the .a extension to something else, say .dylib but this seems like a hacky way to create a dynamic library.
What is the correct way?
I am aware that standalone dylibs are not supported on iOS, and we need to wrap them in a framework.
For my use case, the framework will literally be a wrapper, it won't have any source files of its own. It should only contain the dynamic lib generated from some independent codebase. I am not sure how to place the dylib in the framework.
Hi, I have an iOS project with the following app targets:
main iOS application
a notification service extension
5 static libs containing some swift files with public methods
1 dynamic framework with above static libs as dependencies.
The framework only contains 2 files - a default .h file and 1 .exp file. This exports file contains mangled-names of all the public methods that are exposed by the 5 static libs present as framework's dependencies. I obtained these symbols using the nm command for each static lib.
The main iOS app target has 2 dependencies - the framework and the notification extension.
The notification extension only depends on the framework.
This setup works perfectly fine. I wanted to understand:
If using the exports file is the only way to make this setup work?
If not, what else can I do?
What way does Apple recommend?
According to my requirements, I only need at-most 2-3 functions to be exposed by the framework - thus using a exports file just for that seems to bug me.
Thank you.
Hi everyone,
after enabling CloudKit in my project, my app started showing conflicts between MusicKit and CloudKit entitlements — and now Xcode is failing to generate the provisioning profile entirely.
Current issue (Signing / Provisioning Profile Failure)
Xcode shows this error:
“Provisioning profile ‘iOS Team Provisioning Profile: team8.groovefy.dev’ doesn’t include the entitlements:
com.apple.developer.media-library,
com.apple.developer.music-user-token,
com.apple.developer.musickit,
com.apple.developer.playable-content,
com.apple.security.exception.mach-lookup.global-name”
Automatic signing fails, and Xcode cannot create or update the provisioning profile.
This started right after CloudKit was enabled in the project.
Context
Before enabling CloudKit, MusicKit worked normally, including Apple Music authentication and playlist creation.
After activating CloudKit capabilities:
MusicKit stopped generating the Apple Music user token
Playlist creation broke
Now the provisioning profile cannot be rebuilt because the required MusicKit-related entitlements are no longer included
Even after removing CloudKit entirely, the issue persists — as if the App ID or entitlements on the server side became inconsistent or corrupted.
I already tried:
Recreating App Identifier
Recreating provisioning profiles
Resetting capabilities
Cleaning and reinitializing the Xcode project settings
But Xcode still refuses to generate a valid provisioning profile that includes the MusicKit entitlements.
Summary
Enabling CloudKit caused MusicKit entitlements to collide, and now the provisioning profile no longer includes the required MusicKit entitlements — preventing the app from signing, running, or creating playlists.
If anyone has faced this type of entitlements/provisioning corruption or knows how to reset the App ID entitlements on Apple’s side, any help would be greatly appreciated.
How can I allow the popup I am encountering while I run my UI tests with video recording in the Github actions.
Since these tests are running on VMs, it's not possible to manually click Allow. Also the remote robot cannot interact with OS-level dialogs.