Updating Ionic Capacitor project to work with new ios privacy manifest requirements

I’m a bit lost here and need some guidance.

I need to meet the new Privacy Manifest requirements as I fail for 11 of the SDKs, so I am updating my project which has been a nightmare as I have limited time.

I have already updated firebase and Angular fire and then had to update Angular to v16 plus updated several other packages. I updated Capacitor from 5 to 5.7.8.
I can’t update to Capacitor 6 as I need @pantrist/capacitor-firebase-dynamic-links": “^5.0.1”

I’m using the Ionic Vscode extension and it has not recommended that I add a Privacy Manifest yet.

How can I tell what packages I need to update based on the SDK’s mentioned in the rejection email from the app store?

I would update everything to the latest version but I am trying to minimize breaking changes.
Another option is to create a new project from scratch with the latest versions of everything and copy my ionic/angular code over but I think this would be a lot more work.

Packages:

"dependencies": {
    "@angular/animations": "^16.2.12",
    "@angular/cdk": "^16.2.14",
    "@angular/common": "^16.2.12",
    "@angular/core": "^16.2.12",
    "@angular/fire": "^16.0.0",
    "@angular/forms": "^16.2.12",
    "@angular/material": "^16.2.14",
    "@angular/platform-browser": "^16.2.12",
    "@angular/platform-browser-dynamic": "^16.2.12",
    "@angular/router": "^16.2.12",
    "@capacitor-community/fcm": "^5.0.2",
    "@capacitor-community/firebase-analytics": "^5.0.1",
    "@capacitor-community/stripe": "^5.2.0",
    "@capacitor/android": "^5.7.8",
    "@capacitor/app": "^5.0.8",
    "@capacitor/core": "^5.7.8",
    "@capacitor/device": "^5.0.8",
    "@capacitor/ios": "^5.7.8",
    "@capacitor/keyboard": "^5.0.6",
    "@capacitor/network": "^5.0.6",
    "@capacitor/push-notifications": "^5.1.0",
    "@capacitor/screen-orientation": "^5.0.7",
    "@capacitor/splash-screen": "^5.0.6",
    "@capacitor/status-bar": "^5.0.6",
    "@fortawesome/angular-fontawesome": "^0.13.0",
    "@fortawesome/fontawesome-svg-core": "^6.7.2",
    "@fortawesome/free-brands-svg-icons": "^6.7.2",
    "@fortawesome/free-regular-svg-icons": "^6.7.2",
    "@fortawesome/free-solid-svg-icons": "^6.7.2",
    "@ionic-native/app-availability": "^5.31.1",
    "@ionic-native/clipboard": "^5.31.1",
    "@ionic-native/core": "^5.31.1",
    "@ionic-native/file": "^5.36.0",
    "@ionic-native/ionic-webview": "^5.36.0",
    "@ionic-native/launch-navigator": "^5.31.1",
    "@ionic-native/mobile-accessibility": "^5.31.1",
    "@ionic-native/screen-orientation": "^5.31.1",
    "@ionic-native/splash-screen": "^5.31.1",
    "@ionic-native/status-bar": "^5.31.1",
    "@ionic/angular": "^6.4.2",
    "@ionic/storage-angular": "^4.0.0",
    "@pantrist/capacitor-firebase-dynamic-links": "^5.0.1",
    "@sentry/angular-ivy": "^7.102.1",
    "@types/googlemaps": "^3.43.3",
    "@types/hammerjs": "^2.0.39",
    "@types/stripe-v3": "^3.1.23",
    "@usermaven/sdk-js": "^1.3.3",
    "angular-animations": "^0.11.0",
    "canvas-confetti": "^1.9.2",
    "capacitor-ios-autofill-save-password": "^2.0.0",
    "compare-versions": "^3.6.0",
    "cordova-clipboard": "^1.3.0",
    "cordova-plugin-actionsheet": "^2.3.3",
    "cordova-plugin-appavailability": "^0.4.2",
    "cordova-plugin-device": "git+https://github.com/apache/cordova-plugin-device.git",
    "cordova-plugin-dialogs": "^2.0.2",
    "cordova-plugin-file": "^6.0.2",
    "cordova-plugin-network-information": "git+https://github.com/apache/cordova-plugin-network-information.git",
    "cordova-plugin-screen-orientation": "^3.0.2",
    "es6-promise-plugin": "^4.2.2",
    "firebase": "^11.3.1",
    "hammerjs": "^2.0.8",
    "i": "^0.3.7",
    "i18n-iso-countries": "^4.3.1",
    "moment": "^2.29.1",
    "moment-timezone": "^0.5.40",
    "ng-lazyload-image": "^9.1.3",
    "ngx-build-plus": "^16.0.0",
    "ngx-pipes": "^3.2.2",
    "ngx-spinner": "^16.0.2",
    "npm": "^10.4.0",
    "phonegap-plugin-mobile-accessibility": "^1.0.5",
    "rxjs": "^6.5.3",
    "sweetalert2": "^8.19.0",
    "swiper": "^11.2.4",
    "tslib": "^2.4.1",
    "uk.co.workingedge.phonegap.plugin.launchnavigator": "^5.0.5",
    "uninstall": "^0.0.0",
    "voucher-code-generator": "^1.1.1",
    "zone.js": "~0.13.3"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^16.2.16",
    "@angular/cli": "^16.2.16",
    "@angular/compiler": "^16.2.12",
    "@angular/compiler-cli": "^16.2.12",
    "@angular/language-service": "^16.2.12",
    "@bahmutov/cy-grep": "^1.8.0",
    "@capacitor/cli": "^5.7.8",
    "@cypress/xpath": "^2.0.3",
    "@firebase/testing": "^0.20.11",
    "@ionic/angular-toolkit": "^2.3.0",
    "@ionic/lab": "3.2.10",
    "@types/cypress": "^1.1.3",
    "@types/moment-timezone": "^0.5.30",
    "@types/node": "^12.19.15",
    "autoprefixer": "^10.2.5",
    "codelyzer": "^6.0.0",
    "cypress": "^13.5.0",
    "flex-gap-polyfill": "^2.2.1",
    "patch-package": "^8.0.0",
    "postcss": "^8.2.10",
    "postcss-import": "^12.0.1",
    "postcss-loader": "^4.2.0",
    "postcss-scss": "^3.0.5",
    "protractor": "~7.0.0",
    "replace-in-file": "^5.0.2",
    "ts-node": "~8.3.0",
    "tslint": "~6.1.0",
    "typescript": "^4.9.3"
  },

