Hello,
I have implemented a URL Filter using the sample provided here: Filtering Traffic by URL. I am also using an App Group to dynamically manage the Bloom filter and block list data.
However, when I update my block list URLs and create a new Bloom filter plist in the App Group, the extension does not seem to use the updated Bloom filter even after the prefetch interval expires.
Also for testing purpose can I keep this interval to 10 mins or below ?
Extensions
RSS for tagGive users access to your app's functionality and content throughout iOS and macOS using extensions.
Posts under Extensions tag
179 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I'm implementing a PHBackgroundResourceUploadExtension to back up photos and videos from the user's library to our cloud storage service.
Our existing upload infrastructure uses chunked uploads for large files (splitting videos into smaller byte ranges and uploading each chunk separately). This approach:
Allows resumable uploads if interrupted
Stays within server-side request size limits
Provides granular progress tracking
Looking at the PHAssetResourceUploadJobChangeRequest.createJob(destination:resource:) API, I don't see a way to specify byte ranges or create multiple jobs for chunks of the same resource.
Questions:
Does the system handle large files (1GB+) automatically under the hood, or is there a recommended maximum file size for a single upload job?
Is there a supported pattern for chunked/resumable uploads, or should the destination URL endpoint handle the entire file in one request?
If our server requires chunked uploads (e.g., BITS protocol with CreateSession → Fragment → CloseSession), is this extension the right mechanism, or should we use a different approach for large videos?
Any guidance on best practices for large asset uploads would be greatly appreciated.
Environment: iOS 26, Xcode 18
I'm developing a PHBackgroundResourceUploadExtension and finding it difficult to debug because the system controls when the extension launches.
Current experience:
The extension starts at unpredictable times (anywhere from 1 minute to several hours after photos are added)
By the time I attach the debugger, the upload may have already completed or failed
Breakpoints in init() or early lifecycle methods are often missed
Questions:
Is there a way to force-launch the extension during development (similar to how we can manually trigger Background App Refresh in Xcode)?
Are there any launch arguments or environment variables that put the extension in a debug/eager mode?
I tried taking photos/videos, but this doesn't trigged app extension in all cases.
Any tips for improving the debug cycle would be greatly appreciated.
Environment: iOS 26, Xcode 18
Topic:
Media Technologies
SubTopic:
Photos & Camera
Tags:
Extensions
Photos and Imaging
Background Tasks
I'm implementing PHBackgroundResourceUploadExtension to back up photos and videos to our cloud storage service.
During testing, I observed that iCloud-optimized photos (where the full-resolution original is stored in iCloud, not on device) do not upload. The upload job appears to silently skip these assets.
Questions:
Is this behavior intentional/documented? I couldn't find explicit mention of this limitation.
If the device only has the optimized/thumbnail version locally, does the system:
- Automatically download the full-resolution asset from iCloud before uploading?
- Skip the asset entirely?
- Return an error via PHAssetResourceUploadJobChangeRequest?
For a complete backup solution, should we:
- Pre-fetch full-resolution assets using PHAssetResourceManager.requestData(for:options:) before creating upload jobs?
- Use a hybrid approach (this extension for local assets + separate logic for iCloud-only assets)?
Environment: iOS 26, Xcode 18
Could you please provide guidance on the following points:
Start Token Throttling
Are there any throttling limits or rate restrictions applied to Start Tokens?
Token Invalidation Scenarios
Under what specific conditions can a Start Token become invalidated?
Are there known scenarios that trigger invalidation?
Token Regeneration Timeline
Once a Start Token is invalidated, how long does it typically take before a new token can be successfully generated and validated?
Frequency of Invalidation
Is there any documented or expected frequency with which Start Tokens may become invalid, assuming a normal development workflow?
Impact on Push Notification Token
When a live activity Start Token becomes invalid, does this also cause APNs Push Notification Tokens to be invalidated or refreshed automatically?
Topic:
App & System Services
SubTopic:
Widgets & Live Activities
Tags:
APNS
Extensions
Notification Center
WidgetKit
Hi,
I am trying to implement a PHBackgroundResourceUploadExtension to upload backup media files to an external cloud service based on these docs: https://developer.apple.com/documentation/PhotoKit/uploading-asset-resources-in-the-background#Acknowledge-completed-jobs
Creating jobs and actual uploading is working as expected, but the problem I have is in the acknowledgeCompletedJobs() function.
When trying to access a job's resource, the resource is nil and thus has empty assetLocalIdentifier and originalFilename.
Did anybody successfully implement this extension or knows, why this would happen? Because the resource of an acknowledgable job is empty, I can not match it back to my processed assets.
I developed a cloud drive using fskit, but after mounting it, it did not appear in the Finder sidebar and the disk tool could not list it. How should I adapt?
The mounting looks successful, and you can also open and see the fixed files I wrote in the code.
I have also turned on the Finder sidebar settings function
Topic:
App & System Services
SubTopic:
Core OS
Tags:
Files and Storage
Extensions
Disk Arbitration
FSKit
Hi,
I am trying to implement a PHBackgroundResourceUploadExtension to upload backup media files to an external cloud service based on these docs: https://developer.apple.com/documentation/PhotoKit/uploading-asset-resources-in-the-background#Acknowledge-completed-jobs
Creating jobs and actual uploading is working as expected, but the problem I have is in the acknowledgeCompletedJobs() function.
When in this function, I am trying to access a job's resource. The resource is nil and thus has empty assetLocalIdentifier and originalFilename.
Did anybody successfully implement this extension or knows, why this would happen? Because the resource of an acknowledgable job is empty, I can not match it back to my processed assets.
From watching the video on App Attest the answer would appear to be no, but the video is a few years old so in hope, I thought I would post this question anyway.
There's several scenarios where I would like a notification service extension to be able to use App Attest in communications with the back end(for example to send a receipt to the backend acknowledging receipt of the push, fetching an image from a url in the push payload, a few others).
Any change App Attest can be used in by a notification service extension?
I have gotten all necessary entitlements for all my extensions,
Environment:
iOS 26.4 beta
Xcode 26.4 beta
Framework: AccessoryNotifications, AccessorySetupKit, AccessoryTransportExtension
Description:
I'm implementing notification forwarding to a custom BLE accessory using the new AccessoryNotifications framework in iOS 26.4. I've set up an AccessoryDataProvider
extension following the documentation, but I'm unclear about how the data is actually transmitted to the BLE accessory.
Current Implementation:
Main App - Uses AccessorySetupKit to discover and pair accessories:
let descriptor = ASDiscoveryDescriptor()
descriptor.bluetoothServiceUUID = CBUUID(string: "FEE0")
let displayItem = ASPickerDisplayItem(
name: "Notification Accessory",
productImage: UIImage(systemName: "applewatch")!,
descriptor: descriptor
)
accessorySession.showPicker(for: [displayItem]) { error in
// Handle error
}
AccessoryDataProvider Extension - Implements NotificationsForwarding.AccessoryNotificationsHandler:
@main
struct AccessoryDataProvider: AccessoryTransportExtension.AccessoryDataProvider {
@AppExtensionPoint.Bind
static var boundExtensionPoint: AppExtensionPoint {
Identifier("com.apple.accessory-data-provider")
Implementing {
AccessoryNotifications.NotificationsForwarding {
NotificationHandler()
}
}
}
}
// NotificationHandler sends messages via:
let message = AccessoryMessage {
AccessoryMessage.Payload(transport: .bluetooth, data: data)
}
try await session?.sendMessage(message)
Info.plist Configuration:
EXExtensionPointIdentifier
com.apple.accessory-data-provider
NSAccessorySetupBluetoothServices
FEE0
Questions:
What BLE Service and Characteristic should the accessory advertise?
- The documentation mentions specifying transport: .bluetooth, but doesn't explain what Service/Characteristic the accessory needs to implement to receive the
notification data.
2. How does AccessoryMessage with transport: .bluetooth actually transmit data?
- Is there a specific Apple-defined BLE protocol?
- Does the accessory need to run specific firmware or support a particular protocol stack?
3. Is there any documentation about the accessory-side implementation?
- The iOS-side documentation is clear, but I couldn't find information about what the BLE peripheral needs to implement.
4. Is MFi certification required for the accessory?
- The documentation doesn't explicitly mention MFi, but it's unclear if custom third-party accessories can use this framework.
Any guidance on how the BLE communication works under the hood would be greatly appreciated.
Hi!
We’ve had Live Caller ID Lookup in production for a while. We’re seeing backend RPS on our /queries endpoint much higher than our expected incoming call volume.
While testing with Console.app during an incoming call, it looks like iOS may still hit our service even when the caller number is already in the user’s Contacts - but I’m not 100% sure from logs alone.
Can you confirm:
Does iOS invoke Live Caller ID Lookup (i.e. call /queries) for every incoming call, including calls from saved Contacts?
If yes, is this simply expected framework behavior?
Thanks!
Hello Apple team,
We would like to access the user's available purchases from the keyboard extension.
Making purchases directly from the keyboard is a great benefit, but we assume it is intentionally disabled to prevent abuse or fraudulent purchase attempts.
What we care about the most is determining if the user has an item that contains a discount or a free trial to personalize messaging when we suggest the user go to the app and make a purchase.
We hope you'd consider revising your policy around StoreKit usage.
Topic:
App & System Services
SubTopic:
StoreKit
Tags:
Subscriptions
Extensions
StoreKit
In-App Purchase
When you have multiple Apps on the Mac which all provide Quicklook extensions for the same file type, then I would assume that if I activate one of these Quicklook extensions in the system settings, this one would be used.
But this doesn't seem to be the case.
It looks like the macOS just looks the very first extension it can find for a certain file type, and if this Quicklook extension is switched off, the file can not be previewed anymore. The macOS just doesn't bother to look for the other existing quicklook extension for this file, even if this other is enabled.
The only option right now to get this other extension to be used by the system would be to completely delete the first App, so its extension is deleted as well.
Is this really the way how it is supposed to work? How can this be fixed? Can I tell my users something else than "just delete the other App"?
Hi,
On macOS 26.4 Beta (25E5218f) (macOS Tahoe 26 Developer Beta ), the network filter causes network failures or slowdowns. This manifests as Chrome failing to access websites, while Safari can access the same websites without issue. The affected websites can be pinged locally.
My situation is similar to this situation.The same question link is: https://github.com/objective-see/LuLu/issues/836
Have you been paying attention to this issue? Hopefully, it can be fixed in the official release.
Thank you.
While implementing the new background backup feature introduced in iOS 26.1, I create a PHAssetResourceUploadJob in an Extension. On iOS 26.1, the system successfully triggers the upload. However, on iOS 26.2, although the job is created successfully and all related configurations are correctly set, the system does not trigger the upload.
Could you please help confirm the cause of this issue? Thank you.
I'm trying to test the update process for an app containing an FSKit module that I'm distributing on the Mac App Store. (I'm also distributing the same app directly with Developer ID, but here I'll focus on App Store because that's the behavior I've been looking at first.) To do that I'm using an internal tester group on TestFlight and then testing an update with TestFlight. Below is the behavior I'm seeing on macOS 15.7.2 (24G325).
I've noticed that if an app update is triggered while a disk is mounted using the FSKit extension, the disk is automatically unmounted without warning (FB21287341). That's already undesirable itself in my opinion, but on top of the unmount, there are two other problems:
That unmount doesn't seem to be a "clean" unmount and doesn't call functions like synchronize (FB21287688). Now, in my case, my app only provides read-only access, so that doesn't actually matter much in my case. However, I'd imagine if I were to add write access at some point in the future, this would go from "doesn't matter" to "very bad."
I've seen a few cases where quitting or crashing the FSModule process while a volume is mounted without actually doing a clean unmount causes a lot of "disk-related actions" (for lack of a better term) to freeze (FB21305906). For example, a use of the mount(8) command or trying to mount a disk at all freezes, and opening Disk Utility stalls on a "Loading disks" spinning indicator. This happens until the Mac is rebooted. I did notice this issue once while testing updates via TestFlight a few times.
The same applies if I simply delete the app with Finder instead of updating it.
Is there a way to prevent the extension's process from terminating in this case and/or another workaround I could use without waiting for a macOS update to hopefully change this behavior?
And does observing this kind of behavior with TestFlight's update behavior suggest the same thing could happen on the App Store with its automatic updates? I'm concerned that pushing an update via the App Store will unexpectedly unmount disks or cause the system-wide issues described in FB21305906 at a random time, which is a pretty big disruption for users.
We use Jamf Blueprint to deploy the managed app and identity to the iOS device (iOS 26.3 installed). Our managed app can access the identity via
let identityProvider = ManagedAppIdentitiesProvider()
let identity: SecIdentity
do {
identity = try await identityProvider.identity(withIdentifier: "myIdentity")
} catch { }
However, the app extension cannot access the same identity. Our app extension is notification extension that implemented UNNotificationServiceExtension APIs. We use above code in didReceive() function to access identity that always failed.
The MDM configuration payload is:
"AppConfig": {
"Identities": [
{
"Identifier": "myIdentity",
"AssetReference": "$PAYLOAD_2"
}
]
},
"ExtensionConfigs": {
"Identifier (com.example.myapp.extension)": {
"Identities": [
{
"Identifier": "myIdentity",
"AssetReference": "$PAYLOAD_2"
}
]
}
},
"ManifestURL": "https://example.net/manifest.plist",
"InstallBehavior": {
"Install": "Required"
}
}
Is there any problem in our MDM configuration? Or the notification extension cannot integrate with ManagedApp FM?
Apple is encouraging VPN apps on macOS to transition to Network Extension APIs, if they haven't done so yet, see:
TN3165: Packet Filter is not API
WWDC25: Filter and tunnel network traffic with NetworkExtension
Using Network Extension is fine for VPN apps that are distributed via the Mac App Store. Users get one pop-up requesting permission to add VPN configurations and that's it.
However, VPN apps that are distributed outside of the App Store (using Developer ID) cannot use Network Extension in the same way, such apps need to install a System Extension first (see TN3134: Network Extension provider deployment).
Installing a System Extension is a very poor user experience. There is a pop-up informing about a system extension, which the user has to manually enable. The main button is "OK", which only dismisses the pop-up and in such case there is little chance that the user will be able to find the correct place to enable the extension. The other button in that pop-up navigates to the correct screen in System Settings, where the user has to enable a toggle. Then there is a password prompt. Then the user has to close the System Settings and return to the app.
This whole dance is not necessary for VPN apps on the Mac App Store, because they work with "app extensions" rather than "system extensions".
As a developer of a VPN app that is distributed outside of the App Store, my options are:
Implement VPN functionality in an alternative way, without Network Extension. This is discouraged by Apple.
Use a System Extension with Network Extension. This is going to discourage my users.
I have submitted feedback to Apple: FB19631390.
But I wonder, why did Apple create this difference in the first place? Is there a chance that they will either improve the System Extension installation process or even allow "app extensions" outside of the Mac App Store?
Topic:
App & System Services
SubTopic:
Networking
Tags:
Extensions
Network Extension
System Extensions
Developer ID
Hello Apple Developer Community,
I currently have a Safari Web Extension on iOS that blocks certain URLs for users. I would like to provide the same functionality for Chrome on iOS.
I understand that Chrome on iOS uses WebKit under the hood, and Safari Web Extensions can run in Safari, but I am unsure whether there is any way to implement URL blocking in Chrome for iOS—either via an extension, API, or other supported mechanism.
Specifically, I’m looking for guidance on:
Whether any browser extension (Safari, Chrome, or otherwise) can intercept or block web requests in Chrome on iOS.
If not, what Apple-supported alternatives exist for implementing URL-blocking functionality for users of Chrome on iOS.
Any best practices for maintaining a cross-browser URL-blocking solution for iOS users.
I want to make sure my approach is aligned with Apple’s policies and platform capabilities. Any guidance or official references would be greatly appreciated.
Thank you!