In iOS 26, the mini keyboard bar does not consistently appear when typing with a hardware keyboard. This behavior differs from iOS 18, where the bar was always visible. See screenshots:
                    
                  
                Posts under iPadOS tag
            
              
                164 Posts
              
            
            
              
                
              
            
          
          
  
    
    Selecting any option will automatically load the page
  
  
  
  
    
  
  
              Post
Replies
Boosts
Views
Activity
                    
                      On iPads after updating to iPadOS 16.4, Safari often "looses" the session cookie provided by PlayFramework: When the browser requests assets (js scripts) or when additional data is fetched by JavaScript, the session cookie is not included in the request.
These secondary requests will redirect through our IAM because no session cookie is present. The IAM redirects back to the original domain with a payload so that the login session can be resumed. A new Set-Cookie header is sent in the response with the new session cookie.
This causes the framework to issue a new CSRF token (that is part of the session cookie) which is different from the old one that was already rendered into a hidden form input. The browser stores this new token and includes it when it POSTs the form. The token in the body of the request is now different from the one in the cookies, causing the CSRF check to fail.
We have tried different devices (Android, Windows, MacBook, and iPads) on different versions. The problem only occurs with Safari on iPad/MacBook running version 16.4, 16.4.1, or 16.5 beta. The problem cannot be reproduced using Chrome on iPad. Furthermore, the problem does not occur with private browsing in Safari.
Some things we ruled out:
Same behaviour on devices managed by MDM and on open devices.
PlayFramework version is now updated to the latest 2.8 version.
Using a separate cookie for the CSRF token (instead of the play session cookie) does not make a difference either.
Modifying the Cache-Control header to cache responses more aggressively or not at all does not help.
Has anyone also experienced this or similar problems?
                    
                  
                
                    
                      With the latest iPadOS 26 changes, the traditional multitasking experience using Slide Over and Split View has been removed in favor of Stage Manager. While Stage Manager is a great option for some, the old multitasking UI was more intuitive, stable, and ideal for quick productivity. Please consider restoring the classic multitasking gestures as an optional feature or toggle alongside Stage Manager. Many users like myself rely on the traditional layout for studying, work, and multitasking efficiency.
                    
                  
                
                    
                      With iPadOS26, if I create a UITabBar, and use that to switch between views, the selected state never updates. I created this simple UIViewController to demonstrate the issue:
class SimpleTabBarController: UIViewController, UITabBarDelegate {
    let tabBar = UITabBar()
    let redItem = UITabBarItem(title: "Red", image: nil, tag: 0)
    let blueItem = UITabBarItem(title: "Blue", image: nil, tag: 1)
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        tabBar.items = [redItem, blueItem]
        tabBar.selectedItem = redItem
        tabBar.delegate = self
        tabBar.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(tabBar)
        NSLayoutConstraint.activate([
            tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
        ])
        updateBackground(for: redItem)
    }
    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        updateBackground(for: item)
    }
    private func updateBackground(for item: UITabBarItem) {
        switch item.tag {
        case 0: view.backgroundColor = .systemRed
        case 1: view.backgroundColor = .systemBlue
        default: view.backgroundColor = .white
        }
    }
}
The tabBar didSelect item method is called, and the background color gets updated as expected, but the selected state of the UITabBar stays the same.
I files a feedback for a related issue: FB17841678
                    
                  
                
                    
                      I'm encountering an issue with front camera video recordings via browser (Safari/Chrome) on devices running iOS/iPadOS 18 and above:
On iPad, the recorded video appears upside down.
On iPhone, the recorded video is rotated 90 degrees.
The rear camera functions correctly without orientation issues.
This problem seems specific to browser-based recordings, as the native Camera app records videos with the correct orientation.
Has anyone else experienced this behavior? Is there a known workaround or fix?
The preview while recording is fine, the recorded video is oriented incorrectly.
                    
                  
                
                    
                      There are significant crash reports coming from iOS 18 users regarding AVKit framework that starts from this line [AVPlayerController _observeValueForKeyPath:oldValue:newValue:] which seems to be coming from iOS internal SDK. There are 2 kinds of crash we found:
