如何将文件添加到 iOS 模拟器?

How can I add files to the iOS simulator?

谁能告诉我如何添加文件以用作从模拟器上传的测试文件?

我将 PDF 拖到模拟器,这就是我得到的全部。无法真正点击 添加 按钮。

您可以将文件上传到您在模拟器上登录的帐户的 iCloud Drive,并通过导航到文件应用程序中的 Browse/iCloud Drive 来访问它们或文件上传对话框。

您可以浏览到 Library/Developer/CoreSimulator/Devices/Your 应用 ID/data

这基本上是您 phone 的存储空间。您可以将文件复制到您喜欢的任何位置,它会出现在您的模拟器中。

更新答案:
因为 xcode11/sdk13 将文件拖到模拟器上无论出于何种原因都不起作用。您可以使用 xcrun simctl addmedia <device> <path>.

通过终端发送媒体文件(jpg、png、mov 等)

因此,此命令会直接将图像添加到“照片”应用中,而不会询问任何问题:

xcrun simctl addmedia booted pic.001.jpg <== booted is the current running simulator. 

就我而言,我想发送根证书以允许连接到本地服务器,这不适用于 addmedia。解决方案是强制模拟器使用 safari

导航到 .cer 文件的完整 macOS 本地路径
xcrun simctl openurl booted 'file:///Users/my.user/Desktop/my.cer'

事实证明,启动 Safari 并在地址栏中输入 file:///Users/my.user/Desktop/my.cer 也可以。将其用于 pdf 和其他类型。

原答案:
在 XCode 9 模拟器上,如果它是 image/video,只需 将其拖到模拟器 上即可。它将它添加到照片应用程序。其他类型的文件好像是随机打开文件浏览器,一般都是失败的。 :P

可以在此处找到最简单的解决方案:https://apple.stackexchange.com/a/299565/140768

简短摘要: 您需要一个能够 handle/store "documents" 的应用程序。正如链接 post 中所建议的,只需创建一个空的 "Document based" 应用程序并 运行 它一次。

多个步骤但有效

1) 创建一个新项目 Document Based app 并 运行 它在同一个模拟器上。

2) 现在在模拟器中打开 safari 并 google for pdf。 Select 操作 sheet 中的保存到文件选项,然后 select 您新创建的应用程序文件夹。

由于给定解决方案的 none 在 iOS 13/Xcode 11 的模拟器上对我有用,(尝试添加一个文件,从 Finder 中拖动只会给出一个错误),我找到了解决方法。

一开始这需要一些设置,但您可以直接从 Finder 免费访问实际文件夹。

当我将文件拖到模拟器时(假设没有其他应用程序处理该文件),文件应用程序会打开,但当我保存时,我收到“无效参数错误”。

解决方法:

模拟器中名为“On my phone”的文件夹名为“File Provider Storage”。目的是在Finder中找到它。

完整路径:

username/Library/Developer/CoreSimulator/Devices/device_hash_folder/data/Containers/Shared/AppGroup/hash_folder/File Provider Storage/

(注:
在当前版本 (13.1) 之前,模拟器无法用于选取文件。您可以看到文件,但点击时没有任何反应。)

步骤如下:

  1. 打开模拟器上的“文件”应用程序并导航到“在我的 phone 上”文件夹。
  2. (仍在模拟器中)创建一个具有唯一名称的文件夹。
    2a.您需要向下拖动屏幕以显示“...”按钮。按该按钮将为您提供创建新文件夹的选项。

从这里有两种方法

短篇:

(在 Finder 中)
3a.导航至:username/Library/Developer/Core Simulator/Devices.
3b.搜索您创建的文件夹。它应该在“文件提供程序存储”中。那就是“在我的phone”文件夹中。

如果由于某种原因搜索没有找到:

3a。 运行 一个应用程序并打印(从 Xcode)到 documentDirectory 的路径(使用 FileManager)。
3b.在 Finder 中打开它并导航回“Containers 文件夹”。
3c.导航到 Shared/AppGroup.
3d。您正在寻找 Shared/AppGroup/some_hashFolder/文件提供商 Storage/your_folder.
3e.查找修改日期(创建文件夹)或搜索文件夹名称。

