I’d love to see Apple implement a Bionic Reading feature as a system-wide accessibility option. This type of reading aid highlights the first part of each word in bold to help guide the eyes and improve comprehension.
It’s been shown to be especially helpful for people with ADHD, dyslexia, and other neurodivergent needs. Having a toggle in Settings > Accessibility would be life-changing.
Ideally, it could be:
• Enabled system-wide, or per-app
• Allow customization of how much of the word is bolded
• Available in Safari, Messages, Books, News, etc.
Posts under iOS tag
200 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello! 👋
I am noticing new failures in the iOS 18.5 Developer Beta build (22EF5042g) when calling the system call connect() (from C++ source, in network extension).
When using cell/mobile data (Mint & T-Mobile) this returns with EINTR (interrupted system call) right away. When I switch over to wifi, everything works fine.
Note: I have not tested on other mobile carriers; which could make a difference since T-Mobile/Mint are IPv6 networks.
FWIW, this is working in the previous developer beta (18.4).
Anyone have any ideas?
App is stuck in "Waiting for review" for almost 1 month, now going past our critical launch deadline
Hello,
We are posting here in hopes of getting some help or advice regarding a critical situation we’re currently facing.
We submitted our iOS app last month, which was developed for an international event that officially began yesterday. This app is part of a national project with high visibility, involving government officials and ministers.
However, we are stuck in the "Waiting for review" status since the initial submission, in March 21 (24 days ago).
Note that we already submitted a few IOS applications in the past with the same account, and we didn't have any problems.
Here is a quick summary of what we tried in the store:
Initial submission: March 21, 2025
Resubmission: March 25, 2025
Last submission attempt: April 8, 2025
Expedited Review Request: accepted, but the review still hasn't started
We’ve contacted Apple Support multiple times through mails and phone calls, and received confirmation that our expedited review request was approved. However, no progress has been made since then, and the app remains in “Waiting for Review” status, now 1 day past the critical launch deadline.
We understand that expedited reviews are not always guaranteed, but given the urgent and national importance of this project, we are doing everything we can to try and ensure the review begins as soon as possible.
If anyone from the App Review team sees this post, or if any developers have experienced a similar situation and can offer advice, we would be truly grateful.
Thank you in advance for your time and support.
In order to create a Message Filter Extension it is necessary to set up Shared Web Credentials.
I'd like to form an understanding of what role SWC plays when the OS is making request to the associated network service (when the extension has called deferQueryRequestToNetwork()) and how this differs from when an app directly uses Shared Web Credentials itself.
When an app is making direct use of SWC, it makes a request to obtain the user's credentials from the web site.
However in the case of a Message Filter Extension, there aren't any individual user credentials, so what is happening behind the scenes when the OS makes a server request on behalf of a Message Filtering Extension?
A more general question - the documentation for Shared Web Credentials says "Associated domains establish a secure association between domains and your app.".
Thank you
Topic:
App & System Services
SubTopic:
Networking
Tags:
iOS
SMS and Call Reporting
Authentication Services
When I build and rum my iOS app with xocde 16.0 or higher version with my 16.0 iOS, 17.0 iOS, if fails to run with error. (Library not loaded: /System/Library/Frameworks/SwiftUICore.framework/SwiftUICore)
I found this error after update my macOS and xcode (Ventura -> Sequoia, Xcode 15.2 -> 16.2). I try to setting '-weak_framework SwiftUI' for solve this error with this post (https://forums.developer.apple.com/forums/thread/126506). But when applied, an error occurred in modify on all swiftUI. If a project is built with a simulator over 18 versions, it runs smoothly.
*issue project is with tac or tuist. There are two projects in question, and each configuration is (1.17.0 tca + 4.37.0) / (tuist 3.4.0).
Does anyone have any pointers as where I even start to debug this issue and narrow down on what's going on with Xcode 16?
I'm integrating Apple Pay with PayFort in a Swift iOS application, and I’m currently working on preparing a valid purchase request using Apple Pay, as described in PayFort’s documentation:
🔗 https://docsbeta.payfort.com/docs/api/build/index.html?shell#apple-pay-authorization-purchase-request
The documentation outlines the following required parameters:
apple_data
apple_signature
apple_header
apple_transactionId
apple_ephemeralPublicKey
apple_publicKeyHash
apple_paymentMethod
apple_displayName
apple_network
apple_type
Optional: apple_applicationData
I understand these should be derived from the PKPayment object after Apple Pay authorization, but I’m having trouble mapping everything correctly. Here’s what I’m seeing in code:
payment.token
// Returns something like: <PKPaymentToken: 0x28080ae80; transactionIdentifier: "..."; paymentData: 3780 bytes>
payment.token.paymentData
// Contains 3780 bytes of encrypted data
payment.token.paymentData.base64EncodedString()
// Returns a long base64 string, which at first glance seems like it could be used for apple_data,
// but PayFort doesn't accept it as-is — so this value appears to be incomplete or incorrectly formatted
I can successfully retrieve the following values from payment.token.paymentMethod:
apple_displayName
apple_network
apple_type
However, I’m still unsure how to extract or build the following in the format accepted by PayFort:
apple_data
apple_signature
apple_header
apple_transactionId
apple_ephemeralPublicKey
apple_publicKeyHash
apple_paymentMethod
These may be contained within the paymentData JSON, but I’m not sure how to decode it or if Apple allows decrypting it in a way that matches PayFort’s expected format.
How can I correctly extract or build apple_data, apple_signature, and apple_header from the Apple Pay token?
Also, how should I handle the decryption or decoding (if necessary) of paymentData to retrieve values like apple_transactionId, apple_ephemeralPublicKey, and apple_publicKeyHash?
If anyone has successfully set this up or has example code that bridges Apple Pay and PayFort’s expected request format, it would be super helpful!
Thanks in advance 🙏
I have an iOS app, and I am trying to add a companion WatchOS app. My iOS app depends on 2 libraries:
GoogleMobileAds
FirebaseAnalyticsWithoutAdIdSupport
When I add a new target for WatchOS, the preview build starts to fail. I am not adding any libraries to WatchOS. The Google Ads and Firebase Analytics libs are only under the iOS target.
I am unable to run the preview, I get an error when trying to build the watch scheme. The preview does not work. The build just crashes. I've included the error log below.
But, here are the steps I've tried so far:
Delete folders inside Derived Data
Run a clean build (Cmd + Option + Shift + K)
Delete scheme and create a new one
Reset Package Cache
Restart Xcode
Restart Macbook
But, it just does not work. I do not understand why the watchOS target is erroring for "GoogleUserMessagingPlatform" and "GoogleMobileAdsTarget" when those packages are not linked/used for the watchOS.
SchemeBuildError: Failed to build the scheme “timerWatch Watch App”
While building for watchOS Simulator, no library for this platform was found in '/Users/k/Library/Developer/Xcode/DerivedData/timer-dhkdhvfcqtfgskfdxpmupujswtuh/SourcePackages/artifacts/swift-package-manager-google-user-messaging-platform/UserMessagingPlatform/UserMessagingPlatform.xcframework'. (in target 'UserMessagingPlatformTarget' from project 'GoogleUserMessagingPlatform')
Build target UserMessagingPlatformTarget:
/Users/k/Library/Developer/Xcode/DerivedData/timer-dhkdhvfcqtfgskfdxpmupujswtuh/SourcePackages/artifacts/swift-package-manager-google-user-messaging-platform/UserMessagingPlatform/UserMessagingPlatform.xcframework:1:1: error: While building for watchOS Simulator, no library for this platform was found in '/Users/k/Library/Developer/Xcode/DerivedData/timer-dhkdhvfcqtfgskfdxpmupujswtuh/SourcePackages/artifacts/swift-package-manager-google-user-messaging-platform/UserMessagingPlatform/UserMessagingPlatform.xcframework'. (in target 'UserMessagingPlatformTarget' from project 'GoogleUserMessagingPlatform')
Build target GoogleMobileAdsTarget:
/Users/k/Library/Developer/Xcode/DerivedData/timer-dhkdhvfcqtfgskfdxpmupujswtuh/SourcePackages/artifacts/swift-package-manager-google-mobile-ads/GoogleMobileAds/GoogleMobileAds.xcframework:1:1: error: While building for watchOS Simulator, no library for this platform was found in '/Users/k/Library/Developer/Xcode/DerivedData/timer-dhkdhvfcqtfgskfdxpmupujswtuh/SourcePackages/artifacts/swift-package-manager-google-mobile-ads/GoogleMobileAds/GoogleMobileAds.xcframework'. (in target 'GoogleMobileAdsTarget' from project 'GoogleMobileAds')
Hi,
when I display an HTML page with a on Safari iOS, I get a nice UI. Great! At the first look I see a video frame with an arrow-in-a-circle button in the middle. Very nice. I click on the arrow and I get a fullscreen view while the video begins to play. I watch the video then I pause it then I click on the top-left x button. So I go back to my html page and the video is perfectly there as it was before.
But, there is an annoying new detail. The video frame is really dark, it still presents all the controls and a "different" arrow button to play it again. In other words that nice video-frame, that nice picture, is not longer visible on the page. That nice page with nice pictures has now an almost-black rectangle. Too bad.
Sure I can click on the video (outside the controls) then the controls and the black overlaying frame disappear. I can see that nice picture again. Finally. Well, but the arrow-in-a-circle button to play the video disappeared. Now the user cannot longer understand that's a video to play. It looks just like any other pictures to admire statically.
Is any way to get the previous first look of the video? The one clear, with the current frame and the arrow-in-a-circle look?
Xcode 16.2 archive fails to compile XIB
Xcode Archive command fails most of the time while compiling an XIB which was created in older Xcode.
XIB was updated in Xcode 16.2 version also which did not fix this issue.
Archive from Xcode app works but Xcode build command fails and no reason shown by the command.
** ARCHIVE FAILED **
The following build commands failed:
CompileXIB /Users…/Resources/Nibs/<XIB_NAME>.xib
I am developing a video streaming app for iPhone.
Minimum version is IOS 13.
I want to connect an external USB camera to the iPhone app and stream from it.
I have looked through a lot of information and have not found how to do this.
Is it possible to do this? Is there any documentation on this?
If I use the method callAsyncJavaScript() my app will compile, but it won't run on older simulators.
Specifically, in a brand new Storyboard project, I added this to `viewDidLoad():
let webView = WKWebView()
webView.callAsyncJavaScript("1", in: nil, in: .page) { result in
print("\(result)")
}
This runs fine with Xcode 16.3 targeting the iOS 18.4 simulator. It doesn't work if I target the iOS 18.3.1 simulator or the iOS 17.5 simulator. It does work on an iPhone 15 Pro running iOS 18.4 and it works on an iPhone 12 Pro running iOS 17.7.1.
It goes without saying that this used to work on Xcode 16.2 and earlier, since my real project has been using that API for 3 or 4 years now.
The specific error is
dyld[89984]: Symbol not found: _$sSo9WKWebViewC6WebKitE19callAsyncJavaScript_9arguments2inAF17completionHandlerySS_SDySSypGSo11WKFrameInfoCSgSo14WKContentWorldCys6ResultOyyps5Error_pGcSgtF
Referenced from: <82CC68A8-9426-343E-82CD-5443F53A6919> /Users/dave/Library/Developer/CoreSimulator/Devices/69CE58A3-8162-4616-B110-5857E6E2889F/data/Containers/Bundle/Application/3F27AAA0-8E96-437D-A1F4-DECD2E1A95B5/CallAsyncJavascript.app/CallAsyncJavascript.debug.dylib
Expected in: <E11EC0F5-2AD1-3402-AB03-31A85EA6EB3A> /Library/Developer/CoreSimulator/Volumes/iOS_21F79/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.5.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/WebKit.framework/WebKit
I am a developer on an enterprise application. Our team just updated our pipeline to build our app on the iOS 18 SDK instead of the 17.4 SDK and this has caused a lot of our ui elements to change and several crashes within the app resulting in just the simple error message "Swift runtime failure: unhandled C++ / Objective-C exception".
Why is just updating the SDK causing all these issues? Is there anyway to keep the previous version or will we have to go component by component to fix the constraints and crashes? These issues seem to be happening to our users on iOS 18 and beyond.
Hi.
I am writing a little MDM application.
Despite the basic task (add a password for 'remove profile' button in settings), it seems I am stuck with a problem:
When I try to enroll my device with enrollment.mobileconfig file, Apple Configurator app, I receive an error
The profile “Enrollment Profile” could not be installed because it is invalid.
Make sure the profile is valid and try installing it again.
The original architecture of my .mobileconfig contains of two payloads (com.apple.security.scep , com.apple.mdm), and it works correctly. However, when I try to add a third payload of com.apple.profileRemovalPassword , I receive the error stated above.
From logs collected on iPhone, here's what was found :
Failed to parse profile data. Error: NSError:
Desc : The profile “Enrollment Profile” is invalid.
Sugg : A profile containing an MDM payload must be removable.
US Desc: The profile “Enrollment Profile” is invalid.
US Sugg: A profile containing an MDM payload must be removable.
Domain : MCProfileErrorDomain
Code : 1000
Type : MCFatalError
Params : (
"Enrollment Profile"
)
...Underlying error:
NSError:
Desc : A profile containing an MDM payload must be removable.
US Desc: A profile containing an MDM payload must be removable.
Domain : MCProfileErrorDomain
Code : 1000
Type : MCFatalError
Extra info:
{
isPrimary = 1;
}
My main dictionary contains
HasRemovalPasscode
Also, I have tried playing around with
PayloadRemovalDisallowed
setting it to true and false, however, I keep getting the same error message.
There is also a second error produced:
Profile MCConfigurationProfile, version 1:
Display Name: “Enrollment Profile”
Description : “***”
Identifier : ***
UUID : ***
Organization: ***
Is Stub : No
Locked : Yes
Removal passcode present
Encrypted : No
Trusted : 0
Signed : No
Device Type : 0
Payloads:
Payload MCSCEPPayload, version 1
Description : “***”
Identifier : ***
UUID : ***
Type : com.apple.security.scep
Display name: ***
Organization: ***
Payload MCMDMPayload, version 1
Description : “***”
Identifier : ***
UUID : ***
Type : com.apple.mdm
Organization: ***
Payload MCRemovalPasswordPayload, version 1
Identifier : com.examp Can't parse profile: <decode: missing data>
The code for com.apple.profileRemovalPassword is taken from apple documentation (https://developer.apple.com/documentation/devicemanagement/profileremovalpassword)
I have also tried the automatic way - creating it from Apple Configurator, so it is correct in terms of syntax 100%.
Several important notes:
Creating a fresh new profile with just password removal protection single payload allows to perform a download of the profile
If I comment out the whole com.apple.mdm payload block, I will be able to download this profile on iPhone also
The com.apple.mdm block is also valid by itself, and works correctly
I have tried implementing other types of "dummy" payloads - for example com.apple.dock
<dict>
<key>PayloadType</key>
<string>com.apple.dock</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>com.example.test.dock</string>
<key>PayloadUUID</key>
<string>22222222-3333-4444-5555-666666666666</string>
<key>PersistentApps</key>
<array/>
</dict>
And everything worked out fine.
So my hypothetical conclusion out of these four notes might be in some type of interconnection between mdm and profileRemovalPassword, which isn't really listed anywhere? Or am I missing something ? Thank you in advance.
We have identified an issue when using NumberFormatter with the locale set to it_IT. Specifically, when formatting numbers with exactly four integer digits, the grouping separator is not applied: for example, the number is displayed as 4000,00 instead of the expected 4.000,00. This behavior occurs only with four-digit integers; for instance, 40.000,00 is formatted correctly. The issue appears to affect only iOS 18.4 and later versions.
Please update Accessibility OS Settings for VoiceOver in iPhone iOS and iPadOS to include frames on the Rotor, and to make web navigation and component gestures easier to find and assign. Please add content to the iPhone and iPad Apple User Guide to use VoiceOver in web navigation with touch gestures.
Specifically... iframes.
There is no clear guidance in Apple documentation for VoiceOver users in iPhone or iPadOS to access iframes with touch gestures. A common belief as written on AppleVis, other blogs, and internet searches is that iframes in Safari or a webView in an app are only available with explore by touch.
If explore by touch is the only option for some interactions, that needs to be included in Apple User Guides. If not, details on equivalent touch gestures for VO that have keyboard interactions in Mac need to be clear for users.
VoiceOver for Mac includes a default keyboard interaction of VO-Command-F in its extensive User Guide (https://support.apple.com/guide/voiceover/by-images-or-frames-mchlp2740/mac). A user can include a rotor option for web navigation for iframes.
VoiceOver for iPhone and iPad does not include a default swipe gesture assigned to frames. An option is not available for the Rotor.
While there is iPhone User Guide guidance that gestures can be customized (https://support.apple.com/guide/iphone/customize-gestures-and-keyboard-shortcuts-iph59a8e6fd2/18.0/ios/18.0), it is not clear that for adding this gesture, "Move to the next frame" is tucked into the advanced navigation commands for VoiceOver Accessibility Settings in the OS. At least in my phone, the word "frame" was not searchable despite the All Commands screen using a search bar.
All of a sudden, after iOS 18.4 was released, I am having tons of navigation problems in my app in production. Buttons navigating to empty pages, views seeming to 'freeze', top navigation bar mismatched with the content of the page. It seems that iOS 18.4 broke a critical piece of UIKit + SwiftUI bridging functionality that my project relies on.
My application is written with both UIKit and SwiftUI components. Here is a breakdown of my setup:
UIApplicationDelegate >
UIWindow >
rootViewController of window is a UITabBarController >
each tab is a UINavigationController
rootViewController of nav controller is a UIHostingController >
rootView of the hosting controller is a SwiftUI View
In my SwiftUI views, I have been using NavigationLink for horizontal 'push' style navigation in my SwiftUI views. I do not use NavigationView, I only rely on the bridging capabilities of UINavigationController to action on my NavigationLinks. This has never been an issue, until iOS 18.4 was released. Now, when running iOS 18.4, I am having all sorts of unexpected behavior in the UI. I will break down 2 of these use cases here:
Use case A:
In one of my SwiftUI views, I have a ForEach for which each element's view is a NavigationLink. This is using the NavigationLink(_ destination:,label:) initializer. Navigating forward from here works/looks normal.
However, once I try to navigate backward from that destination (tap the 'Back' button in top left), the view goes blank and the navigation bar at the top of the page (which is maintained by the UINavigationController instance) does not change. If I call popToRootViewController on that nav controller, the navigation bar at the top of the page returns to its normal state, but the view is still blank.
It is not until after I have called popToRootViewController, and then navigate to a different tab of the UITabBarController and return to the initial tab, does the SwiftuI content view (the one with the ForEach) finally redraw and the view hierarchy is restored.
Here is a warning that is logged in the console when I tap the 'Back ' button:
Top view controller's view unexpectedly not in window for navigation transition. Skipping layout. nav = <UINavigationController: 0x1110bbe00>, topVC = <TtGC7SwiftUI19UIHostingControllerV5MyApp10MyPage: 0x106814e00>
EDIT: If I replace the NavigationLink with a call to UINavigationController.pushViewController, I am still seeing the exact same behavior. Pressing back button makes the view empty > need to pop to root view controller and switch tabs in order to restore the view.
Use case B
Another instance of this issue happens whenever I try to use a NavigationLink inside of a view that itself was the destination of a NavigationLink in its parent view (i.e.: Root view > detail view > sub-detail view). For example, take the detail view destination in use case A. I have tapped a NavigationLink from the ForEach and landed on the detail view. Again, so far things work/look normal. Now, if I tap on another NavigationLink from that detail view, the view does not transition to the new page. The top navigation bar does transition, and shows the title and actions associated with this second destination. However, the view of this second destination is not displayed.
It is worth noting that the same warning I mentioned above is also logged when I tap the NavigationLink to navigate to this second destination.
Top view controller's view unexpectedly not in window for navigation transition. Skipping layout. nav = <UINavigationController: 0x109859400>, topVC = <TtGC7SwiftUI19UIHostingControllerVVS_19BridgedPresentation8RootView: 0x300ab8000>
Strangely, if I switch to a different tab of the UITabBarController and back to the initial tab, this second destination's view is successfully rendered. It seems that switching tabs in this UITabBarController is calling something in either SwiftUI or UIKit that is redrawing my views.
Conclusion
This is a serious issue with UIKit + SwiftUI bridging support. I have never had problems like this until devices started running iOS 18.4, and there is nothing in the iOS 18.4 changelog that suggests this was an intentional change. All of a sudden, after updating to the latest iOS version, my app is totally broken.
I want to be clear that I'm not using deprecated NavigationLink methods in these instances. My app's minimum deployment target is iOS 16.
I know that there are more modern navigation APIs like navigation stack, etc. I am looking for answers about my use case: whether it is officially unsupported as of iOS 18.4, whether this setup should be supported and this is indeed some sort of bug in iOS, or anything in-between. I'm happy to provide formatted code if needed for discussion purposes. This is about my entire app's view hierarchy so there are a lot of disparate lines of code that make up this problem.
Hello All,
I am currently attempting to get application config working with enterprise apps but it seems as though the asset config is not applying at all. While the asset and application install correctly it does not seem that the config is read at all judging from the status message returned.
"StatusItems" : {
"app" : {
"managed" : {
"list" : [
{
"name" : "apps",
"config-state" : {
"app-config-state" : {
"state" : "unknown"
}
},
"identifier" : "app.identifier",
"version" : "3.2",
"short-version" : "3.2.0",
"state" : "managed",
"declaration-identifier" : "dec-identifier"
}
]
}
}
},
"Errors" : [
]
}
The asset file being sent down is as follows:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Config 1</key>
<string>Value 1</string>
<key>Config 2</key>
<string>Value 2</string>
<key>Config 3</key>
<string>Value 3</string>
</dict>
</plist>
This is the config report being sent back by the device after everything has been fetched:
"StatusItems" : {
"management" : {
"declarations" : {
"activations" : [
{
"active" : true,
"identifier" : "group.activation.payload",
"valid" : "valid",
"server-token" : "56792E4AE25C3286640B45E6BD265AE97545B2B87F90A6355919FD8B2E3C3AB3"
}
],
"configurations" : [
{
"active" : true,
"identifier" : "app.install",
"valid" : "valid",
"server-token" : "34D7ACECAE16EE9EEAC0630FF2FF85524FFBB5BA3CB18CFB6296FBC860368C85"
},
{
"active" : true,
"identifier" : "ios.policy.subscription.list",
"valid" : "valid",
"server-token" : "376913E11BE7D26EC745B3B68C6FA94C4FC061B1B736D143EBE0F12FF73ADFF8"
}
],
"assets" : [
{
"active" : true,
"identifier" : "app.config.reference",
"valid" : "valid",
"server-token" : "1CFBE30EB56309005F742D667B80242E6A3CDC08ED228D0BC5F87749C6BBAB77"
}
],
"management" : [
]
}
},
"app" : {
"managed" : {
"list" : [
{
"state" : "downloading",
"declaration-identifier" : "app.install",
"identifier" : "app.identifier",
"name" : "apps",
"config-state" : {
"app-config-state" : {
"state" : "unknown"
}
}
}
]
}
}
},
"Errors" : [
]
}
Additional info would be useful, though a sysdiagnosis will be submitted to feedback as well.
Config did apply correctly when sending down through Install application command
Description
When using UIDocumentPickerViewController with allowsMultipleSelection = false, I expect that selecting a file will dismiss only the document picker.
However, if a user quickly taps the same file multiple times, the picker dismisses both itself and the presenting view controller (i.e., it pops two levels from the view controller stack), which leads to unintended behavior and breaks presentation flow.
Expected Behavior
Only UIDocumentPickerViewController should be dismissed when a file is selected—even if the user taps quickly or multiple times on the same file.
Actual Behavior
When tapping the same file multiple times quickly, the picker dismisses not only itself but also the parent view controller it was presented from.
Steps to Reproduce
Create a simple view controller and present another one modally over it.
From that presented view controller, present a UIDocumentPickerViewController with allowsMultipleSelection = false.
Tap quickly on the same file in the picker 2 times.
Result: Both the document picker and the presenting view controller are dismissed.
Reproducible Code Snippet
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .green
addLabel("Parent View Controller")
DispatchQueue.main.async { [unowned self] in
let child = UIViewController()
child.view.backgroundColor = .yellow
present(child, animated: true)
child.addLabel("Child View Controller")
let vc = UIDocumentPickerViewController(
forOpeningContentTypes: [.pdf, .jpeg, .png],
asCopy: true
)
vc.allowsMultipleSelection = false
child.present(vc, animated: true)
}
}
}
extension UIViewController {
func addLabel(_ text: String) {
let label = UILabel(frame: CGRect(x: 0, y: 50, width: view.bounds.width, height: 30))
label.text = text
view.addSubview(label)
}
}
Environment
Device: iPhone 15 Pro and others
iOS version: 18.2 (reproduces on multiple iOS versions)
Occurs with: .pdf, .jpeg, .png file types
Mode: Both simulator and real device
Notes
Happens consistently with fast multiple taps on the same file.
This breaks expected view controller stack behavior.
问题描述:
环境:
Xcode 版本: 16.3
*macOS 版本: 15.4
项目类型: SwiftUI App with SwiftData
问题摘要:
当在 Xcode 项目的 "Signing & Capabilities" 中为启用了 iCloud 能力的应用关联一个具体的 iCloud Container 时,即使代码中并未显式启用 CloudKit 同步(例如,未在 ModelConfiguration 中设置 cloudKitDatabase),SwiftData 的 ModelContainer 在应用启动初始化时也会立即失败并导致崩溃。如果仅启用 iCloud 能力但不选择任何 Container,应用可以正常启动。此问题在使用空的 Schema([]) 进行测试时依然稳定复现。
复现步骤 (使用最小复现项目 - MRE):
使用 Xcode 16.3 创建一个新的 SwiftUI App 项目 (例如,命名为 CloudKitCrashTest)。
在创建时不要勾选 "Host in CloudKit",或者,如果勾选了,先确保后续步骤覆盖相关设置。Storage 选择 None 或 SwiftData 均可复现。
修改 CloudKitCrashTestApp.swift 文件,添加 SwiftData 导入和基本的 ModelContainer 初始化逻辑。关键代码如下:
import SwiftUI
import SwiftData
@main
struct CloudKitCrashTestApp: App {
let sharedModelContainer: ModelContainer
init() {
// 使用空 Schema 进行诊断
let schema = Schema([])
// *不* 指定 cloudKitDatabase
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
sharedModelContainer = try ModelContainer(for: schema, configurations: [modelConfiguration])
print("ModelContainer created successfully.")
} catch {
// 在关联 Container 后,会在此处崩溃
fatalError("Could not create ModelContainer: \(error)")
}
}
var body: some Scene {
WindowGroup {
ContentView()
.modelContainer(sharedModelContainer)
}
}
}
// ... ContentView 定义 ...
进入项目的 Signing & Capabilities 标签页。
点击 + Capability 添加 iCloud。
在 iCloud 服务中,勾选 CloudKit。
此时,不要在 Containers 部分选择任何容器。
运行应用: 应用应该能够成功启动,并在控制台打印 "ModelContainer created successfully."。
停止应用。
回到 Signing & Capabilities -> iCloud -> Containers。
点击 + 添加一个新的自定义容器,或选择 Xcode 默认建议的容器。确保一个容器 ID 被明确选中。
再次运行应用: 应用现在会在启动时立即崩溃,fatalError 被触发。
预期结果:
即使在 Signing & Capabilities 中关联了 iCloud Container,应用也应该能够成功初始化 ModelContainer(尤其是当代码中未使用 cloudKitDatabase 或使用空 Schema 时),不应崩溃。
实际结果:
应用在 ModelContainer 初始化时崩溃,抛出 fatalError,错误信息为:
Could not create ModelContainer: SwiftDataError(_error: SwiftData.SwiftDataError._Error.loadIssueModelContainer, _explanation: nil)
补充说明:
此问题在 iPhone 模拟器上稳定复现。
尝试清理构建文件夹 (Clean Build Folder)、删除派生数据 (Derived Data) 未能解决问题。
使用 Xcode 模板创建项目(勾选 "Host in CloudKit")并在之后手动取消选择 Container 可以运行,但一旦重新选择 Container 就会崩溃,现象一致。
这表明问题与 ModelContainer 初始化过程在检测到项目关联了具体 iCloud Container 标识符(可能涉及读取 .entitlements 文件或准备相关环境)时发生的内部错误有关,而不是由于实际的 CloudKit 同步代码或模型定义。
影响:
此 Bug 阻止了在当前的 Xcode 和 macOS 环境下开发和测试任何需要关联 iCloud Container 的 SwiftData 应用。
Hi,
I got a problem with severe hangs when I use code like this on tvOS 18.2
If I try to use HStack instead of LazyHStack inside the scrollview then the problem does not occur any more but then the scroll performance is compromised and the vertical scroll is no longer that smooth. Does someone has any experience with this? Is this SwiftUI problem or am I missing something?
ScrollView {
LazyVStack {
ForEach(0...100, id: \.self) { _ in
ScrollView {
LazyHStack {
ForEach(0...20, id: \.self) { _ in
Color.red.frame(height: 300)
}
}
}
}
}
}