Dọn dẹp trình mô phỏng iPhone


107

Có cách nào đơn giản để dọn dẹp thư mục nơi xcode triển khai ứng dụng khi xây dựng trình mô phỏng iPhone không? Tôi có một cơ sở dữ liệu sqlite được sao chép vào thư mục Documents khi khởi động nếu cần. Vấn đề là tôi có thể thay đổi lược đồ của mình, nhưng cơ sở dữ liệu mới sẽ không được sao chép, vì một lược đồ đã tồn tại.

Lý tưởng nhất là mỗi khi tôi xây dựng, nó sẽ xóa nội dung trước đó. Điều này có thể thực hiện được không hay tôi phải làm thủ công?


Trình mô phỏng có hỗ trợ AppleScript không?
Rog

Đúng vậy. Tôi đã viết một AppleScript để lặp qua tất cả các mô phỏng iOS cho mỗi phiên bản thiết bị và hệ điều hành và thiết lập lại nội dung & Cài đặt của họ: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Câu trả lời:


91

Trình mô phỏng cài đặt ứng dụng vào:

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

Cũng kiểm tra:

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

Các tệp và thư mục GUID khớp với các ứng dụng đã cài đặt của trình mô phỏng.

Xóa thủ công tất cả các tệp / thư mục đó để xóa tất cả các ứng dụng khỏi trình mô phỏng.

Tôi biết có một số cách để thêm tập lệnh vào quy trình xây dựng trong XCode.

Ngoài ra, có vẻ như XCode thay đổi GUID mà nó sử dụng mỗi bản dựng (thư mục nơi ứng dụng của tôi đặt thay đổi giữa các bản dựng trong XCode), vì vậy việc cố gắng xóa cùng một thư mục sẽ không hoạt động. Nếu bạn chỉ làm việc trên một ứng dụng tại một thời điểm thì việc xóa toàn bộ thư mục sẽ là một lựa chọn.


2
Hãy chắc chắn kiểm tra câu trả lời của @ idStar bên dưới. Nó đã cập nhật thông tin liên quan đến Lion / Xcode4 và một tập lệnh nhỏ đẹp để giúp tự động hóa mọi thứ.
PyjamaSam

Tôi đang thử nghiệm thêm / xóa đăng ký lịch. Trên thiết bị thực, bạn có thể xóa đăng ký lịch trong Cài đặt> Tài khoản nhưng menu này không tồn tại trên Trình mô phỏng iOS và tôi không muốn đặt lại toàn bộ trình mô phỏng. Vì vậy, tôi đã kết thúc phiên bản cục bộ thư mục Thiết bị của mình bằng git và thực hiện git reset HEAD --hard && git clean -fxóa đăng ký lịch sau khi tôi thêm nó.
Thibault D.

132

Từ Apples Dev Resources:

Để đặt nội dung người dùng và cài đặt của trình mô phỏng về trạng thái ban đầu và xóa các ứng dụng bạn đã cài đặt, hãy chọn Trình mô phỏng iPhone> Đặt lại Nội dung và Cài đặt .

Điều này tương tự như:

Đặt lại iOS


3
Cái này dường như không làm sạch SQLite
Asped 4/1013

1
ví dụ như điều này không xóa bộ nhớ cache của trình duyệt
Mau

1
Bây giờ thiết lập này tọa lạc tạiHardware > Reset Content and Settings
Haseeb Eqx

22

Cách tôi làm điều này là chỉ cần nhấp và giữ vào biểu tượng cho ứng dụng của tôi trong trình mô phỏng - sau đó khi nó bắt đầu lắc lư, hãy nhấp vào màu đen và trắng (x). Một thông báo sẽ bật lên hỏi bạn có thực sự muốn xóa hay không và bạn chỉ cần nhấp vào có. Lần tiếp theo khi bạn xây dựng và triển khai ứng dụng của mình, ứng dụng sẽ sử dụng db sqlite mới mà không gặp trở ngại nào và bạn không phải đi loanh quanh trong hệ thống tệp.


Điều này dường như không hoạt động - nó không THỰC SỰ xóa dữ liệu khỏi trình mô phỏng?
Adam

