【问题标题】:How to make files dynamically generated/saved by Cordova iOS APP accessible to the end user?如何使 Cordova iOS APP 动态生成/保存的文件可供最终用户访问?
【发布时间】:2020-03-06 07:33:59
【问题描述】:

我正在使用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中进入Files或Library时,找不到任何保存的文件。

更新:当我在模拟器中运行时,点击保存后,我发现文件保存在这些文件夹中:

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动态生成的文件可以通过库访问到终端用户?

【问题讨论】:

  • 杰克,你碰巧找到其他解决方案了吗?
  • @JoãoPimentelFerreira 嗨,已经很长时间了,所以我现在不太确定,根据我在下面的回答,似乎我切换到了不同的插件。也许你可以试试

标签: ios cordova cordova-ios cordova-plugin-file


【解决方案1】:

如果您在 plist 文件中将 UIFileSharingEnabledLSSupportsOpeningDocumentsInPlaceUISupportsDocumentBrowser 全部添加为“是”,则您的应用文件将对 iOS 资源管理器可见。主要来源是here

因此您可以编辑您的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>

【讨论】:

  • 太棒了!注意我必须平台删除/添加 ios 才能在 Xcode 中显示选项(app-name > Resources > app-name-Info.plist)。此外,Xcode 中的选项值默认为“否”,因此我不得不手动将它们更改为“是”。 (Xcode=12.4,Cordova=10.0.0,cordova-ios=6.2.0。)
  • 在每个条目中将 &lt;true/&gt; 更改为 &lt;string&gt;YES&lt;/string&gt; 已为我修复了它。
  • 哎呀,看来你一开始是对的。苹果用错误 ITMS-90039 拒绝了我的应用程序:“类型不匹配。Info.plist 键 UIFileSharingEnabled 的值不是该键所需的类型”我将其改回 并被接受。
  • @phatpaul 你能分享你的解决方案吗?使用“”plist 值设置为 false
  • @phatpaul 你确认现在没问题吗?
【解决方案2】:

我改为改为cordova-plugin-x-social-sharing 以保存到照片。看来,像安卓一样触碰iOS的文件系统并不容易。如果有帮助的话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2017-11-14
    • 2016-03-30
    • 1970-01-01
    • 2021-09-23
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多