SSブログ

SwiftUIでSFSafariViewControllerを表示してみた。 [プログラミング]

前回、Xcode11.5でSwiftUIのプロジェクトを作って、UIViewControllerなViewController.swiftがないことで、今までの方法が使えないじゃないかと思っていました。というかViewController.swiftがあった時も大してプログラミングしていなかったんだけど、それだけにいっぱい情報がある以前の状態の方法論でできた方がいい気はしていました。何にしてもSFSafariViewControllerが動いているところを見たことがないので、やらないと始まらないという気になっていました。

というか、いきなりSwiftUIの流儀でほぼスクラッチでやるってのはしんどすぎるし、AppleのSwiftUIのチュートリアルを見ていったんだけど、本当に新しい方法でやってくれっていうところしか出てこなかったので、自分がやりたいというところまで辿り着くにはしんどすぎると思ったのでした。

https://developer.apple.com/tutorials/swiftui




そんで今までのやり方ができないかなと、ちょっと頑張ってみたらできました。そこまで面倒じゃない。だけど、そんなに融通が効くものでもないかもしれない。というかSwiftUIではMVCみたいなやり方じゃないんかいと思っていたんですが、そのところどうなんでしょうかね。チュートリアルではViewにゴリゴリ書いていましたが。


やり方としては

・UIViewControllerを継承した、ViewController.swiftを新規に作ってあげる
・ContentView.swiftを消す
・StoryBoardで作ったViewControllerクラスを紐づける
・SceneDelegate.swiftのwindow.rootViewControllerをいじる

という感じです。


まず、SwiftUIの雛形で作られなくなったViewController.swiftを作ります。
ここにSFSafariViewControllerの処理を埋め込みます。
StoryBoardで作ったViewControllerクラスを紐づけるのも下のURLに飛んで見てください。

https://capibara1969.com/1118/

実際に作ったViewController.swiftを晒します。


元ネタは
https://i-app-tec.com/ios/web-browser.html#2
です。そのままです。


それとSwiftUI用に生成されたContentView.swiftを消します。特に後々必要になる気はしないのですが、参照を消すだけでいいです。もしかしたら参照を消さなくても下の作業時にContentViewは死んでいるので大丈夫かもしれない。でも、使わないコードを無駄にコンパイルして実行ファイルもビルドも重くする必要もないので。


最後のSceneDelegate.swiftのwindow.rootViewControllerをいじるってところですが、実際にソースを晒す方が早いですかね。

元々SwiftUIの雛形で作っているところを指定しているんですが、それを自分で作ったコントローラーにすり替えただけです。ノリでやったらなんだか上手くいきました。

当然だけど、SafariViewはScroll Viewでもあるんだよね。ただカスタマイズがほとんどできないらしいんだよね。必要なのは表示しているURLさえ取ってこれればたぶん問題ないんだけど、それくらいはできんのかなぁ。というか、もっと仕様をオープンにしてオーバーライドしてカスタマイズできるようにさせてくれればいいのにと思ったりもする。それだけに使い所が限られる感じはする。Safariに飛ばして見せればいいのではないかと思わなくはない。

動作的に最初とかページがピロピロ変わるのが気持ち悪いけど、それはどうにかなんないかな。そもそも、このやり方が本当にいいのかは怪しいところだけど。だってSwiftでiOSのアプリ組むのほぼほぼ初めてに近いし。macOSでSwiftはちょっとあるんだけど、iOSは少しクセが強いので構造的に解せないところが結構ある。


今度は画面を割ってWKWebViewでやってみようかなと思っている。そこまで行けば1/3ぐらいはできたようなもんですわ。これでいいのかはわからないけれど、とりあえず前の手段も使えそうなので、スクラッチで何か作るにしても完全にいちからやり直しということにはならなそうだ。なんか前と雛形が随分と変わったのは、OSの方のSplitViewとかのせいっぽい。

何にしてもちょっと前のサンプルファイルがビルドできなくなるとかその他色々、Apple内のソフトウェア開発者の愚かさ満載な感じだな。MSでは結構古くてもサンプルファイルくらいはビルド通っていたと思ったんだが。前からずっと言っているけど、センス一流、ハード二流、ソフト三流だよな。OS8のあたりでOSの開発が行き詰まっていたのも分かろうものだ。OSXでまともになったと思っていたけど、最近またOS周りで問題も多く出ているようだし、そう簡単に会社の気風は変わらないってことですよね。

タグ:SWIFT
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0