• Hello [name]! Thanks for joining the GMC. Before making any posts in the Tech Support forum, can we suggest you read the forum rules? These are simple guidelines that we ask you to follow so that you can get the best help possible for your issue.

iOS iOS export uses deprecated UIWebView API, triggering a warning from Apple

SIG.

Member
I submitted my game for beta review and received an email from Apple stating that my app had an "issue":
Apple said:
Dear Developer,

We identified one or more issues with a recent delivery for your app, . . . . Your delivery was successful, but you may wish to correct the following issues in your next delivery:

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.

After you’ve corrected the issues, you can use Xcode or Application Loader to upload a new binary to App Store Connect.

Best regards,

The App Store Team
The linked page explains that UIWebView is "a view that embeds web content in your app." My app is straightforwardly just a game without any integrations from the web or otherwise. The closest thing I can think of are ads or IAP. I do use YYG's Google Play Services extension (which includes a partial implementation of the Google Mobile Ads SDK) to show AdMob ads, and I use YYG's Google Play Services IAP extension to offer a "remove ads" product. But neither of those are really "web content," either, so I'm not at all sure what (if anything) is using the API.

I've submitted a bug report, but I was curious whether anyone knows more about how UIWebView is being used and whether there is a workaround for when Apple starts outright rejecting apps that use UIWebView.
 

SIG.

Member
Checking the build log in Xcode, it looks like maybe the problem is that YYG's ads extension is using an outdated version of Google's iOS Admob SDK:
Xcode said:
2019-08-29 17:44:43.161637-0700 BHSL[446:54409] <Google:HTML> You are currently using version 7.27.0 of the SDK. Please consider updating your SDK to the most recent SDK version to get the latest features and bug fixes. The latest SDK can be downloaded from https://goo.gl/UoiJ8F. A full list of release notes is available at https://developers.google.com/admob/ios/rel-notes.
 

WWAZman

Member
Just as a note I ignored it and submitted it anyway, and my app was approved and is currently on the App store. Whatever it is, it isn't critical.
 

chirpy

Member
It seems to me that this is down to AdMob and Google's GDPR PersonalizedAdConsent implementation, so it's likely that all we can do is to report this to AdMob and wait for Google's updates.

I see Facebook had dropped UIWebView (Audience Network 5.5.1) and AdMob's adapters are following up, so hopefully they're well aware of it.

I'm assuming Apple still accepts builds containing UIWebView usage, no?

