Ошибка __NSCFLocalDownloadFile ошибка 2 при создании временного файла

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

@synchronized (session)
{
    [[session downloadTaskWithURL:attachmentURL
                completionHandler:^(NSURL *temporaryFileLocation, NSURLResponse *response, NSError *error) {
                    if (error != nil) {
                        NSLog(@"error.localizedDescription %@", error.localizedDescription);
                    } else {
                        NSFileManager *fileManager = [NSFileManager defaultManager];
                        NSURL *localURL = [NSURL fileURLWithPath:[temporaryFileLocation.path stringByAppendingString:fileExt]];
                        [fileManager moveItemAtURL:temporaryFileLocation toURL:localURL error:&error];

                        NSError *attachmentError = nil;
                        attachment = [UNNotificationAttachment attachmentWithIdentifier:@"" URL:localURL options:nil error:&attachmentError];
                        if (attachmentError) {
                            NSLog(@"attachmentError.localizedDescription %@", attachmentError.localizedDescription);
                        }
                    }
                    completionHandler(attachment);
                }] resume];
}

Я использую FCM для push-уведомлений.

{
"to": "ffHjl2CblrI...",
"data": {
    "message": "Offer!",
    "image": "https://media.giphy.com/media/l4lR0Q5u91kTNJPsA/giphy.gif",
    "url": custom url,
    "mediaType": "gif",
    "type": "notification type"
},
"notification": {
    "body": "Body",
    "sound": "default",
    "title": "Title"
},
"content_available": true,
"mutable_content": true
}

Это мой полезный контент.

Я использую код NotificationExtension выше, который я использую для загрузки данных из push-уведомления.

Я получил успешный ответ от сертификата разработчика. Если я проверю с производственным сертификатом (обновление с предыдущим), я получаю такую ​​​​ошибку

__NSCFLocalDownloadFile: error 2 creating temp file: /private/var/mobile/Containers/Data/PluginKitPlugin/7D6B57B4-DC4D-4F3E-8113-C8469BA66BBB/tmp/CFNetworkDownload_NQQfGi.tmp

Если я удалю приложение и снова запущу его, оно будет работать. Но если я обновлю версию с новым IPA, изображение не будет отображаться в уведомлении.

Чего мне не хватает? Это проблема с сертификатом? Проблема с разрешением приложения?

Я использую отдельный идентификатор приложения (без конфигурации push-уведомлений) для UNNotificationServiceExtension.

Обновить

Также проверил с помощью APNS, что тоже не работает.

Еще немного кода и объяснений по APNS и полезному контенту.

  1. Уведомление Richmedia не работает в производственном сертификате

  2. Расширенное push-уведомление не работает должным образом после обновления IPA (тот же IPA с перезаписью)


person Mathi Arasan    schedule 02.03.2017    source источник


Ответы (1)


Я столкнулся с этой ошибкой, которая принадлежит PESIXErrorDomain, и я почти уверен, что это ошибка iOS, вероятно, появившаяся в iOS 10 вместе с другие ошибки.

Обходной путь, который я реализовал, состоит в том, чтобы аннулировать текущий сеанс, начать новый сеанс и запустить новую задачу загрузки с новым сеансом с полученными данными возобновления.

person Mousavian    schedule 24.03.2017
comment
Но это работа для сертификата разработки, а также для сертификата магазина приложений (с использованием testflight). - person Mathi Arasan; 10.04.2017
comment
Я не знаю, это ограничено тестовыми сборками или нет. - person Mousavian; 10.04.2017