UI modification on background thread
From the stack trace it seems like when AVPictureInPictureController is being deallocated and its view is being removed from superview somehow the code is being executed in background thread because there is this line there _AssertAutoLayoutOnAllowedThreadsOnly highlighted before the crash.
But I’ve checked our code that plays around AVPictureInPictureController, in the locations where we would deallocate the object it will always be called on main thread which are insideviewDidLoad and deinit inside UIViewController class. From the log, it seems like the crash happened when user try to open another content when PIP player is active resulting in the current PIP instance will be replaced with a new one. My suspect is the observation logic inside AVPlayerController could be the hint to this issue, probably something broken over there since this issue happened across our app versions on iOS 18 users only.
Unfortunately, I was unable to reproduce this issue yet but one of my colleagues reproduced it once but haven’t been able to do it again since. The reports keep raising each day up to 1.3k events in the last 30 days now.
Over release object
This one has lower reports than the first one but I decided to include it since it might have relevant information regarding the first crash since the starting stack trace is similar. The crash timing seems to be similar to the first one, where we deallocate existing AVPictureInPictureController and later replace it with a new one and also found only in iOS 18 users which also refers to [AVPlayerController _observeValueForKeyPath:oldValue:newValue:]. I also was unable to reproduce this issue so far.
Oh, and both of the issues happened on both iPhone and iPad.
We’d appreciate any advice on what we can do to avoid this in the future and probably any hint on why it could happened.
I have reported this issue with bug number: FB15620734
I also attached one sample crash report for each of the crashes here.
non ui thread access.crash
over release.crash
                    
                  
                
                    
                      We are using openURL:options:completionHandler: to open a tel:// number in the dialer to place a call. This works on iPhones and WiFi-only iPads (tested with a iPad Mini 6th Gen), but it is failing to open on an iPad 8th Gen (WiFi + Cellular) running iPadOS 18.5 being used by a customer. Prior to updating the iPad to iPadOS 18, the call worked on iPadOS 15.2 and opened the call in FaceTime as expected. Despite not opening the dialer in iPadOS 18, the completionHandler returns the success parameter as true. canOpenUrl also returns true. We created a small test application that reproduces the issue using the code snippet below in a new application, with the tel schema added to the info.plist Queried URL Schemes. We are currently using Xcode 16.3.
Test Steps:
Create a new blank application and replace ContentView.swift with the code snippet below
Run the test app on a physical iPad 8th Gen (WiFi + Cellular)
Tap the "place a test call" button
Expected Results:
The user is prompted to call the number and is taken to FaceTime to attempt the call. The user may then receive an alert telling them an iPhone must be paired if not already. Alternatively: return success = false in the completionHandler.
Actual Results:
No action occurs that is visible to the user, and the completionHandler returns success = true.
Separately, we should be able to have some method of checking if the device can actually complete a call, i.e. if an iPhone is paired, so that we can correctly show or hide a phone icon in the app based on if the user can place a call. canOpenUrl returns true even if there is not a device paired and the call cannot actually be placed, and there doesn't seem to be a proper method for making that check.
Code Snippet:
import SwiftUI
struct ContentView: View {
    @State private var showAlert = false
    
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
            Button("Place a test call") {
                if let url = URL(string: "tel://5555554567") {
                    UIApplication.shared.open(url) { success in
                        if success {
                            print("Call initiated successfully.")
                        } else {
                            showAlert = true
                        }
                    }
                }
            }
        }
        .padding()
        .alert("Call Failed", isPresented: $showAlert) {
            Button("OK") { showAlert = false }
        } message: {
            Text("The call could not be initiated.")
        }
            
    }
}
#Preview {
    ContentView()
}
                    
                  
                
                    
                      When I create a tab group for the sidebar on iPad, the title and disclosure triangle act like a single control. Every time I tap the section title, the disclosure triangle for that section activates and hides or exposes that section's children and actions.
I want the section title to behave like Photos, where tapping a section title just displays its view controller, and the disclosure triangle is a separate control that must be tapped to hide and show children and actions.
I did not see any delegate methods that would let me control this behavior. Is this supported?
                    
                  
                
                    
                      Hello,
