Как сделать файлы, динамически сгенерированные/сохраненные Cordova iOS APP, доступными для конечного пользователя?

Я использую cordova-plugin-file для сохранения некоторого изображения данных на телефон пользователя iOS.

saveBlobAsImageFile(folderpath, filename, blob) {
  const onError = function(msg) {
    // handles error
  }

  window.resolveLocalFileSystemURL(folderpath, function(dir) {
    console.log("Access to the directory granted");
    dir.getFile(filename, { create: true }, function(file) {
      console.log("File created")
      file.createWriter(function(fileWriter) {
        fileWriter.write(blob);
        console.log("Written file")
      }, onError)
    }, onError)
  }, onError)
}

для folderpath я попробовал все эти 5 вариантов:

let folderpath = cordova.file.syncedDataDirectory;
let folderpath1 = cordova.file.documentsDirectory; 
let folderpath2 = cordova.file.dataDirectory;
let folderpath3 = cordova.file.cacheDirectory;
let folderpath4 = cordova.file.tempDirectory;

После запуска функции saveBlobAsImageFile журнал показывает успешную запись, но когда я захожу в «Файлы» или «Библиотека» в своем симуляторе/iPhone, я не могу найти ни одного сохраненного файла.

Обновление: когда я запускаю симулятор, после нажатия кнопки «Сохранить» я нашел файл, сохраненный в этих папках:

file:///Users/ngoctuan001/Library/Developer/CoreSimulator/Devices/2964FE69-A5FE-4516-B8F1-C45488DBE2B5/data/Containers/Data/Application/1EF9FF0C-903E-481F-87A0-9A1CEDA4DE5D/Library/Cloud/
file:///Users/ngoctuan001/Library/Developer/CoreSimulator/Devices/2964FE69-A5FE-4516-B8F1-C45488DBE2B5/data/Containers/Data/Application/1EF9FF0C-903E-481F-87A0-9A1CEDA4DE5D/Documents/
file:///Users/ngoctuan001/Library/Developer/CoreSimulator/Devices/2964FE69-A5FE-4516-B8F1-C45488DBE2B5/data/Containers/Data/Application/1EF9FF0C-903E-481F-87A0-9A1CEDA4DE5D/Library/NoCloud/
file:///Users/ngoctuan001/Library/Developer/CoreSimulator/Devices/2964FE69-A5FE-4516-B8F1-C45488DBE2B5/data/Containers/Data/Application/1EF9FF0C-903E-481F-87A0-9A1CEDA4DE5D/Library/Caches/

Однако, когда я захожу в файлы и библиотеку симулятора, эти изображения не найдены.

Как сделать динамически создаваемые файлы iOS Cordova APP доступными для конечного пользователя через библиотеку?


person Jake Lam    schedule 06.03.2020    source источник
comment
Джейк, ты случайно не нашел другого решения?   -  person João Pimentel Ferreira    schedule 08.03.2021
comment
@JoãoPimentelFerreira привет, это было давно, поэтому я не совсем уверен сейчас, судя по моему ответу ниже, кажется, что я переключился на другой плагин. Может быть, вы можете попробовать   -  person Jake Lam    schedule 09.03.2021
comment
Большое спасибо Джейк   -  person João Pimentel Ferreira    schedule 09.03.2021


Ответы (2)


Если вы добавите UIFileSharingEnabled, LSSupportsOpeningDocumentsInPlace, UISupportsDocumentBrowser все как YES в файл plist, файлы вашего приложения будут видны в проводнике iOS. Основной источник находится здесь.

Таким образом, вы можете редактировать свой config.xml, добавляя эти записи внутри <platform name="ios">.

<edit-config target="UIFileSharingEnabled" file="*-Info.plist" mode="merge">
  <true/>
</edit-config>
<edit-config target="LSSupportsOpeningDocumentsInPlace" file="*-Info.plist" mode="merge">
  <true/>
</edit-config>
<edit-config target="UISupportsDocumentBrowser" file="*-Info.plist" mode="merge">
  <true/>
</edit-config>
person worm69    schedule 09.03.2021
comment
Великолепно! Примечание. Мне пришлось удалить/добавить платформу ios, чтобы параметры отображались в Xcode (имя приложения > Ресурсы > имя приложения-Info.plist). Кроме того, для параметра «Значение» по умолчанию установлено значение «НЕТ» в Xcode, поэтому мне пришлось вручную изменить их на «ДА». (Xcode=12.4, Кордова=10.0.0, Cordova-ios=6.2.0.) - person phatpaul; 18.03.2021
comment
Изменение <true/> на <string>YES</string> в каждой записи исправило это для меня. - person phatpaul; 18.03.2021
comment
@phatpaul спасибо, отредактировано соответствующим образом - person João Pimentel Ferreira; 22.03.2021
comment
Ой, кажется, вы были правы в первую очередь. Apple отклонила мое приложение с ошибкой ITMS-90039: несоответствие типов. Значение для ключа UIFileSharingEnabled Info.plist не имеет требуемого типа для этого ключа. Я изменил его обратно на ‹true/›, и оно принято. - person phatpaul; 25.03.2021
comment
@phatpaul, можешь поделиться своим решением? При использовании ‹true/› значения plist устанавливаются равными false - person worm69; 26.03.2021
comment
@phatpaul, ты подтверждаешь, что сейчас все в порядке? - person João Pimentel Ferreira; 26.03.2021
comment
@ worm69 Да, это то, что я испытал сначала. Я не уверен, как я это исправил, но я могу только подтвердить, что теперь он работает. Редактор plist Xcode показывает YES, и если я открою .plist в Xcode (имя приложения › Ресурсы › имя приложения-Info.plist), щелкнув правой кнопкой мыши и выбрав Открыть как → Исходный код, он покажет значения как <истинный/>. Я попытался удалить/добавить платформу, и она снова заработала... - person phatpaul; 27.03.2021

Вместо этого я перешел на cordova-plugin-x-social-sharing, чтобы сохранить фотографии. Кажется, что не так просто коснуться файловой системы iOS, как Android. Если это поможет.

person Jake Lam    schedule 10.03.2020