Railsからはじめるプログラミング日記

駆け出しプログラマー(主にRuby on Rails)の業務で役立ったコードをメモしていくブログです。自分だけでなく誰かの役に立てれば本望です。

【iOS】railsで作ったwebアプリをスマホのネイティブアプリのように見せる

railsで作ったアプリをスマホアプリ化したいという仕事があったので手順をメモします。

ざっくり言うとwebView設置してデフォルトのURLをrailsアプリのものにするだけです。

iOS編です!

Android編はコチラ↓ oe526.hatenablog.com

プロジェクトを作成する

xcodeを立ち上げ、Projectを作成します。 ※このときのバージョンは10.2.1です

webViewを表示するだけなのでsingle view appを選択。 f:id:oe526:20190418133358p:plain

その後、アプリの必要情報を入力。 f:id:oe526:20190418133903p:plain

ストーリーボードにパーツを設置

設定が終わったら必要なパーツを配置していきます。

Main.storyboardを開いて…

Webkit Viewを選択し、画面中央に配置。

次にToolbarを選択肢、画面下部に設置。

Bar button itemをあと2つ追加します。

そして、2個目のItemと3個目のItemの間にFlexible space barを設置します。

f:id:oe526:20190418135535p:plain

制約を設定

パーツの配置が終わったので、制約をつけてパーツを整えていきます。

webViewは4方向すべて0に(下はToolbarを基準)。

Toolbarも4方向を0に(上はwebViewを基準)。

f:id:oe526:20190418142101p:plain

パーツとViewControllerを紐づけ

パーツを設置して制約をつけたら、ViewControllerとの紐づけです。

アシスタントエディターを立ち上げて、各パーツをcontrolを押しながらドラッグアンドドロップします。 webViewと各itemの4点をOutletで接続しましょう。

WKWebViewの箇所で下の画像のようにエラーになると思うので、import UIKitの下に「import WebKit」を追記します。

f:id:oe526:20190418145440p:plain

また、Toolbarのitem3つはActionも登録していきます。

itemの処理も入れるとこんな感じになります。

【ViewController.swift】

import UIKit
import WebKit

class ViewController: UIViewController {

    @IBOutlet weak var browserWebView: WKWebView!
    @IBOutlet weak var backButton: UIBarButtonItem!
    @IBOutlet weak var forwardButton: UIBarButtonItem!
    @IBOutlet weak var reloadButton: UIBarButtonItem!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func goBack(_ sender: Any) {
        self.browserWebView.goBack()
    }
    @IBAction func goForward(_ sender: Any) {
        self.browserWebView.goForward()
    }
    @IBAction func reload(_ sender: Any) {
        self.browserWebView.reload()
    }
}

WebKit.frameworkの追加

ここまで作ってビルドしてみると…

AppDelegateでエラーが出ますね。 f:id:oe526:20190418145446p:plain

これは、WebKit.frameworkを読み込んでやると解消します。

アプリ名→TARGETSのアプリ名→General→Linked Frameworks and Librariesから設定します。 f:id:oe526:20190418145654p:plain

これでビルドできます。

ViewControllerに処理を記載

viewDidLoad()の中にデフォルトURLを設定するコードを記述します。

【VIewController.swift】

import UIKit
import WebKit

class ViewController: UIViewController {

    @IBOutlet weak var browserWebView: WKWebView!
    @IBOutlet weak var backButton: UIBarButtonItem!
    @IBOutlet weak var forwardButton: UIBarButtonItem!
    @IBOutlet weak var reloadButton: UIBarButtonItem!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        // デフォルトのURLを指定
        let urlString = "http://192.168.10.176:7000/"

        // URLの読み込み
        let urlRequest = URLRequest(url: URL(string: urlString)!)

        // 上で読み込んだURLをwebViewで表示
        self.browserWebView.load(urlRequest)
    }

    @IBAction func goBack(_ sender: Any) {
        self.browserWebView.goBack()
    }
    @IBAction func goForward(_ sender: Any) {
        self.browserWebView.goForward()
    }
    @IBAction func reload(_ sender: Any) {
        self.browserWebView.reload()
    }
}

※ローカルのrailsアプリを読み込む場合は、「rails s -b 0.0.0.0」とやってrailsサーバーを立ち上げると読み込めます(同一のネットワーク上にある場合)

動作確認

ビルドしてスマホの画面でrailsアプリが表示されればOKです。

筆者のオススメ技術書