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

Created

PTT Framework has compatibility issue with .voiceChat AVAudioSession mode
As I've mentioned before our app uses PTT Framework to record and send audio messages. In one of supported by app mode we are using WebRTC.org library for that purpose. Internally WebRTC.org library uses Voice-Processing I/O Unit (kAudioUnitSubType_VoiceProcessingIO subtype) to retrieve audio from mic. According to https://developer.apple.com/documentation/avfaudio/avaudiosession/mode-swift.struct/voicechat using Voice-Processing I/O Unit leads to implicit enabling .voiceChat AVAudioSession mode (i.e. it looks like it's not possible to use Voice-Processing I/O Unit without .voiceChat mode). And problem is following: when user starts outgoing PTT, PTT Framework plays audio notification, but in case of enabled .voiceChat mode that sound is playing distorted or not playing at all. Questions: Is it known issue? Is there any way to workaround it?
17
0
966
Feb ’25
Issues with Siri Shortcuts: Confirmation Prompt, Inconsistent Behavior
Hello Apple Developer Community, I’m working on integrating Siri into my React Native app using native iOS code and bridging to React Native. I’ve followed the necessary steps to set up Siri support, including: Adding the Siri capability. Adding Siri usage descriptions in Info.plist. Using AppIntent and AppShortcutsProvider to define shortcuts. However, I’m facing the following issues: Siri Prompts for Confirmation When a user says a phrase, Siri asks, "Turn on 'MyApp' shortcuts with Siri?" instead of directly recognizing the phrase. Is this expected behavior? If so, how can I reduce friction for users and make the experience more seamless? Inconsistent Behavior for Existing Users For users updating to a version with Siri support: When the app is closed, Siri says, "MyApp hasn't added support for that with Siri." When the app is open, Siri prompts, "Turn on shortcut for MyApp?" and rest all working fine Why does Siri not recognize the shortcut when the app is closed, even though the shortcut is defined in AppShortcutsProvider? How can I ensure that Siri recognizes the shortcut regardless of whether the app is open or closed? Other than using AppIntent and AppShortcutsProvider should i try Donating shortcuts(will that helps for updated user case). Please help me on this
8
1
620
Mar ’25
Message Filtering Extension
I have an app with Message Filtering Extension enabled and I have been experiencing unusual behaviour. When I send messages from local number to local number, the filtering is done correctly, but when I send messages from certain international number to my local number the messages are not filtered. I couldn't find any errors in Console. I see that the normalisation is correct, is there any specifications for SMS from certain countries? Or a reason why Message Filtering is not activated when a SMS is received?
1
0
297
Mar ’25
Live caller id lookup onboard appstore
I have been working to implement Apple's Live Caller ID feature, which requires setting up a relay server. Following Apple's guidelines, I submitted a request through the provided link to utilize Apple's relay server. However, it's been three weeks, and I have yet to receive a response. I contacted Apple Support, but they indicated that this is a technical matter beyond their scope.​ Has anyone successfully received confirmation from Apple regarding the use of their relay server for Live Caller ID? If so, could you share your experience or any advice on how to proceed? url: https://developer.apple.com/contact/request/live-caller-id-lookup/ Thank you.
2
0
344
Mar ’25
Behavior of CallKit with multiple incoming calls
Hi, Team. We are currently creating a VoIP calling app using pjsip and want to be able to handle 4 calls at the same time. It is also necessary to be able to notice calls that are on hold or have not answered yet in hands-free (without looking the screen). However, It seems like CallKit has the intention to silence the ringtone when multiple calls come in. Problem What does actually happen? If a second call comes in while the first one have not answered yet, CallKit screen keeps showing about the first one. If tapped "Accept" button, the second call ends. If tapped "Decline" button, CallKit screen shows about the second call at last. If the first call has put on hold before the second one comes in, CallKit screen shows "Hold & Accept" button even though the first call is already on hold. When "Hold & Accept" button is displayed, ringtones and other sounds from app stop. When tapped "Hold & Accept" button for the second call and then unhold the first one in provider(_ provider: CXProvider, perform action: CXAnswerCallAction), ringtone of the first call doesn't ring. What is expected to happen? If a second call comes in while the first one have not answered yet, CallKit screen shows about the second call. If tapped "Accept" button, the second call starts and the first call is displayed on CallKit screen. If tapped "Decline" button, the first call appears again. If the first call has put on hold before the second one comes in, CallKit screen shows only "Accept" and "Decline" button (not in full screen). If a second call comes in while the first one have not answered yet, ringtones continue to ring. When accepted the second call, ringtone of the first call rings again. Information Sample code Using CallKit to simulate three incoming calls and two alarm notifications. Whether or not the first call is put on hold before the second one comes in is switchable from the bottom menu. https://github.com/ryu-akaike/CallKit-Multiple-Incoming-Test Versions macOS: Sequoia 15.1 Xcode: 16.2 iPhone: 11 iOS: 18.1.1 Thank you. Ryu Akaike
2
0
344
Mar ’25
Live Caller ID Lookup & PIRService blocking inconsistent
I've successfully started the Live Caller ID Lookup example and initialized the PIRService. I added several identities to the input.txtpb file, some with block: true and others with block: false. Here is the file but modified phone digits: identities { key: "+40790123123" value { name: "Blocking 1" cache_expiry_minutes: 7 block: true } } identities { key: "+972526111111" value { name: "Blocking 2" cache_expiry_minutes: 7 block: true } } identities { key: "+123" value { name: "Adam" cache_expiry_minutes: 8 block: false category: IDENTITY_CATEGORY_PERSON } } identities { key: "+972526111112" value { name: "Identified Business Name 1" cache_expiry_minutes: 1 block: false category: IDENTITY_CATEGORY_BUSINESS } } identities { key: "+972526111113" value { name: "Identified Business Name 2" cache_expiry_minutes: 1 block: false category: IDENTITY_CATEGORY_BUSINESS } } The main issue is that only the number marked as +40790123123 was actually blocked, while "Blocking 2" appeared as identified contacts with their assigned name displayed. Notably, the only blocked number was a foreign number with a different country code than the number being called. The other numbers belonged to the same country. Can someone clarify whether this is a bug in the example project or an issue with the data file?
1
0
305
Mar ’25
CXCallUpdate not working for outgoing calls
I try to update remoteHandle using CXCallUpdate for outgoing call, but this works only on iOS 15 but not on 17 or 18 (16 didn't test). This problem actual only for outgoing calls, but for incoming calls update works fine. func startOutgoingCall(with callID: UUID, userID: String) { let handle = CXHandle(type: .generic, value: userID) let action = CXStartCallAction(call: callID, handle: handle) callController.requestTransaction(with: action) { [weak self] error in // ... } } func updateOutgoingCall(with callID: UUID, groupID: String) { let update = CXCallUpdate() update.remoteHandle = CXHandle(type: .generic, value: groupID) provider.reportCall(with: callID, updated: update) } I also tried phoneNumber type but it seems initial handle that I set to CXStartCallAction not possible to change (value or even type). I use this handle value to implement recall by tap on call in Recents tab of system address book. But since my calls can transform from p2p to group call, I need to update handle value or find some another way to pass call identification info.
2
0
363
Mar ’25
iOS Phone app bug: Long verdict text incorrectly truncated on call details screen
I've discovered a bug in the Phone app on iOS related to how long verdicts are displayed. When a call is identified by a third-party Caller ID app, long verdicts display correctly during the call (they auto-scroll) and in the call log (with an ellipsis at the end). However, on the call details screen, the text is strangely truncated - showing only the beginning of the string and the last word. For testing, I used this verdict: "Musclemen grow on trees. They can tense their muscles and look good in a mirror. So what? I'm interested in practical strength that's going to help me run, jump, twist, punch." I'll attach a screenshots demonstrating the problem:
0
0
308
Mar ’25
JournalingSuggestions Crashes on iOS 18 Simulator with Xcode 16.2 – Linker Error
I’m running into an issue while implementing JournalingSuggestions with Xcode 16.2 and the iOS 18 simulator. My code builds and runs fine on a physical device, but it consistently crashes on the simulator and in Xcode previews. I’ve tried several workarounds, including weak linking and solutions from this post (746843), but I’m still hitting a wall. Here’s what’s happening: I get a warning: JournalingSuggestions is not available when building for iOS Simulator. This is followed by a build error: Linker command failed with exit code 1 (use -v to see invocation). What I’ve Tried: Weak linking the JournalingSuggestions framework. Applying fixes from this post (746843), such as cleaning the build folder and using weak link. Deleting Derived Data and rebuilding. Testing on a physical device (works fine). My Setup: Xcode Version: 16.2 Simulator: iOS 18 Build Success: Works on physical device, fails on simulator/preview Code: #if canImport(JournalingSuggestions) import JournalingSuggestions #endif ... var suggestionButton: some View { #if canImport(JournalingSuggestions) #if !targetEnvironment(simulator) if #available(iOS 17.2, *) { return AnyView(journalingSuggestionsPickerButton) } #endif return AnyView(disabledSuggestionButton) #else return AnyView(disabledSuggestionButton) #endif }
1
0
328
Mar ’25
Inquiry About Deferred Deep Link Limitation and Alternative Options
Dear Apple Support Team, I hope this message finds you well. I’m reaching out to inquire about the limitations of deferred deep linking within iOS applications. Specifically, I’m interested in understanding the constraints and challenges that prevent deferred deep links from functioning as expected in certain scenarios (e.g., when the app is not installed or other related issues). Additionally, I would like to ask if there are any recommended alternative approaches or solutions to implement deep linking, ensuring that users can still be directed to specific content or screens even if they need to install the app first. Your insights and guidance would be greatly appreciated as I work to enhance the user experience in my app. Thank you for your time and assistance. Best regards, Santosh
4
5
1.2k
Mar ’25
how can i get the LiveCommunicationKit events
i have codes looks like: import UIKit import LiveCommunicationKit @available(iOS 17.4, *) class LiveCallKit: NSObject, ConversationManagerDelegate { @available(iOS 17.4, *) func conversationManager(_ manager: ConversationManager, conversationChanged conversation: Conversation) { } @available(iOS 17.4, *) func conversationManagerDidBegin(_ manager: ConversationManager) { } @available(iOS 17.4, *) func conversationManagerDidReset(_ manager: ConversationManager) { } @available(iOS 17.4, *) func conversationManager(_ manager: ConversationManager, perform action: ConversationAction) { } @available(iOS 17.4, *) func conversationManager(_ manager: ConversationManager, timedOutPerforming action: ConversationAction) { } @available(iOS 17.4, *) func conversationManager(_ manager: ConversationManager, didActivate audioSession: AVAudioSession) { } @available(iOS 17.4, *) func conversationManager(_ manager: ConversationManager, didDeactivate audioSession: AVAudioSession) { } @objc public enum InterfaceKind : Int, Sendable, Codable, Hashable { /// 拒绝/挂断 case reject /// 接听. case answer } var sessoin: ConversationManager var callId: UUID var completionHandler: ((_ actionType: InterfaceKind,_ payload: [AnyHashable : Any]) -> Void)? var payload: [AnyHashable : Any]? @objc init(icon: UIImage!) { let data:Data = icon.pngData()!; let cfg: ConversationManager.Configuration = ConversationManager.Configuration(ringtoneName: "ring.mp3", iconTemplateImageData: data, maximumConversationGroups: 1, maximumConversationsPerConversationGroup: 1, includesConversationInRecents: false, supportsVideo: false, supportedHandleTypes: Set([Handle.Kind.generic])) self.sessoin = ConversationManager(configuration: cfg) self.callId = UUID() super.init() self.sessoin.delegate = self } @objc func toIncoming(_ payload: [AnyHashable : Any], displayName: String,actBlock: @escaping(_ actionType: InterfaceKind,_ payload: [AnyHashable : Any])->Void) async { self.completionHandler = actBlock do { self.payload = payload self.callId = UUID() var update = Conversation.Update(members: [Handle(type: .generic, value: displayName, displayName: displayName)]) let actNumber = Handle(type: .generic, value: displayName, displayName: displayName) update.activeRemoteMembers = Set([actNumber]) update.localMember = Handle(type: .generic, value: displayName, displayName: displayName); update.capabilities = [ .playingTones ]; try await self.sessoin.reportNewIncomingConversation(uuid: self.callId, update: update) try await Task.sleep(nanoseconds: 2000000000); } catch { } } } i want to listen the button event,but i can't find the solutions!please give me a code demo
0
0
209
Mar ’25
LSRegisterURL resultCode -10819
I have an option in my app to set the URL Handler for smb or switch it back to Finder. But using my code below it always give me a -10819 error. Which is a generic kLSNotRegisteredErr, even those the documentation shows "Not currently used." func setDefaultHandler(bundleID: String) { DebugLogger.shared.log("Attempting to set \(bundleID) as default handler for SMB URLs") // Post Sonoma macOS requires user interaction to change default handlers // We'll register our app and then guide the user to System Settings // For our app, register it with Launch Services if bundleID != "com.apple.finder" { if let appBundleURL = Bundle.main.bundleURL as CFURL? { let registerResult = LSRegisterURL(appBundleURL, true) DebugLogger.shared.log("LSRegisterURL result: [\(appBundleURL)]\(registerResult)") } } // Check current handler using modern API let testSMBURL = URL(string: "smb://example.com")! if let handlerURL = NSWorkspace.shared.urlForApplication(toOpen: testSMBURL) { DebugLogger.shared.log("Current default handler is: \(handlerURL)") // Try to get the bundle ID from the URL var currentHandlerBundleID = "" if let bundle = Bundle(url: handlerURL) { if let handlerBundleID = bundle.bundleIdentifier { currentHandlerBundleID = handlerBundleID DebugLogger.shared.log("Current default handler bundle ID: \(handlerBundleID)") } } // Check if the current handler is already what we want let alreadySet = currentHandlerBundleID == bundleID DebugLogger.shared.log("Handler is already set correctly: \(alreadySet)") if alreadySet { let alert = NSAlert() alert.messageText = "Default Handler Status" alert.informativeText = "\(bundleID == "com.apple.finder" ? "Finder" : "LGN") is already set as the default handler for SMB URLs." alert.addButton(withTitle: "OK") alert.runModal() } else { // Guide the user to System Settings to change the handler promptToSetDefaultHandler(bundleID == "com.apple.finder" ? "Finder" : "LGN") } } else { DebugLogger.shared.log("Could not determine current handler") promptToSetDefaultHandler(bundleID == "com.apple.finder" ? "Finder" : "LGN") } }
4
0
402
Mar ’25
ios18 crash reason: '*** -[__NSArrayM insertObjects:count:atIndex:]: attempt to insert nil object from objects[126976]'
Recently, my application has been receiving a lot of crashes every day, appearing on the iOS18 system. I can't find where the problem is and how can I solve it? Code Type: ARM-64 (Native) Role: Foreground Parent Process: launchd [1] Date/Time: 2025-03-10 14:55:49.541 +0800 OS Version: iOS 18.3.1 (22D72) Report Version: 104 Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x00000000 at 0x0000000000000000 Triggered by Thread: 1 Application Specific Information: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObjects:count:atIndex:]: attempt to insert nil object from objects[126976]' Thread 0: 0 libsystem_kernel.dylib 0x00000001e95c4788 mach_msg2_trap + 8 1 libsystem_kernel.dylib 0x00000001e95c7e98 mach_msg2_internal + 80 2 libsystem_kernel.dylib 0x00000001e95c7db0 mach_msg_overwrite + 424 3 libsystem_kernel.dylib 0x00000001e95c7bfc mach_msg + 24 4 CoreFoundation 0x0000000197ee3804 0x197e6d000 + 485380 5 CoreFoundation 0x0000000197ee2eb0 0x197e6d000 + 482992 6 CoreFoundation 0x0000000197f35284 CFRunLoopRunSpecific + 588 7 GraphicsServices 0x00000001e51a14c0 GSEventRunModal + 164 8 UIKitCore 0x000000019aa7e674 0x19a690000 + 4122228 9 UIKitCore 0x000000019a6a4e88 UIApplicationMain + 340 10 MyApp 0x0000000102dbfd70 main + 104 11 (null) 0x00000001be18dde8 0x0 + 7484268008 Thread 1 name: com.apple.uikit.xpc-service Thread 1 Crashed: 0 CoreFoundation 0x0000000197e9a5fc 0x197e6d000 + 185852 1 libobjc.A.dylib 0x0000000195415244 objc_exception_throw + 88 2 CoreFoundation 0x0000000197ed46bc 0x197e6d000 + 423612 3 CoreFoundation 0x0000000197ed37b0 0x197e6d000 + 419760 4 CoreFoundation 0x0000000197e7f5f8 0x197e6d000 + 75256 5 MyApp 0x0000000103e4d4c0 startup_check_root + 12380 6 libdispatch.dylib 0x000000019fc2d248 0x19fc2b000 + 8776 7 libdispatch.dylib 0x000000019fc2efa8 0x19fc2b000 + 16296 8 libdispatch.dylib 0x000000019fc365cc 0x19fc2b000 + 46540 9 libdispatch.dylib 0x000000019fc37124 0x19fc2b000 + 49444 10 libdispatch.dylib 0x000000019fc4238c 0x19fc2b000 + 95116 11 libdispatch.dylib 0x000000019fc41bd8 0x19fc2b000 + 93144 12 libsystem_pthread.dylib 0x0000000222c04680 _pthread_wqthread + 288 13 libsystem_pthread.dylib 0x0000000222c02474 start_wqthread + 8
3
0
672
Mar ’25
iPad widget bug
Widgets on the widget is not responding to the touch properly. This issue is also affecting within the home screen widget in a way that the widget switches to light mode by itself even though I am in dark mode. Additionally, lock screen does not to respond once the lock screen widget has been edited. Is anyone else having this issue?
0
0
192
Mar ’25
How to pass URL to iOS app from share sheet, and automatically open app?
Hello everyone, I’ve been trying to pass a URL from Safari (or any other app) into my own app via iOS extensions (similar to how if you go to a website, open the share sheet, and hit the ChatGPT app icon, it opens ChatGPT and pastes the website URL into the chat textbox), and I’m hitting a wall. I’ve attempted both a Share Extension (using SLComposeServiceViewController) and a UI-less Action Extension (using extensionContext?.open(...)), but in both scenarios, my main app never opens. Here’s a summary of my setup: Main App Target plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLName</key> <string>com.elislothower.URLDisplayApp</string> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> </dict> </array> <key>LSApplicationQueriesSchemes</key> <array/> </dict> </plist> This means my custom URL scheme is myapp://. My app delegate (or SwiftUI’s .onOpenURL) correctly handles myapp://share?url=... if I open it directly from Safari. Share Extension Attempt Subclassed SLComposeServiceViewController. Plist had com.apple.share-services as the NSExtensionPointIdentifier. I called extensionContext?.open(deepLink) with myapp://share?url=..., but it always returned false. Also, the UI (with Cancel/Post buttons) was overkill for my needs. UI-less Action Extension Attempt Created a no-UI action extension with com.apple.ui-services as NSExtensionPointIdentifier. In my custom ActionViewController, I formed the same myapp://share?url=... deep link and called extensionContext?.open(deepLink). The extension does appear in the share sheet, but again, open(deepLink) returns false—my main app never opens. Confirmed Setup I’ve tested the URL scheme in Safari: typing myapp://share?url=... directly prompts to open my app, and the URL is handled fine there. I’ve ensured both extension Info.plists have <key>LSApplicationQueriesSchemes</key><array><string>myapp</string></array> so they can attempt to open that scheme. Tried on both simulator and physical device. On the physical device, the main app is definitely installed and has been launched at least once. Current Behavior The extension logs that it forms the deep link (myapp://share?url=...) correctly. extensionContext?.open(deepLink) fails (success == false), so the main app never opens. I’ve also tried forcing the call on the main thread, simplifying the URL (like myapp://test), and checking for any typos or case-sensitivity issues—still no luck. Is there a known iOS restriction or trick for allowing an extension (share or action) to open its containing app directly? Have I missed a configuration step or entitlement that’s necessary? Is it possible that iOS is just rejecting the call in these contexts? I’d love any insight or suggestions from those who have successfully launched their main app from an extension. Thank you in advance! ContentView.swift Info.plist URLDisplayAppApp.swift URLDisplayApp.entitlements ActionRequestHandler.swift ActionViewController.swift Info.plist MyAppActionExtension.entitlements
3
0
577
Mar ’25