web-dev-qa-db-ja.com

コマンドラインからiOSシミュレーターをリセットするにはどうすればよいですか?

IPhoneシミュレータを何度もリセットする必要がありますが、マウスを使用せずにiPhoneシミュレータをリセットする方法が見つかりませんでした。それは小さなことですが、私はそれを行うのが本当にうんざりしており、キーボードショートカットを使用してこれを行う方法が欲しいです。

コマンドラインからリセットする方法がさらに良いので、デプロイスクリプトにリセットを組み込むことができます。

IOSやMacOSについてはあまり詳しくありません。

59
Cameron Brown

ターミナルでこれを実行するだけです:

xcrun simctl erase all

@txuluによって提案された改善は、クリーンを実行する前にシミュレータを殺すだけです:

killall "Simulator" 2> /dev/null; xcrun simctl erase all
76
Kappe

Xcode 6では、シミュレーターのフォルダーを削除しないでください!それは物事を台無しにし、それはあなたに頭痛を引き起こします。

Xcode 6には、実際にはコマンドラインからシミュレーターを制御するツールがあります。

コマンドライン設定がXcode 6に設定されていることを確認してください

xcrun simctl

Xcode 6では、各デバイスにGUID/UUIDが関連付けられています。特定のデバイスをリセットするには、GUIDが必要です。

コマンド

xcrun simctl list

設定したすべてのデバイスが表示されます。出力は次のようになります。

== Devices ==
-- iOS 7.0 --
iPhone 4s (F77DC0AE-6A6D-4D99-9936-F9DB07BBAA82) (Shutdown)
iPhone 5 (5B78FC0D-0034-4134-8B1F-19FD0EC9D581) (Shutdown)
iPhone 5s (569E5910-E32D-40E2-811F-D2E8F04EA4EF) (Shutdown)
iPad 2 (451DBBD8-A387-4E77-89BF-2B3CD45B4772) (Shutdown)
iPad Retina (2C58366B-5B60-4687-8031-6C67383D793F) (Shutdown)
iPad Air (50E03D3B-3456-4C49-85AD-60B3AFE4918B) (Shutdown)
-- iOS 7.1 --
-- iOS 8.0 --
iPhone 4s (27818821-A0BB-496E-A956-EF876FB514C2) (Shutdown)
iPhone 5 (6FBAA7E2-857C-432A-BD03-980D762DA9D2) (Shutdown)
iPhone 5s (7675C82B-DE49-45EB-A28D-1175376AEEE9) (Shutdown)
iPad 2 (836E7C89-B9D6-4CC5-86DE-B18BA8600E7B) (Shutdown)
iPad Retina (EFDD043D-2725-47DC-A3FF-C984F839A631) (Shutdown)
iPad Air (9079AD6C-E74D-4D5F-9A0F-4933498B852E) (Shutdown)
Resizable iPhone (943CFEDE-A03C-4298-93E3-40D0713652CB) (Shutdown)
Resizable iPad (DBA71CA5-6426-484B-8E9B-13FCB3B27DEB) (Shutdown)

GUIDを括弧内からコピーして、xcrun simctl erase

例えば、

xcrun simctl erase 5B78FC0D-0034-4134-8B1F-19FD0EC9D581

iOS 7.0、iPhone 5デバイスを消去します

55
Alpine

同じニーズに出くわした人のためにこれを投稿すると思いました。 redditの誰かが私にこのソリューションを提供してくれました(私はテストしましたが、うまく機能します)。今回は、3つのピリオド(奇妙な)ではなく、「設定」の後に省略記号が必要であることに注意してください。

これは、コマンドラインから起動してシミュレータをリセットできるAppleScriptです。

tell application "iPhone Simulator"
    activate
end tell

tell application "System Events"
    tell process "iPhone Simulator"
        tell menu bar 1
            tell menu bar item "iOs Simulator"
                tell menu "iOs Simulator"
                    click menu item "Reset Content and Settings…"
                end tell
            end tell
        end tell
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell

/path/to/scriptとして保存し、次を使用して呼び出します。

osascript /path/to/script
37
Cameron Brown

コピーペーストの回答-注:すべての利用可能なシミュレータの内容と設定をリセットします。

インスピレーションと知識をありがとう@Alpineコマンドラインでこれを実行すると、利用可能なすべてのシムをリセットできるはずです。これはXcode 6で機能します。

# Get the sim list with the UUIDs
OUTPUT="$(xcrun simctl list)"
# Parse out the UUIDs and saves them to file
echo $OUTPUT | awk -F "[()]" '{ for (i=2; i<NF; i+=2) print $i }' | grep '^[-A-Z0-9]*$' > output.txt
# Iterate through file and reset sim
for UUID in `awk '{ print $1 }' output.txt`
do
xcrun simctl erase $UUID
done
16
Joe Susnick

の内容を削除

~/Library/Application Support/iPhone Simulator/<sdk revision>

そして、あなたは行ってもいいです。

11
jdc

XCode 9でチェックしました。アクティブなシミュレーターをすべて閉じるには、次を実行します。

xcrun simctl shutdown all

