ทำความสะอาดเครื่องจำลอง iPhone


107

มีวิธีที่ตรงไปตรงมาในการล้างไดเรกทอรีที่ xcode ใช้แอปเมื่อสร้างเครื่องจำลอง iPhone หรือไม่? ฉันมีฐานข้อมูล sqlite ที่ถูกคัดลอกไปยังโฟลเดอร์ Documents เมื่อเริ่มต้นหากจำเป็น ปัญหาคือฉันอาจเปลี่ยนสคีมาของฉัน แต่ฐานข้อมูลใหม่จะไม่ถูกคัดลอกเนื่องจากมีอยู่แล้ว

ตามหลักการแล้วทุกครั้งที่ฉันสร้างมันจะทำให้เนื้อหาก่อนหน้านี้หมดไป เป็นไปได้ไหมหรือฉันต้องทำเอง


เครื่องจำลองรองรับ AppleScript หรือไม่
Rog

ใช่แล้ว. ฉันได้เขียน AppleScript เพื่อทำซ้ำผ่านตัวจำลอง iOS ทั้งหมดสำหรับแต่ละอุปกรณ์และเวอร์ชัน OS และรีเซ็ตเนื้อหาและการตั้งค่า: 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 Simulator และฉันไม่ต้องการรีเซ็ตตัวจำลองทั้งหมด ดังนั้นฉันจึงลงเอยด้วยการกำหนดเวอร์ชันโฟลเดอร์อุปกรณ์ของฉันในเครื่องด้วย git และดำเนินการgit reset HEAD --hard && git clean -fเพื่อลบการสมัครสมาชิกปฏิทินหลังจากที่ฉันเพิ่มเข้าไป
Thibault D.

132

จาก Apples Dev Resources:

การตั้งค่าเนื้อหาของผู้ใช้และการตั้งค่าของจำลองไปยังรัฐโรงงานของพวกเขาและลบโปรแกรมที่ติดตั้งให้เลือกiPhone Simulator> เนื้อหารีเซ็ตการตั้งค่าและ

สิ่งนี้คล้ายกับ:

รีเซ็ต iOS


3
อันนี้ดูเหมือนจะไม่ทำความสะอาด SQLite
Asped

1
สิ่งนี้ไม่ได้ล้างแคชของเบราว์เซอร์เช่น
เมา

1
ตอนนี้การตั้งค่านี้อยู่ในHardware > Reset Content and Settings
Haseeb Eqx

22

วิธีที่ฉันทำคือเพียงแค่คลิกไอคอนสำหรับแอพของฉันในโปรแกรมจำลองค้างไว้ - จากนั้นเมื่อมันเริ่มกระดิกให้คลิกที่ขาวดำ (x) ข้อความจะปรากฏขึ้นถามว่าคุณต้องการลบจริงหรือไม่และคุณเพียงแค่คลิกใช่ ในครั้งต่อไปที่คุณสร้างและปรับใช้แอปของคุณแอปจะใช้ sqlite db ใหม่โดยไม่มีปัญหาและคุณไม่ต้องไปยุ่งกับระบบไฟล์


ดูเหมือนจะไม่ได้ผล - มันไม่ได้ลบข้อมูลออกจากตัวจำลองจริง ๆ หรือ?
Adam

