如何将文件添加到 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) 之前,模拟器无法用于选取文件。您可以看到文件,但点击时没有任何反应。)
步骤如下:
- 打开模拟器上的“文件”应用程序并导航到“在我的 phone 上”文件夹。
- (仍在模拟器中)创建一个具有唯一名称的文件夹。
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,请按照以下步骤操作,
- 最小化您当前的应用程序并搜索照片应用程序,
- 在模拟器中打开照片应用程序,它看起来就像真实的一样iPhone
- 现在,只需拖放任意类型的 Image 或 File。如果它是一个
图片它将出现在照片中,否则它将打开文件应用程序
self 并会询问您在设备上保存文件的权限。
像这样,]
简单,现在就像在真实设备上一样使用它。
只需打开 Safari 并下载一些东西。
只需在模拟器上拖放即可 window。就是这样。
将文件从 Filer 拖放到模拟器上时遇到 macOS Catalina 问题(我目前在 10.15.5 上看到它)。显然,如果源文件位于 "restricted" 目录(例如下载)中,则不会传输。
将文件放入您的$HOME 目录,然后拖动它(或使用分享按钮分享到模拟器)。见线程:
https://forums.developer.apple.com/thread/126307
在您的模拟器上使用 Safari
Vist https://en.unesco.org/inclusivepolicylab/sites/default/files/dummy-pdf_2.pdf
一个虚拟的 pdf
点击中间的图标如下图
点击保存到文件就完成了
简单回答:
- 将模拟器放入主屏幕
- 将文件拖放到模拟器主屏幕上
- 如果文件与某个应用相关联,它将打开该应用,您可以使用该应用保存文件。如果未与任何应用关联,文件应用将打开,您可以选择保存“在我的 iPhone”或其他地方。
旁注:我正在开发一个具有文件关联但未保存文件的应用程序。所以我从模拟器中删除了我的应用程序,将文件复制到文件应用程序中,然后将我的应用程序恢复到模拟器中。提及以防对他人有帮助。
@Palli Kominak 给出了这个答案,但在其他答案之一的评论中留下了它。
在 Python3 的帮助下,我找到了一种简单的方法(我想所有 Mac 都应该默认安装它。
步骤如下。
- 打开您的终端应用程序
- 转到包含您的文件的目录,例如
(我需要给模拟器传输一个自签名证书)
- 运行
python3 -m http.server
启动 HTTP 服务器
- 在您的模拟器中打开 Safari,然后打开 http://localhost:8000,您应该会看到一个文件列表,例如
- 从 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
谁能告诉我如何添加文件以用作从模拟器上传的测试文件?
我将 PDF 拖到模拟器,这就是我得到的全部。无法真正点击 添加 按钮。
您可以将文件上传到您在模拟器上登录的帐户的 iCloud Drive,并通过导航到文件应用程序中的 Browse/iCloud Drive 来访问它们或文件上传对话框。
您可以浏览到 Library/Developer/CoreSimulator/Devices/Your 应用 ID/data
这基本上是您 phone 的存储空间。您可以将文件复制到您喜欢的任何位置,它会出现在您的模拟器中。
更新答案:
因为 xcode11/sdk13 将文件拖到模拟器上无论出于何种原因都不起作用。您可以使用 xcrun simctl addmedia <device> <path>
.
因此,此命令会直接将图像添加到“照片”应用中,而不会询问任何问题:
xcrun simctl addmedia booted pic.001.jpg <== booted is the current running simulator.
就我而言,我想发送根证书以允许连接到本地服务器,这不适用于 addmedia
。解决方案是强制模拟器使用 safari
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) 之前,模拟器无法用于选取文件。您可以看到文件,但点击时没有任何反应。)
步骤如下:
- 打开模拟器上的“文件”应用程序并导航到“在我的 phone 上”文件夹。
- (仍在模拟器中)创建一个具有唯一名称的文件夹。
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,请按照以下步骤操作,
- 最小化您当前的应用程序并搜索照片应用程序,
- 在模拟器中打开照片应用程序,它看起来就像真实的一样iPhone
- 现在,只需拖放任意类型的 Image 或 File。如果它是一个
图片它将出现在照片中,否则它将打开文件应用程序
self 并会询问您在设备上保存文件的权限。
像这样,]
简单,现在就像在真实设备上一样使用它。
只需打开 Safari 并下载一些东西。
只需在模拟器上拖放即可 window。就是这样。
将文件从 Filer 拖放到模拟器上时遇到 macOS Catalina 问题(我目前在 10.15.5 上看到它)。显然,如果源文件位于 "restricted" 目录(例如下载)中,则不会传输。
将文件放入您的$HOME 目录,然后拖动它(或使用分享按钮分享到模拟器)。见线程: https://forums.developer.apple.com/thread/126307
在您的模拟器上使用 Safari
Vist
https://en.unesco.org/inclusivepolicylab/sites/default/files/dummy-pdf_2.pdf
一个虚拟的 pdf点击中间的图标如下图
点击保存到文件就完成了
简单回答:
- 将模拟器放入主屏幕
- 将文件拖放到模拟器主屏幕上
- 如果文件与某个应用相关联,它将打开该应用,您可以使用该应用保存文件。如果未与任何应用关联,文件应用将打开,您可以选择保存“在我的 iPhone”或其他地方。
旁注:我正在开发一个具有文件关联但未保存文件的应用程序。所以我从模拟器中删除了我的应用程序,将文件复制到文件应用程序中,然后将我的应用程序恢复到模拟器中。提及以防对他人有帮助。
@Palli Kominak 给出了这个答案,但在其他答案之一的评论中留下了它。
在 Python3 的帮助下,我找到了一种简单的方法(我想所有 Mac 都应该默认安装它。
步骤如下。
- 打开您的终端应用程序
- 转到包含您的文件的目录,例如
(我需要给模拟器传输一个自签名证书)
- 运行
python3 -m http.server
启动 HTTP 服务器 - 在您的模拟器中打开 Safari,然后打开 http://localhost:8000,您应该会看到一个文件列表,例如
- 从 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