4

Just got this message from Apple this morning:

We noticed that your Kids Category app includes analytics, advertising and collects, transmits, or has the ability to share personal information or device information with third parties. Specifically:

- Your app implements the App Tracking Transparency framework, which is used when apps collect data about users and share it with third-parties for tracking purposes. Since Kids Category apps are not allowed to collect, transmit or share identifiable information with third-parties, you should not implement App Tracking Transparency in your app.

However, having done some rigorous searching in all node_modules and pods, I cannot find any reference to the AppTrackingTransparency framework. How can I figure out where it's included and remove it?

Most likely, either Firebase Analytics or Onesignal is including the framework. I just can't see any reference to it anywhere.

package.json

{
  "name": "Einee",
  "version": "1.8.45",
  "private": true,
  "husky": {
    "hooks": {
      "post-merge": "if git-branch-is beta -q || git-branch-is master -q; then yarn version --patch; fi"
    }
  },
  "scripts": {
    "start": "react-native start",
    "ios": "react-native run-ios --device",
    "run:ios:8": "react-native run-ios --simulator=\"iPhone 8\"",
    "run:ios:iPad": "react-native run-ios --simulator=\"iPad Pro (12.9-inch) (3rd generation)\"",
    "lint:fix": "eslint --fix --ext .js,.jsx,.ts,.tsx ./",
    "postversion": "react-native-version --reset-build",
    "patch-version": "yarn version --patch"
  },
  "jest": {
    "preset": "react-native"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "^1.13.2",
    "@react-native-community/async-storage": "^1.7.1",
    "@react-native-community/blur": "^3.4.1",
    "@react-native-community/masked-view": "^0.1.6",
    "@react-native-community/picker": "^1.8.1",
    "@react-native-firebase/analytics": "10.5.1",
    "@react-native-firebase/app": "10.5.0",
    "@react-native-firebase/crashlytics": "10.5.1",
    "@terrysahaidak/react-native-devmenu": "^3.0.0",
    "add": "^2.0.6",
    "amplitude-js": "^7.3.0",
    "lodash": "^4.17.4",
    "moment": "^2.22.2",
    "react": "16.13.1",
    "react-native": "0.63.4",
    "react-native-config": "^1.3.3",
    "react-native-dev-menu": "^4.0.0",
    "react-native-device-info": "^8.0.1",
    "react-native-emoji": "^1.8.0",
    "react-native-fast-image": "^8.3.2",
    "react-native-fs": "^2.16.6",
    "react-native-gesture-handler": "^1.5.6",
    "react-native-haptic-feedback": "^1.9.0",
    "react-native-iap": "5.2.3",
    "react-native-loading-spinner-overlay": "^2.0.0",
    "react-native-mail": "^6.0.0",
    "react-native-media-queries": "^0.3.0",
    "react-native-onesignal": "^4.0.3",
    "react-native-picker-select": "^8.0.2",
    "react-native-rate": "^1.1.10",
    "react-native-reanimated": "^1.7.0",
    "react-native-restart": "^0.0.20",
    "react-native-safe-area-context": "^3.1.8",
    "react-native-screens": "^2.0.0-alpha.33",
    "react-native-share": "^5.1.0",
    "react-native-sound": "^0.11.0",
    "react-native-swiper": "^1.6.0",
    "react-native-tts": "^3.2.0",
    "react-native-vector-icons": "^8.0.0",
    "react-navigation": "^4.1.0",
    "react-navigation-stack": "^2.1.0",
    "react-redux": "^7.1.3",
    "redux": "^4.0.5",
    "redux-action-listeners": "^1.0.2",
    "redux-thunk": "^2.2.0",
    "rn-fetch-blob": "^0.12.0",
    "styled-components": "^5.1.1"
  },
  "devDependencies": {
    "@babel/core": "^7.8.4",
    "@babel/runtime": "^7.8.4",
    "@react-native-community/eslint-config": "^2.0.0",
    "@types/lodash": "^4.14.165",
    "@types/react": "^17.0.0",
    "@types/react-native": "^0.63.37",
    "@types/react-navigation": "^3.4.0",
    "@types/react-redux": "^7.1.11",
    "@typescript-eslint/eslint-plugin": "^4.14.1",
    "@typescript-eslint/parser": "^4.14.1",
    "babel-jest": "^26.6.3",
    "babel-plugin-module-resolver": "^4.0.0",
    "enzyme": "^3.10.0",
    "enzyme-adapter-react-16": "^1.14.0",
    "enzyme-to-json": "^3.3.5",
    "eslint": "^7.18.0",
    "eslint-config-airbnb-typescript": "^12.0.0",
    "eslint-config-prettier": "^7.2.0",
    "eslint-import-resolver-typescript": "^2.3.0",
    "eslint-plugin-import": "^2.22.1",
    "eslint-plugin-jsx-a11y": "^6.4.1",
    "eslint-plugin-prettier": "^3.3.1",
    "eslint-plugin-react": "^7.22.0",
    "git-branch-is": "^4.0.0",
    "husky": "4.3.8",
    "jest": "^26.6.3",
    "jest-environment-enzyme": "^7.0.2",
    "jest-enzyme": "^7.0.2",
    "metro-react-native-babel-preset": "^0.64.0",
    "pre-push": "^0.1.1",
    "prettier": "^2.2.1",
    "react-dom": "^17.0.1",
    "react-native-debugger-open": "^0.3.25",
    "react-native-version": "^4.0.0",
    "react-test-renderer": "17.0.1",
    "redux-mock-store": "^1.5.3",
    "typescript": "4.0.5"
  }
}

