【Swift】ファイルアプリからDocumentsフォルダへアクセス許可する方法!

この記事からわかること

  • Swift作成したiOSアプリDocumentsフォルダデバイス標準装備の「ファイル」アプリからアクセスする方法
  • UIFileSharingEnabledキーとLSSupportsOpeningDocumentsInPlaceキー意味

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

iOS11以降からアプリ内から操作できるDocumentsフォルダがファイルアプリを通じてアクセスできるようになりました。その設定方法や操作方法をまとめていきます。

【Swift】ファイルアプリからDocumentsフォルダへアクセス許可する方法!

iOSアプリのファイルシステム

そもそもiOSアプリではアプリ内で生成したファイルなどをサンドボックス構造になっているファイルシステムの中に保存しています。サンドボックス構造になっていることで外部との繋がりが遮断され不正なアクセスを防ぐことができています。

おすすめ記事:iOSのファイルシステム:サンドボックス構造とは?

ファイルシステム

├── AppData
│ ├── Documents
│ ├── Library
│        ├── Application Support
│        ├── Caches
│        ├── Preferences
│        ├── Saved Application State
│        └── SplashBoard
│ ├── SystemData
│ └── tmp

ファイルシステムの中には役割ごとにディレクトリが分けられており、それぞれに格納するファイルもガイドラインによって定義されています。

参考文献:FileSystem Programming Guide

ですがiOS11以降からDocumentsフォルダへデバイス標準装備の「ファイル」アプリからアクセスすることができるようになりました。

ファイルアプリからDocumentsフォルダへアクセス許可する方法

公式リファレンス:Share files locally

アクセスを許可するためには「info.plist」に以下2つのキーを追加し値に「Yes」を渡します。

【Swift】ファイルアプリからDocumentsフォルダへアクセス許可する方法!

UIFileSharingEnabled

アプリがiTunesを介してファイルを共有するかどうかを指定するキー。

LSSupportsOpeningDocumentsInPlace

ファイルアプリからDocumentsのコピーではなく元のDocumentsを開くことを許可するか指定するキー。

これでファイルアプリから設定したアプリのDocumentsフォルダにアクセスできるようになりました。しかしDocumentsフォルダ内にファイルが存在しない場合は表示されないようなのでファイルを生成して確認してみます。

Documentsフォルダ内にファイルを生成して確認する

Documentsフォルダ内にファイルを生成するにはFileManagerクラスを使用します。ここでは使用方法は解説しませんので以下の記事を参考にしてください。

おすすめ記事:【Swift】FileManagerでファイルを保存!操作方法や格納場所

以下はコピペで動作しますので試しにボタンを押してファイルを生成しファイルアプリから存在するかチェックしてみてください。

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton()
        button.frame = CGRect(x: 0, y:0, width: 100 , height: 100)
        button.backgroundColor = .orange
        button.center = self.view.center
        button.addTarget(self, action: #selector(createFile), for: .touchUpInside)
        self.view.addSubview(button)
    }
    
    @objc  func createFile() {
        let fileManager = FileManager.default
        let docPath =  NSHomeDirectory() + "/Documents"
        let filePath = docPath + "/sample.txt"
        
        if !fileManager.fileExists(atPath: filePath) {
            fileManager.createFile(atPath:filePath, contents: nil, attributes: [:])
        }else{
            print("既に存在します。")
        }
    }
}

シミュレーター内の「ファイル」アプリから、「このiPhone内」>「アプリ名」>「ファイル名」を確認し以下のように生成したファイルを確認できれば成功です。

【Swift】ファイルアプリからDocumentsフォルダへアクセス許可する方法!

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index