После обновления моего приложения Swift для Swift 2.0/Xcode 7/iOS 9 все работает отлично, за исключением получения видео от UIImagePickerController
. Все разрешения для камеры и библиотеки. Я могу добраться до обоих и записать новое видео или выбрать существующее видео из библиотеки. Однако, когда вызывается метод делегата imagePickerController:didFinishPickingMediaWithInfo
, NSFileManager
сообщает мне, что на UIImagePickerControllerMediaURL
нет файла. Это верно как до, так и после звонка dismissViewControllerAnimated
на UIImagePickerController
.Нет файла в UIImagePickerControllerMediaURL после обновления до Xcode 7
Он работал безупречно раньше и не было никаких существенных изменений кода для размещения обновлений. Я не обнаружил никаких других подобных проблем, сообщенных в Интернете, поэтому я полагаю, что я, должно быть, прикрутил что-то вроде прав доступа к папке, но я не могу понять, что. Я подумал, что, возможно, использование NSAppTransportSecurity
имеет какое-то отношение к нему, поскольку оно относится к URL-адресам file:///
, но проблема сохраняется в iOS 7, 8 и 9 независимо от того, присутствует ли этот словарь в моем info.plist.
Если кто-нибудь может дать мне несколько советов, чтобы посмотреть, я бы очень признателен. Я пробовал это на iPhones 6, 5s, & 4 с таким же результатом. Я помню, как я общался с «kUTTypeMovie» во время обновлений Swift 2. «[KUTTypeMovie as String]» ниже - это единственное, что я обнаружил, что Xcode согласился бы. Это может быть слабым моментом, но я сомневаюсь, так как он работает так, как ожидалось. Единственная причина, по которой я упоминаю, что если вы не запрашиваете тип, приложение не имеет разрешения на его получение.
Дополнительная информация
Я могу использовать UIImagePickerController, чтобы получить изображения с камеры/библиотеки в обычном режиме. По прихоти, я подумал, что, возможно, мне удастся обойти эту проблему, просто захватив исходное видео и сжимая его самостоятельно, но NSFileManager сообщает мне, что в UIImagePickerControllerReferenceURL нет файла. Я не знаю, как это возможно, если моему приложению не будет отказано в доступе.
- Войти с помощью кода ниже: НЕТ файл по адресу: активов-библиотеки: //asset/asset.MOV ID = 22A4CFF1-BBC0-4084-990D-B217908F0616 & внутр = MOV
- Это настолько странно, что я подал отчет об ошибке с Apple.
Соответствующий код здесь:
@IBAction func actionTakeVideo(sender: AnyObject) {
if videoPickerController == nil {
videoPickerController = UIImagePickerController()
videoPickerController.delegate = self
videoPickerController.mediaTypes = [kUTTypeMovie as String]
videoPickerController.videoMaximumDuration = NSTimeInterval(maxVideoDuration-1)
videoPickerController.allowsEditing = true
videoPickerController.videoQuality = UIImagePickerControllerQualityType.TypeHigh
}
...
// From Library
let status:ALAuthorizationStatus = ALAssetsLibrary.authorizationStatus()
if status != ALAuthorizationStatus.Authorized{
print("Library not authorized: status != ALAuthorizationStatus.Authorized")
} else {
self.videoPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
self.presentViewController(self.videoPickerController, animated: true, completion: nil)
}
...
//From Camera
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) {
self.videoPickerController.sourceType = UIImagePickerControllerSourceType.Camera
self.videoPickerController.cameraDevice = UIImagePickerControllerCameraDevice.Front
self.presentViewController(self.videoPickerController, animated: true, completion: nil)
}
...
//Delegate
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let manager = NSFileManager.defaultManager();
let videoURL = info[UIImagePickerControllerMediaURL] as! NSURL
if manager.fileExistsAtPath(videoURL.absoluteString) {
print("THERE IS a file at: \(videoURL.absoluteString)")
} else {
print("THERE IS NOT a file at: \(videoURL.absoluteString)") // ALWAYS LANDS HERE.
}
}
UIImagePickerControllerMediaURL как, файл: ///private/var/mobile/Containers/Data/Application/6754830D-ER98-31OL-GU34-78067GD908PI/tmp/trim.578E437C-EEBC-4BC5-AD5C-C351BD0822B2. MOV
Какая ошибка ar вы получаете? –
Ошибка не возникает. Единственное доказательство проблемы - когда я пытаюсь получить доступ к видеофайлу - там ничего нет. Если есть уведомления, которые я могу заметить, чтобы поймать ошибки внутри внутреннего процесса сжатия или переноса файлов UIImagePickerController или его базовых компонентов, я не знаю о них. –
Вы когда-нибудь узнавали, почему это так? Похоже, что в iOS 9 SDK ключ UIImagePickerControllerMediaURL больше нет –