質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

5729閲覧

iphone実機の保存場所の確認方法

AppDvl

総合スコア58

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

2クリップ

投稿2019/06/11 10:55

カメラアプリを作っています。

撮影した写真を
アプリ内に写真を保存して呼び出そうとしていますが、実機で保存されたか、またファイルが存在するか確認したいです。

プリントアウトした保存場所

file:///var/mobile/Containers/Data/Application/6B28AC39-64FF-4E4E-BE45-19FA15297AB6/Documents/photo2.jpg

試したこと

iexplorerというアプリを落としてみましたがfile:///var/mobile/Containers...が探せませんでした。

code全文

// // MemoViewController.swift // Wood volume // // Created by MBP13 on 2019/05/09. // Copyright © 2019 Tomoyuki Ashikari. All rights reserved. // import UIKit import MapKit class MemoViewController: UIViewController ,UIImagePickerControllerDelegate,UINavigationControllerDelegate { @IBOutlet weak var saveButton: UIBarButtonItem! var memo: String?//saveボタン用 // @IBOutlet weak var map: MKMapView! @IBOutlet weak var memoTextField: UITextField! @IBOutlet weak var imageView: UIImageView! @IBAction func launchCamera(_ sender: UIButton) { let camera = UIImagePickerController.SourceType.camera //入力方法を指定し代入 if UIImagePickerController.isSourceTypeAvailable(camera){ //カメラ機能があるか確認 let picker = UIImagePickerController() //モーダルビューコントローラーの作成 picker.sourceType = camera //入力方法cameraをモーダルビューコントローラーに指定 picker.delegate = self self.present(picker,animated: true)//前に出す } } @IBOutlet weak var map: MKMapView! //写真を撮影した後の処理 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info : [UIImagePickerController.InfoKey : Any]){//写真を辞書infoに格納する let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage // キーを使って辞書infoからオリジナル画像を取り出す self.imageView.image = image // let coordinate = info[UIImagePickerController.InfoKey.mediaMetadata] as! String //メタデータ // print(coordinate) UIImageWriteToSavedPhotosAlbum(image,nil,nil,nil)//アルバムに保存 self.dismiss(animated: true)//モーダルビューを非表示に } //保存から呼び出し〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 // ①パスの生成 //UserDefaults のインスタンス生成 let userDefaults = UserDefaults.standard // ドキュメントディレクトリの「ファイルURL」(URL型)定義 var documentDirectoryFileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] // ドキュメントディレクトリの「パス」(String型)定義 let filePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] //②保存するためのパスを作成する func createLocalDataFile() { // 作成するテキストファイルの名前 let fileName = "photo(cells).jpg" // DocumentディレクトリのfileURLを取得 if documentDirectoryFileURL != nil { // ディレクトリのパスにファイル名をつなげてファイルのフルパスを作る let path = documentDirectoryFileURL.appendingPathComponent(fileName) documentDirectoryFileURL = path print("pathを作りました。pathは(documentDirectoryFileURL)") } } //画像を保存する関数の部分 func saveImage() { createLocalDataFile() //pngで保存する場合 let jpeImageData = imageView.image!.jpegData(compressionQuality: 0.5 ) do { try jpeImageData!.write(to: documentDirectoryFileURL) //②「Documents下のパス情報をUserDefaultsに保存する」 userDefaults.set(documentDirectoryFileURL, forKey: "userImage") let path = String(describing: UserDefaults.standard.url(forKey: "userImage")) print("写真は(path)に保存されました。") } catch { //エラー処理 print("エラー") } } func loadImage(){ // ③UserDefaultsの情報を参照してpath指定に使う guard let url = UserDefaults.standard.url(forKey: "userImage") else { return } // URL取得なし print("(url.absoluteString)を探しています。") if let image = UIImage(contentsOfFile: url.absoluteString) { let image = UIImageView(image: image) imageView.image = image.image imageView.contentMode = UIView.ContentMode.scaleAspectFill print("指定されたファイルが見つかりました") }else{ print("指定されたファイルが見つかりません") } } //〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜保存から呼び出し override func viewDidLoad() { super.viewDidLoad() //文字が入力されるまでsaveButtonを使わない //self.saveButton.isEnabled = false //タイトルを変える self.navigationItem.title = "Edit Memo" //値を受け取る //Optional Binding を使ってあげて、 if let memo = self.memo で memo に self.memo をセットしつつ、もし値がセットされていたら、 textField に memo を渡してあげれば OK if let memo = self.memo{ self.memoTextField.text = memo } self.updateSaveButtonState() // Do any additional setup after loading the view, typically from a nib. loadImage() } private func updateSaveButtonState(){ let memo = self.memoTextField.text ?? "" //memoがnilだったら空文字 self.saveButton.isEnabled = !memo.isEmpty //saveButtonnが有効なのはsaveButtonが空でないとき } //textField に入力された値を検出 //textField を Control + クリックすると Editing Changed //という項目があるので、これをこのあたりにドラッグしてあげてメソッドを作っていきます。 //extField の中身が変わった時の処理をこちらに書くことができます。 @IBAction func memoTextFieldChanged(_ sender: Any) { updateSaveButtonState() } @IBAction func cancel(_ sender: Any) { // self.dismiss(animated: true, completion: nil) if self.presentingViewController is UINavigationController { self.dismiss(animated: true, completion: nil) } else { self.navigationController?.popViewController(animated: true) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //saveボタンが押されたときの処理だったらsenderに入ってくるのでguardでチェック //ボタンアイテムでキャストする //saveボタンと同じか比較する //そうじゃなかったらreturnでとめる //これでセグエが巻き戻る時に値がセットされる override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let button = sender as? UIBarButtonItem, button === self.saveButton else { return } self.memo = self.memoTextField.text ?? "" saveImage() } }
yosshi4486👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下の手順でスマホ実機内のファイルが確認できます。
イメージ説明
Xcode -> Window -> Devices and Simulators でアプリを選択し、画像の通りに DownloadContainer... を行ってください。
指定した保存先に.xcappdataファイルが作られます。
そのファイルのコンテキストメニューから「パッケージの内容を表示」を実行します。
結果、AppDataをルートとしたフォルダ構造が見えるはずです。
あとは、Documents/photo2.jpg が存在するか確認してください。

投稿2019/06/11 11:22

dsuzuki

総合スコア1682

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AppDvl

2019/06/11 12:11

ご回答ありがとうございます。 ファイルは確認でました。 それは file:///var/mobile/Containers/Data/Application/6B28AC39-64FF-4E4E-BE45-19FA15297AB6/ の部分はどうなるのでしょうか? ダウンロードしてから確認するとパスが違ってくると思います。 同一のものと考えていいにでしょうか? 初歩的ですいません。
AppDvl

2019/06/13 10:12

dsuzukiさん ありがとうございます。 アドバイス頂いたとおりにやってみます。
guest

0

フルパスを辿れないことや、ダウンロードしようが結果は変わらないことがわかりました。

投稿2019/06/13 10:14

AppDvl

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問