目次
1. cocoapodsをinstallして、Podfileからライブラリをinstall
2. AWSのUpload用のバケットをs3で作成
3. AppDelegate.swiftにS3のupload用のコードに貼り付け
4. SwiftからS3に画像をアップロード
5. s3で画像の確認
1. cocoapodsをinstallして、Podfileからライブラリをinstall
brewじゃなく、gemでcocoapodsをinstall。1. install CocoaPods and setup $ gem install cocoapods $ pod setup 2. プロジェクト floder へ移動 3. podfile 作成 $ pod init 4. podfile 書き直す ('AWSCognito' 'AWSS3'を付け足す) $ open Podfile # pod 'AWSCognito' 'AWSS3' をPodfileに追記 ``` # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'ResNet50prj' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # Pods for ResNet50prj pod 'AWSCognito' # ここ pod 'AWSS3' # ここ target 'ResNet50prjTests' do inherit! :search_paths # Pods for testing end target 'ResNet50prjUITests' do # Pods for testing end end ``` 5. ライブラリをinstall $ pod install ```
2. AWSのUpload用のバケットをs3で作成
AWS > Cognito > IDプールの管理 > 新しい ID プールの作成
・IDプール名 :に任意の名前を入力
・認証されていないIDのアクセスを有効にする
でプールの作成
次に詳細で「ポリシードドキュメント」を編集
S3のPutObject(必要であればGetObjectも)の許可を追加。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", ←ここを追加 "s3:GetObject", ←もしS3に保存した画像をアプリで取得したければ追加 "mobileanalytics:PutEvents", "cognito-sync:*", "cognito-identity:*" ], "Resource": [ "*" ] } ] }
「許可」をクリック
「Amazon Cognitoで作業開始」で赤枠のコードをコピー
3. AppDelegate.swiftにS3のupload用のコードに貼り付け
XocdeのAppDelegate.swiftを開き、下の作業。
・AWSCognitoをインポート
・コピーしたコードをのdidFinishLaunchingWithOptionsの中に貼り付け
import AWSCognito ... func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { FirebaseApp.configure() let credentialsProvider = **** let configuration = **** AWSServiceManager.default().defaultServiceConfiguration = configuration return true }
4. SwiftからS3に画像をアップロード
s3で「"pacifista-px3"」名前のバケットを作成。AWSS3.swift
import SwiftUI import AWSS3 func uploadData(data: Data)-> String{ var results_ = "" let transferUtility = AWSS3TransferUtility.default() // アップロードするバケット名/アップしたいディレクトリ let bucket = "pacifista-px3" // ファイル名 let key = "users.png" let contentType = "application/png" // アップロード中の処理 let expression = AWSS3TransferUtilityUploadExpression() expression.progressBlock = {(task, progress) in DispatchQueue.main.async { // アップロード中の処理をここに書く } } // アップロード後の処理 let completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock? completionHandler = { (task, error) -> Void in DispatchQueue.main.async { if let error = error { fatalError(error.localizedDescription) // 失敗 results_ = "upload falid" } else { // アップロード後の処理をここに書く results_ = "upload succeed" } } } // アップロード transferUtility.uploadData( data, bucket: bucket, key: key, contentType: contentType, expression: expression, completionHandler: completionHandler ).continueWith { (task) -> Any? in if let error = task.error as NSError? { fatalError(error.localizedDescription) results_ = "upload falid" } else { // アップロードが始まった時の処理をここに書く results_ = "upload succeed" } return nil } return results_ }
ContentView.swift
struct ContentView: View { // config @State var S3result = "" 〜〜〜〜〜〜〜 func S3Upload(uiimage:UIImage){ if let pngImage = uiimage.pngData() { S3result = uploadData(data: pngImage) } } // main var body: some View { VStack { 〜〜〜〜 Text(S3result) .padding() .font(.title) Button("Upload to S3"){ S3Upload(uiimage:captureImage!) } .frame(height: 50) .multilineTextAlignment(.center) 〜〜〜〜〜〜 } } }
uploadしてみる。
成功した。
5. s3で画像の確認
バケットにちゃんとあるのがわかる
Swiftでs3に画像をuploadできた。
参考
・【Xcode/Swift】CocoaPodsの使い方を徹底解説・SwiftからS3に画像をアップロードする方法