前提・実現したいこと
iOS11〜12のアプリを作成しています。
KeynoteのファイルをAirDropや共有でiOSアプリにインポートしたいです。
Info.plistのDocument Typesを設定し、インポートできる状態にしているはずですが、特定のKeynoteのファイルに対しては、"Permission denied"となってしまいます。
発生している問題・エラーメッセージ
インポートできるファイルであれば、NSItemProvider.loadDataRepresentationで取得できていますが、インポートできないファイルの場合は"Permission denied"となってしまいます。
iOS標準のファイルアプリや、Googleドライブなどでは正常にインポートできているファイルです。
Error Domain=NSItemProviderErrorDomain Code=-1000 "Cannot load representation of type com.apple.iwork.keynote.sffkey" UserInfo={NSLocalizedDescription=Cannot load representation of type com.apple.iwork.keynote.sffkey, NSUnderlyingError=0x15bd71570 {Error Domain=NSCocoaErrorDomain Code=257 "The file “Template.key” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/private/var/mobile/Containers/Data/Application/EAAC0E7F-5FA2-4C6D-82A3-1A5F782A4D4C/Documents/Inbox/Template-1.key, NSUnderlyingError=0x15be97f10 {Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied"}}}}
該当のソースコード
swift
1 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { 2 if let provider = NSItemProvider(contentsOf: url) { 3 provider.loadDataRepresentation(forTypeIdentifier: "com.apple.iwork.keynote.sffkey") { (data, error) in 4 if let data = data { 5 print("Data : (data)") 6 } 7 if let error = error { 8 print("Data ERROR : (error)") 9 } 10 } 11 } 12 return true 13 } 14
試したこと
ディレクトリ構成を閲覧してみたところ、正常にインポートできるファイルの場合はKeynoteのファイルがあることを確認できますが、インポートできないファイルの場合はKeynoteのプレビュー画像などが含まれたディレクトリがあるだけで、Keynoteのファイルそのものが存在していないことを確認しています。
補足情報(FW/ツールのバージョンなど)
Xcode 10.1
あなたの回答
tips
プレビュー