Ошибка при сохранении фотографии JPG/PNG в галерею в IOS 11

Я тестировал наше приложение на новом устройстве с бета-версией iOS 11 и обнаружил интересную ошибку. Мы создаем изображение, которое можно сохранить в галерее пользователя, используя UIActivityViewController (некоторый системный контроллер представления общего ресурса):

NSMutableArray *sharingItems = [NSMutableArray new];
UIImage *screenShot = [self shareViewScreenShot];
NSString *filename = @"notImportant";
NSString *path = [NSString stringWithFormat:@"%@%@.jpg", NSTemporaryDirectory(), filename];
[UIImageJPEGRepresentation(screenShot, 1.0) writeToFile:path atomically:YES];
NSURL *pathUrl = [NSURL fileURLWithPath:path];
[sharingItems addObject:pathUrl];

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];

поделиться диалогом

Это работает нормально, открывая диалоговое окно, пока пользователь не нажмет "Сохранить изображение". Тогда я получил сообщение об ошибке не поддерживая этот формат изображения

2017-07-19 10:51:54.292881+0200 appName[6632:766119] Видео /private/var/mobile/Containers/Data/Application/29B8C33B-9247-45FE-B51F-A35A035019A9/tmp/notImportant.jpg не может быть сохранено в альбом сохраненных фотографий: Ошибка домена = код AVFoundationErrorDomain =-11828 "Nie można otworzyć" UserInfo={NSUnderlyingError=0x1c08558d0 {Ошибка домена = код NSOSStatusErrorDomain =-12847 "(null)"}, многопользовательская среда, NSURL=file:///private/var/mobile/Containers/Data/Application/29B8C33B-9247-45FE-B51F-A35A035019A9/tmp/notImportant.jpg, NSLocalizedDescription=Nie można otworzyć}

То же самое происходит, когда я использую png/UIImagePNGRepresentation. Итак, вопросы:

  1. Поддерживаются ли png/jpg в iOS 11?

  2. Должен ли я использовать / и как HEIF (новый формат изображения Apple) для устройств с версией ОС>= 11?

2 ответа

iOS обрабатывает изображение как видео? Является ли это ошибкой на iOS или отсутствует какое-то разрешение.

Решение:

Добавьте разрешения, отсутствующие в файле Info.plist:

<key>NSPhotoLibraryUsageDescription</key>

для iOS 11+

<key>NSPhotoLibraryAddUsageDescription</key>

<string>Application needs to access photos</string>

Теперь действие «Сохранить изображение» работает нормально.

Код NSOSStatusErrorDomain означает, что размер данных свойства был неверным.

OSStatus - это тип, обычно используемый для кодов ошибок в OS X и iOS. Если величина кода меньше 1 миллиона, то этот код, вероятно, указан в MacErrors.h в среде CarbonCore. В противном случае это, вероятно, четырехзначный код, указанный в том же заголовке, что и функция, которая его вернула. Вы можете найти заголовок функции, щелкнув ее по команде в XCode. Коды, скорее всего, будут перечислены в верхней части, сгруппированы вместе. Чтобы преобразовать число в код, используйте приложение "Калькулятор" в представлении "Разработчик", чтобы преобразовать его в шестнадцатеричное и преобразовать каждый байт в символ.

Другие вопросы по тегам