当在Xcode中停止应用程序时自动关闭iOS模拟器

4

在Xcode中停止应用程序时,是否有可能使iOS模拟器关闭/退出? 我没有在Xcode或模拟器中找到相应的设置。 如果存在这样的设置,它将有助于加快开发进程。


4
它将如何加快开发流程?模拟器每次运行都需要重新启动,这会使其变得更慢...对吗? - bschultz
2
我也想知道这个如何“加速”开发过程。 - tallybear
如果模拟器在手动停止应用程序时关闭,我就不必每次都自己操作了。你是说即使应用程序停止了,让模拟器继续运行也可以吗? - Matthew Walk
没问题,让模拟器保持运行状态就可以了。 - rob mayoff
6个回答

3

当您的构建停止时,要关闭模拟器,您需要编译一个可执行文件,并包含以下内容。

#!/bin/sh
osascript -e 'tell app "iPhone Simulator" to quit'

请保存这个文件,然后在Xcode首选项的"行为"部分中,将您的脚本文件添加到"运行完成"部分的"运行"部分。希望这对您有用,但是这种方法似乎有点不稳定,而且很遗憾这是我能想到的最好的方法!祝你好运!enter image description here 可惜您并没有制作OS X应用程序,否则这样做会非常容易。虽然这部分不重要,但谁知道呢,您将来可能会用到它!
- (IBAction)KillSim:(id)sender {

    NSLog (@"Sim Kill Begin");


    NSDictionary* errorDict;
    NSAppleEventDescriptor* returnDescriptor = NULL;

    NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource:
                                   @"tell application \"iPhone Simulator\" to quit"];

    returnDescriptor = [scriptObject executeAndReturnError: &errorDict];
    [scriptObject release];

    if (returnDescriptor != NULL)
        {
            // successful execution
        if (kAENullEvent != [returnDescriptor descriptorType])
            {
                // script returned an AppleScript result
            if (cAEList == [returnDescriptor descriptorType])
                {
                    // result is a list of other descriptors
                }
            else
                {
                    // coerce the result to the appropriate ObjC type
                }
            } 
        }
    else
        {
            // no script result, handle error here
        }

    NSLog (@"Sim Killed End");


}

2
在Xcode 12.3中,只需创建simulator.sh(Shell脚本),然后填写以下代码:
  1. #!/bin/sh
  2. osascript -e 'tell app "Simulator" to quit'
之后,打开XCode > 首选项 > 行为,并将其设置为您的目标文件。

XCode首选项图像


0
您可以通过将以下内容添加到TemplateInfo.plist文件,向新项目(通过Xcode项目模板)添加“运行脚本”构建阶段;

<key>Targets</key>
<array>
<dict>
    <key>BuildPhases</key>
    <array>
        <dict>
            <key>Class</key>
            <string>ShellScript</string>
            <key>ShellPath</key>
            <string>/bin/sh</string>
            <key>ShellScript</key>
            <string>osascript -e 'tell app "iPhone Simulator" to quit'</string>
        </dict>
    </array>
</dict>

或者,您可以将这个“运行脚本”添加到您的构建阶段;

osascript -e 'tell app "iPhone Simulator" to quit'

如果您有兴趣,可以添加另一个脚本来自动增加您的构建号,例如:

<key>Targets</key>
<array>
<dict>
    <key>BuildPhases</key>
    <array>
        <dict>
            <key>Class</key>
            <string>ShellScript</string>
            <key>ShellPath</key>
            <string>/bin/sh</string>
            <key>ShellScript</key>
            <string>
                buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
                buildNumber=`echo $buildNumber +1|bc`
                /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
            </string>
        </dict>
        <dict>
            <key>Class</key>
            <string>ShellScript</string>
            <key>ShellPath</key>
            <string>/bin/sh</string>
            <key>ShellScript</key>
            <string>osascript -e 'tell app "iPhone Simulator" to quit'</string>
        </dict>
    </array>
</dict>

如果Xcode默认设置中有这些简单的辅助工具,那就太好了,但至少我们可以手动添加它们。


0

我在xCode 5.1中遇到了同样的问题,重新启动我的Mac解决了它。

至于“为什么这会加速开发”,在我的情况下,Xcode不会让我再次运行,直到我退出模拟器,这很繁琐。


0

我不明白它如何加快开发时间,但是当使用模拟器时,如果你想完成操作,只需按下 cmd+q 键,它将退出模拟器并自动停止在 Xcode 中。


1
当iOS模拟器正在运行时,我按下cmd+q键,它会退出模拟器,但不会停止Xcode中正在运行的程序。 - Matthew Walk
它应该这样做;它告诉Springboard停止运行应用程序。 - dgund

0

你可以在Xcode中停止调试会话并重新启动它,甚至只需再次按下cmd-r,新版本就可以在模拟器中正常运行。无需退出并重新启动模拟器。


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