1
ข้อผิดพลาดของฉัน - ใช้งานได้ดี (ยืนยันโดยการอ่านไดเรกทอรีในคำตอบที่ยอมรับฉันเพิ่งลืมการออกแบบ NSUserDefaults ที่ไม่เป็นมิตรกับผู้ใช้ของ Apple (ค่าที่ไม่ได้ตั้งค่าจะไม่ถูกรายงานด้วยวิธีการที่สมเหตุสมผล)
Adam

@quadelirus ฉันคิดว่าคำตอบของคุณเหมาะสมที่สุดในสถานการณ์นี้
datnt

นี่คือสิ่งที่ฉันทำ แต่ฉันไม่แน่ใจว่าจะปิดแอปที่เปิดอยู่ในโปรแกรมจำลองได้อย่างไร จนกว่าฉันจะปิดแอปฉันไม่สามารถควบคุมโปรแกรมจำลองได้
Wanna Coffee


12

หลังจาก iOS 5 บน Mac OS X Lion คุณสามารถลอง:

  1. สร้างสคริปต์ที่เรียกว่า RemoveSimulatorApps.commandว่าประกอบด้วย:
    rm -rf "$ HOME / Library / Application Support / iPhone Simulator / 5.0 / Applications / *"
    
  2. บันทึกสคริปต์นี้ลงในไดเร็กทอรีในPATHไฟล์.
  3. ทำให้ไฟล์สามารถเรียกใช้งานได้เช่น:
    chmod + x RemoveSimulatorApps.command

สมมติฐาน

  • คุณอาจต้องการเรียกใช้สิ่งนี้จากปุ่มรายการโปรดของแป้นพิมพ์เช่นบนแป้นพิมพ์ Logitech หรือ Microsoft ด้วยปุ่มที่ตั้งโปรแกรมได้ (ดังนั้นจึงบันทึกเป็นไฟล์. คำสั่งแทนการพูด, .sh)
  • คุณโอเคกับการกำจัดทุกสิ่งในโปรแกรมจำลอง iOS (เหมาะอย่างยิ่งหากคุณกำลังทำงานอยู่ในแอปเดียว)
  • หมายเหตุทั้งหมดจากผู้อื่นใช้เกี่ยวกับการเป็นแอพที่สามารถอัพเกรดได้ดีเป็นต้น (โดยส่วนตัวแล้วฉันพบว่ามีประโยชน์นี้ แต่ b / c ฉันมีสวิตช์โหมดการพัฒนาที่โหลดฐานข้อมูลใหม่ในสถานะเฉพาะที่ฉันพยายามจัดการความแข็งแกร่ง / ข้อผิดพลาดที่สอดคล้องกัน)

1
อันนี้ทำงานได้อย่างสมบูรณ์อย่าลืมเพิ่มเวอร์ชัน IOS ที่ถูกต้องของคุณลงในเส้นทาง :)
Asped

1
มันสมเหตุสมผลหรือไม่ที่จะเพิ่ม ~ แทนพา ธ สัมบูรณ์
Nikita Leonov

8

มันอาจจะมากเกินไป แต่ ..

คุณยังสามารถใช้เมนูและ 'รีเซ็ตเนื้อหาและการตั้งค่า ... '


7

สิ่งที่คุณพยายามทำจริงๆคือการล้างฐานข้อมูลของคุณหากคุณเปลี่ยนสคีมา วิธีหนึ่งในการทำเช่นนี้และจะทำให้คุณมีความสุขมากขึ้นในระยะยาวเมื่อคุณเริ่มจัดส่งแอปเวอร์ชัน 2.0, 3.0 และอื่น ๆ คือตรวจสอบเวอร์ชันของตาราง sqlite ของคุณและหากมีการเปลี่ยนแปลงให้ทิ้ง ไฟล์เก่าและใช้ไฟล์ในกลุ่มของคุณ

การค้นหาวิธีล้างโปรแกรมจำลองจะไม่ช่วยแก้ปัญหาในโลกแห่งความเป็นจริงในการล้างข้อมูล iPhone ของลูกค้าเมื่อคุณส่งเวอร์ชันใหม่พร้อมกับสคีมาใหม่

สำหรับคะแนนพิเศษหลังจากพิจารณาแล้วว่าคุณพบสคีมาเก่าคุณอาจต้องการคัดลอกฐานข้อมูลใหม่โดยไม่ทำลายฐานข้อมูลเก่าและโหลดข้อมูลที่น่าสนใจจากฐานข้อมูลเก่าไปยังฐานข้อมูลใหม่ จากนั้นระเบิดฐานข้อมูลเก่า ด้วยวิธีนี้คุณสามารถรักษาการเพิ่มของผู้ใช้ในฐานข้อมูล


