Hello all,
I'm developing a Mac app and need to read the content of incoming SMS, I am able to implement in android just the user has to consent and it does not read her contacts messages, so I am wondering if apple can allow this.
SMS and Call Reporting
RSS for tagProvide extensions to manage unwanted communication using SMS and Call Reporting.
Posts under SMS and Call Reporting tag
65 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hi, We are working to integrate the Live Caller ID Lookup feature into our app.
After submitting the request form via the link: https://developer.apple.com/contact/request/live-caller-id-lookup/, we received this reply from Apple:
Apple’s OHTTP relay has been configured to talk to your OHTTP gateway. Now Live Caller ID Lookup should work for your application extension when distributed through App Store.
However, before officially releasing our app on the App Store, we’d like to make sure the Live Caller ID Lookup feature is working as expected.
To test this, we uploaded the app to TestFlight, and it successfully passed App Review.
However, the test failed — we observed that the system tries to fetch the config from http://www.example.com/config instead of our actual configuration URL.
Questions:
Is this expected behavior when using TestFlight?
Does the Live Caller ID Lookup feature only become active after full public release on the App Store?
Is there any recommended way to test this feature before public release?
Thank you!
Title's basically the whole question. I'm writing an SMS/Call Reporting extension (ILClassificationUIExtensionViewController). My goal is to keep everything on device and not use the built-in SMS/network reporting. To that end, I'm trying to write to a file in the App Group container from the classificationResponse handler. I'm getting Error 513: "You don’t have permission to save the file “classification_log.txt” in the [app group container folder]".
I haven't been able to find much in the documentation on whether this behavior is enforced in classificationResponse handlers. Apple's barebones page on "SMS and Call Spam Reporting"[1] says "the system always deletes your extension’s container after your extension terminates," but that doesn't answer whether you can write to an App Group container. I haven't been able to find that answer elsewhere. ChatGPT and Gemini are both very sure it can be done. Any thoughts?
[1] https://developer.apple.com/documentation/identitylookup/sms-and-call-spam-reporting
Topic:
App & System Services
SubTopic:
Core OS
Tags:
SMS and Call Reporting
Files and Storage
Security
Hello fellow developers,
Anyone blocked at the Live Caller ID Lookup configuration step? I submitted multiple times the form without any news from Apple since a few months (last one is FL7S57UFVR).
This is blocking our app release to our customers.
Thank you
Hi,
Since I updated my phone to 23A341, my Call filtering app is not blocking calls anymore.
Same release checked on iOS 18 phone, it is working.
I still see the callkit logs into the Console showing that numbers are loaded into the iOS-managed SQlite DB but the calls are not blocked nor identified.
Anyone with the same issue?
BR
iOS Message Filter Extension - deferQueryRequestToNetwork(completion:) error
I made a test app using the iOS App template and added a target using the Message Filter Extension template which invokes deferQueryRequestToNetwork(completion:) when receiving an SMS.
The app and the extension have same "Associated Domains Capabilities" with "messagefilter" pointing to a server which receives query requests and returns proper responses. The extension has the "ILMessageFilterExtensionNetworkURL" key in Info.plist file which specifies the server URL.
deferQueryRequestToNetwork(completion:) throws a com.apple.calls.messagefilter error which reads "Extension's containing app (appID ) unauthorized to defer requests to host "
Hi Apple team,
We’re shipping a Live Caller ID Lookup extension on iOS 18 and have a question about the automatic refresh of configuration/PIR parameters.
Questions
1. Is there any documented interval/TTL (min/max) for the system’s automatic refresh of /config and PIR parameters, or is it entirely opportunistic (battery/network/usage)? I can’t find a cadence in the IdentityLookup docs.
2. Does iOS honor server cache headers (e.g., Cache-Control/Expires) to influence when it re-fetches?
3. Which events also trigger a refresh (enable/disable in Settings, OS/app update, device reboot, token/epoch change)?
4. Are there rate limits or best-practice limits for calling refreshExtensionContext and refreshPIRParameters?
Topic:
App & System Services
SubTopic:
Notifications
Tags:
Extensions
SMS and Call Reporting
CallKit
Is the API of Live Caller ID Lookup not open to ordinary developers? How can I get the development permission of Live Caller ID Lookup?
Hi everyone,
We are experiencing an issue with SMS messages sent from our banking app (iOS) to our customers. The SMS are being delivered by the carrier, but on iOS devices some of them appear to be filtered or blocked, and users don’t see them in the Messages app.
This seems to be related to new SMS filtering rules on iOS (possibly affecting financial institutions and transactional SMS).
• Has anyone faced a similar situation?
• Are there specific Apple guidelines or best practices for SMS sender IDs / content to avoid being filtered?
• Is there any official documentation from Apple regarding these new SMS filtering mechanisms?
Any guidance or experiences would be greatly appreciated.
Thanks in advance!
Hi!
Sms reporting is no longer available in iOS beta 26 builds. I can set my app as the SMS/Call Reporting Extensions but the report button is missing for sms messages in the messages app. Xcode 26 beta 7 build the app without errors. This is a breaking change.
Same extension was previously broken for calls but has been fixed in beta 7 build, as reported here. It is however still missing for sms messages in the messages app (beta 9 build).
Hello.
I've implemented the Live Caller ID Lookup feature in my app, but sometimes I get a weird error. When I call LiveCallerIDLookupManager.shared.refreshPIRParameters(...) from my app, it sometimes throws an error:
Error Domain=com.apple.CipherML Code=1100 "Unable to query status due to errors: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=Unable to query status due to errors: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSUnderlyingError=0x118f65740 {Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLKey=http://www.example.com/config}}}
What does this error mean? And where did the example.com part come from? What should I do to get rid of this error? My Service URL is hardcoded in the Live Caller ID Lookup Extension of my app and it is definitely not example.com.
Based on the documentation, I understand that the UnwantedCommunicationReporting extension works with SMS and MMS messages. However, I'd like official confirmation about support for different message types:
SMS: Appears to be supported ✅
MMS: Appears to be supported ✅
RCS (Rich Communication Services): Support unclear ❓
iMessage: Support unclear ❓
Hi,
On iOS 26 beta, calls can no longer be reported by swiping left on a call.
This is unfortunately a breaking change.
I have submitted a report on this on June with Feedback Assistant: FB17893517
I hope it will get some more exposure by posting here.
Hi Team,
We are currently working on phone number lookup functionality for iOS 18 and have a few queries:
When the extension sends a request to our backend server using the PIR encryption process, is the user's phone number visible to our server?
Hello,
I'm working on implementing Live Caller ID Lookup, but I noticed that https://github.com/apple/live-caller-id-lookup-example redirects to https://github.com/apple/pir-service-example.
Could you please clarify why this redirection occurs?
如下图所示,在iOS18以上,这个识别话术为“xx主叫号码”,这个如何修改?
附:iOS18以下话术就很合理
I'm currently finding it impossible to get a text filtering extension to be invoked when there's an incoming text message.
There isn't a problem with the app/extension because this is the same app and code that is already developed, tested, and unchanged since I last observed it working.
I know if there's any history of the incoming number being "known" then the extension won't get invoked, and I used to find this no hindrance to testing previously provided that:
the incoming number isn't in contacts
there's no outgoing messages to that number
there's no outgoing phone calls to the number.
This always used to work in the past, but not anymore.
However, I've ensured the incoming text's number isn't in contacts, in fact I've deleted all the contacts.
I've deleted the entire phone history, incoming and outgoing, and I've also searched in messages and made sure there's no interactions with that number.
There's logging in the extension so I can see its being invoked when turned on from the settings app, but its not getting invoked when there's a message.
The one difference between now and when I used to have no problem with this - the phone now has iOS 18.5 on it.
Its as if in iOS 18.5 there ever was any past association with a text number, its not impossible to remove that association.
Has there been some known change in 18.5 that would affect this call filtering behavior and not being able to rid of the incoming message caller as being "known" to the phone?
Update
I completely reset the phone and then I was able to see the the message filter extension being invoked. That's not an ideal situation though.
What else needs to be done beyond what I mentioned above in order to get a phone to forget about a message's number and thus get an message filtering extension to be invoked when there's a message from that number?
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 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!
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.