Remove UIWebView usage to get Apple to accept submission

Please provide the following:

  1. SDK Version: 25
  2. Platforms(Android/iOS/web/all): iOS

When I upload to the app store I get an email saying:

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.

How can I remove this UIWebView usage?

Hi. That is a warning, so in theory should not prevent your app from being approved (yet).

However, if you upgrade to SDK 36, you should no longer get that warning.

Oh ok thank you. Is it possible to fix this without upgrading to 36? I tried to and things broke.

Unfortunately not. The UIWebView usage is in Expo’s dependencies so you can’t get rid of all of them without upgrading to SDK 36 (maybe 35, but I think 36).

Are you really on SDK 25? That’s pretty old.

When upgrading you should go through the release notes of each SDK version and make sure you take care of the deprecations and updates to libraries. Make sure your app is working with each SDK version and commit the changes to Git before upgrading to the next version. If you run into errors, read the documentation for that SDK version for the module you’re having problems with and if you can’t figure it out, let us know.

Oh haha I mean I’m on 35.

Thanks for that! Ill try updating. :slight_smile:

1 Like

I’m on sdk 36 and I’m still getting this warning upon submission… Any ideas?

What dependencies do you have listed in package.json?

I’m also on SDK 36 and seeing this warning. Here are my dependencies:

@apollo/react-hooks”: “^3.1.2”,
@expo/react-native-action-sheet”: “^3.0.3”,
@react-native-community/masked-view”: “0.1.5”,
@react-native-community/netinfo”: “4.6.0”,
“apollo-cache-inmemory”: “^1.6.2”,
“apollo-cache-persist”: “^0.1.1”,
“apollo-client”: “^2.6.4”,
“apollo-link”: “^1.2.12”,
“apollo-link-error”: “^1.1.11”,
“apollo-link-http”: “^1.5.15”,
“apollo-link-retry”: “^2.2.14”,
“apollo-utilities”: “^1.3.2”,
“date-fns”: “^2.2.1”,
“expo”: “^36.0.0”,
“expo-av”: “~8.0.0”,
“expo-permissions”: “~8.0.0”,
“graphql”: “^14.4.2”,
“graphql-tag”: “^2.10.1”,
“prop-types”: “^15.7.2”,
“react”: “16.9.0”,
“react-dom”: “16.9.0”,
“react-native”: “https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz”,
“react-native-confetti”: “^0.1.0”,
“react-native-elements”: “^1.2.7”,
“react-native-flash-message”: “^0.1.13”,
“react-native-gesture-handler”: “~1.5.0”,
“react-native-reanimated”: “~1.4.0”,
“react-native-safe-area-context”: “0.6.0”,
“react-native-screens”: “2.0.0-alpha.12”,
“react-native-touchable-scale”: “^2.0.0”,
“react-navigation”: “^4.1.0”,
“react-navigation-stack”: “^2.1.0”,
“react-navigation-tabs”: “^2.7.0”,
“sentry-expo”: “~2.0.0”,
“uuid”: “^3.3.2”

Same here. On SDK 36, and still getting this error when pushing builds to App Store Connect.

 "dependencies": {
    "@expo/vector-icons": "^10.0.0",
    "@mollie/expo-mixpanel-analytics": "1.0.2",
    "@react-native-community/masked-view": "0.1.5",
    "@react-native-community/netinfo": "4.6.0",
    "@react-navigation/core": "^5.0.0-alpha.32",
    "@react-navigation/material-bottom-tabs": "^5.0.0-alpha.31",
    "@react-navigation/native": "^5.0.0-alpha.24",
    "@react-navigation/stack": "^5.0.0-alpha.58",
    "@reduxjs/toolkit": "^1.0.4",
    "@types/react-intl": "^3.0.0",
    "date-fns": "^1.30.1",
    "dotenv": "^8.2.0",
    "expo": "^36.0.0",
    "expo-asset": "~8.0.0",
    "expo-constants": "~8.0.0",
    "expo-font": "~8.0.0",
    "expo-intent-launcher": "~8.0.0",
    "expo-local-authentication": "~8.0.0",
    "expo-localization": "~8.0.0",
    "expo-permissions": "~8.0.0",
    "expo-secure-store": "~8.0.0",
    "expo-web-browser": "~8.0.0",
    "intl": "^1.2.5",
    "lodash": "^4.17.15",
    "prettier": "^1.19.1",
    "qs": "^6.9.0",
    "react": "16.9.0",
    "react-dom": "16.9.0",
    "react-intl": "^3.9.2",
    "react-native": "https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz",
    "react-native-blur": "^3.2.2",
    "react-native-confetti": "^0.1.0",
    "react-native-gesture-handler": "~1.5.0",
    "react-native-paper": "^3.4.0",
    "react-native-reanimated": "~1.4.0",
    "react-native-safe-area-context": "0.6.0",
    "react-native-screens": "2.0.0-alpha.12",
    "react-native-svg": "^9.13.6",
    "react-native-svg-charts": "^5.3.0",
    "react-native-web": "^0.11.7",
    "react-redux": "^7.1.3",
    "redux-saga": "^1.1.3",
    "sentry-expo": "~2.0.0"
  },