SDK’s mention in email from app store:

Frameworks/Capacitor.framework/Capacitor
Frameworks/Cordova.framework/Cordova
Frameworks/FBLPromises.framework/FBLPromises
Frameworks/FirebaseCore.framework/FirebaseCore
Frameworks/FirebaseCoreDiagnostics.framework/FirebaseCoreDiagnostics
Frameworks/FirebaseDynamicLinks.framework/FirebaseDynamicLinks
Frameworks/FirebaseInstallations.framework/FirebaseInstallations
Frameworks/FirebaseMessaging.framework/FirebaseMessaging
Frameworks/GoogleDataTransport.framework/GoogleDataTransport
Frameworks/GoogleUtilities.framework/GoogleUtilities
Frameworks/nanopb.framework/nanopb

Email from app store repeated this 11 times for the SDK’s:
ITMS-91061: Missing privacy manifest - Your app includes “Frameworks/Capacitor.framework/Capacitor”, which includes Capacitor, an SDK that was identified in the documentation as a commonly used third-party SDK. 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. 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: Third-party SDK requirements - Support - Apple Developer.

maybe i’m wrong, but i think the only way is updating to the latest version

1 Like

For that plugin, did you see the maintainer’s note about an alternative package - GitHub - BranchMetrics/capacitor-branch-deep-links: Capacitor plugin for branch.io deep links?

Also, assuming you know, @ionic-native is dead so you need to switch all of those plugins over to @awesome-cordova-plugins.

@twestrick Thanks, yeah I saw that note, also aware about @ion-native and working on the move.
I am planning on upgrading but I need to support dynamic links for the next few months.

I have resolved the privacy manifest issue. It seems there is a workaround for old packages/SDKs. I am now in the app store :tada:
Details here: Handling Privacy Manifest Requirements with Outdated Firebase and Angular Version - #9 by wekas

Now that the short-term headache is over, the new plan is to avoid updating individual packages in the project, as it’s a massive hassle. My packages are severely outdated, with many redundant settings dating back to Ionic 3.

In a few months when I no longer need to support dynamic links, I’ll create a brand-new Ionic/Capacitor project using the latest versions of everything and migrate my code over. This will allow me to remove unsupported packages and replace them with current alternatives that serve the same purpose.

@ciccilleju there is a way to sort the privacy manifest with old SDK’s see my other post linked above.

On a side note stackoverflow moderators are closing any questions around the privacy manifests, not sure why but at least I can post in here about them.

1 Like