Posts under App & System Services topic

Post

Replies

Boosts

Views

Activity

Persistent CloudKit Internal Error
I have integrated CloudKit into a CoreData application and am ready to deploy the schema to production but keep getting an "internal error" when trying to deploy to production or reset my CloudKit environment. I have attached images of what I am seeing including one of the console error. Is there any way to resolve this?
5
1
675
Jan ’25
WatchConnectivity Swift 6 - Incorrect actor executor assumption
I am trying to migrate a WatchConnectivity App to Swift6 and I found an Issue with my replyHandler callback for sendMessageData. I am wrapping sendMessageData in withCheckedThrowingContinuation, so that I can await the response of the reply. I then update a Main Actor ObservableObject that keeps track of the count of connections that have not replied yet, before returning the data using continuation.resume. ... @preconcurrency import WatchConnectivity actor ConnectivityManager: NSObject, WCSessionDelegate { private var session: WCSession = .default private let connectivityMetaInfoManager: ConnectivityMetaInfoManager ... private func sendMessageData(_ data: Data) async throws -> Data? { Logger.shared.debug("called on Thread \(Thread.current)") await connectivityMetaInfoManager.increaseOpenSendConnectionsCount() return try await withCheckedThrowingContinuation({ continuation in self.session.sendMessageData( data, replyHandler: { data in Task { await self.connectivityMetaInfoManager .decreaseOpenSendConnectionsCount() } continuation.resume(returning: data) }, errorHandler: { (error) in Task { await self.connectivityMetaInfoManager .decreaseOpenSendConnectionsCount() } continuation.resume(throwing: error) } ) }) } Calling sendMessageData somehow causing the app to crash and display the debug message: Incorrect actor executor assumption. The code runs on swift 5 with SWIFT_STRICT_CONCURRENCY = complete. However when I switch to swift 6 the code crashes. I rebuilt a simple version of the App. Adding bit by bit until I was able to cause the crash. See Broken App Awaiting sendMessageData and wrapping it in a task and adding the @Sendable attribute to continuation, solve the crash. See Fixed App But I do not understand why yet. Is this intended behaviour? Should the compiler warn you about this? Is it a WatchConnectivity issue? I initially posted on forums.swift.org, but was told to repost here.
3
0
1.2k
Jan ’25
New apple pay in PC chrome dosn't work with iOS 18
I've encountered an issue with Apple Pay in PC Chrome with iOS 18. Below is the scenario and code for reference: Issue Scenario: A button is clicked to initiate the Apple Pay process. A QR code window pops up, which I scan with my phone. As soon as the session is established, the window closes immediately, not allowing the user to select a payment card. No errors appear in the console. Here's the code snippet for handling the Apple Pay button click: const onApplePayButtonClicked = () => { if (!window.ApplePaySession) { return; } log('Apple Pay button clicked'); const request = { countryCode: 'UA', currencyCode: 'UAH', merchantCapabilities: ['supports3DS'], supportedNetworks: ['visa', 'masterCard'], total: { label: 'PoC Merchant Apple Pay', type: 'final', amount: amount.toString(), }, }; const session = new window.ApplePaySession(3, request); session.onvalidatemerchant = async (event) => { try { log('Creating ApplePaySession'); const response = await fetchAppleSessionAPI(event.validationURL, applePayMercantId, { deviceId, refreshToken }); log('validateMerchantResponse', response); session.completeMerchantValidation(response.applePaySessionData); } catch (error) { log('validateMerchantError', error); } }; session.onshippingmethodselected = () => { const newTotal = { label: 'PoC Merchant Apple Pay', type: 'final', amount: amount.toString(), }; session.completeShippingMethodSelection(window.ApplePaySession.STATUS_SUCCESS, {}, newTotal); }; session.onpaymentauthorized = async (event) => { log('onpaymentauthorized', event); const result = { status: window.ApplePaySession.STATUS_SUCCESS, }; session.completePayment(result); log('TOKEN', event.payment.token); }; session.begin(); }; Troubleshooting Steps Taken: Verified that window.ApplePaySession is available. Checked for any console errors—none found. Confirmed that the QR code scanning and session initiation work as expected. Expected Behavior: After scanning the QR code and establishing the session, the user should be able to select a payment card and proceed with the payment flow. Current Behavior: The window closes immediately after the session is established, preventing card selection. Has anyone else faced this issue or has insights on how to resolve it? Thanks in advance!
2
0
674
Jan ’25
Unable to detect changes to language from Settings post a initial manual override
We have a requirement in the App in which for certain countries/regions we have to support only certain languages. If the User's current language is not supported, We would have a custom fallback/default language for specific regions. like it could be Arabic for middle east countries, English for Europe etc. Since iOS localization allows fallback to only one Base localizations, we had to take a custom approach to implement the same. To achieve the same, we checked the User's current language and Country and if required we overrode the "kLanguageBundleKey" property within the Bundle class, and set the following user defaults, (here for example say english) Foundation.UserDefaults.standard.set(["en"], forKey: "AppleLanguages") Foundation.UserDefaults.standard.synchronize(). And it works! The problem is that in iOS, post this override, when the user changes language from the Phone's settings app. Launches our app, Bundle.main.preferredLocalizations.first always gives what we overwrote and not the one present in the Phone's settings. Given this, Is there way to get the user's current language even after such overrides? or should we do the language overrides some other way?
1
0
877
Jan ’25
Detecting Driving State with Core Motion Framework - Automotive Accuracy Issues
I am working on an iOS app where I need to detect when a user starts and stops driving using the Apple Core Motion framework. I've implemented the following MotionActivityManager class to handle activity updates and display the detected states in a SwiftUI view. While I can accurately detect "Stationary" and "Walking" states, detecting the "Driving" (Automotive) state has been unreliable. The accuracy often fails, and the framework frequently misclassifies driving as other states like "Unknown" or "Walking." Here's the implementation: @Published var motionStates: [MotionState] = [] @Published var startDate: String = "" @Published var confidence: String = "" init() { setupDefaultStates() startActivityUpdates() } private func setupDefaultStates() { motionStates = [ MotionState(label: "Stationary", value: false), MotionState(label: "Walking", value: false), MotionState(label: "Running", value: false), MotionState(label: "Automotive", value: false), MotionState(label: "Cycling", value: false), MotionState(label: "Unknown", value: false) ] } func startActivityUpdates() { guard CMMotionActivityManager.isActivityAvailable() else { print("Motion activity is not available.") return } motionActivityManager.startActivityUpdates(to: .main) { [weak self] motion in guard let self = self, let motion = motion else { return } DispatchQueue.main.async { self.updateProperties(with: motion) } } } private func updateProperties(with motion: CMMotionActivity) { motionStates = [ MotionState(label: "Stationary", value: motion.stationary), MotionState(label: "Walking", value: motion.walking), MotionState(label: "Running", value: motion.running), MotionState(label: "Automotive", value: motion.automotive), MotionState(label: "Cycling", value: motion.cycling), MotionState(label: "Unknown", value: motion.unknown) ] startDate = dateFormatter.string(from: motion.startDate) switch motion.confidence { case .low: confidence = "Low" case .medium: confidence = "Medium" case .high: confidence = "High" @unknown default: confidence = "Unknown" } } } struct MotionState: Identifiable { let id = UUID() let label: String let value: Bool } struct ContentView: View { @StateObject private var motionManager = MotionActivityManager() var body: some View { ScrollView { VStack(spacing: 16) { ForEach(motionManager.motionStates) { state in LabelView(label: state.label, value: state.value ? "True" : "False") } LabelView(label: "Confidence", value: motionManager.confidence) } .padding() } .onAppear { UIApplication.shared.isIdleTimerDisabled = true motionManager.startActivityUpdates() } .navigationTitle("Motion Activity") } } Issues: The motion.automotive state is often not detected accurately. The confidence level remains low for the automotive state, even when the device is clearly in a car. How can I improve the detection accuracy of the "Driving" state using the Core Motion framework?
1
0
483
Jan ’25
Disable SwiftData CloudKit sync when iCloud account is unavailable
I have a widely-used app that lets users keep track of personal data. This data is persisted with SwiftData, and synced with CloudKit. I understand that if the user's iCloud account changes on a device (for example, user logs out or toggles off an app's access to iCloud), then NSPersistentCloudKitContainer will erase the local data records on app launch. This is intentional behavior, intended as a privacy feature. However, we are receiving regular reports from users for whom the system has incorrectly indicated that the app's access to iCloud is unavailable, even when the user hasn't logged out or toggled off permission to access iCloud. This triggers the behavior to clear the local records, and even though the data is still available in iCloud, to the user, it looks like their data has disappeared for no reason. Helping the user find and troubleshoot their iCloud app data settings can be very difficult, since in many cases the user has no idea what iCloud is, and we can't link them directly to the correct settings screen. We seem to get these reports most frequently from users whose iCloud storage is full (which feels like punishment for not paying for additional storage), but we've also received reports from users who have enough storage space available (and are logged in and have the app's iCloud data permissions toggled on). It appears to happen randomly, as far as we can tell. I found a blog post from two years ago from another app developer who encountered the same issue: https://crunchybagel.com/nspersistentcloudkitcontainer/#:~:text=The%20problem%20we%20were%20experiencing To work around this and improve the user experience, we want to use CKContainer.accountStatus to check if the user has an available iCloud account, and if not, disable the CloudKit sync before it erases the local data. I've found steps to accomplish this workaround using CoreData, but I'm not sure how to best modify the ModelContainer's configuration after receiving the CKAccountStatus when using SwiftData. I've put together this approach so far; is this the right way to handle disabling/enabling sync based on account status? import SwiftUI import SwiftData import CloudKit @main struct AccountStatusTestApp: App { @State private var modelContainer: ModelContainer? var body: some Scene { WindowGroup { if let modelContainer { ContentView() .modelContainer(modelContainer) } else { ProgressView("Loading...") .task { await initializeModelContainer() } } } } func initializeModelContainer() async { let schema = Schema([ Item.self, ]) do { let accountStatus = try await CKContainer.default().accountStatus() let modelConfiguration = ModelConfiguration( schema: schema, cloudKitDatabase: accountStatus == .available ? .private("iCloud.com.AccountStatusTestApp") : .none ) do { let container = try ModelContainer(for: schema, configurations: [modelConfiguration]) modelContainer = container } catch { print("Could not create ModelContainer: \(error)") } } catch { print("Could not determine iCloud account status: \(error)") } } } I understand that bypassing the clearing of local data when the iCloud account is "unavailable" introduces possible issues with data being mingled on shared devices, but I plan to mitigate that with warning messages when users are in this state. This would be a far more preferable user experience than what's happening now.
1
0
1.1k
Jan ’25
Xcode 16 beta 6 - Widget gallery doesn't show app in iOS 15
We have minimum deployments set to iOS 15 in one of the app for both application and widget target. When install app in simulator or real device using Xcode 15.4, it works fine in iOS15, iOS16, iOS17 and iOS18 beta. When install app in simulator or real device, using Xcode 16 beta 6, it works fine in iOS16, iOS17 and iOS18 beta but in iOS 15, our app doesn't show in widget gallery.
18
12
4.7k
Jan ’25
Triggering a Live Activity from a Widget-Based App Intent
Hello everyone, I have an app leveraging SwiftData, App Intents, Interactive Widgets, and a Control Center Widget. I recently added Live Activity support, and I’m using an App Intent to trigger the activity whenever the model changes. When the App Intent is called from within the app, the Live Activity is created successfully and appears on both the Lock Screen and in the Dynamic Island. However, if the same App Intent is invoked from a widget, the model is updated as expected, but no Live Activity is started. Here’s the relevant code snippet where I call the Live Activity: ` await LiveActivityManager.shared.newSessionActivity(session: session) And here’s how my attribute is defined: struct ContentState: Codable, Hashable { var session: Session } } Is there any known limitation or workaround for triggering a Live Activity when the App Intent is initiated from a widget? Any guidance or best practices would be greatly appreciated. Thank you! David
1
0
615
Jan ’25
Apple Watch CMMotionManager acceleration direction
I'm working with the Apple Watch's acceleration data and have referred to the document Identify the coordinate axes of the device. According to this document, the X-axis points to the right side of the watch, the Y-axis points towards the top side, and the Z-axis points towards the user. However, when I place the watch on a flat surface and move it horizontally to the right, I observe that the X-axis acceleration is negative. Similarly, when I move the watch vertically upwards, the Y-axis acceleration also shows a negative value. Is this expected behavior, or am I misunderstanding something about the coordinate system or acceleration readings?
5
0
532
Jan ’25
Not able to log proc ID in controlFilter
Didn't get any response last time so reposting my query. I know procID is of no use in IOS but just for curiosity I am logging proc ID in control Filter and data Filter. I was trying to log the flow description using control filter and data filter. But when I am trying to log the proc ID in control filter, it is always 0, but in data filter, it logs some value. Same goes with the eproc ID. I want to use the flow description data in some other target so I will be sending the data using sockets and I cannot share data from data filter due to its restrictions and control filter isn't providing the proc ID. What should I do?
3
0
312
Jan ’25
Message Filter Extension and multiple servers
In the documentation for a Message Filter Extension it states: If you have servers that can help your app extension determine how to handle a message, you must add the Associated Domains capability to your Xcode project and specify those domains. (https://developer.apple.com/documentation/sms_and_call_reporting/sms_and_mms_message_filtering/creating_a_message_filter_app_extension) The words servers and domains are in the plural. If it's possible to specify multiple servers/domains for a Message Filter Extension then how is that done? There's no documentation nor reference for that. If multiple domains can be added to the info.plist then what is the iOS behavior in that case? Can the extension supply/change which domain is used at run time?
0
0
460
Jan ’25
Screen-time in Device Activity Report Extension vs In Phone Settings
Am showing daily screen-time of a user in my app in Device Activity Report Extension. The only way to get that is to sum up all the activityDuration of apps/categories/domains. But it differs a lot from phone's settings screen-time, why? I have debugged in details and counted manually the time spent on each app and it turned out that the calculation is appearing correctly in my app but Phone settings showing quite less time on top (Day).
0
0
392
Jan ’25
Crash within com.apple.CFNetwork.Connection , specifically due to EXC_BAD_ACCESS KERN_INVALID_ADDRESS.
Crash within com.apple.CFNetwork.Connection , specifically due to EXC_BAD_ACCESS KERN_INVALID_ADDRESS. The crash occurred within the nghttp2_session_del() function indicating a problem with the nghttp2 library, which is commonly used for HTTP/2 communication. This points towards a memory management issue. EXC_BAD_ACCESS generally signifies that the application attempted to access memory it didn't have permission to access, often caused by using a pointer after it has been freed or pointing to an invalid memory address. ** Crashed: com.apple.CFNetwork.Connection 0 libapple_nghttp2.dylib 0xa6ec nghttp2_session_del + 124 1 CFNetwork 0xace4c + 428 2 CFNetwork 0xacc80 + 36 3 libdispatch.dylib 0x2370 _dispatch_call_block_and_release + 32 4 libdispatch.dylib 0x40d0 _dispatch_client_callout + 20 5 libdispatch.dylib 0xb6d8 _dispatch_lane_serial_drain + 744 6 libdispatch.dylib 0xc214 _dispatch_lane_invoke + 432 7 libdispatch.dylib 0xd670 _dispatch_workloop_invoke + 1732 8 libdispatch.dylib 0x17258 _dispatch_root_queue_drain_deferred_wlh + 288 9 libdispatch.dylib 0x16aa4 _dispatch_workloop_worker_thread + 540 10 libsystem_pthread.dylib 0x4c7c _pthread_wqthread + 288 11 libsystem_pthread.dylib 0x1488 start_wqthread + 8 ** The stack trace does not point to any code within our product codebase, hence making it difficult to pinpoint the root cause of the issue as there are multiple network calls running concurrently during the app's runtime.
4
1
446
Jan ’25
NEFilterManager.shared().loadFromPreferences never invoke completionHandler
NEFilterManager.shared().loadFromPreferences { loadError in DispatchQueue.global.async { ... } } the code above is executed in an app-like deamon and completionHandler was never invoked, same code in an application works fine.(they are both packed with content filter network system extension) is it because of the restriction of app-like deamon?
1
0
382
Jan ’25
Sleep, darkwake and Wake on Lan (macos)
Hey everyone, I’m trying to set up something that seems simple in theory but is turning out to be quite tricky: I want to create a system to remotely wake a sleeping Mac. Here’s what I’ve done so far: I’ve enabled “Wake for Network Access” in the settings. I’m sending Wake-on-LAN (WOL) magic packets to wake the machine. However, I’m running into the following issues: The WOL packets successfully wake the Mac, but only for about 30 seconds to 1 minute. Sending repeated packets doesn’t seem to reset the “awake time.” The Mac goes back to sleep even if background processes are running, or if I use tools like Amphetamine to keep it awake. From what I’ve read, waking a Mac via WOL or similar network events doesn’t fully wake the system. Instead, it enters a state called "darkwake." Interestingly, accessing shared drives via SMB fully wakes the Mac and keeps it awake as long as I’m actively browsing folders. I’ve also heard that a Plex server can keep the Mac awake as long as playback is detected from a client so they clearly have figured out something. I’ve posted in several forums but haven’t found a solution. Most people suggest “disabling sleep” entirely, which, to be honest, isn’t a solution at all. If anyone has insights into the mechanics of darkwake or knows how to fully wake a Mac remotely, I’d greatly appreciate your help! Thanks in advance!
1
0
679
Jan ’25
Does EV Charging entitlement support CPSearchTemplate?
I am developing a CarPlay app, that has been approved for EV Charging entitlement. Could you please confirm if the given entitlement supports CPSearchTemplate template as there is some confusion here. I tried using the template by referring to the below link, https://developer.apple.com/documentation/carplay/cpsearchtemplate Here is the snippet, class SearchCPView: UIResponder, CPSearchTemplateDelegate { var searchTemplate: CPSearchTemplate = CPSearchTemplate() override init() { super.init() searchTemplate.delegate = self } func getSearchTemplate(interfaceController: CPInterfaceController?) -> CPGridTemplate { let searchGridButton = CPGridButton(titleVariants: [CarplayButtonTitles.search], image: UIImage(named: ImagesConstants.CarPlay.searchGrid) ?? UIImage(), handler: {[self] _ in guard let controller = interfaceController else { return } controller.pushTemplate(self.searchTemplate, animated: true) { status, error in print(status) } }) let gridTemplate = CPGridTemplate(title: "", gridButtons: [searchGridButton]) return gridTemplate } func searchTemplate(_ searchTemplate: CPSearchTemplate, selectedResult item: CPListItem) async { print(item) } func searchTemplate(_ searchTemplate: CPSearchTemplate, updatedSearchText searchText: String) async -> [CPListItem] { print(searchText) return [CPListItem(text: "", detailText: "")] } } On push, I am getting an exception, *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported object <CPSearchTemplate: 0x30056df00> <identifier: 28, userInfo: (null), tabTitle: (null), tabImage: (null), showsTabBadge: 0> passed to pushTemplate:animated:completion:. Allowed classes: {( CPTabBarTemplate, CPActionSheetTemplate, CPAlertTemplate, CPGridTemplate, CPPointOfInterestTemplate, CPInformationTemplate, CPContactTemplate, CPListTemplate )}'
1
0
342
Jan ’25