=====
https://github.com/googleads/googleads-consent-sdk-ios/issues/41
Worst case we may be able to remove all references to PersonalizedAdConsent, set GDPR required to true regardless of user region, set all options to non-personalized ads to true, and rely on privacy policy info to use "legitimate interest" as our legal basis to serve ads in the games (I'm no pro, just had asked some random users on reddit/r/gdpr).
 
Last edited:

clee2005

Member
So I'm getting this suddenly now with my submissions :

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs starting from December 2020

They took it, but gave me a stern frowning. I am not clear where I might be using it. I have a bunch of extensions and did a quick search for UIWebView in any of them but that came up with nothing. Is there something I can look for specifically in my extensions (Firebase, Appodeal, Facebook, Google Signin, Share Dialog and then the YoYo IAPs)?

If it's GMS2 itself then I expect that it'll get handled in the next update (@Dan)?

Thanks,
Chris
 

littlepolo

Member
So I'm getting this suddenly now with my submissions :

ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs starting from December 2020

They took it, but gave me a stern frowning. I am not clear where I might be using it. I have a bunch of extensions and did a quick search for UIWebView in any of them but that came up with nothing. Is there something I can look for specifically in my extensions (Firebase, Appodeal, Facebook, Google Signin, Share Dialog and then the YoYo IAPs)?

If it's GMS2 itself then I expect that it'll get handled in the next update (@Dan)?

Thanks,
Chris
I'm getting this
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
so I can't submit my game,have you solved it?Is there a solution now?(@Dan)
 

jonahrobot

Member
I'm getting this
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.
so I can't submit my game,have you solved it?Is there a solution now?(@Dan)
Same here...

I send an email out to support on the 4th and got this from Dan,

Hello Jonah,

We are working on an update to that Marketplace extension at the moment. However, please do review all the extensions in your project, in case any others beyond or control cause this issue also - if so, you will need to contact the respective authors or edit the extensions yourself to remove that UIWebView usage.

Please keep an eye on the Marketplace page and our social posts to see when our updated extension is available. I do't have a precise date I can give you at the moment, but it is "asap".

Thanks,
Dan
YoYo QA Department
Hopefully, they address it soon but I don't really know if "asap" is a day or a month...
 

chirpy

Member
To my understanding, this is mostly ad-related. It should be ok-ish now if you manually keep extensions and dependent frameworks up-to-date
since so far (big, e.g. Google, Facebook) iOS SDK providers had completed replacing most if not all UIWebView-related implementations.

Here's my workaround.

To check what frameworks are giving you the warning, you can run " grep -r UIWebView * " in GMS2-generated xcodeproj root in mac OS.
By default the path should be something like: /Users/$(YOUR_USER_NAME)/GameMakerStudio2/iOS/GMS2IOS/$(YOUR_PROJ_NAME)/$(YOUR_PROJ_NAME)

For official YYG extensions, the main offender should be GooglePlayAdsExtension.
I don't know the current status, but previously it comes with two outdated .zip frameworks from Google: GoogleMobileAds and PersonalizedAdConsent, so the grep command will show:
Code:
Binary file Fw/PersonalizedAdConsent.framework/PersonalizedAdConsent matches
Binary file Fw/GoogleMobileAds.framework/GoogleMobileAds matches
You need to manually replace these with the latest binaries:
https://developers.google.com/admob/ios/quick-start#manual_download (multiple .frameworks, listed in GooglePlayAdsExtension -> Extra Platforms -> iOS -> 3rd Party Frameworks + Bundles)
https://developers.google.com/admob/ios/eu-consent#manual_download (.bundle)
In case the .bundle doesn't work as a replacement, honestly I frigging don't know where to download personalizedconsent.embeddedframework.zip as I switched to using CocoaPods management.
Theoretically it can be built manually since it's open source:
https://github.com/googleads/google...r/PersonalizedAdConsent/PersonalizedAdConsent

You may need to manually remove the Fw folder in the generated xcode project root if you have built the project once; otherwise the old frameworks may still be there and/or for some reason packed into the archive.
Note: You'll only receive the warning email, a moment after uploading to AppStoreConnect (before TestFlight availability + "completed processing" email), not when validating your archive with XCode.

====

Even though Apple's warnings and announcements said they'll keep accepting app updates that contain UIWebView references until December ..
they're apparently taking this deprecation very seriously, as just last month, I had personally also faced "account under investigation" locks on both of my apps, seemingly because (they don't say why, so it's only my assumption) one of them happened to contain UIWebView refs in an attempt to update my ad SDKs. It was most likely due to this lingering outdated PersonalizedAdConsent framework.
Lock periods are said to range from 2 days to 21 days or even more, my lock was cleared in a couple of days but .. good luck guys. If it unfortunately happens, be honest, send an appeal describing your issue/your theory about where the UIWebView ref comes from, and wait patiently.

I hope YYG does also take this seriously and update sooner than later.

I'm updating my app once again and the thought of account being locked still makes me uneasy.
I didn't see the warning email now after the workaround; I can only hope that I didn't get blacklisted of some sort.

(My grep result still says that
Binary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
, but perhaps at least it's not referenced in any code or other frameworks.)
 

SIG.

Member
Thanks for the investigation and thorough reply. I personally switched engines, and the primary reason is YYG's inability to keep its mobile extensions up to date and smoothly integrated into the engine itself.
 

littlepolo

Member
To my understanding, this is mostly ad-related. It should be ok-ish now if you manually keep extensions and dependent frameworks up-to-date
since so far (big, e.g. Google, Facebook) iOS SDK providers had completed replacing most if not all UIWebView-related implementations.

Here's my workaround.

To check what frameworks are giving you the warning, you can run " grep -r UIWebView * " in GMS2-generated xcodeproj root in mac OS.
By default the path should be something like: /Users/$(YOUR_USER_NAME)/GameMakerStudio2/iOS/GMS2IOS/$(YOUR_PROJ_NAME)/$(YOUR_PROJ_NAME)

For official YYG extensions, the main offender should be GooglePlayAdsExtension.
I don't know the current status, but previously it comes with two outdated .zip frameworks from Google: GoogleMobileAds and PersonalizedAdConsent, so the grep command will show:
Code:
Binary file Fw/PersonalizedAdConsent.framework/PersonalizedAdConsent matches
Binary file Fw/GoogleMobileAds.framework/GoogleMobileAds matches
You need to manually replace these with the latest binaries:
https://developers.google.com/admob/ios/quick-start#manual_download (multiple .frameworks, listed in GooglePlayAdsExtension -> Extra Platforms -> iOS -> 3rd Party Frameworks + Bundles)
https://developers.google.com/admob/ios/eu-consent#manual_download (.bundle)
In case the .bundle doesn't work as a replacement, honestly I frigging don't know where to download personalizedconsent.embeddedframework.zip as I switched to using CocoaPods management.
Theoretically it can be built manually since it's open source:
https://github.com/googleads/google...r/PersonalizedAdConsent/PersonalizedAdConsent

You may need to manually remove the Fw folder in the generated xcode project root if you have built the project once; otherwise the old frameworks may still be there and/or for some reason packed into the archive.
Note: You'll only receive the warning email, a moment after uploading to AppStoreConnect (before TestFlight availability + "completed processing" email), not when validating your archive with XCode.

====

Even though Apple's warnings and announcements said they'll keep accepting app updates that contain UIWebView references until December ..
they're apparently taking this deprecation very seriously, as just last month, I had personally also faced "account under investigation" locks on both of my apps, seemingly because (they don't say why, so it's only my assumption) one of them happened to contain UIWebView refs in an attempt to update my ad SDKs. It was most likely due to this lingering outdated PersonalizedAdConsent framework.
Lock periods are said to range from 2 days to 21 days or even more, my lock was cleared in a couple of days but .. good luck guys. If it unfortunately happens, be honest, send an appeal describing your issue/your theory about where the UIWebView ref comes from, and wait patiently.

I hope YYG does also take this seriously and update sooner than later.

I'm updating my app once again and the thought of account being locked still makes me uneasy.
I didn't see the warning email now after the workaround; I can only hope that I didn't get blacklisted of some sort.

(My grep result still says that
Binary file Pods/Google-Mobile-Ads-SDK/Frameworks/GoogleMobileAdsFramework-Current/GoogleMobileAds.framework/GoogleMobileAds matches
, but perhaps at least it's not referenced in any code or other frameworks.)
Thank you for the very detail and useful answer. But I'm confused when replaced binaries where you said listed in GooglePlayAdsExtension -> Extra Platforms -> iOS -> 3rd Party Frameworks + Bundles, Could I just need to change those frameworks in file path? I tried to replace the GoogleMobileAds.framework which shown in grep command, but I still get this message that shown "Binary file Fw/GoogleMobileAds.framework/GoogleMobileAds matches" when I rebuild the project.
 

chirpy

Member
Thank you for the very detail and useful answer. But I'm confused when replaced binaries where you said listed in GooglePlayAdsExtension -> Extra Platforms -> iOS -> 3rd Party Frameworks + Bundles, Could I just need to change those frameworks in file path? I tried to replace the GoogleMobileAds.framework which shown in grep command, but I still get this message that shown "Binary file Fw/GoogleMobileAds.framework/GoogleMobileAds matches" when I rebuild the project.
I haven’t actually tried manually replacing binaries in the extensions, sorry. However,
It seems that the latest GoogleMobileAds still contains ref to UIWebView. I saw it in the cocoa pods GoogleMobileAds framework as well, but the resulting archive passed Apple’s check and I received no warning email. You may have to try uploading to App Store connect to be 100% sure. I would recommend manually clearing previous Xcode project as well; I had to to that for my older project.
 

littlepolo

Member
I haven’t actually tried manually replacing binaries in the extensions, sorry. However,
It seems that the latest GoogleMobileAds still contains ref to UIWebView. I saw it in the cocoa pods GoogleMobileAds framework as well, but the resulting archive passed Apple’s check and I received no warning email. You may have to try uploading to App Store connect to be 100% sure. I would recommend manually clearing previous Xcode project as well; I had to to that for my older project.
May be I can use cocoapods to update the SDK? Build the project with the old extensions and then use the cocoapods to update the libraries with
Code:
target 'MyApp' do
  pod 'Google-Mobile-Ads-SDK'
  pod 'PersonalizedAdConsent'
end
is that right?
with Fw folder, When should I remove it?
 

chirpy

Member
May be I can use cocoapods to update the SDK? Build the project with the old extensions and then use the cocoapods to update the libraries with
Code:
target 'MyApp' do
  pod 'Google-Mobile-Ads-SDK'
  pod 'PersonalizedAdConsent'
end
is that right?
with Fw folder, When should I remove it?
Yes, I build from GMS2, run pod update (also apply necessary modifications if any, eg add a launch storyboard), and then open the resulting xcworkspace to build and upload to App Store connect. Framework binaries aren’t needed and pods won’t be in the folder so they can and should be removed. You might want to delete the Xcode project folder for good and restart from GMS2 IDE to more easily make sure the frameworks are from pods instead of extensions.
 
Hi, I am bumping into the same issue, have been stuck on it for a while now. I am unable to upload on the App Store because of the error:

ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).

I ran on the terminal commands for searching UIWebView inside pod framework: for framework in Frameworks/*.framework; do fname=$(basename $framework .framework) echo $fname nm $framework/$fname | grep UIWeb done For searching all code: grep -r "UIWebView" . I then tried to replace the UIWebView with WKWebView in the GoogleUtilities.framework and the PersonalizedAdConsent.framework by replacing the text in textedit thinking that it might work but it didn't.

Unfortunately I am not sure how Cocoa works, so I am also kinda stuck there.

I tried to check every setting of the project both in XCode and in GameMaker. This building process has become a nightmare... Has anyone found out a step-by-step solution?

Hope someone is able to help, thank you in advance
 

clee2005

Member
Yes, I build from GMS2, run pod update (also apply necessary modifications if any, eg add a launch storyboard), and then open the resulting xcworkspace to build and upload to App Store connect. Framework binaries aren’t needed and pods won’t be in the folder so they can and should be removed. You might want to delete the Xcode project folder for good and restart from GMS2 IDE to more easily make sure the frameworks are from pods instead of extensions.
Hey @chirpy ! I just found this post and wanted to ask why you add a launch storyboard? Suddenly (seemingly) my devices and simulators all get recognized with 640x960 resolutions and I've found that if I add a .storyboard then this goes away. I can't for the life of me figure out why I never had to do this before, but suddenly Xcode seems to need this from GMS2. I think something happened when I updated to Xcode 11.7, but I reverted back to 11.6 even and still have the problem. Anyway, I guess I'm creating a new storyboard now everytime I build?

EDIT : Nope, was me. I had modified the project.pbxproj for GMS 2.3 and then reverted back to GMS 2.2.5 and it was still expecting the Launchscreen that was in the 2.3 .pbproj file.

Cheers,
Chris
 
Last edited:

chirpy

Member
Hey @chirpy ! I just found this post and wanted to ask why you add a launch storyboard? Suddenly (seemingly) my devices and simulators all get recognized with 640x960 resolutions and I've found that if I add a .storyboard then this goes away. I can't for the life of me figure out why I never had to do this before, but suddenly Xcode seems to need this from GMS2. I think something happened when I updated to Xcode 11.7, but I reverted back to 11.6 even and still have the problem. Anyway, I guess I'm creating a new storyboard now everytime I build?

EDIT : Nope, was me. I had modified the project.pbxproj for GMS 2.3 and then reverted back to GMS 2.2.5 and it was still expecting the Launchscreen that was in the 2.3 .pbproj file.

Cheers,
Chris
Hi, glad to hear that you found your solution. Here's my notes for the original question (for what it's worth):
I added my own storyboard because Xcode had been prompting me that the launch screen assets are going to be deprecated, and storyboard is going to be required.
I'm happy to see storyboard support in GMS 2.3. When using 2.2.5, I kept my own storyboard in a folder that GMS build output wouldn't touch, so my post-build scripts (I manually run them) only had to re-add the .storyboard file to the GMS-generated .xcodeproj instead of creating a new storyboard every time. I used the same method (post-build scripts) to build with cocoapods and .xcworkspace.
 

clee2005

Member
Hi, glad to hear that you found your solution. Here's my notes for the original question (for what it's worth):
I added my own storyboard because Xcode had been prompting me that the launch screen assets are going to be deprecated, and storyboard is going to be required.
I'm happy to see storyboard support in GMS 2.3. When using 2.2.5, I kept my own storyboard in a folder that GMS build output wouldn't touch, so my post-build scripts (I manually run them) only had to re-add the .storyboard file to the GMS-generated .xcodeproj instead of creating a new storyboard every time. I used the same method (post-build scripts) to build with cocoapods and .xcworkspace.
Ah nice! Thanks for the details. I'm doing the same thing pre-build and post-build. I have a .vbs script that I run pre-build which manages project specific build files that need to be in the runtime folder structure (googleservices-info.plist for Firebase) and then I just have to run "pod install" for Cocoapods and open the .workspace instead. Would be nice if this could be more integrated in the GMS build process on both ends.
 
Top