My iOS app keeps getting rejected because Apple says we're using IDFA even though AdSupport.framework
is not included in our project.Apple seems to approve the app when I remove @react-native-firebase/admob
and run pod install
in /ios
again. However, we need ads, and we don't seem to be using the IDFA so I cannot figure out why we're getting this issue.
Apple message
Podfile
platform :ios, '9.0'require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'target 'Einee' do # General Pods pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector" pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec" pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired" pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety" pod 'React', :path => '../node_modules/react-native/' pod 'React-Core', :path => '../node_modules/react-native/' pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules' pod 'React-Core/DevSupport', :path => '../node_modules/react-native/' pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/' pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon" pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' # Einee Pods pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal' pod 'react-native-blur', :path => '../node_modules/@react-native-community/blur' pod 'RNSound', :path => '../node_modules/react-native-sound' pod 'react-native-mail', :path => '../node_modules/react-native-mail' pod 'RNRate', :path => '../node_modules/react-native-rate' pod 'react-native-amplitude-analytics', :path => '../node_modules/react-native-amplitude-analytics' pod 'RNFastImage', :path => '../node_modules/react-native-fast-image' pod 'RNReactNativeHapticFeedback', :path => '../node_modules/react-native-haptic-feedback' pod 'RNDevMenu', :path => '../node_modules/react-native-dev-menu' pod 'RNIap', :path => '../node_modules/react-native-iap' pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-community/async-storage' pod 'RNShare', :path => '../node_modules/react-native-share' target 'EineeTests' do inherit! :search_paths # Pods for testing end use_native_modules!end
AppDelegate.m
/** * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */#import "AppDelegate.h"#import <React/RCTBundleURLProvider.h>#import <React/RCTRootView.h>#import <Bolts/Bolts.h>#import <FBSDKCoreKit/FBSDKCoreKit.h>#import <React/RCTLinkingManager.h>#import "IAPPromotionObserver.h"#import <Firebase.h>#import <AppCenterReactNative.h>#import <AppCenterReactNativeAnalytics.h>#import <AppCenterReactNativeCrashes.h>@implementation AppDelegate- (void)applicationDidBecomeActive:(UIApplication *)application { [FBSDKAppEvents activateApp];}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ if ([FIRApp defaultApp] == nil) { [FIRApp configure]; } // Uncomment this line to use the test key instead of the live one. NSURL *jsCodeLocation; jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"Einee" initialProperties:nil launchOptions:launchOptions]; rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; [IAPPromotionObserver startObserving]; [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UIViewController *rootViewController = [UIViewController new]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; if (launchOptions[UIApplicationLaunchOptionsURLKey] == nil) { [FBSDKAppLinkUtility fetchDeferredAppLink:^(NSURL *url, NSError *error) { if (error) { NSLog(@"Received error while fetching deferred app link %@", error); } if (url) { [[UIApplication sharedApplication] openURL:url]; } }]; } [AppCenterReactNative register]; [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true]; [AppCenterReactNativeCrashes registerWithAutomaticProcessing]; return YES;}// Respond to URI scheme links- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { // Facebook scheme click detect return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{ return [RCTLinkingManager application:application openURL:url options:options];}- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { return [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];}@end
Package.json
{"name": "Einee","version": "1.1.9","private": true,"devDependencies": {"@babel/core": "^7.6.2","@babel/runtime": "^7.6.2","@react-native-community/eslint-config": "^2.0.0","babel-jest": "^24.9.0","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": "^6.5.1","jest": "^24.9.0","jest-environment-enzyme": "^7.0.2","jest-enzyme": "^7.0.2","metro-react-native-babel-preset": "^0.56.0","react-dom": "^16.8.6","react-test-renderer": "16.9.0","redux-mock-store": "^1.5.3" },"scripts": {"init-project": "yarn && cd ios && bundle install","publish-beta": "cd ios && bundle exec fastlane beta","publish-release": "cd ios && bundle exec fastlane release","test": "jest","test:watch": "jest --watch","start": "react-native start","android": "react-native run-android","bundle:ios": "react-native bundle --entry-file='./App/index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest='./ios'","ios": "react-native run-ios","run:ios:8": "react-native run-ios --simulator=\"iPhone 8\"","run:ios:6": "react-native run-ios --simulator=\"iPhone 6\"","run:ios:iPad": "react-native run-ios --simulator=\"iPad Pro (12.9-inch) (3rd generation)\"","lint": "eslint ." },"jest": {"preset": "react-native","setupTestFrameworkScriptFile": "jest-enzyme","testEnvironment": "enzyme","testEnvironmentOptions": {"enzymeAdapter": "react16" },"testPathIgnorePatterns": ["<rootDir>/__tests__/setup/","<rootDir>/node_modules/" ],"setupFiles": ["<rootDir>/jest/setup.js" ] },"dependencies": {"@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-firebase/admob": "^7.6.8","@react-native-firebase/analytics": "^7.6.4","@react-native-firebase/app": "^8.4.3","@react-native-firebase/crashlytics": "^8.4.5","@terrysahaidak/react-native-devmenu": "^3.0.0","add": "^2.0.6","appcenter": "3.0.3","appcenter-analytics": "3.0.3","appcenter-crashes": "3.0.3","lodash": "^4.17.4","moment": "^2.22.2","react": "16.9.0","react-native": "^0.61.5","react-native-amplitude-analytics": "^0.2.7","react-native-config": "^1.3.3","react-native-dev-menu": "^4.0.0","react-native-emoji": "^1.8.0","react-native-fast-image": "^8.3.2","react-native-fbsdk": "^2.0.0","react-native-gesture-handler": "^1.5.6","react-native-haptic-feedback": "^1.9.0","react-native-iap": "^4.4.0","react-native-loading-spinner-overlay": "^1.0.1","react-native-mail": "^5.2.0","react-native-media-queries": "^0.3.0","react-native-onesignal": "^3.6.4","react-native-rate": "^1.1.10","react-native-reanimated": "^1.7.0","react-native-restart": "^0.0.17","react-native-safe-area-context": "^3.1.8","react-native-screens": "^2.0.0-alpha.33","react-native-share": "^4.0.0","react-native-sound": "^0.11.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","styled-components": "^5.1.1" },"rnpm": {"assets": ["./App/assets/fonts/" ] }}