In mainland China, CallKit is not available. Recently, I discovered LiveCommunicationKit.
Can it replace CallKit?
There is no relevant introduction in the documentation. Can someone help me understand how to use it?
https://developer.apple.com/documentation/livecommunicationkit
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
Hi,
I'm trying to make use of the Device Activity Labels where you supply an ApplicationToken. I can successfully get it to show the icon + title of the Application (twitter in my case) but I cannot get the styling to work.
// Works
.labelStyle(.iconOnly)
.labelStyle(.titleOnly)
.border(...)

// Does NOT work
.font(.largeTitle)
.foregroundColor(.blue)
I have checked the same style (or just modifiers) against a standard Label and they actually do work in the code below.
// This is an application token. Some style not applied.
Label(targetApp)
.labelStyle(MyStyle())
// Showing the same style using a simple label. All styles correctly applied.
Label("Twitter", systemImage: "video.square.fill")
.labelStyle(MyStyle())
Is changing the font + color of the title for this Label(_ applicationToken:) supported?
Topic:
App & System Services
SubTopic:
General
Tags:
Managed Settings
Family Controls
Device Activity
var format = "%7B%22sign%22%3Anull%2C%22company%22%3A%22%E5%85%84%E5%BC%9F%E6%B5%B7%E6%B4%8B%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8%22%2C%22businessNo%22%3Anull%2C%22scene%22%3Anull%2C%22interviewCode%22%3A%22767676%22%7D"
let message = withVaList([]) { args in
let msg = NSString(format: format, arguments: args)
print(msg)
}
Topic:
App & System Services
SubTopic:
General
Tags:
Foundation
iPad and iOS apps on visionOS
Swift
Debugging
Hi, I'm in the process of creating an App + Helper Tool combo application, and depending on the necessity of root privileges, I'm setting up two paths in the app:
If root privileges are not necessary, I'm using SMJobSubmit rather directly:
var submissionError: Unmanaged<CFError>?
let submissionResult = SMJobSubmit(kSMDomainUserLaunchd, plist, nil, &submissionError)
where plist contains these items:
Label=com.***.redactedApp.redacted,
ProgramArguments=[path/to/helper-tool, commandName, commandArg1, commandArg2]
RunAtLoad=1,
KeepAlive=0
and it works as necessary, and performs the operations.
Now, in the case of privilege escalation being necessary, this call becomes a bit more complex:
let authorization = SFAuthorization()
var authRef: AuthorizationRef?
do {
try authorization?.obtain(withRight: kSMRightModifySystemDaemons,
flags: [.extendRights, .interactionAllowed])
authRef = authorization?.authorizationRef()
} catch let error {
// Logging error
}
var submissionError: Unmanaged<CFError>?
let submissionResult = SMJobSubmit(kSMDomainSystemLaunchd, plist, authRef, &submissionError)
while using the same plist, same executable at the same path, same Label.
However, when using the second path, suddenly SMJobSubmit fails:
Error Domain=CFErrorDomainLaunchd Code=2 "(null)"
Now, naturally I headed over to system logs in Console.app, and this is the weirdest - there is nothing suspicious near the log item I submit with the above error from the main application.
The tool is embedded in the Contents/MacOS folder. However, my problem is that anything that I can think of seems to lead to the same thought: it should be a problem in both cases, not just the privileged one.
Is there something extra that must be taken care of when using SMJobSubmit with privileged helper tools?
We’re trying to enable deep links for our application com.remonon.remonon. Only links that start with https://remonon.com/app/ should redirect to our app.
I’ve closely followed the tutorial at https://developer.apple.com/documentation/xcode/supporting-associated-domains.
Our apple-app-site-association is correctly placed at https://remonon.com/.well-known/apple-app-site-association and looks like this:
{
"applinks": {
"details": [
{
"appIDs": [
"25N8TLPALL.com.remonon.remonon"
],
"components": [
{
"/": "/app/*",
"comment": "Only URLs under /app/ will be handled as deep links"
}
]
}
]
},
"webcredentials": {
"apps": [
"25N8TLPALL.com.remonon.remonon"
]
}
}
Our *.entitlements looks like this:
<?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>aps-environment</key>
<string>production</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:remonon.com</string>
<string>webcredentials:remonon.com</string>
</array>
<key>com.apple.developer.default-data-protection</key>
<string>NSFileProtectionComplete</string>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.remonon.remonon</string>
</array>
</dict>
</plist>
Our apple-app-site-association was published two weeks ago to make sure apple’s caches were able to catch up in the meantime.
Still, opening the link https://remonon.com/app/test on a real device with our app installed does not open our app but safari.
A while ago, when all remonon.com-urls should open our app instead of only those which have the "app" path prefix, the deep links was working perfectly fine.
What am I missing?
Topic:
App & System Services
SubTopic:
General
Hello,
I’m developing an app for both iOS and macOS using Mac Catalyst.
On the iOS target, the DeclaredAgeRange framework works fine: I enabled the capability, set the entitlement, and can call the APIs successfully.
However, when I build the Mac Catalyst target, I get compile-time errors because DeclaredAgeRange cannot be imported.
Environment
Xcode 26.0.1
Deployment Target (iOS): 13.0
Mac Catalyst target enabled (same bundle ID, same source code base as iOS version)
iOS build works well with DeclaredAgeRange
What I tried
Added the Declared Age Range capability in Signing & Capabilities for iOS target → works fine.
Tried setting Mac Catalyst Deployment Target to macOS 15.0+ and rebuilding → still failed to import.
Because it didn’t help, I reverted and removed the separate macOS target setting.
On Catalyst, the module simply isn’t available (import DeclaredAgeRange fails).
From Apple’s documentation, my understanding is that DeclaredAgeRange should also be supported on Mac Catalyst (SDK 26+). But in practice I cannot import it in my Catalyst build.
Questions
Is DeclaredAgeRange actually supported on Mac Catalyst right now?
If so, are there additional setup steps (capabilities, entitlements, provisioning, etc.) specific to Catalyst?
Has anyone successfully imported and used DeclaredAgeRange in a Catalyst project?
Any guidance or confirmation would be greatly appreciated.
Thanks in advance.
Topic:
App & System Services
SubTopic:
General
Hello,
I’m building an app that helps people spend less time on social media apps.
For that, I make heavy use of Apple’s Screen Time APIs, such as ManagedSettings and FamilyControls.
When an app is locked using a ShieldConfiguration, the user has to open my app in order to unlock it (e.g. enter a code).
This is very cumbersome because no documented API exists to open the parent app (=my app) from the ShieldActionDelegate (also part of my app) when the user presses a button of the ShieldConfiguration.
The ShieldActionDelegate callback just offers three options in its ShieldActionResponse:
.none
.defer
.close
.openParentApp is missing.
We are working around this limitation by sending a local push notification that the user has to tap on.
This has multiple drawbacks:
It has to be ensured that notification permission has been granted.
It has to be ensured that notifications can be delivered even while focus is enabled.
Features such as Apple Intelligence notification summaries and notification prioritization can heavily delay delivering notifications and thus frustrate the user.
Neither my users nor myself do understand why this is not possible in a smoother way, at least according to the documentation.
There are 3rd party apps that have such functionality, they can directly open their own app from a button press in the Shield, see here:
https://apps.apple.com/us/app/applocker-passcode-lock-apps/id1132845904
It would be great if Apple could level the playfield for all developers and document how this is achievable, because technically it clearly is.
Thanks a lot and have a great day!
I am currently building a screen time app and I am trying to figure out how to persist the family activity picker so that when my app closes and re-opens, the app selections in it are saved. I've successfully implemented core data and figured out how to store names of the selected apps in a list like this -
Core Data addApp Function -
func addApp(name: String, context: NSManagedObjectContext){
let newApp = AppToken(context: context)
newApp.bundleIdentifier = name
saveData(context: context)
}
Adding app selections to Core Data (after the family activity picker has updated the selection) -
.onChange(of: model.selectionToDiscourage)
{
for i in model.selectionToDiscourage.applications {
print(i)
dataController.addApp(name:i.localizedDisplayName ?? "Temp", context: moc)
}
Printing saved selections in a list (bundleIdentifier is my attribute for my appToken entity, but I am just pulling the names here. For whatever reason all of them end up being Temp" as shown above anyway. In other words name:i.localizedDisplayName is not working and Temp is shown in the list for every app chosen) -
if dataController.savedSelection.isEmpty {
Text("No Apps Selected")
.foregroundColor(.gray)
} else {
List(dataController.savedSelection, id: \.self) { app in
Text(app.bundleIdentifier ?? "Unknown App")
}
.scrollContentBackground(.hidden)
}
So, when my app closes and reopens, the list of app names persists. Now, my issue is figuring out how to write back to selectionToDiscourage and loading the family activity picker with those saved apps. I have no idea if I should be doing this a different way and if using Core Data is overkill, but I cannot figure out how it's syntactically possible to write back to this family activity picker when the app reopens -
.familyActivityPicker(isPresented: $isPresented, selection:$model.selectionToDiscourage)
Thank you to whoever takes a look at this!!
Hi,
I’ve built an app that includes a Contacts Provider Extension (CPE). On iOS 18, I observed the expected behavior — when the main app is uninstalled, the corresponding CPE entry is also removed from the Contacts list.
However, on iOS 26, this no longer happens. After uninstalling the app, the CPE remains visible and active in the Contacts list, even though the app is gone.
Hi all,
I'm trying to add Spotlight support to a macOS app that handles custom virtual machine bundles with the .vpvm extension. I’ve followed the current documentation and used the modern CSImportExtension approach with a Spotlight Importer extension target.
Here’s what I’ve done:
App Info.plist:
Declared com.makeprog.vpvm as a UTI conforming to com.apple.package.
Registered it under UTExportedTypeDeclarations and CFBundleDocumentTypes.
Spotlight Importer Extension:
Added a new macOS target using the Spotlight Import Extension template.
Set the NSExtensionPointIdentifier to com.apple.spotlight.import.
Used CSSupportedContentTypes = com.makeprog.vpvm.
Implemented a minimal update(_ attributes:forFileAt:) method that sets displayName, title, and contentDescription.
Other steps:
Verified that the .appex is embedded under Contents/PlugIns/.
Confirmed it appears in mdimport -e output with correct UTI.
Used mdimport -m -d2 -t /path/to/file.vpvm, but I still get:
Imported '/path/to/file.vpvm' of type 'com.makeprog.vpvm' with no plugIn.
The extension is never invoked. I’ve also tried:
Ensuring the .vpvm file is a valid directory bundle.
Restarting Spotlight / rebuilding index.
Ensuring the app and extension are properly signed.
Tried installing the app in test virtual machine
Question:
Has anyone successfully used CSImportExtension for custom UTIs?
Is there something additional I need to do for the extension to be recognized and triggered?
Any advice or examples would be greatly appreciated!
Thanks in advance.
My ASA file is located here https://staging.docyt.com/apple-appsite-association It downloads fine. It does not have .json extension and neither does it reside inside the ./well-known folder. Should it work? Because opening the link https://staging.docyt.com/reset-password is not opening the app installed via TestFlight . Installing via XCode however works fine. Please help
app packged with Xcode16 crashed on iOS12 certainly. My question is:
is it known issue for Apple team?
to resolve this issue, what can we developers do?
This is
A message filter extension is only forwarded SMSs by the OS for filtering, iMessages aren't.
But what is the situation with RCS messages? Will they be filterable by a message filtering extension?
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?
Both view and modifier versions of the FamilyActivityPicker crash randomly when selecting some items (usually the other option) throwing these in the console:
[com.apple.FamilyControls.ActivityPickerExtension(1150.1)] Connection to plugin invalidated while in use
AX Lookup problem - errorCode:1100 error:Permission denied portName:'com.apple.iphone.axserver' PID:22091 (
0 AXRuntime 0x00000001c603b0fc _AXGetPortFromCache + 800
1 AXRuntime 0x00000001c603cce0 AXUIElementPerformFencedActionWithValue + 700
2 UIKit 0x0000000230de3ec8 DDE6E0C5-2AC3-3C73-8CFE-BC88DE35BB5F + 1453768
3 libdispatch.dylib 0x0000000103ef0b98 _dispatch_call_block_and_release + 32
4 libdispatch.dylib 0x0000000103ef27bc _dispatch_client_callout + 20
5 libdispatch.dylib 0x0000000103efa66c _dispatch_lane_serial_drain + 832
6 libdispatch.dylib 0x0000000103efb408 _dispatch_lane_invoke + 408
7 libdispatch.dylib 0x0000000103f08404 _dispatch_root_queue_drain_deferred_wlh + 328
8 libdispatch.dylib 0x0000000103f07a38 _dispatch_workloop_worker_thread + 444
9 libsystem_pthread.dylib 0x00000001f0824f20 _pthread_wqthread + 288
10 libsystem_pthread.dylib 0x00000001f0824fc0 start_wqthread + 8
)
This also happens in production apps like the Opal.
The questions are:
At least how to detect it to be able to manually reload the sheet (like what Opal does and shows an alert when this happens)
How to prevent it in the first place?
I really appreciate any help you can provide.
Hello,
We are encountering an issue where invoking our App Clip via a Safari Smart App Banner fails on certain devices, particularly those running iOS 26.
When a user taps "Open" on the Smart App Banner, the App Clip card attempts to load but ultimately fails with ASDErrorDomain Error 507.
The error occurs consistently on specific devices, while other devices function correctly. In some instances, the App Clip card metadata/UI appears momentarily (flashes on the screen) before the error message is displayed and the process terminates.
Has anyone else experienced this specific ASDErrorDomain error? We have already submitted a report via Feedback Assistant, but any insights or workarounds from the community would be appreciated.
Thanks!
In iOS 18, the requestValue method no longer works when the parameter it is called on is not included in the parameterSummary of an AppIntent. This issue causes the app to fail to present a prompt for the user to select a value, resulting in an error with the message:
Domain=NSCocoaErrorDomain Code=4099 "The connection from pid 40685 on anonymousListener or serviceListener was interrupted, but the message was sent over an additional proxy and therefore this proxy has become invalid."
Steps to Reproduce:
Create a simple AppIntent with the following code:
import AppIntents
struct Intent: AppIntent {
static let title: LocalizedStringResource = "Intent"
static var parameterSummary: some ParameterSummary {
Summary("Test \(\.$category)") {}
}
@Parameter(title: "Category")
private var category: CategoryEntity?
@Parameter(title: "Hidden Category")
private var hidden: CategoryEntity?
@MainActor
func perform() async throws -> some ReturnsValue<CategoryEntity?> {
var result: CategoryEntity?
do {
result = try await $hidden.requestValue("Select category") // Doesn't work since iOS 18 as $hidden is not set in parameterSummary
} catch {
print("\(error)")
}
return .result(value: result)
}
}
Run the code on a device with iOS 18.
Observe that the requestValue method fails to present the selection prompt and instead throws an error.
Expected Results:
The app should successfully present a prompt for the user to select a value for the hidden parameter using requestValue, even if the parameter is not included in the parameterSummary.
Actual Results:
The app fails to present the selection prompt and throws an error, making it impossible to use requestValue for parameters not included in parameterSummary.
Version/Build:
iOS 18.0
Configuration:
Tested on various devices running iOS 18.
Is there a change in the API that I might have missed?
Hi everyone, on iOS, when a VoIP call arrives and the user accepts it from the lock screen (after unlocking with Face ID/Touch ID), is there any way to automatically bring my app to the foreground and show the in-app call screen, instead of staying in the system CallKit UI?
I have downloaded the ShinyTV example to test simplified sign-in on tvOS since it is not working in my own app, and I am having the same issue there.
After assigning my team to the sample app, the bundle ID updates with my team id. I copy the bundle ID into a file entitled "apple-app-site-association" with this format:
{
"webcredentials": {
"apps": [ "{MyTeamID}.com.example.apple-samplecode.ShinyTV{MyTeamID}" ]
}
}
I upload the file to my personal site, ensuring that the content type is application/json. I adjust the Associated Domain entitlement to:
webcredentials:*.{personal-site.com}?mode=developer
using the alternate mode to force it to load from my site, not the CDN.
When I run the build on tvOS, and click the Sign In button, it fails with these errors:
Failed to start session: Error Domain=com.apple.CompanionServices.CPSErrorDomain Code=205 "Failed to prepare authorization requests" UserInfo={NSMultipleUnderlyingErrorsKey=(
"Error Domain=com.apple.CompanionServices.CPSErrorDomain Code=205 \"Missing associated web credentials domains\" UserInfo={NSLocalizedDescription=Missing associated web credentials domains}"
), NSLocalizedDescription=Failed to prepare authorization requests}
Session failed: Error Domain=com.apple.CompanionServices.CPSErrorDomain Code=205 "Failed to prepare authorization requests" UserInfo={NSMultipleUnderlyingErrorsKey=(
"Error Domain=com.apple.CompanionServices.CPSErrorDomain Code=205 \"Missing associated web credentials domains\" UserInfo={NSLocalizedDescription=Missing associated web credentials domains}"
), NSLocalizedDescription=Failed to prepare authorization requests}
ASAuthorizationController credential request failed with error: Error Domain=com.apple.AuthenticationServices.AuthorizationError Code=1004 "(null)" UserInfo={NSMultipleUnderlyingErrorsKey=(
"Error Domain=com.apple.CompanionServices.CPSErrorDomain Code=205 \"(null)\""
)}
Failed with error: Error Domain=com.apple.AuthenticationServices.AuthorizationError Code=1004 "Failed to prepare authorization requests" UserInfo={NSMultipleUnderlyingErrorsKey=(
"Error Domain=com.apple.CompanionServices.CPSErrorDomain Code=205 \"Missing associated web credentials domains\" UserInfo={NSLocalizedDescription=Missing associated web credentials domains}"
), NSLocalizedDescription=Failed to prepare authorization requests}
What am I missing here?
I have made a screensaver for mac in swift, but couldn't find how to add an icon the logo image that shows up on saver file) and thumbnail (the cover image that shows up in the screensaver catalogue).
Currently, it just shows a default blue spiral galaxy thumbnail and no icon image