Construct and manage graphical, event-driven user interfaces for iOS or tvOS apps using UIKit.

UIKit Documentation

Post

Replies

Boosts

Views

Activity

iOS 18.1 Storyboard doesn't contain a view controller with identifier
Hi All I faced up with strange issue in my app. Everything works in iOS 18.0 and lower. But after install iOS 18.1 same app from App Store crashes every time with error: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Storyboard (<UIStoryboard: 0x11f6287a0>) doesn't contain a view controller with identifier 'MKCPinEntryViewControllerIdentifier'' Interesting that this view controller exist in the Storyboard. First call in app: dispatch_async(dispatch_get_main_queue(), ^{ //No authentication, needs login view controller popped. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; PinEntryViewController *pinViewController = [storyboard instantiateViewControllerWithIdentifier:@"PinEntryViewControllerIdentifier"]; pinViewController.delegate = self; pinViewController.entryType = PinEntryTypeEnter; [self.presentationContext presentViewController:pinViewController animated:YES completion:nil]; }); works good. But second call in other place after 5 seconds: dispatch_async(dispatch_get_main_queue(), ^{ UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; PinEntryViewController *pinViewController = [storyboard instantiateViewControllerWithIdentifier:@"PinEntryViewControllerIdentifier"]; pinViewController.delegate = self; [self.presentationContext presentViewController:pinViewController animated:YES completion:nil]; }); crash the app with Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Storyboard (<UIStoryboard: 0x11f6287a0>) doesn't contain a view controller with identifier 'MKCPinEntryViewControllerIdentifier'' *** First throw call stack: (0x1841b47cc 0x1814872e4 0x186d9c140 0x1063d692c 0x10301ec08 0x104370a30 0x10437271c 0x104382de8 0x1043829a4 0x184188204 0x184185440 0x184184830 0x1d01641c4 0x186ceaeb0 0x186d995b4 0x10667fe3c 0x1a9b72ec8) libc++abi: terminating due to uncaught exception of type NSException And issue not only with this view controller. issue with all in that storyboard. At start up instantiateViewControllerWithIdentifier works good with all view controllers identifiers. But on second call in other places in the app - all crash with same error Reproduce in real device with iOS18.1 only. Simulators and devices with iOS 18.0 works well. Could someone help me, what's wrong with the app?
3
2
345
3w
UIGraphicsImageRenderer memory leak on iOS 18.0
Good morning, when using the following extension I'm getting a memory leak when using Instruments, I've tried capturing self with a weak reference but I still get the leak. public extension UIImage { func resize(_ targetSize: CGSize) -> UIImage { let size = self.size // Calculate the scaling ratios let widthRatio = targetSize.width / size.width let heightRatio = targetSize.height / size.height // Determine the scale factor and size to fill the target size let scaleFactor = max(widthRatio, heightRatio) let scaledImageSize = CGSize( width: size.width * scaleFactor, height: size.height * scaleFactor ) // Calculate the clipping rect let clippingRect = CGRect( x: (scaledImageSize.width - targetSize.width) / 2.0, y: (scaledImageSize.height - targetSize.height) / 2.0, width: targetSize.width, height: targetSize.height ) let format = UIGraphicsImageRendererFormat() format.scale = 1 // Render the clipped image let renderer = UIGraphicsImageRenderer(size: targetSize, format: format) return autoreleasepool { return renderer.image { _ in self.draw(in: CGRect( x: -clippingRect.origin.x, y: -clippingRect.origin.y, width: scaledImageSize.width, height: scaledImageSize.height )) } } } }
2
0
168
3w
Cordova based app not working after updating iOS to 17.5.1
After updating iOS, my Cordova app behaves incorrectly after receiving a voip push. When a push notification is received, my application launches CallKit, displays the Native Dialer screen and starts other necessary services. Until 17.5.1 (possibly 17.5) everything worked correctly. All services and sockets were established/ connected and working. After updating iOS to 17.5, the application crashes, and while voice connection is established the app is no longer active. Xcode logs have these error messages: Invalidating grant <invalid NS/CF object> failed Type: Error | Timestamp: 2024-06-20 13:27:44.719601+02:00 | Process: MyApp | Library: WebKit | Subsystem: com.apple.WebKit | Category: ProcessCapabilities | TID: 0x3a4929 Invalidating grant <invalid NS/CF object> failed Type: Error | Timestamp: 2024-06-20 13:27:44.732219+02:00 | Process: MyApp | Library: WebKit | Subsystem: com.apple.WebKit | Category: ProcessCapabilities | TID: 0x3a4929 Invalidating grant <invalid NS/CF object> failed Type: Error | Timestamp: 2024-06-20 13:27:44.733996+02:00 | Process: MyApp | Library: WebKit | Subsystem: com.apple.WebKit | Category: ProcessCapabilities | TID: 0x3a4929 I am using: Cordova iOS: 6.2 iOS 17.5.1 Can anyone please help?
8
1
4.6k
Jun ’24
The widget refresh is invalid
My code as long as you use the AVPictureInPictureController, open the PIP model, and then back to the desktop, my widget will refresh is invalid, I closed the PIP code mode, functions are normal refresh. I don't know what the reason is, is the system made a refresh limit?
0
0
123
3w
Search Bar does not work on iOS 18
I belong to an EC shop application developers' team, and we got a crame from a small part of our customers about our application. "Search Bar does not work on iOS 18." This bug doesn't appear on most of our devices updated to iOS 18.0. In some cases, it disappeared by turning [Settings > Accessibility > Touch > Reachability] off. But it is not the same for all customers found the bug. I'm looking for how to fix this bug, and why it happens. I'm not sure but I doubt that this may be a bug of iOS18, UIKit, RxCocoa, RxSwift, or something else. Any information would be welcome. import UIKit import RxSwift import RxCocoa @IBDesignable public final class SearchBar: UISearchBar { var textField: UITextField { if #available(iOS 13.0, *) { return searchTextField } else { return value(forKey: "_searchField") as! UITextField } } private let disposeBag = DisposeBag() private func bind() { textField.rx.isFirstResponder .bind(to: Binder(self) { me, isFirstResponder in // This doesn't work in some iOS 18 devices. me.textField.attributedPlaceholder = placeholderAttributedString(isFirstResponder: isFirstResponder) me.textField.backgroundColor = isFirstResponder ? Asset.Colors.whiteTwo.color : .white if me.useCancelButton { me.showsCancelButton = isFirstResponder } if me.useBookmarkButton { me.showsBookmarkButton = !isFirstResponder } }) .disposed(by: disposeBag) } public override init(frame: CGRect) { super.init(frame: frame) commonInit() } public required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } public override func awakeFromNib() { super.awakeFromNib() commonInit() } public override func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() commonInit() } private func commonInit() { bind() } } extension Reactive where Base: SearchBar {} import UIKit import RxSwift import RxCocoa @IBDesignable public final class SearchHeaderView: UIView { @IBOutlet private weak var searchBar: SearchBar! @IBOutlet private weak var cartContainerView: UIView! private let disposeBag = DisposeBag() public override init(frame: CGRect) { super.init(frame: frame) loadFromNib() commonInit() } public required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } public override func awakeFromNib() { super.awakeFromNib() loadFromNib() commonInit() } public override func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() loadFromNib() commonInit() } private func commonInit() { bind() } private func bind() { // ↓ This doesn't work in some iOS 18 devices. searchBar.textField.rx.isFirstResponder .bind(to: cartContainerView.rx.isHidden) .disposed(by: disposeBag) } } extension SearchAndCartHeaderView: NibOwnerLoadable {}
0
0
200
3w
crash while open UIActivityViewController only in iOS 15
let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: []) activityViewController.popoverPresentationController?.barButtonItem = navigationController.topViewController?.navigationItem.rightBarButtonItem navigationController.present(activityViewController, animated: true, completion: nil) Crash logs ===================================================== *** Assertion failure in -[_UIActivityContentCollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:], UICollectionView.m:7588 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempted to dequeue a cell for a different registration or reuse identifier than the existing cell when reconfiguring an item, which is not allowed. You must dequeue a cell using the same registration or reuse identifier that was used to dequeue the cell originally to obtain the existing cell. Dequeued reuse identifier: UIActivityContentActionCellIdentifier; Original reuse identifier: UIActivityActionGroupCell; Existing cell: <UIActivityActionGroupCell: 0x10f19f220; baseClass = _UICollectionViewListCell; frame = (16 354; 358 30); clipsToBounds = YES; layer = <CALayer: 0x600000781740>>'
0
0
217
3w
Pan gesture and natural scrolling
The Maps app on macOS always zooms the same way (two fingers up to zoom in, two fingers down to zoom out) when the shift key is held down, regardless of whether natural scrolling is turned off. I'd like to replicate this same behavior using UIPanGestureRecognizer, but the translation is always inverted whenever I disable natural scrolling. How can I detect if natural scrolling is enabled or disabled when the pan gesture is detected?
0
1
149
3w
Crash on Main Thread
Crashed: com.apple.main-thread 0 CardSuiteExperience 0x4e2f0 objectdestroyTm + 376 1 CardSuiteExperience 0x322424 block_destroy_helper + 33784 2 CardSuiteExperience 0x321e24 block_destroy_helper + 32248 3 UIKitCore 0x2b4904 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:isCellMultiSelect:deselectPrevious:performCustomSelectionAction:] + 1232 4 UIKitCore 0x1073af4 -[UITableView _userSelectRowAtPendingSelectionIndexPath:animatedSelection:] + 268 5 UIKitCore 0x1073bf4 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 216 6 UIKitCore 0xba5d8 -[_UIAfterCACommitBlock run] + 72 7 UIKitCore 0xba49c -[_UIAfterCACommitQueue flush] + 164 8 UIKitCore 0xba3b4 _runAfterCACommitDeferredBlocks + 496 9 UIKitCore 0xb9fec _cleanUpAfterCAFlushAndRunDeferredBlocks + 80 10 UIKitCore 0xb9efc _UIApplicationFlushCATransaction + 72 11 UIKitCore 0xb7660 _UIUpdateSequenceRun + 84 12 UIKitCore 0xb72a4 schedulerStepScheduledMainSection + 172 13 UIKitCore 0xb8148 runloopSourceCallback + 92 14 CoreFoundation 0x56834 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 28 15 CoreFoundation 0x567c8 __CFRunLoopDoSource0 + 176 16 CoreFoundation 0x54298 __CFRunLoopDoSources0 + 244 17 CoreFoundation 0x53484 __CFRunLoopRun + 828 18 CoreFoundation 0x52cd8 CFRunLoopRunSpecific + 608 19 GraphicsServices 0x11a8 GSEventRunModal + 164 20 UIKitCore 0x40aae8 -[UIApplication _run] + 888 21 UIKitCore 0x4bed98 UIApplicationMain + 340 22 UIKitCore 0x638504 keypath_get_selector_hoverStyle + 11024 23 Card Suite Lite 0x17e6fc main + 4332857084 (AppDelegate.swift:4332857084) 24 ??? 0x1bbfe3154 (Missing)
0
0
119
3w
3rd party OSS license string in settings.bundle could not been displayed in iOS 18
Hello, Dear Developers Problem Description My team is working on functionality test in iOS18. Basically, application functionality works as expected without any modification. However, We found a small issue in settings application. iOS 17 In iOS17, 3rd party OSS license string in settings application would been displayed if the license button is been clicked. Model: iPhone SE 3 OS Version: 17.6.1 iOS 18 However, in iOS18, nothing but a blank page. Model: iPhone SE 3 OS Version: 18.0.1 Settings.bundle Below are files in settings.bundle. What I've searched Using XCode 16 makes no change Nothing about settings.bundle in iOS 18 release note A similar post: https://forums.developer.apple.com/forums/thread/764519 The solution in the post doesn't solve my problem. If you know the solution, please let me know. Best wishes.
0
0
176
3w
Use the AVPictureInPictureController caused the UI disorder
My app supports only iPhone mode, and when it runs on an iPad device, it normally displays compatible iPhone mode. But my code as long as you use the AVPictureInPictureController, open the picture in picture, will lead to get [UIScreen mainScreen] bounds became the real width and height, so the UI disorder; How should my application be compatible with this?
1
0
125
Oct ’24
Changing presentation style crashes app
Hello! I've been digging into this for a little bit now, and am hitting something of a wall. Our app is crashing occasionally, and googling the crash yields literally 0 results. Tl;dr: Something related to adaptivePresentationStyle(for:traitCollection:) is resulting in our app crashing. Context In our app, we have a custom UIPresentationController that we use to present a small sheet of content overlaying other app content - similar to a UISheetPresentationController with a medium-ish size. So we have a custom UIViewController to present, and it conforms to the UIAdaptivePresentationControllerDelegate protocol. We also have custom present and dismiss animators. The crash However, we seem to be running into a really odd crash. I've attached a crash report as well, but here's what one sees in xcode on reproducing the crash: The _computeToEndFrameForCurrentTransition block is nil inside the _transitionViewForCurrentTransition block, value of outerStrongSelf currently : <XxxYyyyyyZzz.PopupPresentationController: 0x12d017a40>. This most likely indicates that an adaptation is happening after a transtion cleared out _computeToEndFrameForCurrentTransition. Captured debug information outside block: presentationController : <XxxYyyyyyZzz.PopupPresentationController: 0x12d017a40> presentedViewController : <XxxYyyyyyZzz.SomeViewController: 0x12d03a690> presentingViewController : <UINavigationController: 0x12a817400> 2023-09-25_08-02-33.6523_-0500-7d355cd4a86427213389765ef070a777c4b4aaa3.crash Whenever we present one of these view controllers, things work just fine. When we try to present another one though, if someone is aggressively changing the phone orientation, the app crashes. This crash occurs somewhere in between dismissing the old VC and presenting the new one. It occurs before I ever hit any breakpoints in the "present" animator for the second view controller. I've narrowed things down a bit, and by commenting out our implementation of adaptivePresentationStyle(for:traitCollection:), the crash can't be reproduced anymore. The downside there being that the app no longer functions how we want it to. Our definition of that function (which causes crashes) looks like this: public func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { guard forceUsingFullScreenIfCompact else { return .none } return traitCollection.verticalSizeClass == .compact ? .overFullScreen : .none } A bit more testing, and it seems like if that function returns the same thing consistently, nothing crashes. Are we not allowed to put conditional logic in this function? In the crash, we can see that it occurs due to a failing assertion internal to UIPresentationController: Last Exception Backtrace: 0 CoreFoundation 0x1afa28cb4 __exceptionPreprocess + 164 (NSException.m:202) 1 libobjc.A.dylib 0x1a8abc3d0 objc_exception_throw + 60 (objc-exception.mm:356) 2 Foundation 0x1aa1b2688 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 172 (NSException.m:251) 3 UIKitCore 0x1b1d05610 __80-[UIPresentationController _initViewHierarchyForPresentationSuperview:inWindow:]_block_invoke + 2588 (UIPresentationController.m:1594) 4 UIKitCore 0x1b21f1ff4 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke_3 + 300 (UIPresentationController.m:1228) The question This all leads us to wonder if we're doing something wrong, or if there could be a bug in one of the iOS APIs that we're consuming. Thus, posting here. Does anyone have any insight into how this could be occurring, or has seen this before and has ideas? Thanks! Miscellaneous info We target iOS 14+ We've seen this issue in debug and release builds from Xcode 14 and 15 We see the issue on users with iOS 15+, though it could be occurring on 14 in just incredibly low numbers This is a re-post of https://developer.apple.com/forums/thread/738257, because I accidentally closed that out as resolved
4
2
798
Dec ’23
Unhandled managed exception: Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Expected dequeued view to be returned to the collection view in preparation for display.
I'm getting a crash wherever I've used the Collection view in my app with this exception: Unhandled managed exception: Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Expected dequeued view to be returned to the collection view in preparation for display. When the collection view's data source is asked to provide a view for a given index path, ensure that a single view is dequeued and returned to the collection view. Avoid dequeuing views without a request from the collection view. For retrieving an existing view in the collection view, use -[UICollectionView cellForItemAtIndexPath:] or -[UICollectionView supplementaryViewForElementKind:atIndexPath:]. Dequeued view: It not built with native Swift or Xcode, instead it's a .Net MAUI app for iOS and it's crashing only on iOS 18+ and working absolutely fine on all other versions below iOS 18. I've not used any dequeuing of cells or any such code as it is not a native code, it's C# code and I'm just using template selector for designing different cells of collection view, so I'm not getting any fix for this exception as how to fix this dequeuing problem when I don't even have any such native code. Has anyone fixed this issue or find a solution for it yet?
3
1
251
3w
UserDefaults, UIApplicationDelegate, and prewarming
For a UIKit app based on scenes (UIScene), is it safe to reference UserDefaults in code that is executed from UIApplicationDelegate/application(_: didFinishLaunchingWithOptions:) ? I've read that in iOS 15, there were undocumented scenarios involving app prewarming that would cause UserDefaults reads to fail within a window of time after device reboots, as described at https://christianselig.com/2024/10/beware-userdefaults/ The failure mode is that an app would be released, and months later, a small fraction of users would report failures consistent with UserDefaults reads unexpectedly returning nil, causing a loss of data. The user experience is bad, and debugging this behavior is then challenging because of how rarely it occurs. Apple's https://developer.apple.com/documentation/uikit/app_and_environment/responding_to_the_launch_of_your_app/about_the_app_launch_sequence#3894431 seems to suggest that prewarming only executes an app "up until, but not including when main() calls UIApplicationMain(_:_:_:_:), but https://stackoverflow.com/questions/71025205/ios-15-prewarming-causing-appwilllaunch-method-when-prewarm-is-done documents that UIApplicationDelegate/application(_: didFinishLaunchingWithOptions:) has in fact been observed executing during app prewarming in scene-based apps. So, my question: In an app based on scenes, if I'd like to reference UserDefaults within UIApplicationDelegate/application(_: didFinishLaunchingWithOptions:), when is it safe to do this? I'm guessing the answer is one of these: Never. Only in apps that don't support scenes. Only in iOS 16 or later. Only in IOS 17 or later. Is it guaranteed safe to reference UserDefaults in UIWindowSceneDelegate/scene(_:willConnectTo:options:) or later? Is there documentation from Apple regarding this issue? Thank you.
0
0
169
4w
UI is messed up on iPad
My app supports only iPhone mode, and when it runs on an iPad device, it normally displays compatible iPhone mode; But when compatibility mode is displayed normally, everything is fine in the UI. But my code as long as you use the AVPictureInPictureController, open the picture in picture, can lead to code for [UIScreen mainScreen] bounds will change, become the real width and height of the equipment, so the UI disorder; Problems arise when our code is laid out with [UIScreen mainScreen] bounds. Like this: This was normal in iOS16 and iOS17, but suddenly it happened in iOS18 How should my application be compatible with this?
1
0
182
4w
iOS 18 AVKit -[AVPictureInPictureController _commonInitWithSource:] Crash
There was a crash during the creation of picture-in-picture in iOS 18. No problems were found after reviewing the code. Please take a look at the possible reasons for the code crash here and how the business code should be protected 21 libsystem_kernel.dylib 0x1dac4ec20 abort_with_payload_wrapper_internal + 104 22 libsystem_kernel.dylib 0x1dac4ebb8 abort_with_reason + 32 23 libobjc.A.dylib 0x1880ffea0 _objc_fatalv(unsigned long long, unsigned long long, char const*, char*) + 116 24 libobjc.A.dylib 0x1880ffe2c _objc_fatal(char const*, ...) + 32 25 libobjc.A.dylib 0x1880ff040 weak_register_no_lock + 396 26 libobjc.A.dylib 0x1880fec50 objc_storeWeak + 472 27 AVKit 0x1b7a904e4 -[AVObservationController initWithOwner:] + 164 28 AVKit 0x1b7ab1d90 -[AVPictureInPictureController _commonInitWithSource:] + 104 29 AVKit 0x1b7b6cc14 -[AVPictureInPictureController initWithContentSource:] + 184 30 AVKit 0x1b7b6ccd8 -[AVPictureInPictureController initWithPlayerLayer:] + 84
0
1
135
4w
In PKCanvasview of IOS18, UIPanGestureRecognizer cannot be added
I am creating an application using PKCanvasview. One function of that app is the ability to trace and retrieve a UITextView that has been addSubviewed to a PKCanvasView. We have confirmed that this functionality works correctly in the simulator and on the actual device on IOS 17.4. This feature did not work correctly on the IOS18 simulator and the actual device. Is this a bug? And if it is normal behavior, is there an alternative?
0
0
147
4w
How can I get a tab-bar styled ornament on the trailing edge of a view controller?
I've got a UIKit app with a collapsible trailing-edge child view controller, implemented sort of like UISplitViewController but it's got a bunch of custom behavior - moving to the bottom edge in portrait orientation, etc. It exposes a couple of different app functions via a UITabBar on the bottom edge on iOS. When I run the app on visionOS, that tab bar transforms to a leading-edge ornament. This would be great, but that means it tries to overlap the trailing-edge content of its parent view controller, which isn't ideal. Is there a way to get the tab bar to lay out on the trailling edge of the child view controller? Or can I create a custom ornament that has the same auto-expand behavior as the tab bar, where it shows a vertical column of icons that expands to show titles when you're gazing at it?
1
0
189
4w
Crash when keywindow.rootViewController changed using iOS 18
I have already searched for a lot of information about this issue. Many people have encountered it with UISplitViewController or on iPadOS, but I am experiencing this problem on iOS 18. It does occasionally occur on iOS 17, but it definitely happens on iOS 18. The error messages are as follow: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Layout requested for visible navigation bar, <UINavigationBar: 0x14a6b3c00; frame = (0 44; 375 44); autoresize = W; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x3026a9da0>> delegate=0x14a674600 standardAppearance=0x300d1d0a0 scrollEdgeAppearance=0x300d1cf50, when the top item belongs to a different navigation bar. topItem = <UINavigationItem: 0x14a7f8780> style=navigator leftBarButtonItems=0x302423b40, navigation bar = <UINavigationBar: 0x14adcb700; frame = (0 0; 375 44); autoresize = W; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x302680940>> delegate=0x14ade8c00 standardAppearance=0x300d7a7d0 scrollEdgeAppearance=0x300d7a610, possibly from a client attempt to nest wrapped navigation controllers.' *** First throw call stack: (0x193f3a08c 0x191242698 0x19330a8fc 0x196939290 0x1966847b4 0x1967cdc88 0x1959ba6d8 0x1966c86bc 0x196769d50 0x1967cae58 0x196771f28 0x196b0fcb8 0x196764800 0x196684280 0x1959ba6d8 0x1959ba264 0x195a12edc 0x195990560 0x1968295f0 0x193f1c218 0x193f0a4c0 0x193f09b84 0x193f09368 0x1e00fc1c4 0x196a569b0 0x196b04d54 0x10462b1fc 0x1ba144734) libc++abi: terminating due to uncaught exception of type NSException I am sure about the process on iOS 17, first I use UINavigationController.present(UINavigationController()) and then call keyWindow.rootViewController = UINavigationController(), it crashes. So I can dismiss the presentedViewController before assign keyWindow.rootViewController. However, on iOS 18, the app crash when launch.
2
0
500
Aug ’24