Hello everyone,
Our team is currently developing an iOS application requiring real-time audio communication and evaluating the most suitable frameworks. Options include CallKit, custom solutions using AVAudioEngine/Audio Units, and the PushToTalk framework.
Regarding the PushToTalk framework, we have some questions about its core design and capabilities that we'd appreciate clarification on from the community or Apple engineers.
Based on the PushToTalk framework documentation, its API design (e.g., methods like requestBeginTransmission, endTransmission which imply explicitly requesting transmission rights), and its system UI integration, it strongly appears oriented towards half-duplex communication scenarios, similar to traditional walkie-talkies where only one participant transmits audio at a time.
Is this understanding accurate? Is the PushToTalk framework's design strictly limited to managing half-duplex audio interactions? Or, does the framework itself also provide built-in mechanisms or APIs to manage simultaneous, bi-directional (full-duplex) audio streaming between participants?
To be clear, we are asking about the inherent capabilities of the PushToTalk framework itself. We understand it's possible to use PushToTalk for signaling and UI management, and separately implement the actual full-duplex audio stream using AVAudioEngine or other audio APIs. However, we want to confirm if the framework itself is designed to support or simplify full-duplex audio communication.
Have other developers investigated the specific limitations or capabilities of the PushToTalk framework regarding audio transmission modes (half-duplex vs. full-duplex)?
Are there any official documentation references or WWDC sessions that explicitly clarify the framework's support (or lack thereof) for full-duplex operation?
If PushToTalk is indeed limited to half-duplex, what are the generally accepted best practices for apps requiring full-duplex calls – transitioning directly to CallKit (where applicable) or building custom audio processing pipelines?
Clarifying this point is crucial for us to select the correct technology stack for our application. Any relevant insights, documentation pointers, or shared development experiences would be greatly appreciated.
Thank you for your help!
General
RSS for tagDelve 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.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString timeIntervalSinceReferenceDate]: unrecognized selector sent to instance 0x115fadbc0'
*** First throw call stack:
(0x1940bd8c8 0x1910097c4 0x194159838 0x19403a4f8 0x1940423a0 0x1e42cb9a8 0x1e42ce220 0x106f02c08 0x1080a461c 0x1080be2b0 0x1080acb2c 0x1080ad7b4 0x1080b9b00 0x1080b91a4 0x1eecdb3b8 0x1eecda8c0)
libc++abi: terminating due to uncaught exception of type NSException
InputAnalytics called timeIntervalSinceReferenceDate in dispatch_sync.The display issue of the call stack occurs in two stages: keyboard input analysis and folding the keyboard.
After adding protection to NSString, it can function normally, but I want to know the reason
#import "NSString+Safe.h"
@implementation NSString (Safe)
- (NSTimeInterval)timeIntervalSinceReferenceDate {
return 0;
}
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)date {
return 0;
}
@end
I am working with a watchOS app in SwiftUI, and I am using the following code to dial a phone number from the watch:
var number = "123456789"
if let telURL = URL(string: "tel:\(number)") {
let wkExtension = WKExtension.shared()
wkExtension.openSystemURL(telURL)
}
The issue is that when I try to dial a number starting with a * (asterisk) or # (hash), it doesn't work. When dialing a regular number, it works fine.
Is there any way to get this to work?
Hi,
I am developing a Screen Time App and I am having issues with the ShieldConfigurationExtension (ShieldConfigurationDataSource). I know this extensions is sandboxed but I should be able to read data from the main app.
I am using SwiftData as my database, but I am unable to initialize it in the extensions with an error indicating insufficient file permissions. I have App Group set up and I am able to share data using UserDefaults but that is just inconvenient.
Is there any way I could just open the SwiftData in read only mode so that I could display the user some info on the shield?
SwiftData Init:
private func setupContainer() throws {
let schema = Schema([
DogEntity.self,
HouseEntity.self
])
// Use app group container if available
let config: ModelConfiguration
if let containerURL = FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: "group.\(Bundle.app.bundleIdentifier ?? "")"
) {
config = ModelConfiguration(schema: schema, url: containerURL.appendingPathComponent("default.sqlite"))
} else {
config = ModelConfiguration(schema: schema)
}
self.container = try ModelContainer(for: schema, configurations: [config])
}
Error in extension:
fault: Attempt to add read-only file at path file:///private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite read/write. Adding it read-only instead. This will be a hard error in the future; you must specify the NSReadOnlyPersistentStoreOption.
error: (3) access permission denied
error: Encountered exception error during prepareSQL for SQL string 'SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_METADATA'' : access permission denied with userInfo {
NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite";
NSSQLiteErrorDomain = 3;
} while checking table name from store: <NSSQLiteConnection: 0x154100300>
error: Store failed to load. <NSPersistentStoreDescription: 0x15402d590> (type: SQLite, url: file:///private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite) with error = Error Domain=NSCocoaErrorDomain Code=256 "The file “default.sqlite” couldn’t be opened." UserInfo={NSFilePath=/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite, NSSQLiteErrorDomain=3} with userInfo {
NSFilePath = "/private/var/mobile/Containers/Shared/AppGroup/51431199-5919-4AE6-940C-6FE3C53EEB46/default.sqlite";
NSSQLiteErrorDomain = 3;
}
Any help appreciated 🙂
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Managed Settings
Screen Time
SwiftData
Hi, I have tried to add Eve energy plug but still pairing failed, it reported always same error.
Error Domain=com.apple.MatterSupport Code=1 "(null)"
Could anyone help?
Regards
I would like the function in the calendar app to be able to assign a status to the set appointment, such as unconfirmed or pending.
Hello,I try to get all contacts from an iCoud Account...First I run:< ?xml version="1.0" encoding="UTF-8" ?>
< d:propfind xmlns:d="DAV: ">
< d:prop >
< d:current-user-principal/ >
< /d:prop >
< /d:propfind >Then I get /xxxxxxxxxxx/carddavhome/ and run:< ?xml version="1.0" encoding="UTF-8"? >
< d:propfind xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" >
< d:prop >
< card:addressbook-home-set/ >
< /d:prop >
< /d:propfind >This give me the URL https://pXX-contacts.icloud.com:443/xxxxxxxxxxx/carddavhome/ then I send the following request to this URL:< ?xml version="1.0" encoding="UTF-8"? >
< d:propfind xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" >
< d:prop >
< d:displayname/ >
< d:resourcetype/ >
< /d:prop >
< /d:propfind >And I get:< ?xml version="1.0" encoding="UTF-8"? >
< multistatus xmlns="DAV:" >
< response >
< href >/xxxxxxxxxxx/carddavhome/< /href >
< propstat >
< prop >
< resourcetype >
< collection/ >
< /resourcetype >
< /prop >
< status >HTTP/1.1 200 OK< /status >
< /propstat >
< propstat >
< prop >
< displayname/ >
< /prop >
< status >HTTP/1.1 404 Not Found< /status >
< /propstat >
< /response >
< /multistatus >If I try to run this to the the URL https://pXX-contacts.icloud.com:443/xxxxxxxxxxx/carddavhome/contacts< ?xml version="1.0" encoding="UTF-8"? >
< card:addressbook-query xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" >
< d:prop >
< d:getetag/ >
< card:address-data/ >
< /d:prop >
< /card:addressbook-query >I get: Improperly formed XML encountered, unexpected root nodeWhat is my mistake? The first 2 queries work and give me the expected results, the 3rd one should give me a list of the addressbooks and groups and the 4th one should give me all VCards.
I'm implementing an iPhone app which is requiring for best user experience that two phones are placed one next to another. When this happens the NameDrop function starts and interferes with the app behaviour.
There doesn't seem to be any public foundation libraries to allow this. I know there is a support for turning off the functionality in the phone Settings, but this is not desired as I don't want the users to loose this nice iOS feature.
Is it possible to temporary disable the NameDrop while the app is opened?
Topic:
App & System Services
SubTopic:
General
Is there any way to find the reason for a CRASHING_DUE_TO_PRIVACY_VIOLATION from a crash report?
It does not happen on my old iPad Air 2 and it does not happen on the simulators with the latest iOS.
But it crashes always on newer real devices to which I have no access. The last app review for the AppStore also did not find it. I added some privacy strings by guessing and sent it via TestFlight but it doesn't change anything.
Hello, I’ve followed all the steps you recommended and confirmed that the entitlement is correctly added in Xcode, but the provisioning profile still fails. I believe the issue is that my App ID com.echo.eyes.app is missing the com.apple.developer.speech-recognition entitlement on Apple’s end.
Could you please manually add this entitlement to my App ID, or guide me on how to get it attached? I’ve already added it locally and confirmed the error in Xcode is due to it not being in the provisioning profile.
.
I have a question regarding CarKeyErrorCode in the CarKey framework.
I plan to use the following methods in the CarKey framework:
CarKeyRemoteControl.start(delegate: )
RemoteKeylessEntryAction)
Each of the above methods throws an Error. Are these different from CarKeyErrorCode?
Is CarKeyErrorCode only used in CarKeyRemoteControlSessionDelegate.remoteControlSession(_:didInvalidateWithError:)?
If methods 1-4 do not return CarKeyErrorCode, what kind of Error do they return?
Thank you in advance.
Topic:
App & System Services
SubTopic:
General
Hello.
We have an app and a custom dylib hat seems to be crashing only when Rosetta is involved.
I believe it's the custom DYLIB that crashes.
Here are some observations.
The issue happens on the older 2022 built DYLIB (Intel only)
And the newer DYLIB built (Universal)
The universal DYLIB works fine natively on both Intel and M1 machines. It's only when we access it through an Intel only .app and it's running with Rosetta that we see the crash.
The older Intel only .DYLIB worked perfectly with the same testing .app in versions before Sonoma, now they crash with the same .app, same build.
Crash reports have been all over the place, they vary but repeat themselves. It has been a little confusing as to how to approach this issue and would appreciate any input that can help us understand what is going wrong and how to move forward.
Crash reports are attached
Crash Report 1
Crash Report 2
Crash Report 3
The crash occurs as SIGSEGV
Version: 2.0 (1)
Code Type: X86-64 (Translated)
Parent Process: launchd [1]
User ID: 501
Date/Time: 2025-04-14 19:55:06.0103 +0200
OS Version: macOS 14.6 (23G5075b)
Report Version: 12
Anonymous UUID: A08ECCFA-BF01-8636-7453-E4476586D3A8
Time Awake Since Boot: 3900 seconds
System Integrity Protection: enabled
Notes:
PC register does not match crashing frame (0x0 vs 0x102920144)
Crashed Thread: 10
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x000000011d052840
Exception Codes: 0x0000000000000001, 0x000000011d052840
Termination Reason: Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process: exc handler [3174]
VM Region Info: 0x11d052840 is not in any region.
Thank you so much for all the attention and effort.
I am implementing the new Push to talk framework and I found an issue where channelManager(:didActivate:) is not called after I immediately return a NOT NIL activeRemoteParticipant from incomingPushResult.
I have tested it and it could play the PTT audio in foreground and background.
This issue is only occurring when I join the PTT Channel from the app foreground, then kill the app.
The channel gets restored via channelDescriptor(restoredChannelUUID:).
After the channel gets restored, I send PTT push.
I can see that my device is receiving the incomingPushResult and returning the activeRemotePartipant and the notification panel is showing that A is speaking - but channelManager(:didActivate:) never gets called. Thus resulting in no audio being played.
Rejoining the channel fixes the issue. And reopening the app also seems to fix the issue.
Hello! I am a relatively new Apple developer and am almost done with my first app. I am implementing the Screen Time API to my app because the app is designed to help the user digitally detox and I am trying to make it so the user can select which apps they would like to monitor from a list of their apps on their phone so I am using the family activity picker but I just can't extract the data needed to track the apps. I am wondering how to do this. Thank you!
Topic:
App & System Services
SubTopic:
General
Tags:
Frameworks
Family Controls
Device Activity
Screen Time
When we request auth from the AuthorizationCenter, it seems that we're only really able to allow users to control the apps on the parent's phone. Is there a way to allow us to let parents manage apps on the kid's device directly through our parent app?
For context, we have 2 different apps, one for the parent and one for the child. The child is able to purchase screen time and the parent can redeem them (activate those minutes) from their end.
I'm currently working with the FamilyControls API and testing my app on two different devices. Both apps are in the same family-sharing network with one phone being the owner of the network (I'll call this A) and the other one being an adult in the network(I'll call this B).
When device A picks apps using the FamilyActivityPicker, it shares that selection with device B (via encoding, sending over network, and decoding on device B). However, interacting with the token (displaying it, using it in shield) throws an error saying the token is null.
From the documentation, I thought every token would be the same across all devices in the family sharing network. So my question:
How do I send the FamilyActivitySelection from A to B and have the tokens still be functional?
Does this functionality only work if A is a "parent" and B is a "child" in the family sharing network?
Also, side note:
If I reverse the process and send the tokens from B to A. Interacting with the token works exactly as expected. For some reason, it's only going from A to B where it doesn't work.
Topic:
App & System Services
SubTopic:
General
Tags:
Application Services
Family Controls
Screen Time
We just dropped support for iOS 16 in our app and migrated to the new properties on Locale to extract the language code, region, and script. However, after doing this we are seeing an issue where the script property is returning a value when the language has no script.
Here is the initializer that we are using to populate the values. The identifier is coming from the preferredLanguages property that is found on Locale.
init?(identifier: String) {
let locale = Locale(identifier: identifier)
guard
let languageCode = locale.language.languageCode?.identifier
else {
return nil
}
language = languageCode
region = locale.region?.identifier
script = locale.language.script?.identifier
}
Whenever I inspect locale.language I see all of the correct values. However, when I inspect locale.language.script directly it is always returning Latn as the value. If I inspect the deprecated locale.scriptCode property it will return nil as expected.
Here is an example from the debugger for en-AU. I also see the same for other languages such as en-AE, pt-BR.
Since the language components show the script as nil, then I would expect locale.language.script?.identifier to also return nil.
Hello everyone,
I’d like to propose Sense & Store — a seamless integration between Safari and the App Store, powered by on-device AI, designed to understand what users are reading, searching, or selecting in Safari, and suggest relevant apps that match their current context or intention.
🔍 Key Idea:
“Sense” the user’s need through intelligent analysis of web content, then “Store” — offer the most relevant app, either already installed or available in the App Store.
🌟 Core Features:
• AI-powered context detection directly inside Safari
• Real-time app suggestions based on user intent
• Smart overlays when selecting text or data (e.g., phone numbers, emails, tools)
• Privacy-first: All AI runs on-device (Apple Neural Engine)
• Instant App Launch or Installation via StoreKit
✅ Examples:
• Reading an article on productivity? → Suggests Notion or Things.
• Looking up meditation tips? → Recommends Calm or Headspace.
• Selecting a phone number? → Offers CRM or spam blocker apps.
• Exploring code samples? → Suggests Pythonista or developer tools.
🔒 Privacy & Performance:
• 100% on-device intelligence (no data sent to servers)
• Follows Apple’s privacy framework
• Works with SafariKit + StoreKit + CoreML
⸻
I’m happy to provide a full prototype roadmap and technical architecture. Feedback and collaboration are welcome!
Would love to hear your thoughts — especially from developers who build for Safari, App Clips, or work with CoreML.
Thanks!
Jose Luiz Horta Barbosa Maurity Cruz - Apple lover...
I'm integrating Twilio Voice (v6.12.1) into my React Native app (using Swift bridging for iOS) and have implemented full VoIP, PushKit, and CallKit support for incoming calls.
✅ What works:
Incoming calls trigger the VoIP push and display the full-screen CallKit interface (or fallback UI).
Decline Call works as expected.
Call logs and events print correctly.
❌ Problem:
When I try to accept the call using the CallKit Accept button or React Native fallback UI, I consistently get:
❌ [TwilioVoiceModule] answerCall() callInvite is missing.
I also noticed that the console logs for answerCall() are being printed three times in a row, even though the accept button is only pressed once. Additionally in the first time console, answerCall() CallInvite found, accepting...
🔍 Observations:
The callInvite is properly received when the VoIP push arrives.
But when answerCall() is triggered, callInvite becomes nil.
This happens in CallKit accept, RN UI accept, and even notification banner accept.
📦 How it's set up (summarized):
PushKit Registration – via PKPushRegistry in AppDelegate.swift
VoIP push handling – forwards payload to TwilioVoiceModule.handleIncomingPush()
CallKit integration – uses CXProviderDelegate to report and handle accept actions
JS Bridge – emits acceptCallAction to JS
React Native calls TwilioVoiceModule.answerCall(uuid, callSid)
In answerCall() method: self.callInvite is nil – so call cannot be accepted.
Attaching the link to view the relevant code: https://docs.google.com/document/d/15pNjKrfk954OaotpMIEh3xQUtst---1K45DBXoYctGM/edit?usp=sharing
💡 Call Accept Flow (iOS):
VoIP Push → TwilioVoiceModule.handleIncomingPush()
Twilio SDK creates callInvite
reportNewIncomingCall() triggers CallKit UI
On accept: CXAnswerCallAction → emits event to JS
RN calls TwilioVoiceModule.answerCall(uuid, callSid)
Problem: callInvite is already nil
❓ What I'm trying to understand:
Why is callInvite becoming nil before answerCall() is called?
Why are the logs showing the answerCall() call 3 times?
Is there a race condition or multiple accept triggers?
Should I ensure callInvite is accepted only once across all 3 accept paths?
**
💬 Any help would be appreciated.**
📱 Environment:
React Native 0.78.x
iOS 17+
Swift bridging with TwilioVoiceModule.swift
Twilio Voice SDK 6.12.1
PushKit + CallKit + react-native-callkeep
I'm trying to work with the beta version of the Declared Age Range framework based on an article's tutorial but am getting the following error:
[C:1-3] Error received: Invalidated by remote connection.
and AgeRangeService.Error.notAvailable is being thrown on the call to requestAgeRange. I'm using Xcode 26 beta 5 and my simulator is running the 26.0 beta. The iCloud account that I have signed into the simulator has a DOB set as well.
This is my full ContentView where I'm trying to accomplish this.
struct ContentView: View {
@Environment(\.requestAgeRange) var requestAgeRange
@State var advancedFeaturesEnabled = false
var body: some View {
VStack {
Button("Advanced Features") {}
.disabled(!advancedFeaturesEnabled)
}
.task {
await requestAgeRangeHelper()
}
}
func requestAgeRangeHelper() async {
do {
let ageRangeResponse = try await requestAgeRange(ageGates: 16)
switch ageRangeResponse {
case let .sharing(range):
if let lowerBound = range.lowerBound, lowerBound >= 16 {
advancedFeaturesEnabled = true
}
case .declinedSharing:
break
// Handle declined sharing
default:
break
}
} catch AgeRangeService.Error.invalidRequest {
print("Invalid request")
// Handle invalid request (e.g., age range < 2 years)
} catch AgeRangeService.Error.notAvailable {
print("Not available")
// Handle device configuration issues
} catch {
print("Other")
}
}
}