Apple-hosted managed asset pack not found on macOS

Hi all, I have set up a trivial test project to try Apple-hosted background assets following the instructions in the three articles at https://developer.apple.com/documentation/backgroundassets.

When I run the local mock server with xcrun ba-serve and set the URL override in Settings as described in the "Testing asset packs locally" article, I am able to download a test pack on my iOS devices. On the Mac that I use to run the mock server, however, the same call to AssetPackManager.shared.assetPack(withID: "TestAssetPack") that works on iOS always reports

The asset pack with the ID “TestAssetPack” couldn’t be looked up: No asset pack with the ID “TestAssetPack” was found.

even when not running the mock server, which led me to believe that it may not be hitting it at all. In fact, the macOS app will download asset packs uploaded to App Store Connect even when running the local server and setting the xcrun ba-serve url-override to the exact same string as in Settings on iOS. My initial suspicion was that something is wrong with the URL override, so I have tried all combinations of the Mac's hostname, IP address or "localhost" (with the corresponding SSL certificates) with and without port 443, always prefixing with "https://" for the url-override. All the same.

Does anyone have an idea what may be the issue here?

My asset pack has the following manifest:

{
	"assetPackID": "TestAssetPack",
	"downloadPolicy": {
		"onDemand": {}
	},
	"fileSelectors": [
		{
			"file": "TestAsset.txt"
		}
	],
	"platforms": [
		"iOS",
		"macOS"
	]
}

I am running v26.1 for macOS, iOS & Xcode.

Edit: Just to be clear, my assumption here is that the URL overrides (in Settings on iOS or via ba-serve on macOS) is what should cause the app to hit the mock server. Is that correct or am I missing something?

Hello! You’re correct that xcrun ba-serve url-override is the equivalent for macOS of the URL Override item in Developer Settings on iOS. Could you run defaults export com.apple.backgroundassets.managed - on your Mac and post the output?

Thanks for your reply, here it is when set to a local IP address:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>MBALastWeeklyCollectionDate</key>
	<date>2025-11-12T15:18:41Z</date>
	<key>MBAURLOverride</key>
	<data>
	YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMS
	AAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGkCwwTFFUkbnVsbNMNDg8QERJX
	TlMuYmFzZVYkY2xhc3NbTlMucmVsYXRpdmWAAIADgAJfEBZodHRwczovLzE5Mi4xNjgu
	MTc4Ljg30hUWFxhaJGNsYXNzbmFtZVgkY2xhc3Nlc1VOU1VSTKIXGVhOU09iamVjdAgR
	GiQpMjdJTFFTWF5lbXSAgoSGn6SvuL7BAAAAAAAAAQEAAAAAAAAAGgAAAAAAAAAAAAAA
	AAAAAMo=
	</data>
</dict>
</plist>

What is the meaning of the MBALastWeeklyCollectionDate field?

BTW, what I now get in the log on the Mac (not with the iOS app) is

Checking for updates failed: A HTTP client error occurred: “Forbidden”.
Process: BackgroundAssetsSample | Library: BackgroundAssets | Subsystem: com.apple.backgroundassets.managed | Category: AssetPackManager

about a second after the "asset not found" error. I haven't noticed it before.

For the sake of completeness, AssetPackManager.shared.assetPack(withID: assetPackID) is the first BackgroundAssets method I call and I don't call any other method after it has thrown.

Thanks for providing that information! We’ll look into the problem and get back to you when we have more details.

@imaier, your defaults property list looks correct. To investigate further, would you mind reproducing the problem and then filing a feedback report with a sysdiagnose log from your Mac? Make sure to reply to this thread with the feedback ID so that we can locate it on our side. Thanks!

In the meantime, I have looked into the log a bit more. I have found the following entries from the backgroundassets.user process:

com.apple.backgroundassets	The application with the identifier “com.imaier.BackgroundAssetsSample” is configured to use Apple hosting.
com.apple.backgroundassets	A development-override URL, “https://myhostname.fritz.box”, is set.
com.apple.backgroundassets	Development overrides aren’t permitted for the application with the identifier “<devteam>.com.imaier.BackgroundAssetsSample”.
com.apple.launchservices	_LSBundleCopyOrCheckNode: cached node not found, _LSBundleCreateNode for bundleID 3464 returned -43
com.apple.backgroundassets	The application with the identifier “com.imaier.BackgroundAssetsSample” is configured to use Apple hosting.
com.apple.backgroundassets	A development-override URL, “https://myhostname.fritz.box”, is set.
com.apple.backgroundassets	Development overrides aren’t permitted for the application with the identifier “<devteam>.com.imaier.BackgroundAssetsSample”.
com.apple.launchservices	_LSBundleCopyOrCheckNode: cached node not found, _LSBundleCreateNode for bundleID 2828 returned -43
com.apple.launchservices	_LSBundleCopyOrCheckNode: cached node not found, _LSBundleCreateNode for bundleID 4052 returned -43

where <devteam> is my alphanumerical dev team ID. What could be the reason that the overrides aren’t permitted?

It turns out the duplicate log entry for the BackgroundAssetsSample app was from a copy of the project I created during testing. I removed that but I still get a (single) "Development overrides aren’t permitted" log entry now.

When run on iOS, I do get

com.apple.backgroundassets	The application with the identifier “com.imaier.BackgroundAssetsSample” is configured to use Apple hosting.
com.apple.backgroundassets	A development-override URL, “https://myhostname.fritz.box”, is set.
com.apple.backgroundassets	Using the development-override URL “https://myhostname.fritz.box/manifest?platform=iOS” for the application with the identifier “com.imaier.BackgroundAssetsSample”…

Ah, that’s helpful information. We log the message about not permitting development overrides when the app isn’t signed with a development profile. Can you confirm that your app is code-signed for development with a valid provisioning profile when you run it from Xcode? In particular, ensure that it isn’t ad-hoc-signed (i.e., “sign to run locally”).

It appears to be correctly signed. "Automatically manage signing" is checked, my standard team is set. With those settings, as soon as I assign an app group in Xcode 26.1, it changes to an Xcode managed provisioning profile and my valid Apple Development certificate and does not let me change them. I also checked the build with codesign -dv --verbose=4 and in ~/Library/Developer/Xcode/UserData/Provisioning Profiles to verify and that the profiles update, e.g., when I change the Info.plist.

I also tried setting up a fresh sample project from the standard multiplatform SwiftUI app template in Xcode and did not change anything in Signing & Capabilities except setting the app group for the app and download extension. Same minimal app just calling AssetPackManager.shared.assetPack(withID:), same result: on iOS it works, on macOS the URL override is not permitted.

I’ve been talking to my Frameworks Engineer colleague about this and there are various reasons why this might be happening. To investigate further, I have a couple of tests I’d like you to run.

The first is to run launchctl procinfo against your process

% sudo launchctl procinfo `pgrep Test807154`
…
code signing info = get-task-allow entitlement
	require enforcement
	allowed mach-o
	platform dyld
	entitlements validated
…

IMPORTANT Replace Test807154 with the name of your app.

Do you see the entitlements validated flag set?

Second, dumy your Launch Services database:

% lsregister -dump

Note lsregister is actually /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister. I have a shell alias that maps the former to the latter.

Then find the record for your app. In my case it looked like this:

--------------------------------------------------------------------------------
bundle id:                  Test807154 (0x1a02c)
class:                      kLSBundleClassApplication (0x2)
…
path:                       …/Test807154.app (0x26368)
…
--------------------------------------------------------------------------------

Note If there are multiple records, use the one with the right path.

Is there a bundle flags field? If so, does it have is-Beta-App set?

My test app doesn’t have this field, but here’s an example of what it might look like:

bundle flags:               … is-Beta-App …

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Thanks for the effort, Quinn!

The code signing info from launchctl procinfo looks exactly like yours, ending with entitlements validated.

The bundle flags line is as follows:

bundle flags:               is-containerized (0000004000000000)

Does it need the is-Beta-App flag? The dump only shows that for apps installed via TestFlight.

Apple-hosted managed asset pack not found on macOS
 
 
Q