I've been trying to figure this thing for a while now, but I've not able to find any resolution. I've a UIAlertController object presented as UIAlertControllerStyleActionSheet.
It's fairly straightforward code:
UIAlertController *listSheet = [UIAlertController alertControllerWithTitle:NSLocalizedStringFromTableInBundle(@"Please Select a Report", nil, [LDKLocalizationTool currentBundle], @"Chart report selector") message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    
    [self.charts enumerateObjectsUsingBlock:^(ChartDefinition *chart, NSUInteger idx, BOOL *stop) {
        UIAlertAction *anAction = [UIAlertAction actionWithTitle:chart.graphLabel style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            // handler logic
        }];
        
        [listSheet addAction:anAction];
    }];
    // Set the anchor point for the AlertController
    UIPopoverPresentationController *popoverPresenter = [listSheet popoverPresentationController];
    if (popoverPresenter) {
        popoverPresenter.sourceView = sender;
        popoverPresenter.sourceRect = [sender bounds];
    }
    
    // Display the AlertController
    [self presentViewController:listSheet animated:YES completion:nil];
However, when presented, the action sheet shows up as shown in the attached screenshot.
There are no autoLayout constraints or anything like that to cause issues with layout.
I'm not sure why it's causing this issue. Any suggestions or help is much appreciated!
iPadOS version: 18.4
Xcode version: 16.3
M4 Mac with macOS 15.5
                    
                  
                
                    
                      I have written an App which extracts data, over WiFi, from an instrument that creates its own WiFi Hotspot.
The instrument provides no internet connection. The iPad version of this App is connects fine and is assigned an IP address by DHCP server running on a MicroChip RN171 wifi module.
iOS assigns an obscure IP address on a completely different subnet. I understand this is iOS' way of  "Complaining" that is wasn't assigned an IP address.
Consequently in the case of the iPhone I am forced to manually assign an IP address for the iPhone, the mask and the gateway. Only then is the connection successful.
Anyone know why the iPhone won't talk DHCP to a WiFi module not connected to the internet? Are there perhaps some parameters that I need to adjust on either the iPhone or WiFi module?
                    
                  
                
                    
                      We are experiencing a lot of problems deploying an enterprise app for in-house use since late January. All our iPads are managed by an MDM solution. It can take 10 or more attempts to successfully deploy the app. The deployment usually fails with the message "ASDErrorDomain error 854" among other messages. The company providing the MDM solution has no idea what causes this message or what it means. I suspect the error message is not generated by the MDM solutiion but rather gets passed through from iOS. After many attempts the installation may succeed suddenly, though, and the apps works as expected, but this may take weeks.
I have not done any changes to my development system. 'I am running XCode 15.3 with SDK version 17.4, the iPads are on iOS 18.3
                    
                  
                
              
                
              
              
                
                Topic:
                  
	
		Business & Education
  	
                
                
                SubTopic:
                  
                    
	
		Device Management
		
  	
                  
                
              
              
                Tags:
              
              
  
  
    
      
      
      
        
          
            Enterprise
          
        
        
      
      
    
      
      
      
        
          
            iPadOS
          
        
        
      
      
    
      
      
      
        
          
            Business and Enterprise
          
        
        
      
      
    
  
  
              
                
                
              
            
          
                    
                      Our app needs to read server settings that are configured in the app's settings. In iPadOS 17.7.7 specifically (iPadOS 17.7.6, iPadOS 18.5, and other versions works fine) one can't retrieve any setting from the settings bundle using:
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"setting_hostname"] != nil)
        serverHostname = [[NSUserDefaults standardUserDefaults] objectForKey:@"setting_hostname"];
