iOS Build Environment Help Center

Missing Privacy Manifest

append delete Lucas Peres

• Windows version: 11
• Builder version 3.70.3
• iOS SDK version: 18.2
• I would actually like to know if adding the privacy manifest is something the builder should do or if there is something wrong.

SDKs like Firebase are required to include a privacy manifest, which I checked and is indeed in their Pod, but I believe the builder is not adding it to the package, since after uploading I'm getting the following message:

ITMS-91061: Missing privacy manifest - Your app includes “Frameworks/FirebaseCore.framework/FirebaseCore”, which includes FirebaseCore, an SDK that was identified in the documentation as a commonly used third-party SDK. Starting February 12, 2025, if a new app includes a commonly used third-party SDK, or an app update adds a new commonly used third-party SDK, the SDK must include a privacy manifest file or you won’t be able to submit the app for review in App Store Connect. Please contact the provider of the SDK that includes this file to get an updated SDK version with a privacy manifest. For more details about this policy, including a list of SDKs that are required to include signatures and manifests, visit: https://developer.apple.com/support/third-party-SDK-requirements.

I actually don't know if there is something I need to do.

Thanks a lot for all the support you've done

Reply RSS

Replies

append delete #1. MaroLFC

i have the same problem too

append delete #2. YoNeyers

did you find a fix for it? i got same thing today

append delete #3. YoNeyers

i found this video, but in xcode.
https://www.youtube.com/watch?v=T6IvImk66m8

can we use it with builder?

append delete #4. Ruslan

The same problem
Maybe someone knows the decision? Editing some files?

append delete #5. Pierre-Marie Baty

Hello

Use a pre-packaging script to copy the final PrivacyInfo.xcprivacy file in your app bundle's next to the final Info.plist. Something like this:

% embed-privacy-info.bat
@echo off

rem // copy the PrivacyInfo.xcprivacy file that the App Store expects to find for your app
copy /y /b "C:\path\to\my\apps\PrivacyInfo.xcprivacy" "%TARGET_BUILD_DIR%\%NAME%.app"

rem // if third-party frameworks have a PrivacyInfo.xcprivacy file too, copy them in the relevant places
copy /y /b "C:\path\to\framework1\PrivacyInfo.xcprivacy" "%TARGET_BUILD_DIR%\%NAME%.app\Frameworks\framework1.framework"
 copy /y /b "C:\path\to\framework2\PrivacyInfo.xcprivacy" "%TARGET_BUILD_DIR%\%NAME%.app\Frameworks\framework2.framework"
rem // etc...
%

:: @Pierre-Marie Baty added on 03 Mar ’25 · 15:24

*edit* more info about pre-packaging scripts can be found in the builder's documentation (readme.html).

append delete #6. YoNeyers

thank you so mcuh Pierre-Marie Baty,

can you give me an example with firebase?
or just should i use embed-privacy-info.bat as it's.

what should i change ^_^ , thank you so much

append delete #7. Ancelotti

Same issue here, I’d really appreciate your help, @Pierre-Marie Baty.

append delete #8. Pierre-Marie Baty

You need to copy the file called "PrivacyInfo.xcprivacy" for your app (if your code use APIs from the iOS SDK that imply you need one) next to your app's Info.plist in the app bundle.

And similarly, you need to copy the file called "PrivacyInfo.xcprivacy" of each framework that requires one next to that framework's Info.plist.

The app bundle is the directory ending in ".app" that the builder constructs, and which is then zipped into an .ipa file. Before it is zipped, it can be found (for a Unity project) in build\Release-iphoneos\iPhone-target\yourAppName.app.

Just write a batch script that does this. If you're not comfortable with batch scripts, write a powershell one.

I can provide more details on whatever point that needs it (just ask), but I cannot write the keys-in-hand script for everyone of you : every project has its own particularities, each one of you has it under a different path, each of you has a different set of .xcprivacy files, located in different places, and I'd feel I'd be doing everybody's homework here.

append delete #9. YoNeyers

thanks again Pierre-Marie Baty :)
Pierre-Marie Batyif it's wrong correct me.

guys i made a bat code , and it's worked i uploaded my game with no error.
i hope it's helped.

% 
@echo off
setlocal enabledelayedexpansion

:: Define paths
set "AppBundlePath=D:\WORK BUILD UNITY\XCODE\59Firebase\build\Release-iphoneos\iPhone-target\ProductName.app"
set "FrameworksPath=%AppBundlePath%\Frameworks"
set "AppPrivacyFile=D:\WORK BUILD UNITY\XCODE\59Firebase\UnityFramework\PrivacyInfo.xcprivacy"

:: Check if the main PrivacyInfo.xcprivacy file exists
if exist "%AppPrivacyFile%" (
    copy "%AppPrivacyFile%" "%AppBundlePath%\" /Y
    echo ✅ Copied main PrivacyInfo.xcprivacy to App Bundle
) else (
    echo ❌ ERROR: Main PrivacyInfo.xcprivacy file not found at %AppPrivacyFile%
    pause
    exit /b
)

