program tip

명령 줄에서 iOS 시뮬레이터를 어떻게 재설정 할 수 있습니까?

radiobox 2020. 12. 6. 21:24
반응형

명령 줄에서 iOS 시뮬레이터를 어떻게 재설정 할 수 있습니까?


iPhone Simulator를 많이 재설정해야하는데 마우스를 사용하지 않고는 방법을 찾지 못했습니다. 작은 일이지만 저는 정말 지겨워서 키보드 단축키를 사용하여이 작업을 수행하는 방법을 갖고 싶습니다.

명령 줄에서 재설정하는 방법이 더 좋으므로 배포 스크립트에 재설정을 빌드 할 수 있습니다.

iOS 나 MacOS에 익숙하지 않습니다.


터미널에서 실행하십시오.

xcrun simctl erase all

@txulu가 제안한 개선 사항, 청소를 ​​실행하기 전에 시뮬레이터를 종료하십시오.

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

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 장치를 지울 것입니다.


같은 요구에 처한 사람을 위해이 글을 올릴 것이라고 생각했습니다. reddit의 누군가가 나에게이 솔루션을 제공했습니다 (내가 테스트했고 훌륭하게 작동합니다). 이번에는 세 개의 마침표 (이상한)가 아니라 "설정"뒤에 줄임표가 필요합니다.

시뮬레이터를 재설정하기 위해 명령 줄에서 호출 할 수있는 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

COPY-PASTE ANSWER-참고 : 사용 가능한 모든 시뮬레이터의 내용과 설정을 재설정합니다.

영감과 지식에 대해 @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

내용 삭제

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

그리고 당신은 갈 수 있습니다.


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입니다.


키보드 바로 가기 솔루션은 더 이상 관련이 없으며 불행히도 @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

Xcode를 설치하면 시뮬레이터에서 "Reset Content and Settings"에 대한 키보드 단축키를 항상 생성합니다. 매우 유용한 시간 절약.

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

콘텐츠 및 설정 재설정


iOS 시뮬레이터의 모든 버전과 장치의 내용과 설정을 재설정하는 스크립트를 작성했습니다. 메뉴에서 장치 이름과 버전 번호를 가져 오므로 Apple에서 시뮬레이터를 출시하는 모든 새 장치 또는 iOS 버전이 포함됩니다.

수동으로 실행하거나 빌드 스크립트에서 사용하기 쉽습니다. 빌드 전에 사전 작업 실행 스크립트로 추가하는 것이 좋습니다.

위의 Stian의 스크립트를 기반으로하지만 새로운 iOS 버전에서 오래되지 않고 대화 상자를 제거합니다 (자동화 빌드 스크립트와 명령 줄에서 작업하는 데 더 적합).

https://github.com/michaelpatzer/ResetAllSimulators


"SimulatorManager"라는 매우 유용한 도구를 찾았습니다. http://tue-savvy.github.io 메뉴 모음 위젯을 사용하여 모든 시뮬레이터를 재설정합니다 (그게 호출되었는지 확실하지 않음). 모든 애플리케이션 데이터에 빠르게 액세스 할 수 있습니다. 나는 더 이상 그것 없이는 살 수 없다. 소식을 전하세요!


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

xcrun 명령 사용에 대한 추가 보너스로 다음과 같이 나열한 후 장치를 시작할 수 있습니다.

xcrun simctl list

목록이 표시되면 다음을 실행하십시오.

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

다음 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 __name__ == '__main__':
    uninstall_app()

앱의 번들 식별자가 환경 변수로 설정되어 있다고 가정합니다.

export BUNDLE_IDENTIFIER=com.example.app_name

다른 방법으로 번들 식별자를 전달하고 싶을 수도 있습니다.


위의 대부분의 답변을 바탕으로 Keyboard Maestro를 사용하고 있으며 현재 실행중인 시뮬레이터를 재설정하고 다시 시작하기 위해 약간의 매크로를 만들었습니다. 재설정하고 다시 시작한 후 포커스를 Xcode로 되돌 리므로 Command+R바로 다시 눌러 앱을 다시 실행할 수 있습니다. 매우 편리합니다.

여기에 이미지 설명 입력

루비 스크립트의 내용은 다음과 같습니다.

#!/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

다음은 대상 시뮬레이터를 재설정하는 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

타겟 이름과 시뮬레이터 앱 이름이 xCode6 / iOS8로 약간 변경된 것 같습니다. 다음은 xCode6 / iOS8 용 Cameron Brown의 osascript의 업데이트되지 않은 버전입니다.

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

나는 선물한다.

최종 iOS 시뮬레이터 재설정 스크립트 (링크)

여기에 이미지 설명 입력

Oded Regev의 코드를 기반으로 함 (Jacob Rus의 훌륭한 "menu_click"코드를 기반으로 함)

참고 URL : https://stackoverflow.com/questions/5125243/how-can-i-reset-the-ios-simulator-from-the-command-line

반응형