Also, when writing a custom value in NSUserDefaults like:
    [[NSUserDefaults standardUserDefaults] setObject:@"Test" forKey:@"test"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    NSString* test = [[NSUserDefaults standardUserDefaults] objectForKey:@"test"];
    NSLog(@"%@", test);
Shows an error in the console:
Couldn't write values for keys (     test ) in CFPrefsPlistSource<0x3017ecc60> (Domain: <redacted_bundle_id>, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No): setting these preferences requires user-preference-write or file-write-data sandbox access
When closing the app and reopening it, and then reading the value of [[NSUserDefaults standardUserDefaults] objectForKey:@"test"]; returns null
                    
                  
                
                    
                      PDFKit PDFPage.characterBounds(at: Int) is returning incorrect coordinates with iOS 18 beta 4 and later / Xcode 16 beta 4.
It worked fine in iOS 17 and earlier (after showing the same issue during the early iOS 17 beta cycle)
It breaks critical functionality that my app relies on.
I have filed feedback (FB14843671).
So far no changes in the latest betas. iOS release date is approaching fast!
Anybody having the same issue? Any workaround available?
                    
                  
                
                    
                      I'm developing an iPadOS 18+ application that uses a UITabBarController, styled as a sidebar, to serve as the primary navigation interface. This setup includes 20 different tabs, each representing a distinct section of the app.
For the user experience, each tab needs to present a master-detail interface, implemented using a UISplitViewController. The goal is to allow users to navigate between tabs via the sidebar, and within each tab, access related content through the split view's list-detail pattern.
The Problem:
Currently, my implementation involves instantiating a separate UISplitViewController for each tab, resulting in 20 unique split view instances embedded inside the UITabBarController. While this works functionally, it leads to significant memory usage, especially after the user opens each tab at least once. The accumulation of all these instantiated view controllers in memory eventually causes performance degradation or even memory warnings/crashes on lower-end iPads.
The Question:
What is the best approach to implement this type of architecture without running into memory management issues?
Specifically:
Is there a way to reuse or lazily load the UISplitViewController instances only when needed?
Can we unload or release split view controllers that haven't been used for a while to reduce memory pressure?
Would a custom container controller be more appropriate than using UITabBarController in this case?
Are there iPadOS 18+ best practices or newer APIs that support this kind of complex multi-tab, multi-split-view structure efficiently?
Any advice on how to optimize memory usage while preserving the sidebar navigation and split view layout would be highly appreciated.
                    
                  
                
                    
                      I have a SPFx React application where I am printing the HTML page content using the javascript default window.print() functionality. Once I save the page as pdf from the print preview window and open it using Adobe Acrobat, the links(for eg -> Google) within the content are not clickable and appearing as plain text.
I have tried to print random pages post searching with any keywords in Google and saved the files as pdfs, but, unfortunately, the links are still not clickable there as well.
To check whether it is an Adobe Acrobat issue, I have performed the same print functionality from Android devices and shared the pdf file across the iOS devices and in that case, when opened using Adobe Acrobat, the links are appearing to be clickable.
I am wondering whether it is something related to how the default print functionality works for iPadOS and iOS devices. Any insights on this would be really helpful. Thanks!!!
Note: The links are clickable for MacOS as well as for Windows.
#ios #ipados #javascript #spfx #react
                    
                  
                
                    
                      DESCRIPTION OF PROBLEM
When using SwiftUI’s TextField or TextEditor on iPadOS, a persistent gray or default system material bar appears at the bottom of the screen. This gray bar is not present in Apple’s native apps (such as Notes, Mail, Messages) or in third-party apps like ChatGPT and Beeper
STEPS TO REPRODUCE
Create a TextField or TextEditor. Run the code, click on it, without software keyboard enabled.
                    
                  
                
                    
                      Our app is an enterprise app via MDM.
We are experiencing an issue in iPadOS 18.4 when loading an internal HTTPS server via WKWebView in a hybrid iOS app.
Our server uses a self-signed certificate but lacks the digitalSignature usage in its Key Usage extension. (Currently we have no chance to change the server's certificate)
We override webView:didReceiveAuthenticationChallenge:completionHandler: to trust the certificate:
              completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
This "completionHandler" works in previous 18.3.2 , but not work in 18.4. May I know is there any changes in 18.4 for the https certification? Why this delegate not work? What we can do to ignore this ssl error and get connection?
Thanks in advance, look forward for your reply.
                    
                  
                
                    
                      In an iPadOS SwiftUI app supporting multiple scenes, each Scene responds to a particular way in which the app was launched. If app was launched by tapping an associated file or a deep link (custom URL), then, the URLHandlerScene is invoked. If app was launched by QuickAction (long tap on the app icon), then another Scene is invoked etc. Each Scene has a purpose and responds to a particular launch.
But after defining handlesExternlEvents(matching:) scene modifier, the scene was not getting launched when user taps the associated file or the app's Deeplinks was invoked.
@main
struct IOSSwiftUIScenesApp: App {
    
    var body: some Scene {
        DefaultScene()
        
        URLHandlerScene()
            .handlesExternalEvents(matching: ["file://"]) // Launched by an associated file
            .handlesExternalEvents(matching: ["Companion://"]) // Launched by Deeplink.
        
        // Other scenes
    }
}
struct URLHandlerScene: Scene {
    @State private var inputURL: URL // Store the incoming URL
    
    init() {
        self.inputURL = URL(string: "Temp://")!
    }
    
    var body: some Scene {
        WindowGroup {
            URLhandlerView(inputURL: $inputURL)
                .onOpenURL(perform: { (fileURL: URL) in
                    log(String(format: "URLhandlerView().onOpenURL | Thread.current = %@", String(describing: Thread.current)))
                    log("fileURL = " + String(describing: fileURL))
                    
                    inputURL = fileURL
                })
        }
    }
}
As shown above, I've attached handlesExternalEvents(matching:) modifier with "file://" for the associate file and "Companion" is my custom URL scheme. As per the scene matching rules documented here, my URLHandlerScene should get launched, but every time I launch the app using associated file or 'open' a Deeplink, the DefaultScene is always launched.
What is missing here? Can someone please help?
                    
                  
                
                    
                      When presenting a SwiftUI sheet containing ObservableObject's injected using environmentObject(_) modifier, the objects are unexpectedly retained after the sheet is dismissed if a TextField within the sheet gains focus or is edited.
This issue occurs on iOS and iPadOS (on macOS the objects are always released), observable both in the simulator and on physical devices, and happens even when the view does not explicitly reference these environment objects, and the TextField's content isn't bound to them.
Expected Results:
When the sheet is dismissed, all environment objects passed to the sheet’s content view should be released (deinitialized), regardless of whether the TextField was focused or edited.
Actual Results:
If the TextField was focused or edited, environment objects (ObservableA and ObservableB) are retained after the sheet is dismissed. They are not deinitialized as expected, leading to unintended retention.
Interestingly, previously retained copies of these environment objects, if any, are released precisely at the moment the TextField becomes focused on subsequent presentations, indicating an inconsistent lifecycle behavior.
I have filed an issue FB17226970
Sample Code
Below is a sample code that consistently shows the issue on iOS 18.3+.
Steps to Reproduce:
Run the attached SwiftUI sample.
Tap the button labeled “Show Sheet” to present a sheet.
Tap on the TextField to focus or begin editing.
Dismiss the sheet by dragging it down or by other dismissal methods (e.g., tapping outside on iPadOS).
import SwiftUI
struct ContentView: View {
    @State private var showSheet: Bool = false
    
    var body: some View {
        VStack {
            Button("Show Sheet") {
                showSheet = true
            }
        }
        .sheet(isPresented: $showSheet) {
            SheetContentView()
                .environmentObject(ObservableA())
                .environmentObject(ObservableB())
        }
    }
}
struct SheetContentView: View {
    @State private var text: String = ""
    
    var body: some View {
        TextField("Select to retain observable objects", text: $text)
            .textFieldStyle(.roundedBorder)
    }
}
final class ObservableA: ObservableObject {
    init() {
        print(type(of: self), #function)
    }
    
    deinit {
        print(type(of: self), #function)
    }
}
final class ObservableB: ObservableObject {
    init() {
        print(type(of: self), #function)
    }
    
    deinit {
        print(type(of: self), #function)
    }
}
#Preview {
    ContentView()
}
                    
                  
                
                    
                      I'm working on a DriverKit driver. I have it running on macOS, including a very simple client app written in SwiftUI. Everything is working fine there. I've added iPadOS as a destination for the app as demonstrated in the WWDC video on DriverKit for iPadOS. The app builds and runs on my iPad, as expected (after a little work to conditionalize out my use of SystemExtensions.framework for installation on macOS). However, after installing and running the app on an iPad, the driver does not show up in Settings->General, nor in the app-specific settings pane triggered by the inclusion of a settings bundle in the app.
I've confirmed that the dext is indeed being included in the app bundle when built for iPadOS (in MyApp.app/SystemExtensions/com.me.MyApp.MyDriver.dext). I also can see in the build log that there's a validation step for the dext, and that seems to be succeeding.
I don't know why the app isn't being discovered -- or in any case surfaced to the user -- when the app is installed on the iPad. Has anyone faced this problem and solved it? Are there ways to troubleshoot installation/discovery of an embedded DriverKit extensions on iOS? Unlike on macOS, I don't really see any relevant console messages.