すべてのシミュレータをリセットするには、次を実行します。

xcrun simctl erase all

次のように、閉じる/リセットするシミュレータをフィルタリングできます。

xcrun simctl shutdown F36B238F-3ED6-4E10-BB5A-0726151916FA
xcrun simctl erase F36B238F-3ED6-4E10-BB5A-0726151916FA

次のように、マシン上のすべてのアクセス可能なシミュレーター(およびそれらのGUID)を見つけます。

xcrun instruments -s

GUIDでシミュレーターを実行するには:

xcrun instruments -w F36B238F-3ED6-4E10-BB5A-0726151916FA -t Blank

起動したシミュレーターにアプリをインストールするには:

xcrun simctl install booted /path/to/your.app

起動したシミュレーターからアプリを削除するには:

xcrun simctl uninstall booted /path/to/your.app

起動したシミュレーターでアプリを起動するには:

xcrun simctl launch booted "com.app.bundleIdentifier"

「com.app.bundleIdentifier」は、Info.plistのCFBundleIdentifierです。

7
LGFox

キーボードショートカットソリューションはもはや関係がなく、残念ながら@Cameronソリューションも機能しませんでした(運良くデバッグしようとしました)

ここに私のために働くものがあります:

#!/bin/bash

# `menu_click`, by Jacob Rus, September 2006
# 
# Accepts a list of form: `{"Finder", "View", "Arrange By", "Date"}`
# Execute the specified menu item.  In this case, assuming the Finder 
# is the active application, arranging the frontmost folder by date.

osascript <<SCRIPT

on menu_click(mList)
    local appName, topMenu, r

    -- Validate our input
    if mList's length < 3 then error "Menu list is not long enough"

    -- Set these variables for clarity and brevity later on
    set {appName, topMenu} to (items 1 through 2 of mList)
    set r to (items 3 through (mList's length) of mList)

    -- This overly-long line calls the menu_recurse function with
    -- two arguments: r, and a reference to the top-level menu
    tell application "System Events" to my menu_click_recurse(r, ((process appName)'s ¬
        (menu bar 1)'s (menu bar item topMenu)'s (menu topMenu)))
end menu_click

on menu_click_recurse(mList, parentObject)
    local f, r

    -- `f` = first item, `r` = rest of items
    set f to item 1 of mList
    if mList's length > 1 then set r to (items 2 through (mList's length) of mList)

    -- either actually click the menu item, or recurse again
    tell application "System Events"
        if mList's length is 1 then
            click parentObject's menu item f
        else
            my menu_click_recurse(r, (parentObject's (menu item f)'s (menu f)))
        end if
    end tell
end menu_click_recurse

application "iPhone Simulator" activate    
menu_click({"iPhone Simulator", "iOS Simulator", "Reset Content and Settings…"})

tell application "System Events"
    tell process "iPhone Simulator"
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell

SCRIPT
4
Oded Regev

Xcodeのインストール時に、シミュレーターで「コンテンツと設定のリセット」のキーボードショートカットを常に作成します。非常に便利な時間節約。

System Preferences > Keyboard > Shortcuts > App Shortcuts > "+"

アプリケーションピッカーで[その他...]を選択して、アプリピッカーダイアログを開きます。

このダイアログでは、「パッケージの内容を表示」して.appを探索することはできないため、Go to Folderを使用する必要があります。 Cmd-Shift-G。 (最初にアプリケーションのドロップダウンを開き、Otherを選択します)

Xcodeの現在のバージョンで、次のパスに移動します。

/Applications/Xcode/Contents/Developer/Applications

Simulator.appを選択して[追加]を押します

Menu Titleには、Reset Content and Settings...と入力します

Keyboard Shortcutの場合、押します CMD-Shift-R

Reset Content and Settings

4
pkamb

「SimulatorManager」と呼ばれるこの非常に便利なツールを見つけました: http://tue-savvy.github.io これは、メニューバーウィジェット(ではなく、それが呼ばれていることを確認してください)が、その上にすべてのアプリケーションデータにすばやくアクセスできます。本当にそれなしでは生きていけない。言葉を広める!

1
Sjakelien

IOSシミュレーターのすべてのバージョンとデバイスの内容と設定をリセットするスクリプトを作成しました。メニューからデバイス名とバージョン番号を取得するため、Appleがシミュレータをリリースする新しいデバイスまたはiOSバージョンが含まれます。

手動で実行するか、ビルドスクリプトで使用するのは簡単です。ビルドの前に、アクション前実行スクリプトとして追加することをお勧めします。

これは、上記のStianのスクリプトに大きく基づいていますが、新しいiOSバージョンでは陳腐化せず、ダイアログボックスが削除されます(自動化ビルドスクリプトおよびコマンドラインからの作業に適しています)。

https://github.com/michaelpatzer/ResetAllSimulators

1
mpatzer

ターゲットシミュレーターをリセットするRakefileタスクを次に示します。 Xcode 7コマンドラインツールがxcrun simctl uninstallコマンドを破壊したため、これはXcode 7で機能します。実際の端末コマンドとその出力を確認したいので、少しカスタムrunCメソッドがあります。

