Delve into the world of built-in app and system services available to developers. Discuss leveraging these services to enhance your app's functionality and user experience.

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Sharing a JPEG via Action or Share Extension fails in Photos on macOS
We have a Share Extension that fails in Photos on macOS when trying to share a JPEG image for the following reason: From the NSItemProvider we get from the NSExtensionItem.attachments, we try to load the image using loadFileRepresentation(forTypeIdentifier: “public.image”, completionHandler: …). This fails for .jpeg images in the library. There seems to be a mismatch in expected and actual file extension internally. Here is the log: Error copying file type public.image. Error: Error Domain=NSItemProviderErrorDomain Code=-1000 "Cannot load representation of type public.jpeg" UserInfo={NSLocalizedDescription=Cannot load representation of type public.jpeg, NSUnderlyingError=0x1527c1a80 {Error Domain=NSItemProviderErrorDomain Code=-1 "Cannot copy file at URL file:///Users/frank/Library/Containers/com.apple.Photos/Data/tmp/TemporaryItems/ShareKit-Exports/7CCFA760-AAC9-42B0-812D-68F051ED1543/F912E593-2BE5-4E70-86AB-7657A40657E5/IMG_3517.jpg." UserInfo={NSLocalizedDescription=Cannot copy file at URL file:///Users/frank/Library/Containers/com.apple.Photos/Data/tmp/TemporaryItems/ShareKit-Exports/7CCFA760-AAC9-42B0-812D-68F051ED1543/F912E593-2BE5-4E70-86AB-7657A40657E5/IMG_3517.jpg., NSUnderlyingError=0x152789670 {Error Domain=NSItemProviderErrorDomain Code=-1 "Cannot create a temporary file. Error: Undefined error: 0" UserInfo={NSLocalizedDescription=Cannot create a temporary file. Error: Undefined error: 0}}}}}``` In the specified folder, there is an image, however, it’s named IMG_3517.jpeg, not IMG_3517.jpg. This seems to be a bug in Photo’s item provider implementation. If we use loadObject(ofClass: URL.self, completionHandler: …) instead, we get the correct .jpeg URL in the completion handler.
3
1
1.3k
Nov ’25
Issues Handling Multiple Incoming Calls in CallKit
Certainly! Here's a concise version of your forum post: Title: Issues Handling Multiple Incoming Calls in CallKit Body: Hello, I'm using CallKit and I am encountering challenges with handling multiple incoming calls. Current Configuration: configuration.maximumCallsPerCallGroup = 5 configuration.maximumCallGroups = 3 This setup aims to allow up to 5 calls per group. Observed Behavior: Despite the configuration, the system UI seems to limit the number of calls per group, often defaulting to "End & Accept" instead of "Hold & Accept" when a third call comes in. Questions: Is there a documented system-imposed limit on the number of calls per group or total calls, even if maximumCallGroups and maximumCallsPerCallGroup are set higher? How does the system UI behave when these limits are exceeded? Are there known UI constraints or fallback behaviors? Are there best practices for handling scenarios where the system UI cannot display all calls, such as gracefully managing incoming calls or providing alternative UI solutions? Any insights or experiences with similar configurations would be greatly appreciated. Thank you. Feel free to copy and paste this directly into the Apple Developer Forums. If you need further assistance or adjustments, let me know!
3
0
143
Nov ’25
Action Extensions: How do Amazon & Google open their apps?
Both follow the same pattern: show the image that is being shared along with a CTA button about doing something with it in their app. When you tap the button, their app opens. Is there some kind of magic conditions that tapping the button creates that makes extensionContext.open(_ URL: URL, completionHandler: ((Bool) -> Void)?) accept a URL for opening the app? Or are they just using the "walk the responder chain" hack and using the user's intent to do something in their app as sufficient justification for using it? I've tried opening a registered URL scheme for my app synchronously with the button tap, but it still is refusing to open (callback returns false).
0
0
42
Nov ’25
Share Extension not working on macOS Tahoe and Photos App
When my Share Extension receives an image from the macOS Photos app on Tahoe, the NSItemProvider passes a URL to an image file in a temporary location. All attempts to read that file fail silently, such as with NSImage(contentsOfFile) I can see that the file does exist in Finder. This code did work in previous macOS versions. It seems like a permissions issue, but startAccessingSecurityScopedResource had no effect. Other platforms work, other apps work, such as shares from Finder, which shares via data instead of a url. I'm really stuck. Has anyone else run into this? // make sure provider has a conforming item if itemProvider.hasItemConformingToTypeIdentifier(imageType) { do { let data = try await itemProvider.loadItem(forTypeIdentifier: imageType, options: nil) // data may be image NativeImage, Data, or a URL to an image file. // figure out which by casting, then attempt to load uiImage if let image = data as? NativeImage { print("found NativeImage") self.images.append(image) } else if let data = data as? Data { print("found Data") if let image = NativeImage(data: data) { self.images.append(image) } } else if let url = data as? URL{ print("found URL") if let image = NativeImage(contentsOfFile: url.path) { print("loaded from URL") self.images.append(image) } } }catch{ print("⛔️ Share Extension Error: \(error.localizedDescription)") } }
1
0
142
Nov ’25
SMS Filter Extension - No Categories showing
Hi, I developed an iOS app which will do SMS filtering by following this documentation. https://developer.apple.com/documentation/identitylookup/sms-and-mms-message-filtering) I built the app and send Test Flights to different testers. All the Testers from Sri Lanka (an asian country) says filtering is working and they can see all the enabled categories on the Messages too (including iOS 26). But the testers from Mexico cannot see the categories and filtering is not working. On official documentation there is nothing about supported countries. But I found true caller article https://support.truecaller.com/support/solutions/articles/81000406341-how-do-i-enable-sms-filtering-on-iphone mentioning it support only few countries for SMS filtering. Currently available in the following countries: India, Nigeria, South Africa, Kenya, Bangladesh, Sri Lanka. Our previous Categories filtering are still available for: Australia, Bahrain, Canada, Ghana, Tanzania, United Kingdom, United Arab Emirates, United States of America, Zambia Following article https://clearstream.io/blog/ios-26-iphone-new-text-message-filtering is saying some categories are supported by only Brazil and India. Still I could not find any official documentations saying different country supports.
0
0
59
Nov ’25
URLSession Token Authentication: What's the 'correct' way to do it?
I'm working on an API client for a REST service that uses a custom token-based authentiation scheme. The app hits a specificed authentication endpoint with a username and password, said endpoint returns a token that's good for X amount of time, and the app passes that token along with every subsequent request. When that token expires, we start over.Most literature out there tells me to manually set the Authorization header on my request, but official Apple documentation discourages this, as that header is meant to be 'owned' by the built-in HTTP loading system. That said, official documentation on the 'correct' way to do this is shockingly lacking, and the standard didReceiveChallenge callbacks seem better suited for non-custom Basic/Digest/etc authentication schemes. One thought I had was registering my own URLProtocol subclass to handle our custom flow. However, while I haven't had a chance to sit down and take a crack at that yet, my understanding from skimming these forums is that it's suffering from some bit-rot right now, so it 'might' (?) not be the best choice. That, and it's also not clear to me whether the rules around the Authorization header change when a custom URLProtocol is in play.So, community (paging eskimo in particular!), what's the correct way for me to go about this?
5
3
9.7k
Nov ’25
Database disk image is malformed in Call Blocking
I have an app developed by using the Callkit/Call-Blocking and received feedback from individual users, when using [cxcalldirectorymanager reloadextensionwithidentifier] to write call blocking data, it returned error code 11 with the following contents: errorCode: 11 errorDomain: com.apple.callkit.database.sqlite errorDescription: sqlite3_step for query 'DELETE FROM PhoneNumberBlockingEntry WHERE extension_id =?' returned 11 (11) errorMessage 'database disk image is malformed' I want to know the reasons for this error and how to solve it,Thanks!
4
3
1.1k
Nov ’25
Callkit/Call-Blocking Error
I have an app developed by using the Callkit/Call-Blocking and received feedback from individual users, when using [cxcalldirectorymanager reloadextensionwithidentifier] to write call blocking data, it returned error code 11 with the following contents: errorCode: 11 errorDomain: com.apple.callkit.database.sqlite errorDescription: sqlite3_step for query 'DELETE FROM PhoneNumberBlockingEntry WHERE extension_id =?' returned 11 (11) errorMessage 'database disk image is malformed' I want to know the reasons for this error and how to solve it,Thanks!
2
1
142
Nov ’25
iOS18,CoreText EXC_BREAKPOINT
0 CoreText TDecorationRun::CalculateGlyphIntersections(CGAffineTransform, TRun const&, double, double, std::__1::function<void (double, double)> const&) const + 1704 1 CoreText TDecorationRun::CalculateGlyphIntersections(CGAffineTransform, TRun const&, double, double, std::__1::function<void (double, double)> const&) const + 1440 2 CoreText void TDecorationRun::DrawDecorationRun<(anonymous namespace)::TRunAdapter>(CGContext*, (anonymous namespace)::TRunAdapter, (anonymous namespace)::TRunAdapter, double)::'lambda'(CGPoint, CGPoint)::operator()(CGPoint, CGPoint) const + 508 3 CoreText TDecorator::DrawDecoration(TLineDrawContext const&, TLine const&, TInlineVector<DecorationOverride, 30ul> const*) + 2356 4 CoreText TLine::DrawUnderlines(CGContext*) const + 104 5 CoreText TLine::DrawGlyphs(CGContext*) const + 292
10
2
263
Nov ’25
Alarm Kit - Sound Repetition
Hello, If I fire an alarm using AlarmKit, using a ringtone that lengths less than 30 seconds, in the last version of iOS (26.0) the sound doesn't repeat. (After about 30 seconds, the sounds stops). BUT in the current version of iOS (26.1), the sound repeats until we slide Stop, thing that I doesn't want. So, is there a way to restore the previous behavior? Or is there a property that can fill this lack? Thank you very much.
0
0
224
Nov ’25
Voip Notifaction in Background
My app uses CallKit and PushKit for real-time voice and video calls. I want to configure VoIP push notifications so incoming calls can wake the app, even when it’s in the background or terminated. Right now, I only see the normal Push Notifications option in my App ID settings and no VoIP Services section.
3
1
203
Nov ’25
ASAM supported App on MacOS
I'd like to write a MacOS App that makes use of the ASAM functonality as described here: https://developer.apple.com/documentation/devicemanagement/autonomoussingleappmode I have tried to use the example with Safari, and have enrolled a Mac with MDM and installed the profile. But when opening Safari it does not appear in Single App Mode. I've only tried it with Safari so far but eventually I want to be able to use my own App. Is there an API that has to be used to enter single app mode programmatically? I've found the whole Assessment API but as I do not have the required entitlements to use that API I'm looking for another solution. The documentation on ASAM does not mention the Assessment API at all, is it the only way to enter "a" single app mode on MacOS? How is the Assessment API linked to ASAM? As far as I have understood there's the com.apple.developer.automatic-assessment-configuration entitlement but apps having this do not need to be configured via MDM? I'm really confused as to what's actually required to be able to get into single app mode on MacOS. The app I'm trying to write isn't really related to an an assessment task, but I am doing this for an academic institution so maybe requesting the entitlement would be feasable. The documentation on ASAM also mentions that the App is granted access to the "Accessibility" API and I've found the whole UIAccessibility/requestGuidedAccessSession but this does not seem to be available on MacOS proper? Any help on this would be greatly appreciated.
0
0
83
Nov ’25
Non–App Clip NFC URLs show CPSErrorDomain error 2 after creating 50+ Advanced App Clips
We’re seeing unexpected NFC behavior once our app has 50+ Advanced App Clips created. Expected: Scanning an NFC tag with a URL that is NOT an App Clip invocation should show the standard “Open in Safari” notification. Actual: After we create ~50+ Advanced App Clips, scanning NFC tags for URLs on the same domain that are not associated with App Clips consistently shows “CPSErrorDomain error 2” instead of the Safari prompt.
 QR codes for the same non–App Clip URLs work as expected (shows Safari prompt). Clearing the App Clips “Experience Cache” sometimes helps briefly, but the error returns on consequent scans. Notes: Domain has valid AASA. App Clip invocation URLs work as expected.
 The issue appears tied to the number of Advanced App Clips configured. Below ~50, non–App Clip NFC scans behave correctly; above that, they fail.
 Affected across multiple devices and iOS versions tested. Repro steps: Configure 50+ Advanced App Clips for paths on a single domain.
 Encode a different URL on the same domain that is NOT listed as an App Clip invocation into an NFC tag.
 Scan the NFC tag on iPhone.
 Observe “CPSErrorDomain error 2” instead of the “Open in Safari” notification. Impact: blocks our NFC use case for regular web links once we scale App Clip experiences. Sysdiagnose #: FB20563121
0
0
75
Nov ’25
Does Contact Provider supports Localize when ask Permission
When I call https://developer.apple.com/documentation/contactprovider/contactprovidermanager/enable() to request to use Contact Provider, I received a dialog with message like this "App Name would like to add its contacts as its own list. Contacts added this way can be removed from settings". I would like to support this message in Japanese or other languages. Is it possible?
3
1
112
Nov ’25
Missing com.apple.developer.adservices entitlements
I am trying to build my app and want to be able to integrate with apple ads services so I can get my users attribution token. I tried a added the "com.apple.developer.adservices" entitlement but now that I build my app it fails with the following error include the com.apple.developer.adservices entitlement. Profile qualification is using entitlement definitions that may be out of date. Connect to network to update. What do I need to do to make this work, I tried and cant fina any docs online
3
0
108
Nov ’25
How to block large lists of domains (1000+) using Screen Time API?
I'm developing a parental control app that needs to block adult/18+ websites using the Screen Time API. I've run into scaling issues with 'ManagedSettings.webContent.blockedByFilter`. Environment: iOS 18.x, real device (iPhone) ManagedSettings framework Screen Time permissions granted Current Behavior: The Question: Commercial parental control apps successfully block tens of thousands of domains. What API or architecture should I be using to scale beyond 30-50 domains? Approaches I'm considering: Safari Content Blockers (limited to Safari only) Multiple ManagedSettingsStore instances Network Extension / DNS filtering A different Screen Time API approach What's the recommended way to block large domain lists (1000-60000+) across all apps and browsers? Any guidance appreciated! //33 domains - Works perfectly let blockedSites: Set<WebDomain> = [ WebDomain(domain: "example1.com"), WebDomain(domain: "example2.com"), // ... 31 more domains ] store.webContent.blockedByFilter = .specific(blockedSites) // All 33 domains blocked successfully // 101 domains - Complete failure (no domains blocked at all) let blockedSites: Set<WebDomain> = [ WebDomain(domain: "example1.com"), // ... 100 more domains ] store.webContent.blockedByFilter = .specific(blockedSites) // No errors thrown, but ZERO domains are blocked
1
0
116
Nov ’25
Background shield application reliability
Hello! I am working on a screentime app and wondering if anyone has had success achieving reliable background shield application while using com.apple.ManagedSettingsUI.shield-configuration-service? I recently switched from com.apple.deviceactivity.shield-configuration (which worked reliably but isn't accepted by TestFlight) and have not found any consistency getting shields to apply while the app is backgrounded. I believe this is a known limitation of ManagedSettingsUI and want to know if there are successful workarounds or any specific patterns/timing that improve consistency?
1
0
144
Nov ’25
Device Activity monitor extension Not working
anyone has the same problem which is that your device activity extension ain't working even tho all the code work perfectly in the console, I setup it in the right way , tried to make schedule and it did the same exact thing when I tried to create usage threshold. anyone know the reason for this bug? here is my extension code import ManagedSettings import FamilyControls import Foundation import OSLog import UserNotifications class MonitoringExtension: DeviceActivityMonitor { private let defaults = UserDefaults(suiteName: "group.com.William.app") private let logger = Logger(subsystem: "com.William.app", category: "MonitoringExtension") override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) { let activityRaw = activity.rawValue logger.info("Limite atteinte: \(activityRaw)") scheduleNotification(title: "Limite dépassée", body: "Tu as utilisé trop de temps sur \(activityRaw).") guard let data = defaults?.data(forKey: "\(activityRaw)_selection"), let selection = try? JSONDecoder().decode(FamilyActivitySelection.self, from: data) else { logger.warning("Pas de sélection pour \(activityRaw)") return } let store = ManagedSettingsStore() // ← LE SEUL QUI MARCHE store.shield.applications = selection.applicationTokens if !selection.categoryTokens.isEmpty { store.shield.applicationCategories = .specific(selection.categoryTokens) } logger.info("BLOCAGE ACTIF via ManagedSettingsStore.default") } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) let store = ManagedSettingsStore() store.clearAllSettings() // ← Débloque à minuit logger.info("Restrictions levées à la fin de l'intervalle") } private func scheduleNotification(title: String, body: String) { UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { granted, _ in guard granted else { return } let content = UNMutableNotificationContent() content.title = title content.body = body let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil) UNUserNotificationCenter.current().add(request) } } }
0
0
245
Nov ’25