アプリ申請において、ブラウザは注意が必要なので調べてみました。WKWebViewで適当に作るとRejectになり易いようです。
尚、Swiftのケースはこちらです
Xcode 9.4
Web View
方法としてはSafariにURLを渡して代わりにWebを表示してもらう方法と、iOS8まではUIWebViewを使う方法ががありました。ただUIWebViewにはクラッシュが多いということとセキュリティ上の問題があります。そのためiOS8以降は WKWebView を使うことが推奨されています。
逆にいうとそれ以前はUIWebViewが残るというわけでしょうか。
UIApplication で Safari に飛ばす
Safari に代行してもらうという安易ですが安全かもしれない方法です。
アプリからちょっとWeb アクセスしたいだけなのに、「戻る」だの、「ダウンロード中」の表示だの考えなくていいので簡単です。
その辺適当にやると Apple から Regect くらうそうです。
UIApplicationのsharedApplicationを使います。
openURL:メソッドが iOS10から非推奨になったようで代わりにこれを使えとワーニングが出るようになりました。
openURL:options:completionHandler:
ViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // URLを入れる NSString *webPage = @"https://www.apple.com/iphone/"; [[UIApplication sharedApplication] openURL:[NSURL URLWithString: webPage] options:@{} completionHandler:nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
コードはこれだけです。
ただし、Safari で Web に移動した後は、自分のアプリにはもどれません。
UIWebView クラスを使う
非推奨なクラスですが簡単に UIWebView をみておきましょう。
UIWebViewDelegate をセットします。
ViewController.h
1 2 3 4 5 |
#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIWebViewDelegate> @end |
ViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIWebViewのインスタンス初期化 UIWebView *webView = [[UIWebView alloc]init]; // デリゲート webView.delegate = self; // Webページの大きさを画_webView合わせる CGRect rect = self.view.frame; webView.frame = rect; webView.scalesPageToFit = YES; // インスタンスをビューに追加する [self.view addSubview:webView]; // URLを指定 NSURL *url = [NSURL URLWithString:@"https://www.apple.com/iphone/"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // リクエストを投げる [webView loadRequest:request]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
これで、ビルドして実行すれば、指定のURLにとびます。
WKWebView
簡単にWebViewを表示させるだけをStoryboardなしで作ってみます。
ViewController.h
1 2 3 4 5 6 |
#import <UIKit/UIKit.h> #import <WebKit/WebKit.h> @interface ViewController : UIViewController <WKUIDelegate> @end |
ViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIWebViewのインスタンス初期化 WKWebView *wkWebView = [[WKWebView alloc]init]; // デリゲート wkWebView.UIDelegate = self; // Webページの大きさを画_webView合わせる // iPhoneXではSafeAreaの考慮が必要 CGRect rect = self.view.frame; wkWebView.frame = rect; // インスタンスをビューに追加する [self.view addSubview:wkWebView]; // URLを指定 NSURL *url = [NSURL URLWithString:@"https://www.apple.com/iphone/"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // リクエストを投げる [wkWebView loadRequest:request]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
これにリロードやバックページなどのナビゲーションを入れるためには
WKNavigationDelegate、navigationDelegateの設定が必要になります。
またiPhoneXは全画面表示では困ることがありますのでSafeAreaを考えて設計する必要が出てきます。