iPhone 시뮬레이터 정리


107

iPhone 시뮬레이터 용으로 빌드 할 때 xcode가 앱을 배포하는 디렉토리를 정리하는 간단한 방법이 있습니까? 필요한 경우 시작할 때 Documents 폴더에 복사되는 sqlite 데이터베이스가 있습니다. 문제는 스키마를 변경할 수 있지만 새 데이터베이스가 이미 존재하기 때문에 복사되지 않는다는 것입니다.

이상적으로는 내가 만들 때마다 이전 콘텐츠를 핵무기로 만들 것입니다. 이것이 가능합니까, 아니면 수동으로해야합니까?


시뮬레이터가 AppleScript를 지원합니까?
Rog

네 그렇습니다. 각 기기 및 OS 버전에 대한 모든 iOS 시뮬레이터를 반복하고 콘텐츠 및 설정을 재설정하는 AppleScript를 작성했습니다. github.com/michaelpatzer/ResetAllSimulators
mpatzer

답변:


91

시뮬레이터는 다음 위치에 앱을 설치합니다.

"$HOME/Library/Application Support/iPhone Simulator/User/Applications"

또한 다음을 확인하십시오.

"$HOME/Library/Developer/CoreSimulator/Devices"

GUID 파일 및 디렉토리는 시뮬레이터에 설치된 앱과 일치합니다.

시뮬레이터에서 모든 애플리케이션을 제거하려면 모든 파일 / 디렉토리를 수동으로 삭제하십시오.

XCode의 빌드 프로세스에 스크립트를 추가하는 방법이 있다는 것을 알고 있습니다.

또한 XCode가 각 빌드를 사용하는 GUID를 변경하는 것처럼 보이므로 (내 앱이 XCode의 빌드간에 변경되는 디렉터리) 항상 동일한 디렉터리를 삭제하려고하면 작동하지 않습니다. 한 번에 하나의 앱에서만 작업하는 경우 전체 디렉토리를 지우는 것이 옵션이 될 것입니다.


2
아래 @idStar의 답변을 확인하십시오. Lion / Xcode4에 대한 정보를 업데이트하고 작업을 자동화하는 데 도움이되는 멋진 작은 스크립트가 있습니다.
PyjamaSam

캘린더 구독 추가 / 제거를 테스트하고있었습니다. 실제 기기에서는 설정> 계정에서 캘린더 구독을 제거 할 수 있지만이 메뉴는 iOS 시뮬레이터에 존재하지 않으며 전체 시뮬레이터를 재설정하고 싶지 않았습니다. 그래서 나는 장치 폴더를 git 로 로컬 버전 관리 git reset HEAD --hard && git clean -f하고 캘린더 구독을 추가 한 후 제거하기 위해 a 를 수행 했습니다.
Thibault D.

132

Apples Dev Resources에서 :

시뮬레이터의 사용자 콘텐츠 및 설정을 공장 출하 상태로 설정하고 설치 한 응용 프로그램을 제거하려면 iPhone Simulator> 콘텐츠 및 설정 재설정을 선택 합니다 .

이것은 다음과 유사합니다.

iOS 재설정


3
이것은 SQLite를 청소하지 않는 것 같습니다
Asped

1
예를 들어 이것은 브라우저의 캐시를 지우지 않습니다
Mau

1
이제이 설정은 다음 위치에 있습니다Hardware > Reset Content and Settings
Haseeb Eqx

22

이 작업을 수행하는 방법은 시뮬레이터에서 내 앱의 아이콘을 클릭 한 상태로 유지 한 다음 흔들 리기 시작하면 흑백 (x)을 클릭하는 것입니다. 정말로 삭제할 것인지 묻는 메시지가 나타나면 예를 클릭하면됩니다. 다음에 앱을 빌드하고 배포 할 때 문제없이 새로운 sqlite db를 사용하므로 파일 시스템을 꼼꼼히 살펴볼 필요가 없습니다.


