iOS9からSFSafariViewControllerなるものが登場し、Safariそのものをアプリの中にモーダルウィンドウのように開くことができるようです。簡単に試してみます。開発環境は、Xcode7以上、実行環境はiOS9以上であることが必要です。
シンプルなアプリケーションを作成して、初期ビュー(この例では「ViewController.swift」)の中央にボタンを配置。そのボタンを押すとSafariビューが開くような感じにしてみます。
まず、「SafariServices」をインポート。
import SafariServices
ボタンを押すと、
let _url:NSURL = NSURL(string: “http://adobe.com”)!
let _brow = SFSafariViewController(URL: _url, entersReaderIfAvailable: true)
presentViewController(_brow, animated: true, completion: nil)
が実行されるようにすると、これだけでもう動作を確認できるでしょう。
そしたら、次にSafariビューを閉じたことを検知してみます。UIViewControllerの後に
, SFSafariViewControllerDelegate
をつけて継承し、presentViewControllerの手前に
_brow.delegate = self
と書いておき、
func safariViewControllerDidFinish(controller: SFSafariViewController) {
print(“close”)
}
というメソッドを用意しておくと、Safariビューの右上の「Done」を押して閉じたことを検知できます。
では、iOS8.4も対象にしたアプリの場合にどうなるかDeployment Targetを「8.4」にしてみます。
ビルドすると
当然ながらエラーが発生します。赤に白丸のエラーは、問題解決を助けてくれるので助かりますね。
修正を施して全体としては、こんなコードになりました。(少々手を加えて、if文の判定の中にSafariビュー関連を全部入れときました)
iOS8.4でプレビューしてみると、if文でOSのバージョン判定ができていますね。
以上、簡単なテストですが、GitHubにこのテストファイルをアップしておきます。
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、CakePHP、Laravel、Unity、ZBrush、Modo、Adobe Substance 3D、Adobe Firefly、Xcode、Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。