# 提升 iOS 开发效率！ Xcode 9 内置模拟器的9个技巧

iOS模拟器是在开发任意iOS应用程序过程中不可或缺、无法被忽视的一个部分。值得一提的是，Xcode 9的新模拟器带来了很多有用的功能，能够提升你的开发效率。对比历代模拟器的更新，这次有了很重大的改变。

所以让我们开始这篇教程的重点吧，本文会列出我在新iOS模拟器中发现的新功能（一些技巧也可以在旧的模拟器中使用）。

## 1. 在全屏模式下使用Xcode模拟器

当你使用13寸的 Mac 时，Xcode 的全屏模式是唯一救星，以前不能在全屏模式下使用Xcode模拟器，但现在开始可以使用了。 从Xcode 9 beta 3开始，这个功能将会是系统预设的，所以你无需做任何事情来启用它。

> 更新：可能某些人预设情况下是关闭此功能的，不用担心，可以随时通过 Apple Internal 选单启用此功能。如果想在新的模拟器中探索更多的秘密功能，可以启用Apple 隐藏的内部选项。

![](/files/-LAdZXivVE2QIpi2R-te)

所以，你需要在根目录中创建一个名为“AppleInternal”的空文件夹，请执行下面的命令并重新启动模拟器：

`sudo mkdir /AppleInternal`

新的选项中项目应该会显示出来 ✌️

## 2. 一次打开多个模拟器

还记得在不同的模拟器上测试应用程序的挫败感吗？在此之前，你一次只能打开一个模拟器，虽然有许多“hacks”教你如何在旧版本的Xcode中打开多个iOS模拟器。但是在Xcode 9当中，这个功能是直接可以使用的。

## 3. 缩放模拟器就像调整视窗大小一样简单

在Xcode 9之前，我们只有透过”Scale options”才能调整模拟器的大小，现在Apple终于开放调整模拟器窗口的大小。如果一次有多个模拟器打开，这个小细节的调整这是非常有用，可以帮助你有效地组织工作空间。

## 4. 记录模拟器的视频

在Xcode 9官方的”What’s new”文档中，苹果声称现在可以录制模拟器屏幕视频，即使在旧版本中，只要使用simctl也可以做到，在界面上找不到地方可以启用视频录制（除了iOS 11中的内置屏幕录制）。 要获取视频档案，请执行以下代码：

`xcrun simctl io booted recordVideo --type=mp4 <PATH TO VIDEO FILE>`

booted – 表示simctl选择当前启动的模拟器，如果你有多个已启动的模拟器，simctl将选择当前正在操作的那一个模拟器。

## 5. 使用 Finder 共享文件到模拟器

现在，模拟器有了 Finder 扩展功能，你可以直接从 Finder 窗口共享文件。 你也可以执行以下simctl命令，使用图像/视频文件进行类似操作：

`xcrun simctl addmedia booted <PATH TO MEDIA FILE>`

很高兴有这样的操作方法，但是对我而言，将文件拖放至模拟器窗口似乎快很多。

## 6. 模拟器上打开URL

这个也能使用simctl，所以你也可以在旧版本的模拟器上打开自定义的URL schemes。 拖拽 以你指定的任何URL执行以下命令：

`xcrun simctl openurl booted <URL>`

关于Apple所有URL schemes的列表，请查看文档.

## 7. 快速找到应用程序的文件夹

再来介绍一个simctl的命令，你可以使用单个命令在文件系统上获取应用程序的资料夹，只需要知道应用程序的bundle identifier并执行以下命令：

`xcrun simctl get_app_container booted <APPS BUNDLE ID>`

或者你可以使用open命令在 Finder 中更快打开目标文件夹：

`open`xcrun simctl get\_app\_container booted `-a Finder`

## 8. 使用命令行参数(Command Line Args)在模拟器中启动应用程序

使用simctl，你也可以从终端机上启动应用程序，并在其中传递一些命令列参数(甚至可以设置一些环境变量)。如果你想在应用程序中插入一些除错行为，这将非常有用。 执行下列命令可以让你完成这项任务:

`xcrun simctl launch --console booted <BUNDLE ID> <YOUR ARGUMENTS>`

你可以从CommandLine.arguments获取这些命令行参数。

## 9. 透过Bundle ID获取完整的应用程序消息

有时找出应用程序的档案或暂存数据位于文件系统上的位置很有用，如果你需要比simctl get\_app\_container更全面的资讯，simctl还有一个很好用的小工具，名为appinfo，它会以下列格式显示相关资讯：

`{ ApplicationType = User; Bundle = <PATH TO APP FILE>; BundleContainer = <PATH TO FOLDER WITH APP FILE>; CFBundleDisplayName = TestiOSApp; CFBundleExecutable = TestiOSApp; CFBundleIdentifier = "com.ahmed.app.TestiOSApp"; CFBundleName = TestiOSApp; CFBundleVersion = 1; DataContainer = <PATH TO YOUR DATA>; GroupContainers = { }; Path = <PATH TO APP FILE>; SBAppTags = ( ); }`

执行下面的命令并观察输出结果：

`xcrun simctl appinfo booted <BUNDLE ID>`

## 后记

iOS模拟器是一个非常强大的工具，只要知道所有的细节和技巧，它可以让你的开发过程加快许多，身为一个好的工程师，熟悉你的开发工具是必然的。 在Flawless中，iOS模拟器对我们来说非常重要，这个产品是一个iOS模拟器插件，允许工程师在模拟器内部检查任何设计，对于新Xcode 9和Simulator版本的推出，我无以言表，已经等不及公开版本推出！我们可以实现更多有用的功能来保持iOS应用程序的视觉层次感。 另外，如果我在本文中错过了一些重要的内容，欢迎读者可以在评论中分享想法，相信将可以让本文增添更多的实用开发技巧 。

> YouTube 视频由于被墙，没做搬运，如有需要可自行去原文查看。

翻译链接:<https://medium.com/flawless-app-stories/simulator-on-steroids-c12774ca6b>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://philm.gitbook.io/philm-ios-wiki/mei-zhou-yue-du/ti-sheng-ios-kai-fa-xiao-shuai-xcode-9-nei-zhi-mo-ni-qi-de-9-ge-ji-qiao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