작동하지 않는 것 같습니다. 시뮬레이터에서 실제로 데이터를 삭제하지 않습니까?
Adam

1
내 실수-이것은 잘 작동합니다 (허용 된 답변의 디렉토리를 읽음으로써 확인되었습니다. NSUserDefaults에 대한 Apple의 사용자 친화적이지 않은 디자인을 잊었습니다 (설정되지 않은 값은 합리적인 방식으로보고되지 않음))
Adam

@quadelirus,이 상황에서 귀하의 대답이 가장 적절하다고 생각합니다.
datnt

이것이 정확히 내가 한 일이지만 시뮬레이터에서 이미 열린 앱을 닫는 방법을 모르겠습니다. 앱을 닫지 않으면 시뮬레이터를 제어 할 수 없습니다.
Wanna Coffee


12

Mac OS X Lion에서 iOS 5를 실행 한 후 다음을 시도 할 수 있습니다.

  1. 다음 RemoveSimulatorApps.command을 포함 하는 스크립트를 작성하십시오 .
    rm -rf "$ HOME / Library / Application Support / iPhone Simulator / 5.0 / Applications / *"
    
  2. 이 스크립트를 PATH.
  3. 다음과 같이 파일을 실행 가능하게 만드십시오.
    chmod + x RemoveSimulatorApps.command

가정

  • Logitech 또는 프로그래밍 가능한 키가있는 Microsoft 키보드와 같은 키보드 즐겨 찾기 버튼에서이 기능을 호출 할 수 있습니다 (따라서 .sh 대신 .command 파일로 저장).
  • iOS 시뮬레이터에서 모든 것을 날려도 괜찮습니다 (하나의 앱에서 적극적으로 작업하는 경우 이상적)
  • 다른 사람들의 모든 메모는 좋은 업그레이드 가능한 앱 등에 대해 적용됩니다. (하지만 개인적으로 유용하다는 것을 알았지 만 b / c 일관된 견고성 / 오류 처리를 수행하려는 특정 상태에서 데이터베이스를 다시로드하는 개발 모드 스위치가 있습니다)

1
이것은 완벽하게 작동합니다. 올바른 IOS 버전을 경로에 추가하는 것을
잊지 마십시오.

1
절대 경로 대신 ~를 추가하는 것이 합리적입니까?
Nikita Leonov

8

과잉 일 수도 있지만 ..

메뉴와 '콘텐츠 및 설정 재설정 ...'을 사용할 수도 있습니다.


7

정말로하려는 것은 스키마를 변경 한 경우 데이터베이스를 지우는 것입니다. 이 작업을 수행하는 한 가지 방법은 앱의 버전 2.0, 3.0 등을 출시 할 때 장기적으로 더 행복해질 것입니다. sqlite 테이블의 버전을 확인하고 변경된 경우 폐기하는 것입니다. 이전 파일을 사용하고 번들에있는 파일을 사용하십시오.

시뮬레이터를 정리하는 방법을 찾는 것은 새 스키마가있는 새 버전을 배송 할 때 고객의 iPhone을 정리하는 방법에 대한 실제 문제에 도움이되지 않습니다.

추가 사항의 경우, 이전 스키마를 발견했음을 확인한 후 이전 스키마를 파괴하지 않고 새 데이터베이스를 복사하고 이전 데이터베이스에서 흥미로운 데이터를 새 데이터베이스로로드 할 수 있습니다. 그런 다음 이전 데이터베이스를 날려 버리십시오. 이렇게하면 사용자가 데이터베이스에 추가 한 내용을 보존 할 수 있습니다.


일반적으로 릴리스 업그레이드에 대해 이야기 할 때 동의하지만 특정 버전을 개발하는 과정에서 필요한 것보다 훨씬 많은 오버 헤드가 발생합니다. 데이터베이스 스키마는 빌드별로 변경 될 수 있으며 모든 빌드에 대해 변환 코드를 작성해야하는 것은 잘못된 것입니다.
Travis Jensen

