如何在iOS模拟器中获取虚假联系人?

22

我该如何在iOS模拟器中获取虚假联系人?是否有我可以使用的shell脚本或编辑器来添加我的联系人?

编辑:我使用React Native,所以我不能只是在其中添加一些Swift项目 - 是否有一种命令行工具或将iOS模拟器连接到我的Mac上的联系人应用程序的方法?


最快的解决方案是在此处下载VCF文件:https://blog.benjamincharity.com/seed-ios-simulator-with-contacts-for-testing/ - marcelosalloum
4个回答

40

您可以下载此生成的VCF文件,然后将其拖放到模拟器中以导入(1000)个虚假联系人。我使用Mockaroo创建了这些测试数据。

这是使用一个小的Node.js脚本创建的,它将CSV转换为一个单一的VCF文件 - 您可以将其拖放到iOS模拟器中。这是导入联系人的最简单方法,无需编写代码或安装GitHub上的应用程序(正如其他答案所暗示的那样)。此CSV解析器假定您在文件顶部有三列(名字、姓氏和电话号码)。如果您想添加更多列/变量以进行导入,请根据vCard规范修改您的CSV和下面的解析器。

将下面的脚本保存为 "mock.js",并使用 node mock 运行它(这里是 GitHub gist of it)。假设以下脚本和您的 CSV 文件(例如 "MOCK_DATA.csv")位于同一目录中。运行此脚本的输出将是一个名为 "vcards.vcf" 的文件。

const fs = require('fs');
const csv = fs.readFileSync('./MOCK_DATA.csv', 'utf8');
const records = csv.split('\n').slice(1);
const VCARDS = [];
records.forEach(function(record, i) {
  const data = record.split(',');
  const VCARD = [
    'BEGIN:VCARD',
    'VERSION:4.0',
    `N:${data[1]};${data[0]};;;`,
    `FN:${data[0]} ${data[1]}`,
    `TEL;type=HOME:${data[2]}`,
    'END:VCARD'
  ].join('\n');
  VCARDS.push(VCARD);
});
fs.writeFileSync(`./vcards.vcf`, VCARDS.join('\n'));

1
谢谢。然而,如果我想使用“虚假联系人”来自动化测试我的应用程序,我不能依赖模拟器的“拖放VCF”UI功能。当模拟器处于活动状态时,是否有编程方式可以实现这一点?或者在模拟器的“文件系统”文件夹中放置VCF文件的特殊位置,以便模拟器在重新启动时自动导入它? - Motti Shneor
1
谢谢,这个问题是因为iPhone模拟器11中每个联系人的VCF卡未定义。这个解决方案可能已经过时了。 - Alain Goldman

4

如果您正在寻找一种编程的方法来完成这样的事情,simctl是一个不错的工具 -

/usr/bin/xcrun simctl addmedia booted ~/path/to/contact.vcf

NSHipster有一篇很好的文章:https://nshipster.com/simctl/

我忽略了一个重要的事情,那就是必须在编程交互之前“启动”模拟器。

我主要是为了能够使用fastlane进行截屏,所以我在该流程开始时运行此bash脚本。

它会 1.列出所有iOS 13.4设备 2.grep UUIDs并且 3.循环遍历每个模拟器以启动它、添加vcf文件,并关闭它

虽然需要几分钟才能运行完,但对我来说比打开所有模拟器并拖动vcf文件要方便。我也清除了模拟器数据,因为这里没有去重。

#!/bin/bash
xcrun simctl list devices 'iOS 13.4' \
| grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})" \
| while read line ; do 
  xcrun simctl boot $line
  /usr/bin/xcrun simctl addmedia booted PathTo.vcf
  xcrun simctl shutdown $line
done

这是最好的答案。 - Jacob Relkin

2

0

我在寻找相同的解决方案时发现了这个。这是我最终采取的做法:

for i in {0..100}
do
    echo "BEGIN:VCARD\n
    VERSION:4.0\n
    PRODID:-//BBros.us llc//bvCard.com//EN\n
    N:User"$i";TEst;;;\n
    FN:TEst User"$i"\n
    EMAIL:test.user"$i"@domain.com\n
    ORG:Great Business\n
    END:VCARD" > "File$(printf "%03d" "$i").vcf"
done

在终端中,我切换到一个测试文件夹,并在其中运行了这个脚本。它创建了VCard文件,然后我将它们拖到正在运行的模拟器窗口上并将它们放在模拟器上。这导致模拟器打开联系人并导入它们。
希望这可以帮助您。 * 更新 * 所以一旦我更新了Xcode,现在我只能一次导入一个联系人,这并不理想。这让我想到了另一个解决方案:

https://github.com/cristianbica/CBSimulatorSeed-Swift

这是一个快速应用程序,您可以在模拟器中构建和运行,为您提供许多联系人。


1
GitHub仓库已经过时,不能再使用了。 - The iOSDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接