desc "Resets the iPhone Simulator state"
task :reset_simulator => [] do
  deviceDestinationName = 'iPhone 6' #for efficiency since we only target one device for our unit tests
  puts "...starting simulator reset"
  runC('killall "iOS Simulator"')
  runC('killall "Simulator"')
  runC('xcrun simctl list > deviceList.txt')
  lines = File.open('deviceList.txt').readlines
  lines.each do |line|
    lineStripped = line.strip
    if (lineStripped=~/[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/)
      if (lineStripped !~ /unavailable/ && lineStripped.include?("#{deviceDestinationName} ("))
        puts "Inspecting simulator: #{lineStripped} by making sure it is shut down, then erasing it."
        needsShutdown = !lineStripped.include?('Shutdown')
        aDeviceId = lineStripped[/[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/]
        if (needsShutdown)
          runC("xcrun simctl shutdown #{aDeviceId}")
        end
        runC("xcrun simctl erase #{aDeviceId}")
        #does not work to just uninstall the app with Xcode 7, do just rely on resetting the device above
        #`xcrun simctl uninstall #{aDeviceId} com.animoto.AppServiceClientTester`
      end
    end
  end
  runC('rm deviceList.txt')
end

#Runs a command and prints out both the command that will be run and the results
def runC(command)
  puts '$ ' + command
  puts `#{command}`  
end
0
n8tr

次のpythonスクリプトを使用して、ビルドサーバー上のシミュレータをリセットします。

#!/usr/bin/env python 

import subprocess
import re
import os

def uninstall_app():
    print 'Running %s' % __file__

    # Get (maybe read from argv) your bundle identifier e.g. com.mysite.app_name
    try:
        bundle_identifier = '$' + os.environ['BUNDLE_IDENTIFIER']
    except KeyError, e:
        print 'Environment variable %s not found. ' % e
        print 'Environment: ', os.environ
        exit(1)

    print 'Uninstalling app with Bundle identifier: ', bundle_identifier

    # We call xcrun, and strip the device GUIDs from the output
    process = subprocess.Popen(['xcrun', 'simctl', 'list'], stdout=subprocess.PIPE)

    # Read first line
    line = process.stdout.readline()

    while True:

        # Assume first match inside parenthesis is what we want
        m = re.search('\((.*?)\)', line)

        if not (m is None):

            # The regex found something, 
            # group(1) will throw away the surrounding parenthesis
            device_GUID = m.group(1)

            # Brutely call uninstall on all listed devices. We know some of these will fail and output an error, but, well..            
            subprocess.call(['xcrun', 'simctl', 'uninstall', device_GUID, bundle_identifier])

        # Read next line
        line = process.stdout.readline()

        # Stop condition
        if line == '':
            break

if __== '__main__':
    uninstall_app()

アプリのバンドル識別子が環境変数として設定されていることを前提としています。

export BUNDLE_IDENTIFIER=com.example.app_name

別の方法でバンドル識別子を渡したいかもしれません。

0
andershqst

上記の回答のほとんどに基づいて、Keyboard Maestroを使用し、現在実行中のシミュレータをリセットして再起動するための小さなマクロを作成しました。リセットして再起動した後、フォーカスをXcodeに戻すので、Command+Rすぐにアプリを再実行します。これは非常に便利です。

enter image description here

Rubyスクリプトの内容は次のとおりです。

#!/usr/bin/env Ruby

list = `xcrun simctl list`.split("\n")

list.each do |line|
  if line =~ /\(Booted\)$/
    device = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[1]
    uuid = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[2]
    status = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[3]
    puts uuid
    break
  end
end
0
wrtsprt

Cameron Brownの答え に何かを追加したい。正しいバージョンがリセットされていることを確認するため(iPad、バージョン6.1など)、 ios-sim を使用してiOSシミュレーターを起動します。

version=$(echo "$DESTINATION" | egrep -o "OS=[0-9.]{3}" | cut -d '=' -f 2)
simType=$(echo "$DESTINATION" | egrep -o "name=[a-zA-Z]*" | cut -d '=' -f 2 | tr "[A-Z]" "[a-z]")

IOS_SIM_BIN=$(which ios-sim)

if [ -z $IOS_SIM_BIN ]
then
    echo "ios-sim not installed, please use 'Sudo npm install ios-sim -g'"
fi    

echo "Resetting Simulator \"$simType\", version \"$version\""

$IOS_SIM_BIN start --family $simType --sdk $version --timeout 1
osascript /path/to/reset_simulator.applescript

$DESTINATION"OS=7.0,name=iPad"

それが正しく機能するように、reset_simulator.applescriptを少し調整し、アクティベーション部分を削除しました。

tell application "iPhone Simulator"
    activate
end tell
0
asgoth

Xcrunコマンドを使用するための追加のボーナスとして、以下をリストした後にデバイスを起動できます。

xcrun simctl list

リストが表示されたら、次を実行します。

xcrun instruments -w "iPhone 5s (8.1 Simulator) [31E5EF01-084B-471B-8AC6-C1EA3167DA9E]"
0
Laser Hawk