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) ★ ★やりたい処理 ★ } }