Hey!
I am developing a macOS application with the help of an external vendor, who is supplying me with a closed-source XCFramework.
In Xcode, when I import their XCFramework bundle, when running the app, or opening a SwiftUI preview, or interacting with the app in any form, I get the familiar dialog:
"[SDK name].framework" Not Opened - Apple could not verify "[SDK name].framework" is free from malware that may harm your Mac or compromise privacy.
(Regardless, the application can run on my machine.)
But indeed, their cross-platform iOS/macOS XCFramework is not notarized at all (using spctl -a -t install), plus the macOS binary embedded is not code signed correctly (using codesign -d). The XCFramework itself is production code signed with a Developer ID certificate, however I believed the above issues to be valid.
Now, I asked the vendor to provide a correctly distributed (so code signed and notarized) framework, however they pointed out that "when I embed and sign the product in my app, it will be re-signed anyways". I understand this is true, but I believe this to be an important security boundary. If I were to re-sign under my name a closed source binary - previously unchecked for malware by Apple Notary Service -, I would put myself up for embedding potentially malicious code in my app, which could only be traced back to me - which would in turn mean a security issue would hinder my reputation here.
Am I being over-protective here, or is this a valid concern? I have no way to see the source code, so I strongly believe this XCFramework should be notarized correctly. I understand that an in-house XCFramework is fine unnotarized, given that I know its origin, but this seems like a unique case where notarization should be enforced from my side on the vendor.
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
I’m trying to integrate Screen Time usage data into my iOS app.
The goal is to fetch the total time a user spends on their device (daily or weekly), and store this locally for analysis.
So far, I’ve explored the DeviceActivity and FamilyControls frameworks:
1.DeviceActivityReport works but seems tied to extensions that show reports, not directly fetching raw values inside the main app.
2.I haven’t found a way to simply retrieve the total screen-on time (similar to what Settings → Screen Time shows).
My questions:
1.Is there any public API that allows retrieving the user’s total Screen Time (like the one shown in Settings)?
If yes, what’s the correct approach — should I use 2.DeviceActivityMonitorExtension, FamilyActivitySelection, or another framework?
3.If not, is it expected that this data is only available in the Settings app and not exposed to developers?
Any guidance or official confirmation would be really helpful.
Thanks in advance!
Just downloaded the new IOS18 update. immediately ran into problems.
in particular the new Photo app is dreadful. It is cumbersome to navigate, quite unintuitive to use and, frankly, a mess. I cannot imagine why Apple thought this an improvement compared to the simpler and much more usable previous version.
other problems include difficulties with location and home screens on the weather app, and others.
i was about to upgrade my iPhone (XR) to the iPhone 16. I am now seriously questioning the sense of that given how cumbersome many of the apps have become.
Topic:
App & System Services
SubTopic:
General
We are planning on renaming our app. The new name is not like the current name. It will be renamed in the App Store as well as the App display name. Yet, we still want new and existing users to be able to find the app by using the old name in search/spotlight under iOS. A great example of this is entering Twitter to find the X app and it shows up in the App section in the Spotlight search.
Are there any guidelines, settings, or tricks for doing this? Some have suggested adding a Spotlight search term but that will not have it show up in the App section I fear.
Our VoIP app receives PushKit notifications successfully (callservicesd Delivering 1 VoIP payload appears in logs). However, the app is consistently terminated by the system when running in the background or killed state.
The crash is caused by iOS expecting a reportNewIncomingCall to CallKit, but the system reports:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP push.'
*** Assertion failure in -[PKPushRegistry _terminateAppIfThereAreUnhandledVoIPPushes], PKPushRegistry.m:349
Key Observations:
VoIP pushes arrive and are delivered to the app.
In foreground, some methods work and CallKit UI sometimes appears.
In background/killed state, app is always terminated before CallKit UI shows.
Logs confirm the system requires CallKit to be reported immediately inside pushRegistry(_:didReceiveIncomingPushWith:for:completion:).
Steps to Reproduce:
Run the app with VoIP + CallKit integration.
Put app in background (or kill it).
Send a VoIP push.
Observe system logs and crash:
callservicesd: Delivering 1 VoIP payload(s) to application
UrgiDoctor: Apps receiving VoIP pushes must post an incoming call via CallKit...
error: Killing VoIP app because it failed to post an incoming call in time.
Expected Behavior:
On receiving a VoIP push, CallKit UI (Accept / Decline screen) should always appear.
App should not be killed if reportNewIncomingCall is called in time.
Actual Behavior:
CallKit UI never appears in background/killed state.
App is force-terminated by iOS before user can accept/decline the call.
Request:
Guidance on the correct sequence for calling reportNewIncomingCall and completionHandler() in pushRegistry.
Clarification if any changes in iOS 17/18 affect PushKit + CallKit behavior.
Best practices for ensuring CallKit UI always appears reliably after a VoIP push.
Environment:
iOS 18.5 Simulator + Device
Xcode 16.4
Using PushKit + CallKit with VoIP entitlement
I'm seeking help troubleshooting a persistent com.apple.IdentityLookup.error.messagefilter Code=3 error when my Message Filter Extension tries to defer to network. I’ve exhausted Apple documentation and forum posts, and Apple Support has asked me to escalate this via the forums to reach engineering.
✅ My Setup:
Xcode: 16.2
macOS: Sequoia 15.3.1 (Apple Silicon Mac mini)
Device: iPhone 14 Pro
iOS: 18.3.2 (Developer Mode enabled)
Tested via: TestFlight install on real device
📦 App Structure:
Main App Target (minimal "hello world" logic)
Message Filter Extension Target
Messages Extension Target
Message Reporting Extension Target
Notifications Extension Target
✅ Capabilities & Configurations
Main App Capabilities:
App Groups: group.com.example.shared
Network Extensions: Content Filter
Associated Domains:
messagefilter:my-api.example.com
applinks:my-api.example.com
Message Filter Capabilities:
App Groups: same as main app
Network Extensions: Content Filter
Associated Domains: same as above
📄 Info.plist Config
Main App Info.plist:
NSAppTransportSecurity with:
NSAllowsArbitraryLoads = YES
Exception domain my-api.example.com with:
NSIncludesSubdomains = YES
NSTemporaryExceptionAllowsInsecureHTTPLoads = YES
NSTemporaryExceptionMinimumTLSVersion = TLSv1.2
MessageFilter Info.plist:
Same ATS settings as above
NSExtension block:
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>ILMessageFilterExtensionNetworkURL</key>
<string>https://my-api.example.com/api/sms-filter</string>
<key>ILClassificationExtensionSMSReportDestination</key>
<string>+10000000000</string>
</dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.identitylookup.message-filter</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).MessageFilterExtension</string>
</dict>
📜 Entitlements
Main App Entitlements
<key>com.apple.developer.associated-domains</key>
<array>
<string>messagefilter:my-api.example.com</string>
<string>applinks:my-api.example.com</string>
</array>
<key>com.apple.developer.networking.networkextension</key>
<array>
<string>content-filter-provider</string>
</array>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Message Filter Extension Entitlements
Identical to main app’s, scoped to the extension.
📄 AASA File (Hosted on https://my-api.example.com/.well-known/apple-app-site-association)
Serves as application/json, returns 200 OK, and is reachable on device via Safari. Logs confirm AASA is downloaded and installed successfully during TestFlight install.
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.app",
"paths": ["*"]
},
{
"appID": "TEAMID.com.example.app.MessageFilter",
"paths": ["*"]
}
]
},
"messagefilter": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.app",
"filterType": "URL",
"domains": ["my-api.example.com"]
},
{
"appID": "TEAMID.com.example.app.MessageFilter",
"filterType": "URL",
"domains": ["my-api.example.com"]
}
]
},
"classificationreport": {
"apps": [],
"details": [
{
"appID": "TEAMID.com.example.app",
"domains": ["my-api.example.com"]
},
{
"appID": "TEAMID.com.example.MessageReporting",
"domains": ["my-api.example.com"]
}
]
}
}
❌ The Problem
When the extension launches and receives an SMS to classify, logs show:
deferQueryRequestToNetwork failed: The operation couldn’t be completed. (com.apple.IdentityLookup.error.messagefilter error 3.)
The extension loads, network URL is available, the AASA is installed, and yet the extension is not allowed to defer to network. This occurs every time.
🧪 Other Notes
Tried rebuilding everything from scratch
Archiving to TestFlight, not running via Xcode
Clean entitlements verified using codesign -d --entitlements :-
Console logs show no issues with AASA download or validation
Any help or insights from Apple engineering or others in the community who have successfully deployed a working Message Filter Extension would be hugely appreciated.
Thanks in advance 🙏
Hello,
I'm trying to display some Duration in a live activity using a custom format, with the goal of displaying a match time (only minutes) as, e.g. 33', 45' (+2), etc.
For that purpose, I'm using a TimeDataSource<Duration>, so that it also updates automatically given a starting point.
I've implemented my custom FormatStyle, trying to somehow mimic the existing UnitsFormatStyle (which perfectly works with live activities) but just changing the format.
I've added conformance to DiscreteFormatStyle, and code-wise everything seems to be ok (if I've understood things correctly). It compiles and it even works as expected in a playground.
However, when trying to use it within the live activity, I'm getting these cryptic errors in the Console.app, and the live activity just turns into a view with placeholders
Failed to fetch view from archive at index 12: SwiftUI.AnyCodable<SwiftUI.(unknown context at $1d47f6af0).SafelyCodableRequirement>.(unknown context at $1d47fe410).Errors.noType(mangledName: "7SwiftUI18TimeDataFormattingO10ResolvableVy_AA0cD6SourceVAAE15DurationStorageOys0H0V_GAK28BlickLiveActivitiesExtensionE16MatchFormatStyleVG")
[624AEC37-13D9-4927-9F41-C3092B61E214] Failed to return view entry from archive for view model with tag listItem with error: SwiftUI.AnyCodable<SwiftUI.(unknown context at $1d47f6af0).SafelyCodableRequirement>.(unknown context at $1d47fe410).Errors.noType(mangledName: "7SwiftUI18TimeDataFormattingO10ResolvableVy_AA0cD6SourceVAAE15DurationStorageOys0H0V_GAK28BlickLiveActivitiesExtensionE16MatchFormatStyleVG")
Are there any limitations when it comes to live activities and these custom formatters? This whole error doesn't make sense, since I'm only aiming to update every minute, which should just be fine, the same thing I get with the UnitsFormatStyle.
For reference, this is my playground, which just works as expected:
import Foundation
import SwiftUI
import PlaygroundSupport
extension Duration {
struct MatchFormatStyle: DiscreteFormatStyle, Sendable {
let periodLength: Int
let overtime: Int
func format(_ value: Duration) -> String {
let (seconds, _): (Int64, Int64) = value.components
let minutes: Int = Int(seconds) / 60
let current: Int = periodLength + minutes + overtime
if current > periodLength {
return "\(periodLength)' (+\(current - periodLength))"
} else {
return "\(current)'"
}
}
func discreteInput(before input: Duration) -> Duration? {
let (seconds, _): (Int64, Int64) = input.components
let minutes: Int64 = seconds / 60 - 1
return Duration(secondsComponent: minutes * 60, attosecondsComponent: .zero)
}
func discreteInput(after input: Duration) -> Duration? {
let (seconds, _): (Int64, Int64) = input.components
let minutes: Int64 = seconds / 60 + 1
return Duration(secondsComponent: minutes * 60, attosecondsComponent: .zero)
}
}
}
extension FormatStyle where Self == Duration.MatchFormatStyle {
static func matchTime(currentTime: Int, periodLength: Int) -> Duration.MatchFormatStyle {
return Duration.MatchFormatStyle(periodLength: periodLength, overtime: max(currentTime - periodLength, .zero))
}
}
extension TimeDataSource<Date> {
static func matchDuration(for currentTime: Int, periodLength: Int) -> TimeDataSource<Duration> {
let minutesAhead: Double = Double(max(periodLength - currentTime + 1, .zero))
return TimeDataSource<Date>.durationOffset(to: Date.now.addingTimeInterval(minutesAhead * 60))
}
}
struct FooView: View {
let currentTime: Int = 36
let periodLength: Int = 45
var body: some View {
Text(
TimeDataSource<Date>.matchDuration(for: currentTime, periodLength: periodLength),
format: .matchTime(currentTime: currentTime, periodLength: periodLength)
)
.frame(width: 400, height: 200)
.font(.system(size: 50))
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.setLiveView(FooView())
Any hints or suggestions are welcome, many thanks in advance.
I have been trying to use TipKit popovers in my App. They all behave as expected in the simulator but on a real device I am seeing some strange behaviors. I have a couple of instances of where the tip is displaying an entire sheet instead of just the popover. In another case I cannot dismiss the Tip. Has anyone seen these behaviors and are there known issues/workarounds for this?
I am reluctant to use something that works perfectly in the simulator but gives unpredictable results on a device. Not a good user experience in my opinion.
Hi all,
I’m working on a Screen Time app using Managed Settings and ShieldConfiguration, and I’ve run into an issue where screen time is still being counted while the shield is shown — even when the user never interacts with the underlying app content.
This happens both when I use the default shield and when I configure a custom ShieldConfiguration with a ShieldAction. As long as the shield is visible, the time appears to count toward the app’s usage. For example, if I leave the shield up for 20 minutes, Screen Time logs it as 20 minutes of app usage — even if no content is accessed behind the shield.
Is this expected behavior? Is there a way to prevent Screen Time from counting time while the shield is shown?
Any insights or workarounds would be greatly appreciated!
Thanks,
Connor
we have three problem when using the push notification on Live Activity.
1. What is the specific callback strategy for the activityUpdates property in ActivityKit?
We found that in actual user scenarios, there is a probability that we may not receive callbacks. From the community experience, there are some resource optimization strategies that do not perform callbacks. From this perspective, the explanation is kind of vague. Is there any clear feedback to understand why callbacks are performed/not performed?
2.what is the specific description of the wake-up strategy, when background app receive Live Activity offline start Push?
From community experience, we can see that the system may wake up for a duration of 0-30s due to resource optimization strategies, or not wake up/not deal with it. Is there an official description of the wake-up strategy? or we also have to follow this description:
Wake up of apps using content-available pushes are heavily throttled. You can expect 1-2 wakeup per hour as a best case scenario in the hands of your users. so this cannot be assumed to be a reliable wake-up on demand mechanism for an app.
3 How can we determine user have selected (allow or always allow) of the Live Activity permission?
When we use real-time activity offline push, there are two system prompts in iOS:
the first prompt : allow and disallow real-time activity
the second prompt : always allow and disallow
Is there an interface that can directly determine which permission the user has chosen (allow/always allow)? (By the way, we can get disallow status).
At present, we haven't seen any interface in the official documentation/interface that can determine (allow/always allow). The difference here will affect the generation of Update Token. Without Update Token, we can not update our activity instance.
Hi All,
I am facing one problem in my app.
That is open battery settings from my app.
It is working fine in iOS 16.0.0 and it's not working in iOS 18.6.1
is it possible to make it workable in iOS 18.6.1?
If so How to do that?
Please help me over this to resolve the problem.
Thanks,
Nguyen Quang Minh
In the past I was always able to install every major macOS version on an external drive so that I can test my apps. But now I'm unable to install macOS Tahoe 26 on an external drive. Actually, as far as I'm aware, there are not even official links to macOS 26 installers, but only instructions on how to update to macOS 26 from an existing macOS installation. So I thought I'd install macOS 15 on a separate drive and then update to macOS 26, but whenever I run the macOS 15 installer, tell it to install on the external drive, and reboot after the setup process completes, my MacBook just boots into my main macOS partition as if nothing happened.
3 months ago I somehow managed to install macOS Tahoe beta 1 on an external drive, I don't remember how (but I don't think it was anything crazy); booting into that beta 1 partition and trying to update doesn't work either, as my MacBook again boots into my main macOS partition. I already asked help about the update problem one month ago here, but nobody replied.
Could someone at Apple please provide instructions on how one is supposed to install macOS 26 on an external drive (if possible before it becomes available to the public)? Are we supposed to buy a separate Mac for every macOS version that we want to test our apps on?
I’m currently developing a spam number blocking app using CallKit.
I’ve confirmed that up to iOS 26 beta 5, there is a bug where number blocking doesn’t work.
In my current tests, the ringtone doesn’t sound and the blocking works fine, but the call still appears in the missed calls list, which is bothersome.
If the bug is fixed in future versions (as it was in previous versions), is there a way to block the number so that it also does not appear in missed calls?
Hello,
my app is frequently loosing / forgetting the Screen Time Permission that had been granted previously on iOS 26.
I have experienced it myself, sysdiagnose is in this radar:
FB18997699
But also also my App Store users who have updated to iOS 26 already have reported this bug.
It would be great if Apple could ensure that this bug is addressed before iOS 26 is released to the public.
Topic:
App & System Services
SubTopic:
General
Tags:
Family Controls
Device Activity
Managed Settings
Screen Time
I'm working with the Screen Time API (FamilyActivityPicker) in SwiftUI and need help with a specific scenario.
I'm using the FamilyActivityPicker to let users select apps and categories to block. I save the previous selection (both applicationTokens and categoryTokens) locally. When the user updates their selection, I compare the new selection with the saved one to determine which apps or categories were removed.
However, I’m trying to handle a specific case: when an individual app token is removed from the selection because its entire category was selected instead. In this situation, even though the app is no longer in applicationTokens, it's still blocked due to its category being included in categoryTokens.
Since I need to show users which apps were actually removed, I want to avoid listing apps that are still indirectly blocked via a selected category. I’ve created a mapping between ApplicationToken and FamilyActivityCategoryToken to check whether a removed app is still covered by a selected category before displaying it.
Is there any way to check this using the current Screen Time APIs, or does the system not give access to the relationship between apps and their categories? Any help or suggestions would mean a lot!
Hello, I’m working on a caller ID app and with the release of iOS 18.2, Apple has introduced the ability to set a third-party app as the default calling app. I have followed the official documentation for this feature and successfully set my app as the default phone app for making and receiving calls.
Documentation Reference:
https://developer.apple.com/documentation/callkit/preparing-your-app-to-be-the-default-calling-app
Now, I’m facing some challenges and need some guidance:
Custom UI for Incoming Cellular Calls:
Is it possible to show a custom UI when receiving SIM-based cellular calls (not VoIP)? I want to replace the default iOS call screen with my own design when a cellular call is received. Can CallKit allow me to manage and display this custom UI for real cellular calls?
Detecting Incoming Cellular Calls:
Can I detect incoming SIM-based cellular calls when my app is set as the default calling app? I would like to track and show details of incoming calls (e.g., caller information, call duration) using a custom interface.
Displaying Call Data (Call Duration, Recent Calls):
Can I show call data (e.g., call duration, recent call history, etc.) for SIM-based cellular calls within my app when it is the default calling app? I need to know if it’s possible to retrieve and display this data in a custom format.
Managing Outgoing Cellular Calls:
For SIM-based outgoing calls, can I handle the process of initiating the call and then show a custom UI for the call in progress (similar to how VoIP apps manage outgoing calls)?
I understand that CallKit can be used to manage the UI for calls, but I’m unsure about the limitations when it comes to real SIM-based cellular calls. Is it possible to implement these features with the current API capabilities, or are there any restrictions I should be aware of when managing cellular network calls?
Thanks in advance for your help!
I have an iOS app that includes a local Swift package. This Swift package contains some .plist files added as resources. The package also depends on an XCFramework. I want to read these .plist files from within the XCFramework.
What I’d like to know is:
Is this a common or recommended approach—having resources in a Swift package and accessing them from an XCFramework?
Previously, I had the .plist files added directly to the main app target, and accessing them from the XCFramework felt straightforward. With the new setup, I’m trying to determine whether this method (placing resources in a Swift package and accessing them from an XCFramework) is considered good practice.
For context: I am currently able to read the .plist files from the XCFramework by passing Bundle.module through one of the APIs exposed by the XCFramework.
My app AirCompare has been in the app store and successfully using WeatherKit to fetch weather since it became available. Now some (not all) users are encountering the following errors:
Failed to generate jwt token for: com.apple.weatherkit.authservice with error: Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)"
Encountered an error when fetching weather data subset; location=<+42.40865786,-88.96911526> +/- 0.00m (speed -1.00 mps / course -1.00) @ 6/23/25, 2:56:47 PM Central Daylight Time, error=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors 2 Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)"
Others are reporting this same problem here in the forums. We need a solution!
Hello,
How do apps like App Lock implement app-opening from a shield? Is this supported for 3rd-party apps or limited to partners?
https://apps.apple.com/us/app/app-lock/id6448239603
Hi Apple Developers,
I am currently working on a message filtering application and facing issues specifically with filtering RCS (Rich Communication Services) messages. To debug this, I created a sample app that consistently categorizes all incoming messages as "junk." However, the filtering behaviour is inconsistent and not functioning as expected.
Here are the key issues observed during testing on iOS versions 18.2.1 and 18.3:
Inconsistent Filtering Behavior:
When a message is received from an unknown number, it sometimes gets moved to the Junk folder momentarily but is then immediately moved back to the main Messages inbox.
In some cases, the message does not get moved to the Junk folder at all, despite the app returning the verdict as "junk."
Duplicate Contact Tiles:
The Messages app displays two separate conversation tiles for the same mobile number, which is unexpected behavior.
For reference, my carrier partner is T-Mobile. Please let me know if you need any additional information to investigate this issue further.
Looking forward to your insights and guidance.
Best regards,
Rijul Singhal