I'm using FamilyActivityPicker to get consent for app/category management, which returns a FamilyActivitySelection object.
I serialize this FamilyActivitySelection object (just applicationTokens and categoryTokens) and pass it to my DeviceActivityMonitor extension via App Group UserDefaults. I am using the JSON encoder/decoder over PropertyList (though both seem to exhibit the same behavior).
After inspecting the FamilyActivitySelection object immediately after it's returned by FamilyActivityPicker in the main app, the application.bundleIdentifier property is consistently nil for every Application object within selection.applications. Similarly, category.localizedDisplayName is nil for ActivityCategory objects. This happens whether "Select All Apps" is used or if apps/categories are selected individually.
I understand that this is the intended behavior due to Apple's user privacy policies. I read on another post that my app can be provided with bundle identifiers and app names within Shield Configuration extensions and Device Activity Report extensions - I'm not sure which ones or how exactly to do this.
I am aware that I can use Label(applicationToken) SwiftUI view to display the app name/icon, but this doesn't give programmatic access to the bundleIdentifier string.
My app will not log or export these bundleIdentifiers outside of its sandbox. My goal is to create mappings to the FamilyActivitySelection with the publicly accessible bundleIdentifiers.
Any guidance, examples, or clarification on the intended workflow for this scenario would be greatly appreciated!
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
Hello,
After submitting onboarding form for Live Caller ID Lookup feature, we received rejection response that our OHTTP gateway doesn't support HTTP/2.
We have run provided command openssl s_client -alpn h2 -connect with our domain several times from different machines and environments, and our results consistently confirm that HTTP/2 is indeed supported by our OHTTP gateway.
The output clearly shows ALPN protocol: h2, indicating successful HTTP/2 negotiation. Here is the log chunk from the command-line response:
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 4393 bytes and written 406 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256
Server public key is 2048 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
ALPN protocol: h2
Early data was not sent
Verify return code: 0 (ok)
---
DONE
We have also tried different 3rd-party services to check the HTTP/2 support and they also confirmed that HTTP/2 is supported.
Is it possible to provide additional details on the specific criteria or test conditions that led to its non-approval? I'm happy to provide any further diagnostic information or engage in more detailed technical discussion.
For login purposes, we may want to try automatically checking to see if an email address is set up in certain databases. It looks like the preferred way to do this is via ABAddressBook.shared().me(), then get the right key via in the properties? This, however, is treated as accessing the whole address book and brings up a confirmation dialogue.
However, as I thought about it, that might not be the real way we'd want -- we'd want to go through Active Directory, perhaps?
Am I making any sense, or just being incoherent? 😄
Hi,
I’m developing an iOS application and want to explore if there are any official methods available to monitor or retrieve information about the usage patterns of other apps installed on a user’s device — such as launch time, duration of use, or app switching behavior.
I understand Apple enforces strict privacy policies. My question is:
Are there any APIs or frameworks (public or private) that allow reading app usage data from other apps?
Can Screen Time or DeviceActivityReport frameworks be leveraged for such use?
Would an app like this be eligible for App Store approval, or would it require special entitlements?
My intent is not to violate privacy, but to explore if Apple allows any of this under Screen Time APIs or family usage scenarios.
Any insights or guidance would be appreciated!
Thanks,
[Your Name]
Topic:
App & System Services
SubTopic:
General
My app requirement is to check that User is on call while doing transaction. If user on call then we need to show Caution alert. For this requirement we used CallKit to detect Call status and it's working fine but recently Apple has rejected the application because of Callkit that is banned in China.
Could you please provide any solution to check the Call Status only.
I am developing a VoIP phone application(Our Phoneapp) using APNs VoIP push.
I have a question regarding a behavior I discovered during testing of this application.
When performing the following operations using an iPhoneSE3 with an sXGP-NW SIM inserted,
0xBAADCA11 occurs upon receiving an APNs VoIP PUSH.
Do you have any information regarding this issue?
0xBAADCA11 occurs in operation 8. However, since there were no problems in operation 4 (the app works when Wi-Fi is off), I think there is no issue with the Our Phoneapp.
[Configuration of system components]
[VoIP Telephone] --Call to iPhone(Phoneapp)--> [Our VoIP PBX Server] -- VoIP PUSH request --> [Apple APNs Server] -- VoIP PUSH --> [Our Phoneapp (iPhoneSE3(with sXGP SIM)]
[Operations]
(The issue is reproducible 100% by following oparation)
iPhoneSE3: Power on (iPhoneSE3 with sXGP SIM)
iPhoneSE3: Wi-Fi off, connect to the internet via SIM.
VoIP Telephone: Call to Our Phoneapp
iPhoneSE3: Receives VoIP PUSH and Phoneapp launches. Successfully answers the call and communication is possible. (Receives VoIP push notification from APNs via sXGP SIM)
iPhoneSE3: Wi-Fi is turned ON, connect to the internet via Wi-Fi.
iPhoneSE3: Task kill Our Phoneapp.
VoIP Telephone: Call to Our Phoneapp
iPhoneSE3: iOS does not call the push notification delegate (didReceiveIncomingPushWithPayload).
As a result our Phoneapp is unable to detect the incoming call, However, an ips log with 0xBAADCA11 is output.
in other words, iOS received the VoIP PUSH, but Our Phoneapp dose not call CallKit, so Our Phoneapp was terminated by iOS.
We have a problem in a scenario that SIM lock is disabled so after a phone reboots it has the Internet connection but it is still locked.
When you call into the VOIP app the app is not being launched as the result (it seems reasonable because it wouldn't be able to access the keychain items etc...) but the OS still seem to enforce the rule that the app needs to report the new incoming call.
When we then unlock the app we can see no more pushkit pushes are arriving (dropped on the floor in the console) but we get the three initial pushes that were send during the locked phase right after the app launch.
Hi Apple engineering team,
I’m trying to integrate the new Live Caller ID Lookup (PIR) on iOS using your pir-service-example code as well as a custom mock server in Vapor, but the extension never advances past the /issue/token-key-for-user-token step. I’ve tried both:
1. Official Example
Cloned https://github.com/apple/pir-service-example
Ran PIRService locally
Confirmed that
GET /.well-known/private-token-issuer-directory → 200
GET /issue/token-key-for-user-token → 200 (DER bytes, correct SPKI)
No POST /issue ever fires
2. Mock Server (Vapor)
Implemented all five endpoints (/config, /.well-known/private-token-issuer-directory, /issue/token-key-for-user-token, /issue, /queries)
Verified with curl and openssl asn1parse that:
GET /.well-known/private-token-issuer-directory
Content-Type: application/private-token-issuer-directory
{ "issuer-request-uri":"https://…/issue", "token-keys":[…] }
GET /issue/token-key-for-user-token
Content-Type: application/octet-stream
<DER bytes>
Added Cache-Control: public, max-age=3600 on directory and SPKI
Stubbed POST /issue to always return { "token": "" }
Still no POST /issue request from the extension
Reproduction Steps
Install and enable a Live Lookup extension pointing to my server.
Trigger an incoming call on device.
Watch server logs—only see the two GETs, never /issue or /queries.
Expected Behavior
After fetching the SPKI DER, the framework should issue a POST /issue call (Privacy Pass flow) and then POST /queries.
Observed Behavior
Stuck in an infinite loop of:
GET /.well-known/private-token-issuer-directory
GET /issue/token-key-for-user-token
(repeat…)
No progression to the /issue or /queries endpoints.
What I’ve Tried
Verified JSON kebab-case and headers exactly match examples
Confirmed SPKI DER is valid via openssl asn1parse
Added Cache-Control headers
Tested on real device, localhost url, and ngrok public URL
Mocked a valid-looking token response
Could you advise what additional requirement or format detail I’m missing that prevents from advancing past /issue/token-key-for-user-token?
These are the main files:
LiveLookupExtension.swift
routes.swift
service-config.json
Thanks in advance!
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'm importing a csv file of 299 rows and creating a subset by filtering on one column value (24 rows). I want to Chart just the filtered values. However, when I print one column I get values from the original dataFrame. Any suggestions? Thanks, David
The code:
import SwiftUI
import Charts
import TabularData
struct DataPoint: Identifiable {
var id = UUID() // This makes it conform to Identifiable
var date: Date
var value: Double
}
struct ContentView: View {
@State private var dataPoints: [DataPoint] = []
var body: some View {
Text("Hello")
Chart {
ForEach(dataPoints) { dataPoint in
PointMark(
x: .value("Date", dataPoint.date),
y: .value("Value", dataPoint.value)
)
}
}
.frame(height: 300)
.padding()
.onAppear(perform: loadData)
}
func loadData() {
print("In Loading Data")
// Load the CSV file
if let url = Bundle.main.url(forResource: "observations", withExtension: "csv") {
do {
let options = CSVReadingOptions(hasHeaderRow: true, delimiter: ",")
var data0 = try DataFrame(contentsOfCSVFile: url, options: options)
let formattingOptions = FormattingOptions(
maximumLineWidth: 200,
maximumCellWidth: 15,
maximumRowCount: 30
)
// print(data0.description(options: formattingOptions))
print("Number of Columns: \(data0.columns.count)")
let columnsSet = ["plant_id", "date", "plot", "plantNumber", "plantCount"]
data0 = try DataFrame(contentsOfCSVFile:url, columns: columnsSet, options: options)
print("Number of Columns (after columnsSet): \(data0.columns.count)")
print("Printing data0")
print(data0.description(options: formattingOptions))
let data = data0.filter { $0["plant_id"] as? Int == 15 }
print("Printing data")
print(data.description(options: formattingOptions))
print(" Number of Rows \(data.rows.count)")
for i in 0 ... data.rows.count {
// print("\(i): \(data["plantCount"][i]!)")
if let plantCount = data["plantCount"][i] as? Int {
print("\(i): \(plantCount)")
} else {
print("\(i): Value not found or invalid type")
}
}
//
// var newDataPoints: [DataPoint] = []
// Here I plan to add the filtered data to DataPoint
//
DispatchQueue.main.async {
dataPoints = newDataPoints
}
} catch {
print("Error reading CSV file: \(error)")
}
}
else
{
print("Didn't load csv file")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Here is the new dataFrame and print output
Printing data
┏━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ ┃ plant_id ┃ date ┃ plot ┃ plantNumber ┃ plantCount ┃
┃ ┃ <Int> ┃ <String> ┃ <Int> ┃ <Int> ┃ <Int> ┃
┡━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ 0 │ 15 │ 2023-09-07 │ 1 │ 5 │ 5 │
│ 32 │ 15 │ 2023-09-07 │ 2 │ 10 │ 10 │
│ 38 │ 15 │ 2023-09-07 │ 2 │ 20 │ 20 │
│ 66 │ 15 │ 2023-09-07 │ 4 │ 25 │ 25 │
│ 77 │ 15 │ 2023-09-07 │ 5 │ 5 │ 5 │
│ 99 │ 15 │ 2023-09-14 │ 7 │ 45 │ 45 │
│ 142 │ 15 │ 2024-05-30 │ 1 │ 20 │ 20 │
│ 162 │ 15 │ 2024-05-30 │ 4 │ 5 │ 5 │
│ 169 │ 15 │ 2024-05-30 │ 5 │ 10 │ 10 │
│ 175 │ 15 │ 2024-05-30 │ 7 │ 10 │ 10 │
│ 188 │ 15 │ 2024-07-11 │ 1 │ 20 │ 40 │
│ 199 │ 15 │ 2024-07-11 │ 2 │ 5 │ 5 │
│ 215 │ 15 │ 2024-07-11 │ 5 │ 20 │ 30 │
│ 220 │ 15 │ 2024-07-11 │ 7 │ 30 │ 40 │
│ 236 │ 15 │ 2024-09-06 │ 1 │ 20 │ 60 │
│ 238 │ 15 │ 2024-09-06 │ 2 │ 30 │ 35 │
│ 248 │ 15 │ 2024-09-06 │ 5 │ 5 │ 35 │
│ 254 │ 15 │ 2024-09-06 │ 7 │ 50 │ 90 │
│ 267 │ 15 │ 2025-05-04 │ 1 │ 10 │ 70 │
│ 273 │ 15 │ 2025-05-04 │ 2 │ 10 │ 45 │
│ 282 │ 15 │ 2025-05-04 │ 5 │ 10 │ 45 │
│ 287 │ 15 │ 2025-05-04 │ 7 │ 30 │ 120 │
│ 292 │ 15 │ 2025-05-04 │ 8 │ 10 │ 0 │
│ 297 │ 15 │ 2925-05-04 │ 3 │ 10 │ 0 │
└─────┴──────────┴────────────┴───────┴─────────────┴────────────┘
24 rows, 5 columns
Number of Rows 24
0: 5
1: 80
2: 1
3: 1
4: 1
5: 3
6: 3
7: 1
8: 6
9: 1
10: 1
11: 1
12: 1
13: 10
14: 50
15: 1
16: 2
17: 1
18: 3
19: 8
20: 5
21: 3
22: 7
23: 2
24: 1
Hi,
I'm using ScreenCaptureKit on macOS 14+ to record a single window. I've noticed that the Presenter Overlay only appears when capturing the entire screen, but it does not appear when recording a specific window or a region.
Is there a way to enable the Presenter Overlay while recording a single window or a defined region, similar to how it works with full-screen capture?
Any guidance or clarification would be greatly appreciated.
Thanks in advance!
If I have, say a doctor appointment in the Calendar app, and I'm leaving to go to it, the address will appear in Apple Maps on CarPlay. Forgive if I'm getting the details wrong, but I believe if I bring up the Map, it will be available to tap on, so I can quickly go there. I think it may also show up on one on the car-play screens that shows a few different panels.
The point is, I really like this feature, and want to do it in my app.
In my iOS app, the user can order food from a restaurant, and pick it up. I'm not ready to make this app a "quick service" app, but I want to give the user an easy to get to her location. Since I just ordered food, this means that I'll need to leave fairly quickly to go to the location. The Calendar app is able to offer a location because of scheduling, I'd like to do the same.
Hello I'm working on Live Caller ID Lookup implementation on my own pet-project, as I understood I need to create app and extension for this app. I also created test PIR-service. I did configure serviceURL, tokenIssuerURL and userTierToken. In My app I implemented following code
Task {
if LiveCallerIDLookupManager.shared.status(forExtensionWithIdentifier: "some-extension") == .disabled {
`//` Show an alert.
print("LiveCallerIDLookupManager is disabled")
}
do {
// Open Settings.
try await LiveCallerIDLookupManager.shared.openSettings()
} catch {
}
It does open Call settings, but I don't understand what should I do next.
Hi,
I would like to reset system window private picker alert with ScreenCapture kit. i can reset the ScreenCapture permission with tccutil reset ScreenCapture. but it does not reset the system window private picker alert. i tried deleting the application directory from container and it does not help. the system window private picker alert uses the old approval i gave and it does not prompt a new alert. How can i starta with fresh screencapture kit settings for an app in testing?
Thanks
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.
.
After a user has launched an App Clip Experience from Safari and is done with the activity that the App Clip provides – is there a way for the App Clip to programatically close itself so the user returns to Safari?
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 trying to localize my app in other languages. Most of the text are automatically extracted by Xcode when creating a string catalog and running my app.
However I realized few texts aren't extracted, hence I find a solution for most of them by adding
For example I have some declared variable as
var title: String = "Continue"
Hence for them to be trigger I changed the String by LocalizedStringResource which gives
var title: LocalizedStringResource = "Continue"
But I still have an issue with some variables declared as an array with this for example
@State private var genderOptions = ["Male", "Female", "Not Disclosed"]
I tried many things however I don't success to make these arrays to be translated as the word here "Male", "Female" and "Not Disclosed".
I have more array like that in my code and I am trying to find a solution for them to be extracted and be able to be localized
Few things I tried that doesn't worked
@State private var genderOptions : LocalizedStringResource = ["Male", "Female", "Not Disclosed"]
@State private var genderOptions = [LocalizedStringResource("Male"), LocalizedStringResource("Female"), LocalizedStringResource("Not Disclosed")]
Any idea more than welcome
Thank guys
I am working on a Flutter application which is use solely to collect data from a bluetooth low energy (BLE) peripheral and then upload the data to our cloud.
The application runs in the background 99% of the time after the initial login and BLE pairing which is causing us some issues.
After the Application is backgrounded it would work for a day to 2 days and then stop working. (What I mean with working is to download data from the BLE peripheral and then upload the data to our cloud). Once the data syncing has stopped it would take up to 12 hours until data starts flowing again.
I have read in a couple of places that iOS implements some sort of "budget/heuristics" when the application is running in the background to keep track of the application and when this "budget" is used up iOS will stop servicing the application until iOS decides that the application can run in the background again.
My question, is it possible via a enablement or some other mechanism to prevent iOS from blocking our application from running in the background to enable 24/7 periodic data uploads every 30 minutes.
We have implemented the following so far;
The data sync process is triggered from the BLE peripheral using a notification. This notification is sent every 30 minutes.
Each sync duration is currently 24 seconds on average, we are working on reducing this to below 10 seconds.
We implemented State Restoration to assist iOS in starting the application more efficiently.
We are considering using Silent Push Notifications from the Cloud to wake up the application when data hasn't synced in 6 hours.
Any assistance would be high appreciated.