โดยทั่วไปฉันเห็นด้วยกับคุณเมื่อคุณกำลังพูดถึงการอัปเกรดรุ่น แต่ในระหว่างการพัฒนาเวอร์ชันใดเวอร์ชันหนึ่งนี่เป็นค่าใช้จ่ายที่เกินความจำเป็น สคีมาฐานข้อมูลสามารถเปลี่ยนแปลงได้ในแต่ละบิลด์และการต้องเขียนโค้ดการแปลงสำหรับทุกบิวด์นั้นไม่ถูกต้อง
Travis Jensen


6

หากคุณใช้ Xcode 9 -> เมนู -> ฮาร์ดแวร์ -> ลบเนื้อหาและการตั้งค่าทั้งหมด

Xcode -> ฮาร์ดแวร์ -> ลบเนื้อหาและการตั้งค่าทั้งหมด


5

ใน Xcode 6 คุณสามารถทำได้จากบรรทัดคำสั่งโดยใช้: xcrun simctl ลบ

นอกจากนี้แอป iOS Simulator (ทั้งรุ่น Xcode 6 และเวอร์ชันเก่ากว่า) มีรายการเมนูที่เรียกว่า "รีเซ็ตเนื้อหาและการตั้งค่า" ที่สามารถใช้เพื่อลบอุปกรณ์ที่บูตอยู่ในปัจจุบัน


แต่มันสามารถดำเนินการในแต่ละบิลด์โดยอัตโนมัติ? เช่นการทดสอบ?
Daniel Gomez Rico

สมมติว่าคุณกำลังทำการทดสอบโดยใช้สคริปต์คุณสามารถเพิ่ม 'xcrun simctl ลบ <UDID>' ลงในสคริปต์นั้นได้ตามความเหมาะสม ...
Jeremy Huddleston Sequoia

ใช่นั่นคือสิ่งที่ฉันพูด
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 {}"


1

ล้าง Xcode Cache;

Command + Option + Shift + K

Command + Shift + K

(ใช้ทั้งสองตัวเนื่องจากมีฟังก์ชันการทำงานที่แตกต่างกัน)

ล้างเนื้อหาข้อมูลที่ได้รับ

แถบเมนู -> หน้าต่าง -> ผู้จัดงาน -> โครงการ -> เลือกโครงการของคุณ

บานหน้าต่างด้านขวาแสดงชื่อโฟลเดอร์และปุ่มลบที่ด้านขวาช่วยให้คุณสามารถลบเนื้อหาข้อมูลที่ได้รับทั้งหมด

ล้างแคช Simulator;

แถบเมนู -> iOS Simulator -> รีเซ็ตเนื้อหาและการตั้งค่า


1

ขณะที่ฉันอธิบายในความคิดเห็นภายใต้คำตอบที่ตรวจสอบแล้ว :

ฉันกำลังทดสอบการเพิ่มและลบการสมัครสมาชิกปฏิทิน บนอุปกรณ์จริงคุณสามารถลบการสมัครสมาชิกปฏิทินในการตั้งค่า , บัญชีแต่เมนูนี้ไม่ได้อยู่ใน iOS Simulator และฉันไม่ได้ต้องการรีเซ็ตจำลองทั้งหมด

ดังนั้นผมจึงจบลงในประเทศเวอร์ชันของฉันอุปกรณ์โฟลเดอร์ที่มีคอมไพล์และดำเนินการคำสั่งต่อไปนี้เพื่อลบการสมัครสมาชิกปฏิทินหลังจากที่ฉันเพิ่ม:

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

ดังนั้นขั้นตอนคือ:

  1. ติดตั้งแอปพลิเคชันของคุณบน iOS Simulator และทำในสิ่งที่คุณต้องทำ
  2. ระบุอุปกรณ์ของคุณ~/Library/Developer/CoreSimulator/Devices/และดำเนินการcdกับอุปกรณ์จากนั้นgit initสร้างที่เก็บ git
  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.