From 35710f5b99a383a821be8b803e00f74580234605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Labbe=CC=81?= Date: Wed, 21 Nov 2018 17:15:28 -0300 Subject: [PATCH] Always call `startAccessingSecurityScopedResource()` Should fix #7 --- Pisth.xcworkspace/xcshareddata/xcschemes/Pisth.xcscheme | 2 +- Pisth/Info.plist | 6 +++--- .../Classes/DirectoryCollectionViewController.swift | 2 +- .../Classes/LocalDirectoryCollectionViewController.swift | 1 + ...PisthConnectionInformationViewTableViewController.swift | 7 +++++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Pisth.xcworkspace/xcshareddata/xcschemes/Pisth.xcscheme b/Pisth.xcworkspace/xcshareddata/xcschemes/Pisth.xcscheme index 04a4cde3..f4cce0e6 100644 --- a/Pisth.xcworkspace/xcshareddata/xcschemes/Pisth.xcscheme +++ b/Pisth.xcworkspace/xcshareddata/xcschemes/Pisth.xcscheme @@ -42,7 +42,7 @@ - NSPhotoLibraryUsageDescription - This app requires access to the Photo Library for saving downloaded photos. CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDocumentTypes @@ -97,7 +95,7 @@ CFBundleVersion - 3 + 5 Is Beta $(IS_BETA) LSApplicationQueriesSchemes @@ -113,6 +111,8 @@ NSFaceIDUsageDescription This app requires Face ID permission to authenticate using Face recognition. + NSPhotoLibraryUsageDescription + This app requires access to the Photo Library for saving downloaded photos. NSUserActivityTypes ch.marcela.ada.Pisth.openDirectory diff --git a/Pisth/ViewControllers/Classes/DirectoryCollectionViewController.swift b/Pisth/ViewControllers/Classes/DirectoryCollectionViewController.swift index 9c616d54..6faf3376 100644 --- a/Pisth/ViewControllers/Classes/DirectoryCollectionViewController.swift +++ b/Pisth/ViewControllers/Classes/DirectoryCollectionViewController.swift @@ -1495,7 +1495,7 @@ class DirectoryCollectionViewController: UICollectionViewController, LocalDirect func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { - if urls.count == 1 { + if urls.count == 1 && urls[0].startAccessingSecurityScopedResource() { documentPicker(controller, didPickDocumentAt: urls[0]) return } diff --git a/Pisth/ViewControllers/Classes/LocalDirectoryCollectionViewController.swift b/Pisth/ViewControllers/Classes/LocalDirectoryCollectionViewController.swift index c92d7d13..f3eff5fb 100644 --- a/Pisth/ViewControllers/Classes/LocalDirectoryCollectionViewController.swift +++ b/Pisth/ViewControllers/Classes/LocalDirectoryCollectionViewController.swift @@ -617,6 +617,7 @@ class LocalDirectoryCollectionViewController: UICollectionViewController, UIDocu func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { for url in urls { + _ = urls[0].startAccessingSecurityScopedResource() do { try FileManager.default.copyItem(atPath: url.path, toPath: directory.appendingPathComponent(url.lastPathComponent).path) reload() diff --git a/Pisth/ViewControllers/Classes/PisthConnectionInformationViewTableViewController.swift b/Pisth/ViewControllers/Classes/PisthConnectionInformationViewTableViewController.swift index 2f1cb866..5a7fcc2b 100644 --- a/Pisth/ViewControllers/Classes/PisthConnectionInformationViewTableViewController.swift +++ b/Pisth/ViewControllers/Classes/PisthConnectionInformationViewTableViewController.swift @@ -12,8 +12,8 @@ import MobileCoreServices /// `ConnectionInformationTableViewController` that can import keys pair. class PisthConnectionInformationTableViewController: ConnectionInformationTableViewController, UIDocumentPickerDelegate, Storyboard { - private let publicKeyPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeData as String], in: .open) - private let privateKeyPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeData as String], in: .open) + private let publicKeyPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeItem as String], in: .open) + private let privateKeyPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeItem as String], in: .open) override var isUsernameRequired: Bool { return false @@ -103,6 +103,9 @@ class PisthConnectionInformationTableViewController: ConnectionInformationTableV // MARK: - Document picker delegate func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + + _ = urls[0].startAccessingSecurityScopedResource() + if controller === publicKeyPicker { publicKey = (try? String(contentsOf: urls[0])) importPublicKeyBtn.setTitle(urls[0].lastPathComponent, for: .normal)