Swift ファイルアプリのファイルを自アプリで開く(iOS13以降 SceneDelegateの場合)

ファイルアプリのファイルを自アプリで開く

Info.plist設定(PDFファイルの場合)

Support Document BrowserとDocument Types

Support Document Browserがない場合、「〜で開く」ではなく「〜にコピー」になる。
アプリのInboxにコピーされたURLが渡される。

ファイルを使用する前にstartAccessingSecurityScopedResource()をコール

Example

let access = url.startAccessingSecurityScopedResource()

使用後はstopAccessingSecurityScopedResource()をコールする。
コール出来なくてもロックされる等が発生するわけではない様です。

受け渡し処理

アプリがバックグランドにあり、フォアグランドに出来る場合
UISceneDelegateのscene(_:openURLContexts:)がコールされます。
ソースファイルはSceneDelegate.swift(自作、削除、AppDelegate.swiftに切替していない場合)です。
Example

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    print(#function)
    if URLContexts.count == 1 {
        let content = URLContexts.first!
        print(content.url)
        ★
        ★やりたい処理
        ★
    }
}

アプリが未起動、バックグランドからフォアグランドに出来ない場合
UISceneDelegateのscene(_:willConnectTo:options:)がコールされます。
scene(_:openURLContexts:) はコールされません。
options内にURLが入って来ます。

嵌りました。
この記事「iphone – メソッド「scene(_:openURLContexts :)」は呼び出されません」に助けられました。

Example

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let _ = (scene as? UIWindowScene) else { return }

    if connectionOptions.urlContexts.count == 1 {
        let content = connectionOptions.urlContexts.first!
        print(content.url)
        ★
        ★やりたい処理
        ★
    }
    
}

Swift

Posted by shi-n