UIWebViewの廃止
iOSアプリからUIWebViewを2020年12月までに削除することが必須となりました。
Updating Apps that Use Web Views
そのために開発している古いアプリからUIWebViewを削除するためにやったことを書いていきます。当然これで対応が全てではない(どころかほんのちょっと)のでその点だけ注意してください。古いコードなのでObjective-Cのみ対応しました。
どこでUIWebViewが使用されているのか
ここでプロジェクト内検索をかけました。
$ cd yourprojectpath
$ grep -r "UIWebView" .
これでUIWebViewが使われているところを検索しました
参考:How to search for any UIWebView component usage inside a current project?
電話を掛けるときに利用していたUIWebViewの削除
知らなかったのですが、UIWebViewから電話を掛ける画面の表示が可能なようです。その実装を置き換えていきます。
UIWebViewの場合
UIWebView *callWebview =[[UIWebView alloc] init];
NSURL *phoneNumberURL =[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", @"09011111111"]];
[callWebview loadRequest:[NSURLRequest requestWithURL:phoneNumberURL]];
[self.view addSubview:callWebview];
UIWebViewを使わない場合
NSURL *telURL =[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", @"09011111111"]];
[[UIApplication sharedApplication] openURL: telURL];
WKWebViewへのリプレイス
単純にWKWebViewに置き換えていきます。
#import <WebKit/WebKit.h>
- UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectMake(0,0,ScreenWidth, ScreenHeight)];
+ WKWebView *web = [[WKWebView alloc]initWithFrame:CGRectMake(0,0,ScreenWidth, ScreenHeight)];
WEBページのアラートやpromptが表示されない
単純にWKWebViewに置き換えただけだとWEBページのalert、confirm、promptが表示されなくなります。WKUIDelegateのプロトコルに準拠する必要があります。
Alert等の表示は都度確認して表示するのかしないのか、またはカスタマイズして表示することが可能となります。
@interface HogeViewController () <WKUIDelegate>
// Alertの表示
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
{
}
// Confirmの表示
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler
{
}
// Promptの表示
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler
{
}
ここの実装はこちらの記事を参考にいたしました
参考:WKWebViewでJavaScript(Alert,Confirm,Prompt)の処理
単純に表示するのであればコピペで十分かと思います。
その他ライブラリのアップデート
CocoaPods、Carthageで使用されているライブラリでUIWebViewを利用しているものがあったため、削除・アップデートを掛ける部分がありました。
以上で作業は完了です。