Я создаю приложение iOS, через которое пользователи могут распечатывать файлы на своем устройстве. Из моего приложения я могу получить доступ к файлам на устройстве через DocumentPicker
, предоставляемый другими приложениями, такими как iCloud Drive, Dropbox и т. д.
Теперь я хочу добавить функциональность, с помощью которой пользователь может поделиться файлом с моим приложением через другое приложение. Я создал Action Extension
для этого. Например, если я выбираю изображение в приложении «Фотографии» и выбираю Share
, я получаю свое расширение на листе «Общий доступ», а когда я выбираю его, я также получаю URL-адрес файла. Затем я создаю zip-файл этого файла, чтобы отправить его на свой сервер. Но проблема в том, что zip-файл всегда пуст. Код, который я использую, выглядит следующим образом:
ViewDidLoad() в расширении действия
if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) {
itemProvider.loadItemForTypeIdentifier(kUTTypeImage as String, options: nil,
completionHandler: { (image, error) in
NSOperationQueue.mainQueue().addOperationWithBlock {
print("Image: \(image.debugDescription)")
//Image: Optional(file:///Users/guestUser/Library/Developer/CoreSimulator/Devices/00B81632-041E-47B1-BACD-2F15F114AA2D/data/Media/DCIM/100APPLE/IMG_0004.JPG)
print("Image class: \(image.dynamicType)")
//Image class: Optional<NSSecureCoding>
self.filePaths.append(image.debugDescription)
let zipPath = self.createZip(filePaths)
print("Zip: \(zipPath)")
}
})
}
И моя функция createZip
выглядит следующим образом:
func createZipWithFiles(filePaths: [AnyObject]) -> String {
let zipPath = createZipPath() //Creates an unique zip file name
let success = SSZipArchive.createZipFileAtPath(zipPath, withFilesAtPaths: filePaths)
if success {
return zipPath
}
else {
return "zip prepation failed"
}
}
Есть ли способ создать zip-архив с общими файлами?
SSZipArchive
возвращает ошибку? Вы уверены, что у вас есть доступ на запись кzipPath
и доступ на чтение ко всем путям вfilePaths
? - person JAL   schedule 20.04.2016zipPath
, поэтому у меня есть доступ для записи вzipPath
. И файлы вfilePaths
— это файлы изображений, поступающие из приложения «Фотографии» по умолчанию. В журналах говорится, что файл не существует в указанной позиции, но я могу увидеть файл, если я перемещаюсь по терминалу (для симулятора). - person Prerak Sola   schedule 20.04.2016image.debugDescription
— это не способ получить путь к файлу изображения. Во-первых, каков фактический типimage
в обработчике завершения? Каков результатimage.debugDescription
? - person rmaddy   schedule 22.04.2016NSSecureCoding
, а выводimage.debugDescription
что-то вродеfie:///Users/xxx/Library/Developer/CoreSimulator/Devices/---xx-xx-xx/data/Media/DCIM/100APPLE/IMG_0004.jpg
- person Prerak Sola   schedule 25.04.2016createZip()
просто создает уникальное имя файла. Таким образом, он возвращает строку типаxxx-yy-zzz.zip
. - person Prerak Sola   schedule 25.04.2016print("Image: \(image.debugDescription)")
. - person rmaddy   schedule 25.04.2016print("Image class: \(image.dynamicType)")
. - person rmaddy   schedule 25.04.2016