也许我来晚了一点,但在阅读了所有复杂的答案后,这里有一个简单快捷的解决方案。由于您使用的是模拟器,并且想通过模拟器访问某些 files/images,请按照以下步骤操作,

  1. 最小化您当前的应用程序并搜索照片应用程序,

  1. 在模拟器中打开照片应用程序,它看起来就像真实的一样iPhone

  1. 现在,只需拖放任意类型的 ImageFile。如果它是一个 图片它将出现在照片中,否则它将打开文件应用程序 self 并会询问您在设备上保存文件的权限。 像这样,]

简单,现在就像在真实设备上一样使用它。

只需打开 Safari 并下载一些东西。

只需在模拟器上拖放即可 window。就是这样。

将文件从 Filer 拖放到模拟器上时遇到 macOS Catalina 问题(我目前在 10.15.5 上看到它)。显然,如果源文件位于 "restricted" 目录(例如下载)中,则不会传输。

将文件放入您的$HOME 目录,然后拖动它(或使用分享按钮分享到模拟器)。见线程: https://forums.developer.apple.com/thread/126307

  1. 在您的模拟器上使用 Safari

  2. Vist https://en.unesco.org/inclusivepolicylab/sites/default/files/dummy-pdf_2.pdf 一个虚拟的 pdf

  3. 点击中间的图标如下图

  4. 点击保存到文件就完成了

简单回答:

  1. 将模拟器放入主屏幕
  2. 将文件拖放到模拟器主屏幕上
  3. 如果文件与某个应用相关联,它将打开该应用,您可以使用该应用保存文件。如果未与任何应用关联,文件应用将打开,您可以选择保存“在我的 iPhone”或其他地方。

旁注:我正在开发一个具有文件关联但未保存文件的应用程序。所以我从模拟器中删除了我的应用程序,将文件复制到文件应用程序中,然后将我的应用程序恢复到模拟器中。提及以防对他人有帮助。

@Palli Kominak 给出了这个答案,但在其他答案之一的评论中留下了它。

Python3 的帮助下,我找到了一种简单的方法(我想所有 Mac 都应该默认安装它。

步骤如下。

  1. 打开您的终端应用程序
  2. 转到包含您的文件的目录,例如

(我需要给模拟器传输一个自签名证书)

  1. 运行 python3 -m http.server 启动 HTTP 服务器
  2. 在您的模拟器中打开 Safari,然后打开 http://localhost:8000,您应该会看到一个文件列表,例如

  1. 从 Safari 下载您需要的文件

您可以将文件放在您APP本地的/documents文件夹中。 要在您的 APP 中获取目录名称,请执行

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *fileNam = [NSString stringWithFormat:@"myImage.JPG"]; NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent: fileNam];

您还需要启用文件共享,方法是将

UIFileSharingEnabled

在info.plist

您可以将任何您喜欢的文件复制到模拟器的本地文档目录中。

在我的例子中,我想在没有任何确认对话框的情况下使用 shell 上传代理证书,所以我想出了这个:

SIM_UDID=$(xcrun simctl list devices | grep Booted | awk -F'[\(\)]' '{print }')
find ~/Library/Developer/CoreSimulator/Devices/$SIM_UDID/data/Containers/Shared/AppGroup/ -name "File\ Provider\ Storage" -exec cp path_to_some_file {} \;

第一行只是获取启动模拟器的 UDID,第二行是找到启动模拟器中的所有 File Provider Storage 目录,然后将文件复制到它们。

复制的文件应该出现在“文件”应用中。

当然如果要指定模拟器或者启动多个模拟器,可以把grep Booted改成grep <name_of_the_device>


更新

这一行可以直接将文件复制到LocalStorage,与之前的解决方案相反,没有其他目录。

SIM_UDID=$(xcrun simctl list devices | grep Booted | awk -F'[\(\)]' '{print }')
FILES_PATH=$(xcrun simctl listapps $SIM_UDID | grep LocalStorage | awk -F'"' '{print }' | sed -e "s/^file:\/\///")
cp path_to_some_file $FILES_PATH/File\ Provider\ Storage

此方法使用 xcrun simctl listapps 命令,其中 return FileProvider.LocalStorage

的 AppGroup id