iOS

[Swift]AlamofireでファイルのUploadをしてみる

投稿日:

はじめに

こんばんは、suzukiです。
今更感がありますが、Alamofireを使って通信周りについてまとめさせていただきます。
最近プロジェクトの修正や追加開発が多く、Carthageでライブラリの導入を行う際に少しつまづきました、、、
備忘も兼ねてそちらも記述致します。
それではよろしくお願い致します。

CarthageでAlamofireを導入する

個人的にCarthageとCocoaPodsだとCocoaPodsの方が使用頻度が高いです。
今回は最初でも書きましたがCarthageで導入します。
Carthageについてはこちらが参考になります。

Carthageは下記コマンドで簡単に導入可能です。

CartFileの作成とライブラリのダウンロード

ターミナルから作成していきましょう。

Xcodeの設定

carthage update コマンドが完了するとCarthageディレクトリが作成されます。
Carthageディレクトリ内に今回アプリに組み込むライブラリがございます。
それでは実際にXcodeに設定してみましょう。

手順は下記の3手順です。
・Build Phases > Link Binary With Librariesに追加
・Run Script に/usr/local/bin/carthage copy-frameworksと記述
・Input Filesの項目にライブラリのディレクトリを記述する
dyld: Library not loaded: @rpath/Alamofire.framework/Versions/A/Alamofire Reason: image not found等の表示が出たらここを一度確認してみてください。以前にここのディレクトリに変な空白が入っていたせいでアーカイブだけ失敗したことがあったような、、、

手順完了後の画像です。

Alamofireとは

SwiftでHTTP通信を行う際に利用が多いライブラリです。
・リクエストの設定
・レスポンスの扱い
上記がURLSessionと比較して使いやすく下記のようにシンプルな形で記述ができます。
今回は疎通確認のためGitHubのリポジトリ検索のAPIを使っています。

AlamofireのHTTPMethod

AlamofireのHTTPMethodは省略が可能です。
設定がされていない場合はGETが設定されます。
AlamofireではHTTPMethodがEnumで定義されており、requestを作成する際に送信することが可能です。
・GET リソースの取得
・POST 子リソースの作成、リソースへのデータ追加、その他処理
・PUT リソースの更新、リソースの作成
・PATCH リソースの部分更新
・DELETE リソースの削除
・TRACE プロキシ動作の確認
・CONNECT プロキシ動作のトンネル接続への変更
・OPTIONS リソースがサポートしているメソッドの取得
上記が設定可能です。

GETに関して
先ほど通信のように特に設定を行わずrequestを作成するとGETが設定されます。
明示的に指定することも可能で、requestの作成を行う際にURLと一緒にmethodの引数に.getを渡すだけです。

その他のHTTPMethodの指定方法
Getで説明したmethodに対象のHttpMethodを設定するだけで使用可能です。
またMethodの指定だけではなくrequestの作成を行う際に
・Parameterの指定 [String:Any]型
・Headerの指定 [String:String]型
上記の指定が可能です。

※GitHubの検索APIがGETでしか使えないため、今回のURLではエラーが発生します。

ファイルのアップロード

以前の記事でAlamofireを使ってファイルをDLしてみるがあったので、今回の記事ではファイルのアップロードを行ってみます。
送信する際にはファイル以外の通信もまとめて行うことが考えられるためmultipart/form-dataで送信します。

クロージャーが二つあるため、少しわかりずらいかもしれません。
multipartFormData:でアップロードを行うファイルを追加を行い
・上記のエンコードが終了したらencodingResultでエンコード結果を受け取り
・エンコード結果が成功だったらベーシック認証を行い進捗を確認
上記の流れでプログラムを書いております。

さいごに

最後までありがとうございます。
APIのテスト環境の構築を行いもう少しテストを行いたかったのですが、本日はこちらで完了とさせていただきます。
通信については何度も通信箇所を書くのではなく、基底クラスを作成し継承等で実装することが多いかと思います。
現在の案件では基底クラスをしばらく触っていませんが、Swift3→Swift4.1の際に作りを変更予定です。
参照されている箇所が多いので、慎重に変更を加えていきたいです。

おすすめ書籍

詳解 Swift 第4版 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) よくわかるAuto Layout iOSレスポンシブデザインをマスター

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

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

CAPTCHA


関連記事

[Swift]アプリのフォアグラウンドに特定の処理を行う。

1 はじめに2 今回の目標3 画面構成4 通知の設定4.1 通知の送信4.2 通知の受信と削除-BaseController5 それぞれの画面の設定5.1 初期画面(FirstViewControll ...

【iOS14】App Groups を使用して WidgetKit にデータ共有

1 はじめに2 App Groupsの準備2.1 App Groupsの許可2.2 App Groupsの使い方3 WidgetKitにデータ共有4 さいごに5 おすすめ書籍 はじめに 今回はアプリ側 ...

【SwiftUI】ドラッグ&ドロップでアプリ間の文字列の共有

1 はじめに2 ドラッグ&ドロップの実装3 ドラッグ側の実装4 ドロップ側の実装5 さいごに6 おすすめ書籍 はじめに こんにちはsuzukiです。今回はドラッグ&ドロップを利用し ...

【Swift】XCUITestでScrollViewのテストをしてみる

1 はじめに2 XCUITestとは3 導入方法3.1 オブジェクトの配置3.2 UISCrollView3.3 ラベルとボタン4 テストのための設定4.1 ラベル5 テストコード5.1 SetUp5 ...

[Swift]カメラデバイスで使用できる解像度の中で、最大のサイズを設定する

1 はじめに2 フォーマット一覧の取得3 フォーマットを設定する4 カメラデバイスで使用できる解像度の中で、最大のサイズを設定する5 さいごに6 おすすめ書籍 はじめに iOSでカメラの映像を画面に表 ...

フォロー

blog-page_side_responsive

2018年10月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。