

現在は写真を撮ってimageviewに表示するに止まっています。この写真をiCloudにアップして、imageCopyにダウンロードしたいのですが、写真のアップ/ダウンの方法がわかりません。  
宜しくお願いいたします。

[code]

    //
    // AppDelegate.swift
    //
    import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
            var window: UIWindow? //ウィンドウ
    
        //アプリ起動完了時に呼ばれる
        func application(_ application: UIApplication,
            didFinishLaunchingWithOptions
            launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            return true
        }
    }
    
    
    
    コードをここに入力
    //
    // ViewController.swift
    //
    
    
    import UIKit
    
    //iCloud
    class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
        //定数
        let BTN_WRITE1 = 2 //書き込み1
        let BTN_READ1 = 3  //読み込み1
    
        //変数
        var _textField1: UITextField! //テキストフィールド1
        var _textField3: UITextField! //テキストフィールド2
    
        @IBOutlet weak var imageView: UIImageView!
    
        @IBOutlet weak var imageCopy: UIImageView!
    
        @IBAction func launchCamera(_ sender: UIBarButtonItem) {
            let camera = UIImagePickerControllerSourceType.camera
    
            if UIImagePickerController.isSourceTypeAvailable(camera) {
                let picker = UIImagePickerController()
                picker.sourceType = camera
                picker.delegate = self
                self.present(picker,animated: true)
            }
        }
    
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
            let image = info[UIImagePickerControllerOriginalImage] as! UIImage
            self.imageView.image = image
            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
            self.dismiss(animated: true)
        }
    
    
    //====================
    //UI
    //====================
        //ロード完了時に呼ばれる
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let dx: CGFloat = (UIScreen.main.bounds.size.width-320)/2
    
    
            //ドキュメントのUIの生成
            _textField1 = makeTextField(CGRect(x: dx+10, y: 140, width: 200, height: 32), text: "")
            self.view.addSubview(_textField1)
            let btnWrite1 = makeButton(CGRect(x: dx+10, y: 190, width: 190, height: 40),
                text: "ドキュメントの書き込み", tag: BTN_WRITE1)
            self.view.addSubview(btnWrite1)
            let btnRead1 = makeButton(CGRect(x: dx+210, y: 190, width: 90, height: 40),
                text: "読み込み", tag: BTN_READ1)
            self.view.addSubview(btnRead1)
        }
    
        //ボタンクリック時に呼ばれる
        func onClick(_ sender: UIButton) {
            if sender.tag == BTN_WRITE1 {
                DispatchQueue.global().async(execute: {
                    let icloudURL = self.makeICloudURL("img_test")
                    DispatchQueue.main.async(execute: {
                        if icloudURL != nil {
                            self.writeICloud1(icloudURL!)
                        } else {
                            self.showAlert("エラー", text: "iCloudのURLの取得に失敗")
                        }
                    })
                })
            } else if sender.tag == BTN_READ1 {
                DispatchQueue.global().async(execute: {
                    let icloudURL = self.makeICloudURL("img_test")
                    DispatchQueue.main.async(execute: {
                        if icloudURL != nil {
                            self.readICloud1(icloudURL!)
                        } else {
                            self.showAlert("エラー", text: "iCloudのURLの取得に失敗")
                        }
                    })
                })
            }
        }
    
        //テキストフィールドの初期化
        func makeTextField(_ frame: CGRect, text: String) -> UITextField {
            let textField = UITextField()
            textField.frame = frame
            textField.text = text
            textField.borderStyle = UITextBorderStyle.roundedRect
            textField.keyboardType = UIKeyboardType.default
            textField.returnKeyType = UIReturnKeyType.done
            textField.delegate = self
            return textField
        }
    
        //テキストボタンの初期化
        func makeButton(_ frame: CGRect, text: String, tag: Int) -> UIButton {
            let button = UIButton(type: UIButtonType.system)
            button.frame = frame
            button.setTitle(text, for: UIControlState())
            button.tag = tag
            button.addTarget(self, action: #selector(onClick(_:)),
                for: UIControlEvents.touchUpInside)
            return button
        }
    
        //アラートの表示
        func showAlert(_ title: String?, text: String?) {
            let alert = UIAlertController(title: title, message: text,
                preferredStyle: UIAlertControllerStyle.alert)
            alert.addAction(UIAlertAction(title: "OK",
                style: UIAlertActionStyle.default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }
    
    //====================
    //iCloud
    //====================
    
        //iCloudのドキュメントのURLの生成(3)
        func makeICloudURL(_ fileName: String) -> URL? {
            //iCloudのディレクトリのURLの生成
            let fileManager = FileManager.default
            let icloudURL = fileManager.url(forUbiquityContainerIdentifier: nil)
            if let docURL = icloudURL?.appendingPathComponent("Documents") {
                //ディレクトリがない時は生成
                if fileManager.fileExists(atPath: docURL.path) == false {
                    do {
                        try fileManager.createDirectory(at: docURL,
                            withIntermediateDirectories: true,
                            attributes: nil)
                    } catch _ {
                    }
                }
    
                //iCloudのドキュメントのURLを返す
                return docURL.appendingPathComponent(fileName)
            }
            return nil
        }
    
        //iCloudへのドキュメントの書き込み(4)
        func writeICloud1(_ icloudURL: URL) {
            let document = ICloudDocument(fileURL: icloudURL)
    
            document.text = _textField1.text!
            document.save(to: icloudURL,
                for: UIDocumentSaveOperation.forCreating,
                completionHandler: {(success: Bool) in
                     print("write document>\(success)")
            })
        }
    
        //iCloudからのドキュメントの読み込み(5)
        func readICloud1(_ icloudURL: URL) {
            let document = ICloudDocument(fileURL: icloudURL)
            document.open(completionHandler: {(success: Bool) in
                print("read document>\(success)")
                self._textField1.text = document.text
            })
        }
    
    //====================
    //UITextFieldDelegate
    //====================
        //改行ボタン押下時に呼ばれる
        func textFieldShouldReturn(_ sender: UITextField) -> Bool {
            //キーボードを閉じる
            self.view.endEditing(true)
            return true
        }
    }
    
    
    コードをここに入力
    //
    // ICloudDocument.swift
    //
    
    import UIKit
    
    //ドキュメント
    class ICloudDocument: UIDocument {
        var text = "" //テキスト
    
        //ドキュメント読み込み時に呼ばれる(6)
        override func load(fromContents contents: Any, ofType: String?) throws {
            self.text = (NSString(data: contents as! Data,
                                  encoding: String.Encoding.utf8.rawValue) as String?)!
        }
    
        //ドキュメント書き込み時に呼ばれる(7)
        override func contents(forType typeName: String) throws -> Any {
            if let value = self.text.data(using: String.Encoding.utf8) {
                return value
            }
            return Data()
        }
    }
    
[/code]

[![iCloudの設定](https://i.stack.imgur.com/YVN2t.png)](https://i.stack.imgur.com/YVN2t.png)

[![cameraの設定](https://i.stack.imgur.com/3zhtK.png)](https://i.stack.imgur.com/3zhtK.png)


CC BY-SA 3.0
2017-04-07T05:52:22.847
33834
2022-12-27T12:01:15.143
9173
question
swift ios xcode
あるアプリで撮った写真をiCloudにアップロード/ダウンロードしたい


WebAPIのようなものはないか？というご質問でしょうか？

当方iCloudは使用したことがないので、単なるWebCrawlの結果となりますがCloudKitというライブラリがあるようです。  
<https://developer.apple.com/reference/cloudkit>


CC BY-SA 3.0
2017-04-09T14:11:47.993
33888
2017-04-09T14:11:47.993
19716
33834
answer