【问题标题】:Exploring iOS files in Delphi FireMonkey app在 Delphi FireMonkey 应用中探索 iOS 文件
【发布时间】:2021-01-26 20:44:03
【问题描述】:

我正在开发一个文档查看器来处理 iOS 的自定义文件类型。即使文件没有保存在应用程序的本地目录中,用户也应该能够从应用程序内部打开文档。
有什么方法可以在我的应用程序中为我的用户提供类似文件浏览器的结构?

我已经尝试过的:
我的第一个猜测是通过使用来自System.IOUtilsTPathTDirectory 创建我自己的资源管理器,并呈现给定路径中所有文件和子目录的列表。
这已经在相应的 Android 应用程序中工作了,我也让它只使用我的应用程序私有目录中的路径运行。
遗憾的是 TPath 只提供这些本地路径,我没有找到任何其他路径可以用来浏览设备上其他任何地方的文件。

阅读 Apple Developer Documentation 我还发现我的问题可以通过使用 UIDocumentPickerViewController 来解决,但它没有在 iOSAPI 中实现,是否有另一种方法可以触发 iOS 显示?

我正在使用以下版本:
Delphi 10.4 悉尼补丁 3
平台助手服务器 21.0
macOS Catalina 10.15.6
Xcode 11.7
装有 iOS 13.7 的 iPhone 7

【问题讨论】:

  • 我在 Kastri 库中有一个 UIDocumentPickerViewController 的实现:github.com/DelphiWorlds/Kastri。您将在 Demos\FilesSelector 文件夹中找到一个演示。它使用来自 Kastri 的单位,包括 Features\FilesSelector 文件夹中的单位。抱歉,目前还没有这些特定部分的文档。
  • 谢谢,这正是我需要的。

标签: ios file delphi firemonkey


【解决方案1】:

已在 IOS 上测试您的 FileSelector 项目。它工作得很好,让我选择我选择的文件。

我遇到的问题是当我尝试打开或处理所选文件时。

我已在 SelectorCompleteHandler 事件处理程序中添加了以下代码:

var
  Sourcefile,DestFile: string;

  fileman : NSFileManager;

begin
  ListBox1.Clear;
  ListBox1.Items.Add('W');
  {$IF Defined(IOS)}

     Sourcefile := FSelector.Files[I];

     fileman := TNSFileManager.create;

     Sourcefile := Sourcefile.Replace('file://','',[rfReplaceAll,rfIgnoreCase]);

     DestFile :=  IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetDocumentsPath)         
     +'New';

     fileman.copyItemAtPath(NSStr(Sourcefile),NSStr(DestFile));

它仅适用于 App 内部文件夹范围内的文档,但不适用于其外部(文档、下载等)

我对我的项目文件版本信息设置了以下权限:UIFileSharingEnabled,LSSupportsOpeningDocumentsInPlace,NSAllowArbitraryLoads

我认为这绝对是一个权限问题,但无法找到如何正确设置 Delphi 项目权限所需的信息,以便访问任何文件和任何位置,而不仅仅是我的内部应用程序文件夹。

奇怪的是我没有收到任何错误消息 copyItemAtPath 句。

问候, 阿尔多·维多利亚

【讨论】:

  • 自从 UIDocumentPickerViewController 在我的应用程序中运行以来,我遇到了完全相同的问题。虽然我同意它与权限有关,但我认为这不是您可以通过设置常规应用权限来解决的问题。 Apple 开发人员文档明确提到从 UIDocumentPickerViewController 接收到的 URL 是安全范围的:developer.apple.com/documentation/foundation/nsurl#1663809 对于应用范围之外的所有文档也是如此。
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 2018-08-04
  • 2011-11-08
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2014-05-15
相关资源
最近更新 更多