We are observing unexpected behavior in Apple Push Notification Service (APNS) delivery and would appreciate clarification and guidance. Below is a detailed
breakdown of the scenario and related questions.
Abbreviations:
APNP – Apple Push Notification Provider
APNS – Apple Push Notification Service
Scenario:
User1 is registered on iOS device1.
Flight Mode is enabled on iOS device1.
User2 initiates a call to User1 (Time t = 0 sec).
User2 cancels the outgoing call after 5 seconds (Time t = 5 sec).
Flight Mode is disabled on iOS device1 after 20 seconds (Time t = 25 sec).
Observation:
iOS device1 displays an incoming call notification (CallKit UI) after flight mode is turned off, despite the call being cancelled by User2.
This notification disappears automatically after approximately 8–10 seconds.
Logic Flow:
At time t = 0, our APNP sends a VoIP push (priority) to APNS for the incoming call.
Since device1 is in flight mode, APNS cannot deliver the push.
At t = 25 sec, after flight mode is turned off, APNS delivers the cached VoIP push to device1.
The app takes ~5 seconds to initialize (CSDK setup, SIP registration, etc.).
It eventually receives a SIP NOTIFY with state="full" and empty dialog info (indicating no active call).
Consequently, the CallKit incoming call is removed after ~8 seconds.
Questions:
→ We set the apns-expiration header to 0, expecting that the VoIP push would not be delivered if the device was unreachable when the push was sent. However, APNS still delivers the push 20–30 seconds later, once the device is back online.
Q. Why is the apns-expiration header not respected in this case?
→ Upon receiving the VoIP push, we require ~10–12 seconds to determine if a visible CallKit notification is still relevant (e.g., by completing SIP registration and checking for active dialogs).
Q. Is it acceptable, per Apple guidelines, to intentionally delay showing the CallKit UI (incoming call) for 10–15 seconds after receiving the VoIP push?
→ Apple documentation states that the priority VoIP push channel should be used only for notifying incoming calls, while regular (non-VoIP) pushes should be used for other updates, including call cancellations.
Q. What is the rationale behind discouraging the use of the priority VoIP push channel for call cancellation events? In some cases, immediate cancellation notification is as critical as the initial incoming call. Would Apple consider it acceptable to occasionally use the priority VoIP channel for rare call-cancellation scenarios without risking throttling or suspension?
→ In our implementation, we send an incoming call notification via the priority VoIP channel. Shortly after, we send a call cancellation notification on the regular push channel, marked with "content-available": 1. We expect this regular push to wake the app (triggering application:didReceiveRemoteNotification:fetchCompletionHandler:), but in practice the app never wakes, and our debug logs inside that delegate method never appear.
Q. Under what exact conditions does a "content-available": 1 regular push fail to wake the app when it follows a VoIP push? Are there additional requirements (e.g., background modes, rate limits, power optimizations) that could prevent the delegate from being called?
→ According to Apple documentation: “APNs stores only one notification per bundle ID. When multiple notifications are sent to the same device for the same bundle ID, APNs keeps only the latest one.” However, in our tests: If a device is offline when APNs receives both: (a) a priority VoIP push for an incoming call, (b) a regular push for call cancellation (same bundle ID), Upon the device reconnecting, APNs still delivers the earlier VoIP push, instead of discarding it and delivering only the most recent (cancellation) notification.
Q. Why doesn’t APNs replace the queued VoIP push with the newer regular push when both share the same bundle ID? Is this expected behavior due to channel type differences (VoIP vs. regular), or is there a way to ensure that the latest notification (even if regular) supersedes the earlier VoIP push?
We’d appreciate your input or recommendations on handling such delayed pushes and any best practices for VoIP push expiration handling and call UI timing.
Posts under iOS tag
200 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm running into a persistent problem with the iOS 18.5 simulator in Xcode 26 beta 2. I have built a very simple test app with a storyboard that includes only a toolbar added to the ViewController scene in the storyboard. The test app runs fine in iOS 26 simulators.When I try to run it in the iOS 18.5 simulator for iPhone Pro or iPad (16), it fails while unarchiving the storyboard (as far as I can tell) with this error message in the Xcode console:
*** Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named TtGC5UIKit17UICoreHostingViewVCS_21ToolbarVisualProvider8RootView because no class named TtGC5UIKit17UICoreHostingViewVCS_21ToolbarVisualProvider8RootView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)'
terminating due to uncaught exception of type NSException
CoreSimulator 1043 - Device: iPad (A16) (3E70E25F-8434-4541-960D-1B58EB4037F3) - Runtime: iOS 18.5 (22F77) - DeviceType: iPad (A16)
I'd love a simple workaround for this.
I have a couple of (older) UIKit-based Apps using UISplitViewController on the iPad to have a two-column layout. I'm trying to edit the App so it will shows the left column as sidebar with liquid glass effect, similar to the one in the "Settings" App of iPadOS 26. But this seems to be almost impossible to do right now.
"out of the box" the UISplitViewController already shows the left column somehow like a sidebar, with some margins to the sides, but missing the glass effect and with very little contrast to the background. If the left column contains a UITableViewController, I can try to get the glass effect this way within the UITableViewController:
tableView.backgroundColor = .clear
tableView.backgroundView = UIVisualEffectView(effect: UIGlassContainerEffect())
It is necessary to set the backgroundColor of the table view to the clear color because otherwise the default background color would completely cover the glass effect and so it's no longer visible.
It is also necessary to set the background of all UITableViewCells to clear.
If the window is in the foreground, this will now look very similar to the sidebar of the Settings App.
However if the window is in the back, the sidebar is now much darker than the one of the Settings App. Not that nice looking, but for now acceptable.
However whenever I navigate to another view controller in the side bar, all the clear backgrounds destroy the great look, because the transition to the new child controller overlaps with the old parent controller and you see both at the same time (because of the clear backgrounds).
What is the best way to solve these issues and get a sidebar looking like the one of the Settings App under all conditions?
Because .searchable does not allow for customizing buttons in the search bar, I've manually had to recreate the search bar as shown below. However, when removing one of the items in the search bar, the TextField does not resize correctly and effectively inserts padding on the leading edge. When the TextField is focused, it resizes and fills the entire space. If the "Compose" button was already hidden when the search bar is presented, it lays out correctly. How do I resize the TextField after removing the "Compose" button automatically?
Thanks, jjp
struct ContentView: View {
@State var isSearchBarVisible = false
@State var isComposingMessage = false
@State var searchText = ""
let items: [String] = ["hey", "there", "how", "are", "you"]
var searchItems: [String] {
items.filter { item in
item.lowercased().contains(searchText.lowercased())
}
}
var body: some View {
NavigationStack {
VStack {
List {
if !searchText.isEmpty {
ForEach(searchItems, id: \.self) { item in
Text(item)
}
} else {
ForEach(items, id: \.self) { item in
Text(item)
}
}
}
}
.toolbar {
if isSearchBarVisible {
ToolbarItem(placement: .principal) {
TextField("Search", text: $searchText)
.padding(8)
.background(Color.gray.opacity(0.2))
}
ToolbarItem(placement: .topBarTrailing) {
Button(action: {
isSearchBarVisible = false
},[![enter image description here][1]][1]
label: {
Text("Cancel")
})
}
if !isComposingMessage {
ToolbarItem(placement: .topBarTrailing) {
Button(action: {
isComposingMessage.toggle()
},
label: {
Text("Compose")
})
}
}
}
else {
ToolbarItem(placement: .topBarLeading) {
Button(action: {
isSearchBarVisible = true
},
label: {
Text("Search")
})
}
ToolbarItem(placement: .principal) {
Text("Title")
}
ToolbarItem(placement: .topBarTrailing) {
Button(action: {
isComposingMessage.toggle()
},
label: {
Text("Compose")
})
}
}
}
}
}
}
The Apple documentation for [UIViewController willMoveToParentViewController:] states,
Called just before the view controller is added or removed from a container view controller.
Hence, the view controller being popped should appear at the top of the navStack when willMoveToParentViewController: is called.
In iPadOS 16 and 17 the view controller being popped appears at the top of the navStack when willMoveToParentViewController: is called.
In iPadOS 18 the view controller being popped has already been (incorrectly) removed from the navStack. We confirmed this bug using iPadOS 18.2 as well as 18.0.
Our app relies upon the contents of the navStack within willMoveToParentViewController: to track the user's location within a folder hierarchy.
Our app works smoothly on iPadOS 16 and 17. Conversely, our customers running iPadOS 18 have lost client data and corrupted their data folders as a result of this bug! These customers are angry -- not surprisingly, some have asked for refunds and submitted negative app reviews.
Why doesn't willMoveToParentViewController: provide the correct navStack in iPadOS 18.2?
Hi, I have an iPhone 13 Pro Max running iOS 26.0 (beta).
After installing the update, I get a message stating that I need to update my Apple account settings. When I log in, it freezes and nothing can be done.
I also can't access the login and security settings, as it also freezes and won't progress.
Also, the option to install beta versions has disappeared. I don't know why? Could it be that since I have the latest beta, the option disappears until a new update?
Please help!
We are currently developing an enterprise iOS application and are in the process of implementing Data Leakage Protection (DLP) features. As part of this effort, we need to control the available actions and target applications presented within the UIActivityViewController.
Specifically, we would like to programmatically filter or restrict certain activities and destination apps shown in the share sheet based on user-specific permissions. These permissions will be dynamically evaluated and updated at runtime.
This type of functionality is supported by the Microsoft Intune SDK. However, our objective is to implement this behavior natively within our application without relying on any third-party libraries.
Could you please advise on the recommended approach or available APIs to achieve this level of control over the UIActivityViewController?
1.App build using xCode 26 beta 4 crashing on run time on iOS device with iOS < 26.0 but works fine on iOS 26 beta devices.
2. Works fine if build using xCode 16.2
Runtime Crash Dump
dyld[67519]: Symbol not found: _NSUserActivityTypeBrowsingWeb
Referenced from: /private/var/containers/Bundle/Application/2D4B24D6-CEA5-4682-B549-9CCB6A56BAB9/Foreground Camera.app/Foreground Camera.debug.dylib
Expected in: <050203DD-7488-307D-A999-E587314B041A> /System/Library/Frameworks/CoreServices.framework/CoreServices
Symbol not found: _NSUserActivityTypeBrowsingWeb
Referenced from: /private/var/containers/Bundle/Application/2D4B24D6-CEA5-4682-B549-9CCB6A56BAB9/Foreground Camera.app/Foreground Camera.debug.dylib
Expected in: <050203DD-7488-307D-A999-E587314B041A> /System/Library/Frameworks/CoreServices.framework/CoreServices
dyld config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/usr/lib/libLogRedirect.dylib:/usr/lib/libBacktraceRecording.dylib:/usr/lib/libMainThreadChecker.dylib:/usr/lib/libRPAC.dylib:/usr/lib/libViewDebuggerSupport.dylib:/System/Library/PrivateFrameworks/GPUToolsCapture.framework/GPUToolsCapture
Symbol not found: _NSUserActivityTypeBrowsingWeb
Referenced from: /private/var/containers/Bundle/Application/2D4B24D6-CEA5-4682-B549-9CCB6A56BAB9/Foreground Camera.app/Foreground Camera.debug.dylib
Expected in: <050203DD-7488-307D-A999-E587314B041A> /System/Library/Frameworks/CoreServices.framework/CoreServices
dyld config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/usr/lib/libLogRedirect.dylib:/usr/lib/libBacktraceRecording.dylib:/usr/lib/libMainThreadChecker.dylib:/usr/lib/libRPAC.dylib:/usr/lib/libViewDebuggerSupport.dylib:/System/Library/PrivateFrameworks/GPUToolsCapture.framework/GPUToolsCapture
Hi all,
I am hope someone could assist me with the below error if you ever ran into this during Tap-to-Pay functionality integration on iOS/iPadOS devices.
Pre-condition: I have received required entitlements for the Tap-to-Pay integration and created Sandbox test account to validate my development work. Used updated development profile with the new capabilities required for the Integration.
When i try to test my flow, i keep receiving this error, with multiple sandbox accounts in developer portal.
Error (refreshContext): proxy error handler [ Error Domain=NSCocoaErrorDomain Code=4099
"The connection to service named com.apple.merchantd.transaction
was invalidated: failed at lookup with error 159 - Sandbox restriction."
UserInfo={NSDebugDescription=The connection to service named
com.apple.merchantd.transaction was invalidated: failed at lookup
with error 159 - Sandbox restriction.} ]
I greatly appreciate if anyone faced this issue or any knowledge on how to address this error. Thanks in advance.
Best regards,
Govardhan.
In our project, we defined a CustomTabBar that inherits UITabBar, and we add some subviews and these subviews' frame is beyond UITabBar, see below picture(a beyond area button, this button is a subview of UITabBar, but frame is out of UITabBar's area):
and in order to let this button response to click action, we override the UITabBar's hitTest method, this works well below OS 26 with Xcode version below 26:
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let pointInCollectionView = self.beyondAreaButton.convert(point, from: self)
if self.beyondAreaButton.bounds.contains(pointInCollectionView) {
return self.beyondAreaButton.hitTest(pointInCollectionView, with: event)
}
return super.hitTest(point, with: event)
}
but when using Xcode26 build app on OS 26, I noticed the UITabBar is wrapped by a UIKit._UITabBarContainerView and UIKit._UITabBarContainerWrapperView, and it can not trigger the hitTest method.
since the hitTest is not triggered, so the button action is no chance to trigger too.
Any suggestions to solve this problem, thank you~
And I have file a feedback assistant: FB19252973
Dear Apple Technical Support Team,
We have encountered a potential issue related to transaction handling while using StoreKit v2, and would greatly appreciate your assistance in confirming the behavior or providing any relevant guidance.
Issue Description:
When calling Transaction.unfinished and listening to Transaction.updates on the client side, we noticed that some transactions—despite having already been processed and successfully completed with finish()—are being returned again upon the next app launch, which results in duplicate receipt uploads.
Current Handling Flow:
1. Upon app launch:
• Iterate over Transaction.unfinished to retrieve unfinished transactions;
• Simultaneously listen for transaction changes via Transaction.updates (e.g., renewals, refunds);
2. For each verified transaction, we immediately call await transaction.finish();
3. We then construct a transaction model, store it locally, and report it to our backend for receipt verification;
4. After the server successfully verifies the receipt, the client deletes the corresponding local record;
5. On every app launch, the client checks for any locally stored receipts that haven’t been uploaded, and re-uploads them if necessary.
Key Code Snippets:
private static func verifyReceipt(receiptResult: VerificationResult) -> Transaction? {
switch receiptResult {
case .unverified(_, _):
return nil
case .verified(let signedType):
return signedType
}
}
public static func handleUnfinishedTransactions(payConfig: YCStoreKitPayConfig, complete: ((YCStoreKitReceiptModel?) -> Void)?) {
Task.detached {
for await unfinishedResult in Transaction.unfinished {
let transaction = YCStoreKitV2Manager.verifyReceipt(receiptResult: unfinishedResult)
if let transaction {
await transaction.finish()
if transaction.revocationDate == nil {
let receipt = YCStoreKitV2Manager.createStoreKitReceiptModel(
transation: transaction,
jwsString: unfinishedResult.jwsRepresentation,
payConfig: payConfig,
isRenew: false
)
complete?(receipt)
}
}
}
}
}
private func observeTransactionUpdates() -> Task<Void, Never> {
return Task {
for await updateResult in Transaction.updates {
let transaction = YCStoreKitV2Manager.verifyReceipt(receiptResult: updateResult)
if let transaction {
await transaction.finish()
if transaction.revocationDate == nil {
let receipt = YCStoreKitV2Manager.createStoreKitReceiptModel(
transation: transaction,
jwsString: updateResult.jwsRepresentation,
payConfig: self.payConfig,
isRenew: false
)
self.callProgressChanged(.receiptPrepared, receiptModel: receipt, errorType: .none, error: nil)
}
}
}
}
}
Our Questions:
1. Is it possible for Transaction.unfinished or Transaction.updates to return transactions that have already been finished?
Specifically, if a transaction was successfully finished in a previous app launch, could it still be returned again during the next launch?
2. Are there any flaws in our current handling process?
Our current sequence is: finish() → construct model → local save → report to server → delete after verification. Could this order lead to timing issues where StoreKit considers a transaction unfinished?
3. If we need your assistance in investigating specific user transaction records or logs, what key information should we provide?
We greatly appreciate your support and look forward to your response to help us further optimize our transaction processing logic.
This bundle is invalid. The IPA format requires a top-level directory named Payload, containing only a .app bundle and optional plugins in a Plugins directory. (ID: df59dbe4-17e5-4bc6-9c69-8645672320(4))
Hello,
Is there any way to detect if the iOS screen is currently being shared via FaceTime or iPhone Mirroring?
Our application relies on this information to help ensure that users are not accessing it from one location while physically being in another.
when using CNContactViewController to present a contact detail info, the system CNContactViewController appear some UI issues.
On iOS 26, the Poster avatar overlaps with the title "Edit device contact"
On iPadOS26 with device(not simulator), when click 'Add photo', the CNContactViewController will auto dismiss, and the console output some error log:
below are the sample code:
AppDelegate.swift:
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
let window: UIWindow = UIWindow()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let vc = SplitViewController(primary: TabBarViewController(), secondary: ViewController())
window.rootViewController = vc
window.makeKeyAndVisible()
return true
}
}
SplitViewController.swift:
import UIKit
class SplitViewController: UISplitViewController {
init(primary: UIViewController, secondary: UIViewController) {
super.init(nibName: nil, bundle: nil)
preferredDisplayMode = .oneBesideSecondary
presentsWithGesture = false
delegate = self
viewControllers = [primary, secondary]
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension SplitViewController: UISplitViewControllerDelegate {
}
TabBarViewController.swift:
import UIKit
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
class HomeViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .red
navigationItem.title = "Home"
tabBarItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), tag: 0)
}
}
class TabBarViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let homeVC = HomeViewController()
let homeNav = UINavigationController(rootViewController: homeVC)
viewControllers = [homeNav]
ContactManager.shared.getAllContactIdentifiers()
}
}
ViewController.swift:
import UIKit
import Contacts
import ContactsUI
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemPink
let button = UIButton(frame: .zero)
button.backgroundColor = .orange
button.setTitle("show contact", for: .normal)
button.addTarget(self, action: #selector(showContactInfo), for: .touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(button)
button.widthAnchor.constraint(equalToConstant: 200).isActive = true
button.heightAnchor.constraint(equalToConstant: 60).isActive = true
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@objc private func showContactInfo() {
print("showContactInfo")
let identifier = ContactManager.shared.identifiers[0]
let currentContact = try? CNContactStore().unifiedContact(withIdentifier: identifier, keysToFetch: [CNContactViewController.descriptorForRequiredKeys()])
guard let contact: CNMutableContact = currentContact?.mutableCopy() as? CNMutableContact else {
return
}
let vc = CNContactViewController(forNewContact: contact)
vc.delegate = self
vc.title = "Edit Device Contact"
vc.allowsActions = false
vc.contactStore = CNContactStore()
let navigationVC: UINavigationController = UINavigationController(rootViewController: vc)
let appDelegate = UIApplication.shared.delegate as? AppDelegate
appDelegate?.window.rootViewController?.present(navigationVC, animated: true, completion: nil)
}
}
extension ViewController: CNContactViewControllerDelegate {
public func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
viewController.dismiss(animated: true, completion: nil)
}
}
Hello,
I have a question regarding the new battery usage interface in iOS 26.
As shown in the attached screenshot, the system displays battery usage per app as a percentage (%).
I’m curious about how this percentage is calculated.
From what I can tell, it doesn’t seem to reflect the actual battery consumption per process, excluding the device’s base standby power.
It rather appears to be calculated as a relative percentage based on total battery drain, possibly including system idle power.
Is there any way to understand or estimate the actual battery usage per app, excluding the device’s inherent standby power consumption?
Thank you.
In iOS 26 beta 4 (build from July 2025), there is a visual issue when using a UISplitViewController. Specifically, the text color of labels in the primary column does not adapt correctly to Dark Mode. This includes navigation bar titles and labels inside UITableViewCells. Regardless of system appearance settings, the text remains black, making it unreadable when the system switches to Dark Mode.
To reproduce this, create a new iOS project using UISplitViewController with the .doubleColumn style. In the primary column, embed a UIViewController that contains a navigation title using navigationItem.title, and a UITableView showing a list of items. Run the app on a device or simulator with iOS 26 beta 4. Then switch the system appearance to Dark Mode using Control Center and observe the interface.
The expected result is that all labels in the primary column, including the navigation title and table view cell labels, should automatically update to a light text color in Dark Mode. This behavior works correctly in iOS 18. However, the actual result is that all these labels remain black, leading to poor visibility in Dark Mode and ignoring the system’s appearance setting.
https://feedbackassistant.apple.com/feedback/19194379
Our app connects to the headend to get a IDP login URL for each connection session, for example: “https://myvpn.ocwa.com/+CSCOE+/saml/sp/login?ctx=3627097090&acsamlcap=v2” and then open embedded webview to load the page. (Note: the value of ctx is session token which changes every time). Quite often the webview shows blank white screen. After user cancel the connection and re-connect, the 2nd time webview loads the content successfully.
The working case logs shows:
didReceiveAuthenticationChallenge is called
decidePolicyForNavigationAction is called twice
didReceiveAuthenticationChallenge is called
decidePolicyForNavigationResponse is called
didReceiveAuthenticationChallenge is called
But the failure case shows:
Filed to terminate process: Error Domain=com.apple.extensionKit.errorDomain Code=18 "(null)" UserInfo={NSUnderlyingError=0x11461c240 {Error Domain=RBSRequestErrorDomain Code=3 "No such process found" UserInfo={NSLocalizedFailureReason=No such process found}}}
didReceiveAuthenticationChallenge is called
decidePolicyForNavigationAction is called
decidePolicyForNavigationResponse is called
If we stop calling evaluateJavaScript code to get userAgent, the blank page happens less frequently. Below is the code we put in makeUIView():
func makeUIView(context: Context) -> WKWebView
{
if let url = URL(string: self.myUrl)
{
let request = URLRequest(url: url)
webview.evaluateJavaScript("navigator.userAgent")
{
result, error in
if let error = error
{
NSLog("evaluateJavaScript Error: \(error)")
}
else
{
let agent = result as! String + " " + self.myUserAgent
webview.customUserAgent = agent
webview.load(request)
}
}
}
return self.webview
}
Found some posts saying call evaluateJavaScript only after WKWebView has finished loading its content. However, it will block us to send the userAgent info via HTTP request. And I don’t think it is the root cause since the problem still occurs with less frequency.
There is no problem to load same web page on Windows desktop and Android devices. The problem only occurs on iOS and macOS which both use WKWebview APIs.
Is there a bug in WKWebview?
Thanks,
Ying
Hey everyone,
Just wanted to share a critical issue we’ve encountered while testing our app on iOS 18 simulators and devices using Xcode 26 Beta 3:
Crash Details
We're seeing the following fatal exception during launch:
NSInvalidUnarchiveOperationException
Could not instantiate class named _TtGC5UIKit17UICoreHostingViewVCS_21ToolbarVisualProvider8RootView_ because no class named _TtGC5UIKit17UICoreHostingViewVCS_21ToolbarVisualProvider8RootView_ was found...
The crash originates from Storyboards/XIBs that include a UIToolbar. It appears UIKit is referencing an internal SwiftUI-related class (UICoreHostingView), which isn't present at runtime — leading to immediate crashes.
Affected:
Apps using UIToolbar in Storyboards or XIBs
Running on iOS 18 (Simulators or Devices) and below
Built using Xcode 26 Beta 3
CrashLog:
Fatal Exception: NSInvalidUnarchiveOperationException
0 CoreFoundation 0x11a21c __exceptionPreprocess
1 libobjc.A.dylib 0x31abc objc_exception_throw
2 CoreFoundation 0x178ea0 -[NSException initWithCoder:]
3 UIFoundation 0x28774 UINibDecoderDecodeObjectForValue
4 UIFoundation 0x28a18 UINibDecoderDecodeObjectForValue
5 UIFoundation 0x28cac -[UINibDecoder decodeObjectForKey:]
6 UIKitCore 0x21e680 -[UIView initWithCoder:]
7 UIKitCore 0x9b4784 -[UIToolbar initWithCoder:]
8 UIFoundation 0x28890 UINibDecoderDecodeObjectForValue
9 UIFoundation 0x28cac -[UINibDecoder decodeObjectForKey:]
10 UIKitCore 0x1e3a80 -[UIRuntimeConnection initWithCoder:]
11 UIFoundation 0x28890 UINibDecoderDecodeObjectForValue
12 UIFoundation 0x28a18 UINibDecoderDecodeObjectForValue
13 UIFoundation 0x28cac -[UINibDecoder decodeObjectForKey:]
14 UIKitCore 0x1e87dc -[NSCoder(UIIBDependencyInjectionInternal) _decodeObjectsWithSourceSegueTemplate:creator:sender:forKey:]
15 UIKitCore 0x1e2ea4 -[UINib instantiateWithOwner:options:]
16 UIKitCore 0x9f96c -[UIViewController loadView]
17 UIKitCore 0x75da8 -[UIViewController loadViewIfRequired]
18 UIKitCore 0x14430 -[UIViewController view]
19 UIKitCore 0x4237bc -[UINavigationController _preferredContentSizeForcingLoad:]
20 UIKitCore 0x116b15c -[_UISheetPresentationMetrics formSheetSizeForViewController:windowSize:screenSize:]
21 UIKitCore 0xb5c60c -[UIViewController _formSheetSizeForWindowWithSize:screenSize:]
22 UIKitCore 0x546ebc -[_UISheetLayoutInfo _preferredSize]
23 UIKitCore 0x18da60 -[_UISheetLayoutInfo _isEdgeAttached]
24 UIKitCore 0x19d428 -[_UISheetLayoutInfo _margins]
25 UIKitCore 0x19ce88 -[_UISheetLayoutInfo _stackAlignmentFrame]
26 UIKitCore 0x211018 -[_UISheetLayoutInfo _fullHeightUntransformedFrame]
27 UIKitCore 0x18f39c -[_UISheetLayoutInfo _untransformedFrame]
28 UIKitCore 0x188350 -[UISheetPresentationController _containerViewLayoutSubviews]
29 UIKitCore 0x18f1fc -[UITransitionView layoutSubviews]
30 UIKitCore 0x26070 -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
31 QuartzCore 0x14c14 CA::Layer::layout_if_needed(CA::Transaction*)
32 UIKitCore 0x16b78 -[UIView(Hierarchy) layoutBelowIfNeeded]
33 UIKitCore 0x186f4c -[UISheetPresentationController presentationTransitionWillBegin]
34 UIKitCore 0x3187b4 -[_UIFormSheetPresentationController presentationTransitionWillBegin]
35 UIKitCore 0x185dd0 __80-[UIPresentationController _initViewHierarchyForPresentationSuperview:inWindow:]_block_invoke
36 UIKitCore 0x1874f8 __77-[UIPresentationController runTransitionForCurrentStateAnimated:handoffData:]_block_invoke_3
37 UIKitCore 0x8584c -[_UIAfterCACommitBlock run]
38 UIKitCore 0x85784 -[_UIAfterCACommitQueue flush]
39 UIKitCore 0xa254 _runAfterCACommitDeferredBlocks
40 UIKitCore 0x9f74 _cleanUpAfterCAFlushAndRunDeferredBlocks
41 UIKitCore 0x9e84 _UIApplicationFlushCATransaction
42 UIKitCore 0x9e0c __setupUpdateSequence_block_invoke_2
43 UIKitCore 0x9404 _UIUpdateSequenceRun
44 UIKitCore 0x8ab4 schedulerStepScheduledMainSection
45 UIKitCore 0x41e4 runloopSourceCallback
46 CoreFoundation 0xfa8c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
47 CoreFoundation 0xf8a4 __CFRunLoopDoSource0
48 CoreFoundation 0xf700 __CFRunLoopDoSources0
49 CoreFoundation 0x10080 __CFRunLoopRun
50 CoreFoundation 0x11c3c CFRunLoopRunSpecific
51 GraphicsServices 0x1454 GSEventRunModal
52 UIKitCore 0x135274 -[UIApplication _run]
53 UIKitCore 0x100a28 UIApplicationMain
54 Saleslink DEV 0x1f9ea8 main + 17 (AppDelegate.swift:17)
55 ??? 0x1af61bf08 (Missing)
Would love to know if anyone else has encountered this, or if there’s an official radar or feedback ID we can follow. Hoping this gets resolved before the GM release of Xcode 26.
Thanks!
was that Spokane, Washington my fresh my fresh basket and they’re using a expired Wi-Fi certification domain through godaddy.com that expire April 30, 2020 I have a complete information on it if anybody needs me to forward it or wants to examine it their selves but be wary when you connected to the Wi-Fi over at my fresh basket at in Spokane, Washington
The attached file bellow contains the full error
error
I clone this repo to my mac, change team id and group, and run it in Xcode: https://github.com/protonpass/ios-pass
There's no issue when I ran it with the Debug configuration, but when I go to Product > Scheme > Edit Scheme and change the iOS target build configuration to Release then I got that error above.
I have tried Archive and export the ipa, verify that the provisioning profile contains my Mac UDID, but when double clicking the ipa to install, I also got the error This app cannot be installed because its integrity could not be verified.