Search code examples
iosreact-nativeapp-storeapp-store-connectreact-native-ios

React Native v0.61.5 getting ITMS-90809: Depracated API Usage


My last deployment of my application to apple store was on February 18, 2020. I also got a warning that time about the depracation but I ignored it since they still allowed it that time. Now, I am uploading again in Apple Store (September 25, 2020) and I got warning again and this time they are already blocking. So now I just need help with the following:

  1. How do I know which packages are using the depracated UIWebView?
  2. What do I do with those packages that are using the UIWebView?

Here are some information:

Email message:

ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.

react-native info:

System:
    OS: macOS 10.15.6
    CPU: (8) x64 Intel(R) Core(TM) i5-8279U CPU @ 2.40GHz
    Memory: 91.77 MB / 8.00 GB
    Shell: 5.7.1 - /bin/zsh
  Binaries:
    Node: 12.10.0 - ~/.nvm/versions/node/v12.10.0/bin/node
    Yarn: 1.21.1 - /usr/local/bin/yarn
    npm: 6.10.3 - ~/.nvm/versions/node/v12.10.0/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 13.7, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
  IDEs:
    Android Studio: 3.6 AI-192.7142.36.36.6392135
    Xcode: 11.7/11E801a - /usr/bin/xcodebuild
  npmPackages:
    react: 16.9.0 => 16.9.0 
    react-native: 0.61.5 => 0.61.5

package.json

{
  "name": "GMobileApp",
  "version": "0.0.1",
  "private": true,
  "rnpm": {
    "assets": [
      "./src/assets/fonts/"
    ]
  },
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/art": "^1.1.2",
    "@react-native-community/async-storage": "^1.7.1",
    "@react-native-community/geolocation": "^2.0.2",
    "@react-native-community/netinfo": "^5.3.3",
    "@react-native-community/push-notification-ios": "^1.0.3",
    "@react-native-firebase/admob": "^6.2.0",
    "@react-native-firebase/app": "^6.2.0",
    "@react-native-firebase/crashlytics": "^6.2.0",
    "@react-native-firebase/messaging": "^6.2.0",
    "@segment/analytics-react-native": "^1.1.0",
    "axios": "^0.19.0",
    "babel-runtime": "^6.26.0",
    "events": "^3.0.0",
    "moment": "^2.24.0",
    "react": "16.9.0",
    "react-native": "0.61.5",
    "react-native-android-keyboard-adjust": "^1.2.0",
    "react-native-animated-linear-gradient": "^1.2.0",
    "react-native-device-info": "^5.4.0",
    "react-native-elements": "^1.2.7",
    "react-native-fbsdk": "^1.1.1",
    "react-native-gesture-handler": "^1.5.2",
    "react-native-gifted-chat": "^0.12.0",
    "react-native-indicator": "^1.2.0",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-location": "^2.5.0",
    "react-native-map-link": "^2.7.0",
    "react-native-maps": "0.26.1",
    "react-native-modal-datetime-picker": "^7.6.1",
    "react-native-portal": "^1.3.0",
    "react-native-push-notification": "^3.1.9",
    "react-native-reanimated": "^1.4.0",
    "react-native-responsive-dimensions": "^3.0.0",
    "react-native-responsive-screen": "^1.3.0",
    "react-native-screens": "^2.0.0-alpha.15",
    "react-native-simple-toast": "^1.0.0",
    "react-native-splash-screen": "^3.2.0",
    "react-native-svg": "^9.13.3",
    "react-native-vector-icons": "^6.6.0",
    "react-navigation": "^4.0.10",
    "react-navigation-drawer": "^2.3.3",
    "react-navigation-stack": "^1.10.3",
    "react-navigation-tabs": "^2.6.0",
    "react-navigation-transitions": "^1.0.12",
    "react-redux": "^7.1.3",
    "redux": "^4.0.4",
    "redux-logger": "^3.0.6",
    "redux-persist": "^6.0.0",
    "redux-thunk": "^2.3.0",
    "twilio-chat": "^3.3.3"
  },
  "devDependencies": {
    "@babel/core": "^7.6.2",
    "@babel/runtime": "^7.6.2",
    "@react-native-community/eslint-config": "^0.0.5",
    "babel-jest": "^24.9.0",
    "eslint": "^6.5.1",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.56.0"
  },
  "jest": {
    "preset": "react-native"
  }
}

Solution

  • You can try searching for UIWebView in node_modules

    grep -r UIWebView node_modules/*
    

    or you can try

    grep -r RCTWebView node_modules/*
    

    The output will also include comments. So you can ignore it. Below are the output excluding comments.

    node_modules/react-native-fbsdk/js/FBShareDialog.js:   * Displays the dialog in a UIWebView within the app.
    Binary file node_modules/react-native-gifted-chat/node_modules/react-native-maps/.gradle/4.10.3/taskHistory/taskHistory.bin matches
    Binary file node_modules/react-native-maps/.gradle/4.10.3/taskHistory/taskHistory.bin matches
    

    From this I see that below 2 modules could be using UIWebView

    • react-native-gifted-chat
    • react-native-maps

    Regarding the 2nd part of your question, you need to upgrade all the dependencies. There are possibility that it will break the code. You may need to update your code to fix those issues.