On devices and simulators with iOS 26.1, the animation does not work correctly (the initial and final screens are distorted). I use open class func transition(with view: UIView, duration: TimeInterval, options: UIView.AnimationOptions = [], animations: (() -> Void)?, completion: ((Bool) -> Void)? = nil)
with options: .transitionFlipFromRight
Overview
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi folks,
How can I check the URL we have configured for SKAdNetwork install postback requests? Sadly we've lost any record of this via email on our end, and Apple developer support have asked that I reach out via the forums.
Topic:
App & System Services
SubTopic:
StoreKit
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!
Topic:
App Store Distribution & Marketing
SubTopic:
General
UITabBarAppearance *appearance = UITabBarAppearance.alloc.init;
[appearance.stackedLayoutAppearance.normal setTitleTextAttributes:@{NSForegroundColorAttributeName:UIColor.redColor}];
[appearance.stackedLayoutAppearance.selected setTitleTextAttributes:@{NSForegroundColorAttributeName:UIColor.purpleColor}];
appearance.backgroundColor = UIColor.redColor;
self.tabBar.standardAppearance = appearance;
self.tabBar.scrollEdgeAppearance = appearance;
How to resolve?
Topic:
UI Frameworks
SubTopic:
UIKit
I'm scanning for peripherals, and keep references to multiple CBUUIDs - one for each peripheral.
I then start a connection to the peripheral.
I never get a callback to say the connection succeeded, failed, or disconnected.
I have a Mini-Moreph Bluetooth sniffer. The sniffer shows that the iPhone never tried to connect to any of the peripherals.
The iPhone HCI logs show that a create connection request was sent, but a cancel connection request was sent 0.018 seconds later. No feedback was given to my application through CoreBluetooth.
I've filed this through Feedback Assistant, but expect nothing will come of the report.
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
Topic:
App Store Distribution & Marketing
SubTopic:
General
Tags:
App Store
App Store Connect
Testing
Device Management
depuis j'ai mon iPhone 11 il ne fais que redeemer après la mise a jour de iOS 26 quand il chauffe ou pas il redémarre
meme si je ne fais rien il redémarre
Hey,
I successfully set my app to use alarm kit, alarm is showing up and everything, but I noticed that the sound I created (mp3 files, less than 30 sec each) only plays once, does not repeat itself. Is that intended?
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
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.`
Topic:
App Store Distribution & Marketing
SubTopic:
General
My application is from a bank that provides payment passes, and when I try to retrieve passes already enrolled in the wallet, it always returns empty. Is there something I need to configure for it to work? This is what I've tried, and it hasn't worked:
let pkPassLibrary = PKPassLibrary()
let paymentPasses =
pkPassLibrary.passes(of:.payment)
let pkPassLibrary = PKPassLibrary()
let paymentPasses: [PKSecureElementPass]=pkPassLibrary
.passes(of: .secureElement)
.compactMap { $0 as? PKSecureElementPass }
Topic:
Code Signing
SubTopic:
Entitlements
Subject: iOS Fails to Fetch AASA File for Internationalized Domain Names (IDN) in Unicode or Punycode Format
Dear Apple Developer Relations Team And Community Members,
We are reporting a critical bug in the iOS Associated Domains feature that prevents Universal Links from working for apps using Internationalized Domain Names (IDN).
Problem Description:
The iOS operating system does not attempt to download the apple-app-site-association (AASA) file for domains containing non-ASCII characters (e.g., diacritics, Cyrillic).
This failure occurs regardless of whether the domain is specified in the app's entitlements in its human-readable Unicode format (e.g., montréal.ca) or its encoded Punycode format (e.g., xn--montral-fya.ca, xn--e1afka0abm4b.xn--p1ai).
Without fetching and validating this file, Universal Links are not activated, and the system fails to establish a connection between the website and our app.
Steps to Reproduce:
Create an app with the Associated Domains entitlement enabled.
Add an IDN to the entitlement. We tested both formats:
Format A (Unicode): applinks://montréal.ca
Format B (Punycode): applinks://xn--montral-fya.ca
Host a valid AASA file on our server at the correct, accessible well-known URLs for both domain representations:
For montréal.ca: https://montréal.ca/.well-known/apple-app-site-association and https://xn--montral-fya.ca/.well-known/apple-app-site-association
Install the app on a device running the latest iOS version.
Monitor network traffic using a tool like Charles Proxy.
Observed Result:
No HTTP GET request is made to any of the AASA URLs for the domains montréal.ca (in either Unicode or Punycode format) upon app installation. The system does not initiate the domain validation process. In contrast, for a standard ASCII domain (e.g., applinks://example.com), the AASA fetch is triggered immediately and is observed in the network log.
Expected Result:
iOS should correctly resolve the Internationalized Domain Name (whether specified in Unicode or Punycode format in the entitlement) and perform an HTTP GET request to fetch the AASA file from the /.well-known path, identical to its behavior for ASCII domains.
Evidence & Configuration:
Our server is configured correctly: SSL certificates are valid, the AASA file is served with the correct application/json MIME type, and is directly accessible via a browser or curl.
The AASA file's syntax has been validated and is correct.
The issue is reproducible on the latest versions of iOS.
Impact:
This bug blocks a core platform feature for millions of users in regions that use non-Latin scripts (e.g., France, Russia, China, Arab states). It makes it impossible to use Universal Links with our primary domains, severely degrading the user experience and forcing us to seek suboptimal workarounds like registering separate ASCII domains.
Request:
We kindly request that you investigate and log this issue as a bug in iOS and forward it to the appropriate engineering team for a fix in an upcoming update. We are prepared to provide any additional information, demo projects, or server access to assist in diagnostics.
Thank you for your attention to this serious matter.
Hi,
I am building an iOS app that uses FamilyControls / ManagedSettings to restrict apps.
Flow of my app:
In my main app, the user chooses which apps to restrict using FamilyActivityPicker (for example, they select Instagram).
I save the selection in an App Group.
I then use ManagedSettingsStore in the main app to add those app tokens into store.shield.applications, so a Screen Time shield appears when the user opens Instagram.
In my ShieldConfigurationExtension, I show a shield UI with a primary button called “Access App”.
In my ShieldActionExtension, when the user taps “Access App”, I want to immediately hide the shield and allow Instagram.
To hide the shield, I am using this code in my ShieldActionExtension:
final class ShieldActionExtension: ShieldActionDelegate {
// ...
override func handle(
action: ShieldAction,
for application: ApplicationToken,
completionHandler: @escaping (ShieldActionResponse) -> Void
) {
switch action {
case .primaryButtonPressed:
handlePrimaryButton(for: application, completionHandler: completionHandler)
case .secondaryButtonPressed:
completionHandler(.close)
@unknown default:
completionHandler(.defer)
}
}
private func handlePrimaryButton(
for application: ApplicationToken,
completionHandler: @escaping (ShieldActionResponse) -> Void
) {
// (I update some app-group state here, lives, history, etc.)
// This is the important part: I try to unshield the app
let store = ManagedSettingsStore()
var apps = store.shield.applications ?? Set<ApplicationToken>()
apps.remove(application)
store.shield.applications = apps
// I then tell the system to re-evaluate
completionHandler(.defer)
}
}
(When testing another approach, I also tried completionHandler(.close) after removing the app from the shield applications.)
Behavior I see:
Local / Xcode debug build (installed by cable):
Open Instagram → Slofy shield appears.
Tap “Access App” → the above code runs.
Shield disappears immediately and Instagram is usable. ✅
TestFlight build:
Open Instagram → Slofy shield appears.
Tap “Access App” → the above code runs, and I see in logs:
Removed app from shield set (apps now: 0)
But the shield does not hide. It stays on the screen. ❌
Only if I then open my main app (Slofy) and close it again, and then return to Instagram, the shield disappears and Instagram is unlocked.
So the same code works as expected in local debug builds, but in TestFlight builds the Screen Time shield does not refresh / disappear immediately after I remove the app from store.shield.applications inside the ShieldActionExtension.
My questions:
Is it supported to unshield an app directly from inside a ShieldActionExtension (by removing it from ManagedSettingsStore().shield.applications) and expect the shield to disappear immediately?
Is there any difference in how ManagedSettingsStore changes are applied between debug and TestFlight / release builds for Screen Time shields?
Is the main app required to be in the foreground for the shield to update, or is there a recommended pattern to make the shield hide right after the user taps the primary button in the shield?
I would like the behavior to be:
User opens restricted app → shield shows → taps “Access App” → shield hides immediately and the app becomes usable, without needing to open the main app.
Any guidance on the correct way to implement this with Screen Time extensions would be greatly appreciated.
Thank you.
Topic:
Accessibility & Inclusion
SubTopic:
General
I am experiencing a persistent issue with my CarPlay application where images rendered within the CarPlay Template interface disappear after the application has been used for an extended period, typically during prolonged navigation.
Images used directly within the CarPlay Template framework disappear. In the attached image showing the issue (IMG_1022.PNG), you can see that the icons for 'parking', 'gasstation', 'conveniencestore', and 'favoritespot' are missing. The side bar icons (car, battery, etc.) remain visible, and the text labels are present, but the Template-specific images/icons vanish.
Problem Description
Images displayed on a custom UIViewController remain visible. Some of our screens integrate a UIViewController (e.g., for map display), and any images rendered on that view controller (not the template itself) continue to display correctly without issue.
Example Images
IMG_1021.PNG (Normal/Correct Display): This image shows the SearchMenu screen with all icons displayed correctly next to their respective labels ('word', 'home', 'route', 'history', 'parking', 'gasstation', 'conveniencestore', 'favoritespot').
IMG_1022.PNG (Problem State): This image shows the same screen after prolonged use, where the icons next to 'parking', 'gasstation', 'conveniencestore', and 'favoritespot' have disappeared, leaving only the text labels.
Question
Has anyone encountered a similar issue? This seems to be a rendering or resource management problem specific to images within the CarPlay Template components when the application runs for an extended duration.
I paid for the developer account subscription on November 9, and as of now, the status is still pending.
I’ve already contacted the support center for help more than three days ago, but I haven’t received any reply or even an acknowledgment email.
How do they even operate? The delay is completely unreasonable.
Has anyone else experienced the same thing?
Topic:
Accessibility & Inclusion
SubTopic:
General
We are seeing this crash across several different iPad models, all of them running iPadOS 26.1.
The crash did not occur before, and it started appearing consistently over the past month.
This suggests that the issue may be related to changes introduced in recent iPadOS 26.1 builds.
Crash Log:
0 CoreFoundation 0xc5994 (缺少 UUID b4a0233bf37d3ef6a977e4f36199c5a4)
1 libobjc.A.dylib 0x31814 objc_exception_throw
2 Foundation 0x9465a4 (缺少 UUID 218da4dc727a3341b59e8fdb39a2d7c4)
3 Foundation 0x9469c8 (缺少 UUID 218da4dc727a3341b59e8fdb39a2d7c4)
4 Foundation 0x9468e0 (缺少 UUID 218da4dc727a3341b59e8fdb39a2d7c4)
5 PencilKit 0x100894 -[PKTextEffectsWindowObserver dealloc]
6 UIKitCore 0x22b28 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
7 UIKitCore 0x19918b8 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
8 PencilKit 0xe8448 -[PKTextInputInteraction willMoveToView:]
9 UIKitCore 0x22b1c (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
10 UIKitCore 0x19918b8 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
11 UIKitCore 0x171e094 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
12 UIKitCore 0xc896a8 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
13 UIKitCore 0xc89d70 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
14 UIKitCore 0xc89c10 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
15 CoreFoundation 0x14f78 (缺少 UUID b4a0233bf37d3ef6a977e4f36199c5a4)
16 CoreFoundation 0x17fc2c (缺少 UUID b4a0233bf37d3ef6a977e4f36199c5a4)
17 UIKitCore 0xc89a44 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
18 UIKitCore 0xc8a53c (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
19 UIKitCore 0xc8a638 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
20 UIKitCore 0xb9701c (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
21 UIKitCore 0xb96cd0 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
22 UIKitCore 0xba0720 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
23 UIKitCore 0xb9a608 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
24 UIKitCore 0xca4fec (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
25 UIKitCore 0x90878 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
26 UIKitCore 0x907b0 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
27 libdispatch.dylib 0x1adc _dispatch_call_block_and_release
28 libdispatch.dylib 0x1b7ec _dispatch_client_callout
29 libdispatch.dylib 0x38b24 _dispatch_main_queue_drain.cold.5
30 libdispatch.dylib 0x10ec8 _dispatch_main_queue_drain
31 libdispatch.dylib 0x10e04 _dispatch_main_queue_callback_4CF
32 CoreFoundation 0x6a2c8 (缺少 UUID b4a0233bf37d3ef6a977e4f36199c5a4)
33 CoreFoundation 0x1db3c (缺少 UUID b4a0233bf37d3ef6a977e4f36199c5a4)
34 CoreFoundation 0x1ca6c (缺少 UUID b4a0233bf37d3ef6a977e4f36199c5a4)
35 GraphicsServices 0x1498 GSEventRunModal
36 UIKitCore 0x9dba4 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
37 UIKitCore 0x46a78 (缺少 UUID a0e1cefbfd0136f9b82351b092e4dbc6)
38 ---------- 0xcd20 main + 35 (main.m:35)
39 ??? 0x18a026e28 (缺少)
crash_stacktrace.txt
I filled in everything, but when I try to complete the purchase, it shows an error saying “Unknown Error.”
What could be the issue? Can you please guide me?
Topic:
Developer Tools & Services
SubTopic:
Apple Developer Program
I'm using Apple's MDM protocol InstalledApplicationListCommand to get information about installed apps.
From iOS/iPadOS 26, the app information obtained by InstalledApplicationListCommand includes information on all apps including system apps (apps that come standard with iOS/iPadOS).
https://developer.apple.com/documentation/devicemanagement/installed-application-list-command
I want iOS/iPadOS26 to get the same information as the app information I get from the previous iOS/iPadOS, and I want to exclude system apps from the app information I get with the InstalledApplicationListCommand.
As a way to exclude system apps, you can use the app ID
I'm thinking of a way to exclude anything that starts with "com.apple" (the Identifier key value of the InstalledApplicationListResponse.InstalledApplicationListItem object).
As a way to exclude system apps, please tell us whether the above method is appropriate and whether there will be any problems in the future.
Topic:
Business & Education
SubTopic:
Device Management
When i publish an internal Testflight , the app is showen in the testflight ready to Install, but if i press install , i ll get an error , can not find application .
the bundle identifyer is the same. No missing contracts to sign.
Topic:
App Store Distribution & Marketing
SubTopic:
TestFlight
We have encountered a consistent problem with OTP (One Time Password) autofill on iOS versions 26.0.1 through 26.3. The issue pertains to apps implementing OTP input using multiple UITextFields (often 6 or 7 separate text boxes for each digit).
Problem Details:
When tapping the OTP autofill suggestion from Messages or supported third-party apps, iOS autofill pastes the entire OTP string into just one UITextField (commonly the second or focused field) rather than distributing digits across the individual text fields.
The delegated UITextField methods such as textField:shouldChangeCharactersInRange:replacementString: receive an entire OTP string at once, but the usual event handlers like UIControlEventEditingChanged do not always trigger, breaking existing logic relying on those.
This results in the OTP input UI showing incorrect or partial OTP, confusing users and forcing manual re-entry.
Many popular apps employing multi-field OTP input UIs face similar autofill malfunctions on iOS 26.x, impacting user experience negatively.
Setting textContentType = .oneTimeCode on the first text field alone is insufficient to restore the intended autofill behavior on iOS 26.x.
This represents a regression or functional deficiency compared to iOS 15-18 autofill handling patterns, which worked reliably for these multi-field OTP UIs.|
Expected Behavior:
OTP autofill should either automatically split the filled code into each UITextField or trigger consistent delegate/callback events to enable developers to replicate this behavior manually.
textDidChange or equivalent events should fire on autofill updates to reflect text changes correctly in multi-field OTP input.
Apple’s OTP autofill system should transparently support or provide clear guidelines for handling multi-field OTP input on iOS 26+.
What We’ve Tried:
Setting .oneTimeCode content type on only the first UITextField.
Handling OTP autofill in delegate methods including shouldChangeCharactersInRange.
Manual distribution and custom logic triggered by textDidChange and other callbacks.
Confirming all relevant system autofill settings are enabled.
Testing on multiple devices and iOS versions (26.0.1 through 26.3).
Note: its happen for may apps which have text field with 6 box otp fill
Issue Summary:
On iOS 26.0.1 to 26.3, apps using multiple UITextFields for OTP input face a critical issue where the system autofill pastes the entire OTP string into a single text field, usually the focused one, rather than splitting digits across fields. Delegate events like textDidChange: do not trigger consistently on autofill, breaking existing input handling logic.
Expected Behavior:
OTP autofill should distribute each digit correctly across all OTP UITextFields.
Delegate or control events should fire on autofill to enable manual handling.
(BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
if (string.length > 1) {
// Autofill detected - distribute OTP manually
for (int i = 0; i < string.length && i < self.arrayOTPText.count; i++) {
UITextField *field = self.arrayOTPText[i];
field.text = [NSString stringWithFormat:@"%c", [string characterAtIndex:i]];
}
UITextField *lastField = self.arrayOTPText[string.length - 1];
[lastField becomeFirstResponder];
return NO;
}
// Handle normal single character or deletion input here
return YES;
}
//
// Setup UITextFields - set .oneTimeCode on first field only
for (int i = 0; i < self.arrayOTPText.count; i++) {
UITextField *field = self.arrayOTPText[i];
field.delegate = self;
if (@available(iOS 12.0, *)) {
field.textContentType = (i == 0) ? UITextContentTypeOneTimeCode : UITextContentTypeNone;
}
}
What We’ve Tried:
Setting textContentType properly.
Handling OTP distribution in delegate method.
Verifying settings and keyboard use.
Testing on multiple iOS 26.x versions.
Impact:
Major usability degradation during OTP entry.
Forces fragile workarounds.
Inconsistent autofill reduces user confidence.
Request:
Request Apple fix OTP autofill to natively support multi-field UITextField OTP input or provide enhanced delegate callbacks for consistent behavior.
Did any one face this issue in recent time with iOS 26.0.1 to 26.3 beta version
Topic:
App & System Services
SubTopic:
Notifications
Tags:
Foundation
Autofill
SMS and Call Reporting