Swift

【Swift】シュミレーターでローカルサーバーと通信する方法

こんにちは、株式会社PlaygroundのiOSエンジニア伊原です。

今回は、タイトルの通りXcodeのシュミレーターでlocalhostを実行する方法を紹介していきます。

簡単スリーステップ
  1. サーバーの起動
  2. Alamofireのインストール
  3. リクエスト関数の呼び出し

サーバーの起動

これは使用しているサーバーによって異なるので

説明は割愛します。

Alamofireのインストール

podfileに

pod 'Alamofire'

を追加して、pod installを実行します。

リクエスト関数の呼び出し

さて、ここからが本題です。

最初に、関数の最終形態をお見せします。

func sendRequest(success: @escaping () -> Void) {
        let dic: Parameters = [
            "name1":"data1",
            "name2":"data2"
        ]
        Alamofire.request("http://localhost:8000/",
                          method: .post,
                          parameters: dic,
                          encoding: JSONEncoding.default)
            .responseJSON { response in
                switch response.result {
                case .success(let value):
                    print("VALUE:",value)
                    success()
                case .failure(let error):
                    print("RESPONSE ERROR:", error)
                }
        }
    }

 

解説していきます。

まず、2~5行目で送信するデータを辞書型で定義しています。

6行目で、Alamofireのrequest関数を呼び出します。

引数に任意のURLを渡します。

7行目で、メソッドを指定します。今回は.postを指定していますが、GETの場合は.getとします。

8行目で、先ほど定義した辞書型の変数をパラメーターに渡します。

9行目で、辞書型のパラメーターが送信時にJsonに変換されるようにします。

10~16行目で、返ってきたレスポンスによって処理をしています。

成功した場合はエスケープさせ、

エラーが返ってきた場合はデバックエリアにエラーを表示させています。

最後に

iOS9以降では、http通信がデフォルトで許可されていません。

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
 Temporary exceptions can be configured via your app’s Info.plist file.

このようなエラーが出た方は、info.plistを編集してhttp通信を許可させる必要があります。

App Transport Security Settings を追加し、

その配下に Allow Arbitrary Loads  を入れて値をYESに変更します。

これでhttpとの通信ができるようになります。

これはあくまでも応急的な処置なので、

安全性の高いhttpsに対応したAPIに切り替えることをお勧めします。

ABOUT ME
伊原 萌夏
スクール担当 兼 iOS(時々Web)エンジニア。 2019年7月に大学を一年半で辞め、大学とは別で勉強していたプログラムの世界で生きていくことを決意。翌月8月に入社。 主にSwiftのスクールを担当。
株式会社Playgroundのサービス
  • 無料・簡単・片手でホームページを作成できる自社サービス Rakwi
  • Web制作とアプリ開発を学べるオンラインプログラミング講座 Upstairs
  • 開発,DX推進支援サービス スタートアッププラン

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA