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!
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've been working recently on an access card type appllication, where due to requirements HCE must be used.
I started with examples from the official documentation and was able to achieve correct communication.
The HCE is working on newer versions of iOS, there's only one problem: acquiring new intent assertion. Due to the business requirements our users may need to use our application multiple times in short periods of time (below 10 seconds apart).
Is there any possibility to shorten the required 15 seconds before acquiring a new intent assertion?
I appreciate any suggestions.
Hello,
I've been working recently on an access card type appllication, where due to requirements HCE must be used.
I started with examples from the official documentation and was able to achieve correct communication.
The HCE is working on newer versions of iOS, there's only one problem: acquiring new intent assertion. Due to the business requirements our users may need to use our application multiple times in short periods of time (below 10 seconds apart).
Is there any possibility to shorten the required 15 seconds before acquiring a new intent assertion?
I appreciate any suggestions.
Hello Folks,
I recently came through a new API introduced from iOS 18 onwards isSIMInserted and according to the document it is A Boolean property that indicates whether a SIM is present. I really appreciate Apple for introducing such an useful API but there are few queries on what are the requirements for using this API.
Query 1: Do we need any special entitlements for making use of this API. ? If yes then what are those entitlements and are these entitlements available openly or we have to raise special request to apple for such entitlements?
Query 2: What are the entries required to be added in info.plist for supporting the isSIMInserted api to work.
Query 3: Is isSIMInserted api available for all type of apps because mine is a financial stock related app and i am looking forward to use this API for providing more security to the end user while registering through sms. As per the below link this api is only available for mobile Carrier apps but in official document there is no such mention.
https://forums.developer.apple.com/forums/thread/760991
Please kindly help me on these queries ?
Regards,
Carol
Hello,
I am currently developing a call service using CallKit and VoIP push. Recently, I have encountered a very challenging issue. During testing, when a VoIP push is received, the incomingCall gets triggered continuously, but then it automatically terminates after about 1-2 seconds. I am checking this issue under the debug scheme, and even when switching to different commits, the same problem persists.
I suspect it might be an issue with the device, but I would like to confirm the cause and find a solution. Below are some characteristics I have noticed:
On this device, when a VoIP push is received, CallKit automatically terminates, but this does not occur when debugging.
The issue always occurs when not debugging.
Looking at the device console logs related to callservicesd, there are many logs with 'invalidate' appended.
For example:
Invalidating process assertion for bundle ID from timeout
All calls ended. Clearing system uplink muted cache
Invalidate callDurationUpdateTimer
InCallService has changed process state to 2
InCallService has been suspended; invalidating its XPC client connections.
[0x565544180] invalidated because the current process cancelled the connection by calling xpc_connection_cancel()
XPC connection invalidated from client
These logs appear although our server did not receive any incoming call request, so we did not terminate it on our end. I also checked if there was a crash, but there were no reports left on the device.
Could you please share any insights into the cause or solutions for this situation?
Thank you.
Hello -
I have an older app on the store, iAchieved, that suddenly stopped working properly on iOS 18. You can see it on the store, here:
https://apps.apple.com/us/app/iachieved/id1069338478
It still opens runs, and I can try to enter a new item, but something is wrong with the date, so that the "Done" button does not appear. And since it does not, I cannot tap it and create the item.
I'm not a developer, I don't code, I only designed the app and had someone build it for me.
But, if you can put it in layman's terms, any idea what's causing this?
Thanks so much for any insight you can provide,
-- David
Topic:
App & System Services
SubTopic:
General
When I create a list of 6 options for disambiguation, option 5 is ignored by Siri. For example, I have the following code to resolve one of my parameters for a custom intent. When this code executes, Siri reads off the Disambiguation Prompt in the Intents Definition. Then it displays the options shown below. However, if you respond to the prompt with "No" or "No change it", the response is completely ignored. The resolve method is not even called with anything. But if you respond with "Yes continue" or "Yes I'm done", the resolve method is called and I can process the chosen option.
Does this seem like a bug or am I missing something? Does it have anything to do with the Intent Definition for this parameter having Paginate every ___ items set to 6?
NSMutableArray *options;
options = [[NSMutableArray alloc] init];
NSString *anOption = [NSString stringWithFormat:@"%@ myList", intent.partsListName]; // option 1
[options addObject:anOption];
anOption = @"option 1";
[options addObject:anOption];
anOption = @"option 2";
[options addObject:anOption];
anOption = @"option 3";
[options addObject:anOption];
anOption = [NSString stringWithFormat:@"Yes, continue"]; // option 4
[options addObject:anOption];
// Option 5
anOption = [NSString stringWithFormat:@"No, change it"];
[options addObject:anOption];
// Option 6
anOption = [NSString stringWithFormat:@"Yes, I'm done"];
[options addObject:anOption];
completion([INStringResolutionResult disambiguationWithStringsToDisambiguate:[options copy]]);
Description
When you try to open an iOS app using Universal links from another app while the opening app is being updating, Safari will open an error screen(app will not launch).
Is this a specification of universal links on iOS?
Also is it possible for the Main app to detect that the application trying to open Universal Link is being updating?
Devices
iPad 9thGen/10thGen
Hi everyone, I am trying to compress my data using LZMA2 with the help of CocoaPods.
Here are the steps I followed to achieve LZMA2 compression:
Added the pod 'SWCompression', '~> 4.8' dependency to my Podfile and installed the pod using the terminal.
When I try to compress the data using LZMA2, I am unable to do so because in SWCompression, LZMA2 compression is marked as TBD (To Be Determined).
Here is the current status of SWCompression:
Deflate BZip2 LZMA/LZMA2 LZ4
Decompression ✅ ✅ ✅ ✅
Compression ✅ ✅ TBD ✅
Zlib GZip XZ ZIP TAR 7-Zip
Read ✅ ✅ ✅ ✅ ✅ ✅
Write ✅ ✅ TBD TBD ✅ TBD
Since LZMA2 compression is still marked as TBD, is there any other way to achieve LZMA2 compression for my data in SwiftUI?
Hello,
I've been encountering some challenges while working with NWConnectionGroup and NWMulticastGroup for multicast operations on iOS. I have a few doubts and issues that I would like to address:
1. NWMulticastGroup Initialization
It seems that when initializing NWMulticastGroup, only one NWEndpoint can be passed, and attempting to pass multiple endpoints results in failure. Can someone confirm if this behavior is correct?
2. Interface Level Control
Upon initializing NWConnectionGroup, it appears that packets are received on all interfaces without the ability to control this at the interface level. Is this correct? If not is there a way to configure NWConnectionGroup to receive packets on all interfaces?
3. Sending Behavior
During the send operation, it appears that the data is sent through any one of the available interfaces, and there doesn't seem to be an option to configure it to send through all available endpoints. Is there a way to enable sending data through all available endpoints?
Any insights, guidance, or solutions to these issues would be greatly appreciated. Has anyone else encountered similar problems or found workarounds for these limitations?
Thank you for your assistance and support.
Thanks,
Harshal
I currently create a AppIntent that contains a custom AppEntity, it shows like this
struct GetTimerIntent: AppIntent {
static let title: LocalizedStringResource = "Get Timer"
@Parameter(title: "Timer")
var timer: TimerEntity
func perform() async throws -> some IntentResult {
.result(value: timerText(timer.entity))
}
static var parameterSummary: some ParameterSummary {
Summary("Get time of \(\.$timer)")
}
func timerText(_ timer: ETimer) -> String {
// Implementation Folded
}
}
struct TimerEntity: AppEntity {
var entity: ETimer
static let defaultQuery: TimerQuery = .init()
static var typeDisplayRepresentation: TypeDisplayRepresentation {
TypeDisplayRepresentation(name: "Timer")
}
var id: UUID {
entity.identifier
}
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "\(entity.title)")
}
}
To get the timers, I create a TimerQuery type to fetch them from SwiftData containers.
struct TimerQuery: EntityQuery, Sendable {
func entities(for identifiers: [UUID]) async throws -> [TimerEntity] {
print(identifiers)
let context = ModelContext(ModelMigration.sharedContainer)
let descriptor = FetchDescriptor<ETimer>(
predicate: #Predicate {
identifiers.contains($0.identifier)
},
sortBy: [.init(\.index)]
)
let timers = try context.fetch(descriptor)
print(timers.map(\.title))
return timers.map {
TimerEntity(entity: $0)
}
}
}
Everything looks make sense since I code it. When I'm testing, the console jump
No ConnectionContext found for 105553169752832 and I can't get my datas.
How can I solve this issue?
I'm using ShieldActionExtention to make a HTTP request to a server when a user selects one of the buttons on their app shield. The apps are shielded, but nothing happens when I press one of the shield buttons. There is no message on the server signaling an HTTP request and nothing is printed to the XCode console while in debug mode.
Here is my code for my Shield Action Extention
// ShieldActionExtension.swift
// ShieldAction
//
//
import Foundation
import UIKit
import SwiftUI
import ManagedSettings
// Override the functions below to customize the shield actions used in various situations.
// The system provides a default response for any functions that your subclass doesn't override.
// Make sure that your class name matches the NSExtensionPrincipalClass in your Info.plist.
class ShieldActionExtension: ShieldActionDelegate {
override func handle(action: ShieldAction, for application: ApplicationToken, completionHandler: @escaping (ShieldActionResponse) -> Void) {
print(action)
let deviceID = UserDefaults.standard.string(forKey: UserDefaultKeys.userID.rawValue)!
Task{
do{
print("sending to server")
try await PlayerLosesGame(playerID: deviceID)
completionHandler(.close)
} catch {
print("error occured on the shield")
completionHandler(.none)
}
}
}
override func handle(action: ShieldAction, for webDomain: WebDomainToken, completionHandler: @escaping (ShieldActionResponse) -> Void) {
print(action)
let deviceID = UserDefaults.standard.string(forKey: UserDefaultKeys.userID.rawValue)!
Task{
do{
print("sending to server")
try await PlayerLosesGame(playerID: deviceID)
completionHandler(.close)
} catch {
print("error occured on the shield")
completionHandler(.none)
}
}
}
override func handle(action: ShieldAction, for category: ActivityCategoryToken, completionHandler: @escaping (ShieldActionResponse) -> Void) {
print(action)
let deviceID = UserDefaults.standard.string(forKey: UserDefaultKeys.userID.rawValue)!
Task{
do{
print("sending to server")
try await PlayerLosesGame(playerID: deviceID)
completionHandler(.close)
} catch {
print("error occured on the shield")
completionHandler(.none)
}
}
//completionHandler(.close)
}
func PlayerLosesGame(playerID: String) async throws{
let url = URL(string: ServerConnection.GetWebsite() + "game/find?playerID="+playerID)!
var request = URLRequest(url: url)
request.httpMethod = "GET"
print("trying this out")
let (data, _) = try await URLSession.shared.data(for: request)
}
}
I believe all my targets are set up correctly and should be working. Why is nothing happening?
Topic:
App & System Services
SubTopic:
General
Tags:
Network
Family Controls
Managed Settings
Screen Time
Hello,
In one of our apps we use DeviceActivityReportExtension to show the user how much screen time is remaining. The calculation is working as expected, but we have noticed that the labels in our ScreenTimeBriefReport are not localized to the device language.
Example:
Device with language set to Swedish
App fully translated to English and Swedish
Result:
All labels in app are using the Swedish translations, except the strings in our ScreenTimeBriefReport instance. These labels are using the English localization. I've verified it's using the English localization from our Localizable.xcstrings file.
I tried logging device language from our ScreenTimeBriefReport instance, but I could not see anything in Console.app. I guess this is intentional so no sensitive user information can be extracted.
Is this a known feature or bug? If it's the latter, is there a known workaround?
Sincerely,
César
STEPS TO REPRODUCE
Install the application “Dynamic-Lyrics" develop by me, which the bundle ID is com.bing.lyrics
(https://apps.apple.com/us/app/id6476125287)
Use this APP for a period of time
Go to Settings - Screen Time - See All App & Website Activity
I found that the name and icon displayed in Screen Time are incorrect.
The expectation is: “Dynamic-Lyrics", but the actual display is "com.microsoft.bing"
The guess is that the bundle ID contains the characters com.bing (bing is my name) and is incorrectly recognized as microsoft’s app.
Reading text out of PDFs with PDFKit results in some text being returned way out of order when using .string or .attributedString functions. Way out of order means not just wrong sorting of words on a line or wrongly showing up on the next line (as has happened with PDFKit on older iOS releases, e.g. 17.x), but some text (one or more words) may show up near the end of a page of text, while it should show near the beginning.
As Page.characterBounds(at:) is buggy in iOS 18.x returns wrong bounds, devs cannot correct such faulty PDFKit behaviour programmatically.
I believe it is on Apple to fix this iOS 18 bug asap. Thank you for giving it priority as this is killing apps that need PDFKit to get and parse text data out of PDFs.
I have filed Feedback FB16264926.
The app I'm making uses the CallDirectory extension to identify callers.
Where is the contact data added by "func addIdentificationEntry" in "CallDirectory Extension" stored?
The app calls "CXCallDirectoryManager.sharedInstance.reloadExtension" and adds contact data by processing "CXCallDirectoryExtensionContext.addIdentificationEntry" written in "func beginRequest" of "CallDirectory Extension".
I thought that if I uninstalled the app, I would lose the contact data that added by App.
However, when I uninstalled the app and reinstalled it, it seemed to retain contact data that added by App before I uninstalled the app,
even though the app hasn't added any contact data yet.
Will the contact data added to the "CallDirectory Extension" be retained on iPhone even after uninstalling the app?
---Note---
I found a similar post on the forum about contact data added by addIdentificationEntry.
・CallKit - addIdentificationEntry is it secure?
[https://developer.apple.com/forums/thread/662182]
Answer of this post that "the added data is cached in a SQLite database",
but I couldn't find any official Apple documentation on this, so I'm not sure if this is correct.
If contact data is cached in SQLite, will that data remain on the iPhone when uninstalled and not deleted?
●Development environment
Mac OS Sonoma 14.7.1
Xcode 16.0
Swift
●Test Device
iPhoneSE3
iOS:17.6.1
Hi,
I'm trying to implement WeatherKit for the first time and I am seeing this error when calling for the weather:
Failed to generate jwt token for: com.apple.weatherkit.authservice with error: Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)"
and
Encountered an error when fetching weather data subset; location=<+51.57750785,-2.08241362> +/- 6.55m (speed -1.00 mps / course -1.00) @ 11/01/2025, 11:50:45 Greenwich Mean Time, error=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors 2 Error Domain=WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors Code=2 "(null)"
I have:
Enabled the WeatherKit capability in my iOS app in XCode
Added Weatherkit to the AppID in the developer portal
Any suggestions what else I can check?
I'm running iOS 18.2.1 on 15 ProMax with XCode 16.2
Hi There,
My app displays both daily and hourly forecast information, as consumed from the Weatherkit API.
I would also like to let my users know when the forecast was generated/issued. The reason being, if a forecast was issued 1-2 hours in the past for example, then the user(s) will know to refresh the weather forecast for the latest information soon.
Looking through the docs, I don't see any way of accessing this information. I would expect it to be available on the hourlyForecast.metadata property.
Does anyone know if it's possible to obtain the 'issued time' of the forecast? (both hourly and daily).
Thanks
I am trying to create a lockscreen widget that is a deepink to a page in my app, but I am getting an error once building the widget itself (building the app works). Currently, the app is on my phone as well as the widget on my lockscreen, but the widget only goes to either my homepage or the page I was last on if the app wasn't fully closed.
I've been stuck on this feature and can't get any progress on getting it to work properly...
The error:
SendProcessControlEvent:toPid: encountered an error: Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8 "Failed to show Widget '.widget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x7fea68510 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=3 "Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)" UserInfo={NSLocalizedDescription=Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)}}, FBSOpenApplicationRequestID=0x8b49, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}." UserInfo={NSLocalizedDescription=Failed to show Widget '.widget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x7fea68510 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=3 "Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)" UserInfo={NSLocalizedDescription=Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)}}, FBSOpenApplicationRequestID=0x8b49, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}., NSUnderlyingError=0x7fea68540 {Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x7fea68510 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=3 "Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)" UserInfo={NSLocalizedDescription=Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)}}, FBSOpenApplicationRequestID=0x8b49, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}}}
Domain: DTXMessage
Code: 1
User Info: {
DVTErrorCreationDateKey = "2025-01-14 01:35:08 +0000";
}
SendProcessControlEvent:toPid: encountered an error: Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8 "Failed to show Widget '.widget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x7fea68510 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=3 "Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)" UserInfo={NSLocalizedDescription=Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)}}, FBSOpenApplicationRequestID=0x8b49, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}." UserInfo={NSLocalizedDescription=Failed to show Widget '.widget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x7fea68510 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=3 "Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)" UserInfo={NSLocalizedDescription=Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)}}, FBSOpenApplicationRequestID=0x8b49, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}., NSUnderlyingError=0x7fea68540 {Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x7fea68510 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=3 "Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)" UserInfo={NSLocalizedDescription=Request widget family (systemMedium) is not supported by this widget kind (TransactionLockScreenWidget)}}, FBSOpenApplicationRequestID=0x8b49, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}}}
Domain: DTXMessage
Code: 1
System Information
macOS Version 15.2 (Build 24C101)
Xcode 16.2 (23507) (Build 16C5032a)
Timestamp: 2025-01-13T19:35:08-06:00
Subject/Title:
Critical SKAdNetwork Attribution Failures (Bug Type: 237, Failure Type: 1201 in ASDErrorDomain)
Issue Summary
We are encountering repeated SKAdNetwork attribution failures (failureType: 1201 in ASDErrorDomain) for ad impression events processed through the ad network mj797d8u6f.skadnetwork. These failures are causing significant revenue losses, as ad impressions are not being properly attributed to installs.
The issue occurs across multiple campaigns and involves both SKAdNetwork API 3.0 and 4.0, suggesting a systemic problem with attribution validation or network communication.
This problem is critical as it disrupts advertisers’ ability to track conversions, optimize campaigns, and allocate budgets effectively.
Technical Details
Key Logs:
Below are anonymized samples of the failed SKAdNetwork events:
Log Sample 1 (Failure):
{
"bug_type": "237",
"timestamp": "2025-01-07 22:49:15.00 -0500",
"os_version": "iPhone OS 18.2.1 (22C161)",
"roots_installed": 0,
"incident_id": "78523BD9-1F58-4738-B526-8A8A63203214"
}
{
"advertisementStoryId": "3D2E7EBB-1A57-4DF8-9375-2C465F423038",
"apiVersion": "3.0",
"eventType": "adImpression",
"resultType": "finalized",
"anonymous": true,
"failureType": 1201,
"failureDomain": "ASDErrorDomain",
"clientEventId": "0F456623-584F-4913-BBD3-C3FD1219D104",
"os": "iOS",
"topic": "xp_amp_skad_perf",
"adType": "app",
"adNetworkId": "mj797d8u6f.skadnetwork",
"eventTime": 1736305200000,
"osBuildNumber": "22C161",
"hardwareFamily": "iPhone",
"api": "SKAdNetwork"
}
Log Sample 2 (Failure):
{
"bug_type": "237",
"timestamp": "2025-01-07 22:49:15.00 -0500",
"os_version": "iPhone OS 18.2.1 (22C161)",
"roots_installed": 0,
"incident_id": "0CBF612D-F0D9-449E-A34E-DE2DB92BEC0D"
}
{
"advertisementStoryId": "946E568C-D2C1-478F-BFF3-4996C48F9B39",
"apiVersion": "3.0",
"eventType": "adImpression",
"resultType": "finalized",
"anonymous": true,
"failureType": 1201,
"failureDomain": "ASDErrorDomain",
"clientEventId": "1A3D48FB-4452-4FD8-BB25-1195470A53DC",
"os": "iOS",
"topic": "xp_amp_skad_perf",
"adType": "app",
"adNetworkId": "mj797d8u6f.skadnetwork",
"eventTime": 1736298000000,
"osBuildNumber": "22C161",
"hardwareFamily": "iPhone",
"api": "SKAdNetwork"
}
Log Sample 3 (Success Example for Comparison):
{
"bug_type": "237",
"timestamp": "2025-01-07 22:49:15.00 -0500",
"os_version": "iPhone OS 18.2.1 (22C161)",
"roots_installed": 0,
"incident_id": "BFEAC86B-8195-4DB0-96FF-2028107256AD"
}
{
"advertisementStoryId": "946E568C-D2C1-478F-BFF3-4996C48F9B39",
"apiVersion": "3.0",
"eventType": "adImpression",
"resultType": "finalized",
"anonymous": true,
"clientEventId": "F6265488-E0FB-448A-A406-3F7254BCA9D7",
"os": "iOS",
"topic": "xp_amp_skad_perf",
"adType": "app",
"adNetworkId": "mj797d8u6f.skadnetwork",
"eventTime": 1736294400000,
"osBuildNumber": "22C161",
"hardwareFamily": "iPhone",
"api": "SKAdNetwork"
}
Failure Details:
Failure Type: 1201
Failure Domain: ASDErrorDomain
Ad Network ID: mj797d8u6f.skadnetwork
API Versions Affected: 3.0, 4.0
Timeframe of Failures: All logs occur within 2025-01-07 22:00:00 UTC to 23:00:00 UTC.
Environment:
OS Version: iOS 18.2.1 (Build 22C161).
Device Type: iPhone (hardwareFamily: iPhone).
App Configuration: Includes the ad network ID in the Info.plist under SKAdNetworkItems.
Impact Details
Financial Loss:
Based on failure rates, we estimate $20–$65/day per advertiser for small campaigns and $75–$375/day per advertiser for larger campaigns.
If 100 advertisers are affected, daily losses range from $2,000–$37,500.
Over a week, losses could exceed $70,000 to $262,500 or more.
Operational Impact:
Advertisers cannot track installs or optimize campaigns, leading to inefficient ad spending and potential budget reallocation to other networks.
Damaged trust between advertisers and the ad network.
Reputation Risk:
Continued failures harm the credibility of the SKAdNetwork framework, critical in a post-ATT (App Tracking Transparency) ecosystem.
Steps to Reproduce
Serve an ad impression through the ad network mj797d8u6f.skadnetwork.
Monitor SKAdNetwork attribution for that impression.
Observe repeated failures (failureType: 1201) despite the resultType: finalized status.
Recommendations for Investigation
Attribution Timeout:
Verify if these failures stem from delayed responses or missed attribution windows.
Ad Network Configuration:
Confirm the ad network’s integration complies with SKAdNetwork API 3.0 and 4.0 requirements.
Infrastructure Review:
Investigate potential bottlenecks or failures in Apple’s attribution servers (ASDErrorDomain) or communication delays.
Contact Details
Name: [Your Full Name]
Role: [Your Role] (e.g., Ad Network Analyst/Developer)
Organization: [Your Company Name]
Email: [Your Email Address]
Phone: [Your Phone Number]
Submission Instructions
You can submit this report via the following channels:
Apple Feedback Assistant: https://feedbackassistant.apple.com/
Bug Reporting Tool: https://developer.apple.com/bug-reporting/
Apple DTS: https://developer.apple.com/support/technical/
Topic:
App & System Services
SubTopic:
General