:: Copy PrivacyInfo.xcprivacy to each framework (if frameworks exist)
if exist "%FrameworksPath%" (
    for /D %%F in ("%FrameworksPath%\*") do (
        set "TargetFolder=%%F"
        copy "%AppPrivacyFile%" "!TargetFolder!\" /Y
        echo ✅ Copied PrivacyInfo.xcprivacy to !TargetFolder!
    )
) else (
    echo ❌ WARNING: Frameworks directory not found at %FrameworksPath%
)

echo ✅ PrivacyInfo.xcprivacy files copied successfully!

%

YOU need to change these :

① AppBundlePath : put your build path there , then ⇉ \build\Release-iphoneos\iPhone-target\ProductName.app"

②AppPrivacyFile : put where is the PrivacyInfo.xcprivacy is , it was under "UnityFramework\PrivacyInfo.xcprivacy".

③Before Upload it , check the Packages folder "ProductName.ipa" make it "zip" file , then open Payload>ProductName.app> there you sholud see PrivacyInfo.xcprivacy next to Info.plist.

④Open Frameworks folder > check all your frameworks folders it should all has PrivacyInfo.xcprivacy inside it.

upload your ProductName.ipa and see if it's works.

* when i uploaded that ITMS-91061: Missing privacy manifest email gone , now i'm waiting for review, i just need to wait now.

append delete #10. YoNeyers

i can confirm now , my game accepted

append delete #11. Pierre-Marie Baty

@YoNeyers: this script can work, but note here that you're copying the same PrivacyInfo.xcprivacy in two places. I think one should be enough, so if you have only one .xcprivacy file, it might be best to copy it just once, in the app bundle.

Also note that when the pre-packaging script is run, there are already a few environment variables set by the master build script that you can reuse, that already point to common build locations. To obtain the list of those variables, put "set & pause" somewhere in your script. The variables will be displayed the next time you build your project and it'll wait for you to press a key. Copy/paste them somewhere for reference, and remove "set & pause". Then you can rewrite your script into a reusable one using these variables, that will automatically adjust the paths to your specific project.

#12. YoNeyers

This post was deleted by its owner

append delete #13. YoNeyers

ah i see thanks ,

btw do you know how i can get the bath of the project?
i wanna get the path that are put in iOS builder ,
so the code will run automatically without need to change it in code "AppBundlePath ".

append delete #14. Pierre-Marie Baty

Like I said. Use the %TARGET_BUILD_DIR% and %NAME% environment variables like this: %TARGET_BUILD_DIR%\%NAME%.app

append delete #15. Ruslan

Hello Pierre-Marie Baty,

In my case, I am using CocoaPods, and the files are located in different folders. This is screenshot
https://i.postimg.cc/hjzWJZnB/image-2025-03-20-213911766.png

In this situation, do I need to specify the path for each file separately? But then, what should I do if there is only one framework in the Frameworks folder: C:\Users\LocalComp\Desktop\build\Frameworks\com.unity.ads?

For example, with your command:
"copy /y /b "C:\path\to\framework1\PrivacyInfo.xcprivacy" "%TARGET_BUILD_DIR%\%NAME%.app\Frameworks\framework1.framework"", I have nothing to associate this file with.
Could you please advise?

The solution described above by another person also doesn't work for me because the files are not located in the corresponding paths in my project.

Thank you in advance!

append delete #16. Pierre-Marie Baty

Hello Ruslan,

If your project has multiple PrivacyInfo.xcprivacy files, supplied by different pods, try in this order:

1. Merge all these files into one using a text editor (they're basically XML files, so just copy the key/values to form one single XML file, merging the keys that have the same name), then use only the resulting PrivacyInfo.xcprivacy file as the sole privacy info file source for your app, and copy it in place using the pre-packaging script technique described above.

2. If the above doesn't work, try copying each .xcprivacy file (from each pod that has one) to its relevant compiled .framework folder (for example, C:\Users\LocalComp\Desktop\build\Pods\GoogleUtilities\GoogleUtilities\Privacy\PrivacyInfo.xcprivacy would go to %TARGET_BUILD_DIR%\%NAME%.app\Frameworks\GoogleUtilities.framework\PrivacyInfo.xcprivacy -- this is just an example) using multiple copy statements, one for each file, using the same technique as above.

I'm not sure how Apple prefers this information to be presented in the final app, either one single .xcprivacy file for the whole app, or one per Mach-O executable. I read there should be one for each executable bundle, but while the compiled .app directory itself is a bundle, each dynamic framework in a .framework directory inside it is *also* a bundle, so...

Reply

(Leave this as-is, it’s a trap!)

There is no need to “register”, just enter the same name + password of your choice every time.

Pro tip: Use markup to add links, quotes and more.

Moderators: Pierre-Marie Baty