Podfile

require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '10.0'

target 'Einee' do
  config = use_native_modules!

  use_react_native!(:path => config["reactNativePath"])

  target 'EineeTests' do
    inherit! :complete
    # Pods for testing
  end

  # Enables Flipper.
  #
  # Note that if you have use_frameworks! enabled, Flipper will not work and
  # you should disable these next few lines.
  use_flipper!
  post_install do |installer|
    flipper_post_install(installer)
  end
end

target 'OneSignalNotificationServiceExtension' do
  pod 'OneSignal', '>= 3.0', '< 4.0'
end

target 'Einee-tvOS' do
  # Pods for Einee-tvOS

  target 'Einee-tvOSTests' do
    inherit! :search_paths
    # Pods for testing
  end
end

Ilya Karnaukhov
  • 3,838
  • 7
  • 31
  • 53

3 Answers3

6

Apparently the problem is with the Firebase Analytics SDK, it's not yet optimised to be approved by Apple for kids apps. So I just removed it and no problems.

Ilya Karnaukhov
  • 3,838
  • 7
  • 31
  • 53
  • did you remove Firebase completely? I have no Firebase Analytics in my pods, but it installs anyway (i should use Firebase Core, Messaging, Crashlytics). – Данила Никонец Apr 05 '21 at 10:26
  • Check your package.json. If firebase analytics is used as a package there then the pods will pick it up automatically. If it's not in package.json, try reinstalling the packages again (yarn install) and then do pod install again in the ios folder. The firebase analytics sdk should no longer be there. – Ilya Karnaukhov Apr 05 '21 at 15:14
5

This is the reference to how App Tracking Transparency works. https://developer.apple.com/documentation/apptrackingtransparency

Taking a look at step 2 and 3 in above link, I think you will find usage of requestTrackingAuthorization function or trackingAuthorizationStatus from ATTrackingManager somwhere in your code which is triggering the rejection.

Even though you do not have it, I would still like to add for reference that you should also check your Info.plist for NSUserTrackingUsageDescription which translates to Privacy - Tracking Usage Description and remove it.

Shahbaz A.
  • 4,047
  • 4
  • 34
  • 55
2

You should double-check your Info.plist, You might have included something like this Privacy - Tracking Usage Description

jelow
  • 21
  • 2