1
Sai lầm của tôi - điều này hoạt động tốt (xác nhận bằng cách đọc các thư mục trong câu trả lời được chấp nhận tôi chỉ muốn quên thiết kế sử dụng không thân thiện của Apple NSUserDefaults (giá trị unset không được báo cáo bởi bất cứ cách nào hợp lý).
Adam

@quadelirus, tôi nghĩ câu trả lời của bạn là thích hợp nhất trong tình huống này.
datnt

Đây chính xác là những gì tôi đã làm, nhưng tôi không chắc chắn cách đóng ứng dụng đã mở sẵn trong trình mô phỏng. Cho đến khi tôi đóng ứng dụng, tôi không thể kiểm soát được trên trình mô phỏng.
Wanna Coffee


12

Sau iOS 5 trên Mac OS X Lion, bạn có thể thử:

  1. Tạo một tập lệnh có tên RemoveSimulatorApps.commandchứa:
    rm -rf "$ HOME / Thư viện / Hỗ trợ ứng dụng / Trình mô phỏng iPhone / 5.0 / Ứng dụng / *"
    
  2. Lưu tập lệnh này vào một thư mục trong của bạn PATH.
  3. Làm cho tệp có thể thực thi được, chẳng hạn như:
    chmod + x RemoveSimulatorApps.command

Giả định

  • Bạn có thể muốn gọi điều này từ các nút yêu thích trên bàn phím, chẳng hạn như trên bàn phím Logitech hoặc Microsoft với các phím có thể lập trình (do đó, lưu nó dưới dạng tệp .command thay vì nói, .sh)
  • Bạn không sao với việc thổi bay mọi thứ trong trình mô phỏng iOS (lý tưởng nếu bạn chỉ đang tích cực làm việc trên một ứng dụng)
  • Tất cả các lưu ý từ những người khác áp dụng về việc trở thành một ứng dụng có thể nâng cấp tốt, v.v. (Cá nhân tôi thấy điều này hữu ích, tuy nhiên b / c Tôi có công tắc chế độ phát triển tải lại cơ sở dữ liệu ở một trạng thái cụ thể mà tôi đang cố gắng thực hiện một số xử lý lỗi / độ mạnh nhất quán trên)

1
Cái này hoạt động hoàn hảo, chỉ cần nhớ để thêm phiên bản IOS phải của bạn vào con đường :)
Asped

1
Sẽ hợp lý nếu thêm ~ thay vì đường dẫn tuyệt đối?
Nikita Leonov

8

nó có thể là quá mức cần thiết nhưng ..

bạn cũng có thể sử dụng menu và 'Đặt lại Nội dung và Cài đặt ...'


7

Những gì bạn thực sự đang cố gắng làm là xóa cơ sở dữ liệu của mình, nếu bạn đã thay đổi lược đồ. Một cách để làm điều này và sẽ giúp bạn hạnh phúc hơn về lâu dài khi bạn bắt đầu gửi phiên bản 2.0, 3.0, v.v. của ứng dụng, là kiểm tra phiên bản của bảng sqlite của bạn và nếu nó đã thay đổi, sau đó loại bỏ tệp cũ và sử dụng tệp trong gói của bạn.

Tìm cách dọn dẹp Trình mô phỏng sẽ không giúp được gì cho vấn đề trong thế giới thực về cách dọn dẹp iPhone của khách hàng khi bạn gửi phiên bản mới với lược đồ mới.

Đối với các điểm bổ sung, sau khi xác định rằng bạn đã gặp phải một lược đồ cũ, bạn có thể muốn sao chép cơ sở dữ liệu mới mà không phá hủy cơ sở dữ liệu cũ và tải bất kỳ dữ liệu thú vị nào từ cơ sở dữ liệu cũ sang một cơ sở dữ liệu mới. Sau đó thổi bay cơ sở dữ liệu cũ. Bằng cách đó, bạn có thể duy trì các bổ sung của người dùng vào cơ sở dữ liệu.