Hi @kensmash and @mollie-bv

If I install either set of dependencies then the only place I see UIWebView (other than in comments) is in react-native-gesture-handler (in the following files):

./node_modules/react-native-gesture-handler/ios/build/RNGestureHandler/Index/DataStore/v5/records/EJ/UIWebView.h-17DCX353XRLEJ
./node_modules/react-native-gesture-handler/ios/build/RNGestureHandler/Index/DataStore/v5/units/UIKit-1V5UHAPTOD24G.pcm-35LZDCPFUDPTH
./node_modules/react-native-gesture-handler/ios/build/RNGestureHandler/ModuleCache.noindex/11EFTSSB0BUOA/UIKit-1V5UHAPTOD24G.pcm
./node_modules/react-native-gesture-handler/ios/build/RNGestureHandler/ModuleCache.noindex/11EFTSSB0BUOA/modules.idx

But I don’t quite understand why. If you remove that for testing purposes and comment out the code that uses it are you able to see if that gets rid of the warnings? (Sorry, I have not yet submitted one of my apps to the App Store so don’t know how feasible this is for you to try.)

I’ve also checked react-native-gesture-handler's repository and do not see any mention of UIWebView in the current code, or in the history. So I don’t know where it’s coming from. :confused:

Here are my dependencies @wodin Thank you!
“dependencies”: {
“expo/samples”: “~36.0.0”,
“expo/vector-icons”: “~10.0.0”,
“react-native-community/datetimepicker”: “2.1.0”,
“react-native-community/netinfo”: “4.6.0”,
“react-navigation/web”: “~1.0.0-alpha.9”,
“aes-js”: “^3.1.2”,
“crypto-js”: “^3.1.9-1”,
“expo”: “~36.0.0”,
“expo-asset”: “~8.0.0”,
“expo-constants”: “~8.0.0”,
“expo-font”: “~8.0.0”,
“expo-web-browser”: “~8.0.0”,
“moment”: “^2.24.0”,
“react”: “~16.9.0”,
“react-dom”: “~16.9.0”,
“react-native”: “https://github.com/expo/react-native/archive/sdk-36.0.0.tar.gz”,
“react-native-elements”: “^1.2.7”,
“react-native-gesture-handler”: “~1.5.0”,
“react-native-picker-select”: “^6.3.4”,
“react-native-reanimated”: “~1.4.0”,
“react-native-screens”: “2.0.0-alpha.12”,
“react-native-web”: “~0.11.7”,
“react-native-webview”: “7.4.3”,
“react-navigation”: “~4.0.10”,
“react-navigation-stack”: “~1.10.3”,
“react-navigation-tabs”: “~2.6.2”,
“react-redux”: “^7.1.3”,
“redux”: “^4.0.5”,
“redux-thunk”: “^2.3.0”,
“rn-pdf-reader-js”: “^0.7.2”,
“expo-file-system”: “~8.0.0”
},

@wodin, thank you so much for taking the time to test those dependencies. Unfortunately, it seems that React Native Gesture Handler is a dependency of React Navigation, the routing library I use for the app, so I’m stuck with it. I’ll try deleting the node_modules folder and reinstalling everything.

1 Like

@bwalton12011993 I suspect it’s the same issue since you also have react-native-gesture-handler as a dependency. Of course I could be mistaken, and as I said it doesn’t really make much sense to me. But that’s my best guess at the moment. I’ll let you know if I find out anything else about this.

OK, I was barking up the wrong tree. Apparently this is a known problem that has already been fixed. The fix will be available in SDK 37:

1 Like

@wodin Thank you for your help. It allowed me to submit my app for review. So, that is a plus. I guess I’ll just update to sdk 37 when it comes out.

1 Like