1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【iOS】UIWebViewの削除のためにやったこと

Posted at

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を利用しているものがあったため、削除・アップデートを掛ける部分がありました。
以上で作業は完了です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?