Nói chung, tôi đồng ý với bạn khi bạn đang nói về các bản nâng cấp phát hành, nhưng giữa quá trình phát triển của bất kỳ phiên bản cụ thể nào, điều này tốn nhiều chi phí hơn mức cần thiết. Lược đồ cơ sở dữ liệu có thể thay đổi trên cơ sở mỗi bản dựng, và việc cần viết mã chuyển đổi cho mỗi bản dựng là sai.
Travis Jensen

7

cho 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

Nếu bạn đang sử dụng Xcode 9 -> Menubar -> Hardware -> Erase All Content and Settings

Xcode -> Hardware -> Erase All Content and Settings


5

Đối với Xcode 6, bạn có thể thực hiện việc này từ dòng lệnh với: xcrun simctl delete

Ngoài ra, ứng dụng Trình mô phỏng iOS (cả phiên bản Xcode 6 và các phiên bản cũ hơn) có một mục menu gọi là "Đặt lại nội dung và cài đặt" có thể được sử dụng để xóa thiết bị hiện đang khởi động.


nhưng nó có thể được thực thi trên mỗi bản dựng tự động không? ví dụ cho các bài kiểm tra?
Daniel Gomez Rico

Giả sử bạn đang làm các xét nghiệm của bạn sử dụng một kịch bản, bạn có thể chắc chắn chỉ cần thêm 'xcrun simctl xóa <UDID>' để kịch bản thích hợp ...
Jeremy Huddleston Sequoia

Vâng, đó chính xác là những gì tôi đã nói.
Jeremy Huddleston Sequoia

5

Điều này hoạt động với 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 {}

Đối với .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

Kể từ Xcode 6:

xcrun simctl erase <sim udid> <- đặt lại trình mô phỏng.


1

Xóa bộ đệm Xcode;

Command + Option + Shift + K

Command + Shift + K

(Sử dụng cả hai vì chúng có chức năng khác nhau)

Xóa nội dung Dữ liệu có nguồn gốc;

Thanh Menu -> Cửa sổ -> Công cụ -> Dự án -> Chọn Dự án của bạn

Ngăn bên phải hiển thị tên của thư mục và cũng có nút xóa ở bên phải cho phép bạn xóa tất cả nội dung dữ liệu bắt nguồn.

Xóa bộ nhớ đệm giả lập;

Thanh menu -> Trình mô phỏng iOS -> Đặt lại nội dung và cài đặt


1

Như tôi đang giải thích trong một bình luận dưới câu trả lời đã được xác thực :

Tôi đang thử nghiệm thêm và xóa các đăng ký lịch. Trên thiết bị thực, bạn có thể xóa đăng ký lịch trong Cài đặt , Tài khoản nhưng menu này không tồn tại trong Trình mô phỏng iOS và tôi không muốn đặt lại toàn bộ trình mô phỏng.

Vì vậy, tôi đã kết thúc phiên bản cục bộ thư mục Thiết bị của mình bằng git và thực hiện các lệnh sau để xóa đăng ký lịch sau khi tôi thêm nó:

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

Vì vậy, các bước là:

  1. Cài đặt ứng dụng của bạn trên Trình mô phỏng iOS và làm những gì bạn phải làm
  2. Xác định thiết bị của bạn ~/Library/Developer/CoreSimulator/Devices/và thực hiện một thao tác cdvới nó, sau đó git inittạo một kho lưu trữ git
  3. Khi bạn muốn lưu trạng thái, hãy thực hiện git commit -a "Message"
  4. Làm bất cứ điều gì thay đổi cài đặt (ví dụ: thêm đăng ký lịch) và thực hiện các thử nghiệm của bạn
  5. Tắt trình mô phỏng
  6. Làm git reset --hard HEAD
  7. Khởi động trình mô phỏng, tất cả các thay đổi được thực hiện sau đó git commitđều biến mất.

1

Trong XCode, hãy chuyển đến tùy chọn menu Window, chọn Devices và sau đó bạn có thể xóa những cái bạn không cần nữa.


0

Đối với Xcode <= 5

Tôi đã thêm phần sau vào ~/.bash_profile

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

Nó chỉ xóa tất cả các ứng dụng trên sim.


1
Điều này không còn áp dụng với Xcode 6 trở lên.
Jeremy Huddleston Sequoia,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.