7

Xcode> = 6 인 경우

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -n1 xcrun simctl erase

6

Xcode 9-> 메뉴 모음 -> 하드웨어 -> 모든 콘텐츠 및 설정 지우기를 사용하는 경우

Xcode-> 하드웨어-> 모든 콘텐츠 및 설정 지우기


5

Xcode 6부터 다음을 사용하여 명령 줄에서이 작업을 수행 할 수 있습니다. xcrun simctl erase

또한 iOS 시뮬레이터 앱 (Xcode 6 버전 및 이전 버전 모두)에는 현재 부팅 된 장치를 지우는 데 사용할 수있는 "콘텐츠 및 설정 재설정"이라는 메뉴 항목이 있습니다.


하지만 각 빌드에서 자동으로 실행할 수 있습니까? 예를 들어 테스트?
Daniel Gomez Rico

스크립트를 사용하여 테스트를하고있는 가정, 당신은 확실히 단지 'xcrun simctl 삭제 <UDID>'해당 스크립트에 추가 할 수 있습니다 적절한 ...
제레미 허들 스턴 세쿼이아

네, 제가 말한 그대로입니다.
Jeremy Huddleston Sequoia

5

이것은 Xcode 6에서 작동합니다.

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}

.bash_profile의 경우

alias cleansim="xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}"

3

Xcode 6 기준 :

xcrun simctl erase <sim udid> <-시뮬레이터를 재설정합니다.


1

Xcode 캐시 지우기;

Command + Option + Shift + K

Command + Shift + K

(기능이 다르기 때문에 둘 다 사용)

파생 데이터 내용 지우기;

메뉴 바-> 창-> 오거나이저-> 프로젝트-> 프로젝트 선택

오른쪽 창에는 폴더 이름이 표시되며 오른쪽에있는 삭제 버튼을 사용하면 파생 된 모든 데이터 내용을 삭제할 수 있습니다.

Clear Simulator Cache;

메뉴 바-> iOS 시뮬레이터-> 콘텐츠 및 설정 재설정


1

검증 된 답변 에 대한 의견에서 설명했듯이 :

캘린더 구독 추가 및 제거를 테스트하고있었습니다. 실제 기기에서는 설정 , 계정 에서 캘린더 구독을 제거 할 수 있지만이 메뉴는 iOS 시뮬레이터에 존재하지 않으며 전체 시뮬레이터를 재설정하고 싶지 않았습니다.

그래서 git을 사용하여 장치 폴더를 로컬에서 버전 관리 하고 캘린더 구독을 추가 한 후 다음 명령을 수행하여 캘린더 구독을 제거했습니다.

$ git reset HEAD --hard
$ git clean -f

따라서 단계는 다음과 같습니다.

  1. iOS 시뮬레이터에 애플리케이션을 설치하고해야 할 일을하십시오
  2. 장치를 식별 ~/Library/Developer/CoreSimulator/Devices/하고 수행 한 cd다음 git initgit 저장소를 만듭니다.
  3. 상태를 저장하려면 다음을 수행하십시오. git commit -a "Message"
  4. 설정을 변경하고 (예 : 캘린더 구독 추가) 테스트를 수행합니다.
  5. 시뮬레이터 종료
  6. 하다 git reset --hard HEAD
  7. 시뮬레이터를 시작하면 모든 변경 사항 git commit이 사라집니다.

1

XCode에서 창 메뉴 옵션으로 이동하여 장치를 선택한 다음 더 이상 필요하지 않은 장치 만 삭제할 수 있습니다.


0

Xcode <= 5의 경우

다음을 내 ~/.bash_profile

alias cleansim='rm -r ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/*'

시뮬레이션에있는 모든 앱을 핵무기 처리합니다.


1
이것은 더 이상 Xcode 6 이상에서 적용되지 않습니다.
Jeremy Huddleston Sequoia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.