iPhone Simulator เก็บข้อมูลของที่ไหน


234

ฉันมี SQLite DB ที่ฉันใช้เพื่อจัดเก็บข้อมูลแอพและฉันสามารถดูด้านในเพื่อแก้ไขข้อผิดพลาดที่เกิดขึ้นได้ แต่ iPhone Simulator เก็บข้อมูลไว้ที่ไหน

คำตอบ:


291

คำตอบที่ได้รับการยอมรับนั้นถูกต้องสำหรับ SDK 3.2 - SDK 4 แทนที่โฟลเดอร์/ Userในพา ธ นั้นด้วยตัวเลขสำหรับ iPhone OS / iOS เวอร์ชันดั้งเดิมแต่ละรุ่นที่สามารถจำลองได้ดังนั้นพา ธ จะกลายเป็น:

~ / Library / Application Support / iPhone Simulator / [เวอร์ชั่น OS] / Applications / [appGUID] /

หากคุณติดตั้ง SDK ก่อนหน้านี้ไว้เครื่องจำลอง 3.1.x จะบันทึกข้อมูลต่อไปใน:

~ / Library / Application Support / iPhone Simulator / ผู้ใช้ / แอปพลิเคชัน / [appGUID] /

สำหรับ Xcode6 และ iOS8

~ / Library / Developer / CoreSimulator / อุปกรณ์ / [DeviceID] / ข้อมูล / บรรจุภัณฑ์ / ข้อมูล / แอพลิเคชัน / [AppID] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert

174
แทนที่จะค้นหาในตัวค้นหาที่ GUID เป็นของคุณให้สังเกตคำตอบของ pisca46 ด้านล่าง: เพียงพิมพ์po NSHomeDirectory()ในโปรแกรมดีบั๊ก ตัดและวางใน Go> ไปที่โฟลเดอร์ (Cmd-Shift-G)
mackworth

ฉันกังวลเล็กน้อยว่าเมื่อฉันเปิดตัวโปรแกรมจำลองมันบอกว่า 8.2 แต่เมื่อฉันดูในโฟลเดอร์นี้หมายเลขเวอร์ชันเดียวที่ฉันเห็นคือ 7.1 นั่นทำให้ฉันกังวลว่าฉันกำลังดูผิดที่
bugloaf


4
เป็นการยากที่จะเน้นว่าคำตอบที่ง่ายกว่าสะดวกกว่าข้อผิดพลาดน้อยกว่าและคำตอบนี้น่าผิดหวังน้อยเพียงใด (ตามคำแนะนำในความเห็นของ mackworth ด้านบน) คุณสามารถเพิ่มบรรทัดลงNSLogในส่วนนี้AppDelegateได้didFinishLaunchingWithOptions:หรือpo NSHomeDirectory()จากตัวดีบั๊ก Cmd+Shift+Gในทั้งสองกรณีคัดลอกสตริงและเปิดในการค้นหาด้วย วิธีนี้ใช้งานได้ดีกว่าเพราะคุณกำลังถามด้วยคำสั่งมาตรฐานแทนที่จะต้องการรู้ว่ามีอะไรเปลี่ยนแปลงบ้าง
Benjohn

93

มีวิธีอื่น (เร็วกว่า) ในการค้นหาว่าข้อมูลแอปของคุณอยู่ที่ไหนโดยไม่มี Terminal:

  1. เปิดแอพในตัวจำลอง
  2. เปิดการตรวจสอบกิจกรรม
  3. ค้นหาชื่อแอปของคุณในแท็บ CPU
  4. ดับเบิลคลิกและเปิด "เปิดไฟล์และพอร์ต"

ป้อนคำอธิบายรูปภาพที่นี่


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];ให้ตัวระบุอุปกรณ์
oabarca

@oabarca ตัวระบุที่คุณได้รับไม่มีส่วนเกี่ยวข้องกับ deviceID ของเครื่องมือจำลองหรือ appFolder ฉันใช้ Xcode 11.2.1 และ iOS 13.2.2
DawnSong

78

พบมัน:

~/Library/Application Support/iPhone Simulator/User/

16
วิธีค้นหา: ในตัวค้นหากด CMD + SHIFT + G
rohan-patel

โปรดดูการตอบสนองที่ปรับปรุงด้านล่างโดย dsmudger มันเป็นคำตอบที่ถูกต้องในขณะนี้
Tom Susel

74

iOS 8 ~ / Library / Developer / CoreSimulator / อุปกรณ์ / [รหัสอุปกรณ์] / ข้อมูล / แอปพลิเคชัน / [appGUID] / เอกสาร /


1
มีวิธีรับรหัสอุปกรณ์ไหม?
msmq

2
@msmq ลองxcrun instruments -s
Shazron

11
@msmq เปิดเครื่องมือจำลองปัจจุบันของคุณฮาร์ดแวร์ -> อุปกรณ์ -> จัดการอุปกรณ์ ... -> เลือกเครื่องมือจำลองของคุณในรายการ "SIMULATORS" จากนั้นทางด้านขวาคือ "ตัวระบุ" นี่คือรหัสอุปกรณ์
RichX

จะหา [appGUID] ได้อย่างไรที่นี่?
หยางคุณ

66

บน Lion Users/[username]/Libraryถูกซ่อนอยู่

หากต้องการดูง่ายๆใน Finder ให้คลิกเมนู 'ไป' ที่ด้านบนของหน้าจอและกดปุ่ม 'alt' ค้างไว้เพื่อแสดง 'Library'

คลิกที่ 'Library' แล้วคุณจะเห็นโฟลเดอร์ไลบรารีที่ซ่อนไว้ก่อนหน้านี้

คำแนะนำก่อนหน้านี้:

ใช้

chflags nohidden /users/[username]/library

ในเทอร์มินัลเพื่อแสดงโฟลเดอร์


1
หลังจากนั้นคุณสามารถค้นหาได้ที่: ~ / Library / Application Support / iPhone Simulator / [เวอร์ชั่น OS] / Applications / [appGUID] /
Rafael Moreira

นั่นเป็นข้อเสนอแนะที่น่าสนใจสำหรับผู้ใช้ทั่วไป แต่สำหรับฉันแล้วนักพัฒนา iOS / OS X จำเป็นต้องเข้าถึงไลบรารีเป็นประจำและไม่ต้องการซ่อนมันอีกเลย (จากนั้นอีกครั้งฉันเดาว่านักพัฒนาจำนวนมากใช้ Terminal แทนที่จะเป็น Finder?)
ArtOfWarfare

58

วิธีที่ง่ายที่สุดที่เคย

  1. จับเบรกพอยต์ที่ไหนสักแห่ง

  2. ใส่po NSHomeDirectory()ในหน้าต่างคอนโซล

ผลลัพธ์:

(lldb) po NSHomeDirectory () / ผู้ใช้ / usernam / Library / ผู้พัฒนา / CoreSimulator / อุปกรณ์ / 4734F8C7-B90F-4566-8E89-5060505E387F / ข้อมูล / แอปพลิเคชัน / 395818BB-6D0F-499F-AAFE-068A789


1
ถ้าฉันเพิ่งรู้เรื่องนี้ก่อนหน้านี้ นี่ควรเป็นคำตอบที่ถูกต้อง
Ivan Cantarino

ฉันคิดว่าคำตอบอื่น ๆ ทั้งหมดถูกต้องเช่นกัน แต่นี่ดูเหมือนจะง่ายสำหรับฉัน: -]
Lal Krishna

37

หาก Simulator กำลังทำงานคุณจะได้รับเส้นทางไปยังคอนเทนเนอร์ของแอพใด ๆ :

xcrun simctl get_app_container booted <app bundle identifier>

ตัวอย่างผลลัพธ์:

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

"booted" สามารถทดแทนได้มากที่สุด simctlคำสั่งได้ทุกที่ที่คาดว่าจะมีอุปกรณ์ UDID

คุณสามารถดูรายการอุปกรณ์ด้วยxcrun simctl listและรับความช่วยเหลือเกี่ยวกับคำสั่งเฉพาะด้วยxcrun simctl helpและได้รับความช่วยเหลือเกี่ยวกับคำสั่งเฉพาะกับ

ปรับปรุง : ตามคำขอยอดนิยมใน Xcode 8.3 คุณสามารถระบุประเภทของคอนเทนเนอร์ที่คุณต้องการโดยการผนวก "แอพ", "ข้อมูล", "กลุ่ม" หรือตัวระบุกลุ่มแอป

ในการรับคอนเทนเนอร์ข้อมูล:

$ xcrun simctl get_app_container booted com.example.app data

หนึ่งที่ยอดเยี่ยม ไม่จำเป็นต้องเรียกใช้คำสั่งเพื่อรับ device_id และ appId ขั้นตอนเดียวที่จะได้รับทั้งหมด
iamhite

คนนี้ควรได้รับการยอมรับเพราะมันเป็นวิธีที่ "มั่นคง" ที่สุดในการทำสิ่งต่าง ๆ
Olha

35

ด้วย Xcode 5 คุณสามารถใช้รหัสด้านล่าง:

#import <Foundation/NSFileManager.h>

และ:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

ผลลัพธ์อาจมีลักษณะดังนี้:

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhสตริงฐานสิบหกที่ระบุแอป iOS ของคุณอยู่ที่ไหน


16
นอกจากนี้ยังสามารถใช้งานกับดีบักเกอร์ได้ด้วย: po NSHomeDirectory()
mackworth

30

ดูเหมือนว่า Xcode 6.0 ได้ย้ายตำแหน่งนี้อีกครั้งอย่างน้อยสำหรับเครื่องจำลอง iOS 8

~ / Library / Developer / CoreSimulator / อุปกรณ์ / [DeviceID] / ข้อมูล / บรรจุภัณฑ์ / ข้อมูล / แอพลิเคชัน / [AppID]


4
ใน ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / นอกจากนี้ยังมีไฟล์. plist ชื่อ "device.plist" หากคุณมองเข้าไปข้างในคุณจะพบชื่ออุปกรณ์เช่น iphone-6 หรือ iphone-5s deviceID ทำให้เกิดความสับสนมากดังนั้นฉันคิดว่าคุณควรดูในไฟล์. plist
EFE

1
จะรับ AppID ได้อย่างไร
ชื่อที่แสดง

1
ฉันโกงที่จะค้นหารหัสแอปโดยใช้ 'ls -l' และหาว่าไฟล์ใดของแอพที่ถูกสร้างขึ้นล่าสุด อาจทำงานเพื่อคนอื่นด้วย
Maya Webster

1
หรือในตัวค้นหาจัดเรียงตาม "วันที่สร้าง" เพื่อให้แอปอยู่ด้านบนของรายการ
Ammar Mujeeb

30

หนึ่งในวิธีที่ง่ายที่สุดในการค้นหาว่าแอปอยู่ที่ไหนในเครื่องมือจำลอง ผู้ใช้"NSTemporaryDirectory ()"

Steps-

  1. ใช้เบรกพอยต์ที่ใดก็ได้ภายในแอพและเรียกใช้แอพ
  2. เมื่อแอปหยุดที่เบรกพอยต์ให้พิมพ์คำสั่งต่อไปนี้ในคอนโซล Xcode

    po NSTemporaryDirectory ()

ดูภาพด้านล่างสำหรับข้อมูลเชิงลึกที่เหมาะสมป้อนคำอธิบายรูปภาพที่นี่

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

หวังว่ามันจะช่วยได้เช่นกัน Happy Coding :)


1
ปปลาย แต่ทำไมไม่po NSHomeDirectory()?
รหัส Roadie

9

ที่ Xcode เก็บเครื่องจำลองในปี 2019+ Catalina, Xcode 11.0

runtimes

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

ตัวอย่างเช่นiOS 13.0, watchOS 6.0เหล่านี้ใช้พื้นที่มากที่สุดโดยไกล แต่ละคนสามารถได้ถึง ~ 5GB

อุปกรณ์

$ open ~/Library/Developer/CoreSimulator/Devices

ตัวอย่างเช่น: iPhone Xr, iPhone 11 Pro Max. โดยทั่วไปจะมีค่า <15 mb ต่อครั้ง

คำอธิบาย

ตัวจำลองจะแบ่งระหว่าง runtimes และอุปกรณ์ ถ้าคุณวิ่ง$ xcrun simctl listคุณสามารถเห็นภาพรวม แต่ถ้าคุณต้องการค้นหาตำแหน่งทางกายภาพของตัวจำลองเหล่านี้ให้ดูในไดเรกทอรีเหล่านี้ที่ฉันได้แสดง

การลบรันไทม์ที่คุณไม่สนับสนุนนั้นปลอดภัยอย่างสิ้นเชิง คุณสามารถติดตั้งใหม่ได้ในภายหลังหากต้องการ


8

ทำเช่นนี้:

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

และคุณจะได้รับอะไรเช่นนี้:

/ ผู้ใช้ / ธุรการ / Library / Developer / CoreSimulator / อุปกรณ์ / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / ข้อมูล / บรรจุภัณฑ์ / ข้อมูล / แอพลิเคชัน / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / เอกสาร

ไปที่นั่นแล้วคุณจะเห็นโฟลเดอร์เอกสารของแอพโดยไม่คำนึงถึงรุ่นของ XCode (ใช้คำสั่ง "ไปที่โฟลเดอร์ ... " ใน Finder และระบุพา ธ "~ / ไลบรารี่")

รุ่น Swift สำหรับเส้นทางสตริง:

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

และ URL โฟลเดอร์:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)

กำลังจะโพสต์คำตอบเดียวกันเกือบ วิธีนี้มีข้อดีคือให้เส้นทางที่ถูกต้องกับ iOS Simulator ทุกรุ่น โดยวิธีการที่คุณยังสามารถคัดลอกค่าของตัวแปร url ในดีบักเกอร์ถ้าคุณไม่ต้องการที่จะเข้าสู่ระบบ;)
244 Moose


6

สำหรับ Xcode 4.6 จะได้รับการจัดเก็บในเส้นทางต่อไปนี้ ...

/ Users / [currentuser] / Library / Application Support / iPhone Simulator / 6.1 / แอปพลิเคชัน /

หากต้องการทราบว่าโปรแกรมใช้รหัสต่อไปนี้

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);

2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect

4

สำหรับ iOS 8

หากต้องการค้นหาโฟลเดอร์เอกสารคุณสามารถเขียนไฟล์ในโฟลเดอร์เอกสาร:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

didFinishLaunchingWithOptionsกล่าวว่าใน

จากนั้นคุณสามารถเปิด Terminal และค้นหาโฟลเดอร์:

$ find ~/Library -name Words.txt

2

หากใครยังคงประสบปัญหานี้ในสิงโตมีบทความที่ดีกับ 19 เคล็ดลับต่าง ๆ เพื่อดู ~ / Library dir ของคุณ ค้นหาบทความโดย Dan Frakes ที่นี่http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

จำไว้ว่าไดเรคทอรี่สำหรับตัวจำลองได้รับด้านล่าง

~ / Library / Application Support / iPhone Simulator / ผู้ใช้ /


2

สำหรับ macOS Catalina ฉันพบ db ของฉันใน:

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

เพื่อให้ได้applicationIdฉันเพิ่งเรียงโฟลเดอร์ตามวันที่แก้ไขแม้ว่าฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำเช่นนั้น


1

สำหรับผู้ใช้ที่ตอบสนองพื้นเมืองที่ไม่ได้ใช้ Xcode findบ่อยครั้งคุณก็สามารถใช้ เปิดเทอร์มินัลแล้วค้นหาด้วยชื่อฐานข้อมูล

$ find ~/Library/Developer -name 'myname.db'

หากคุณไม่ทราบชื่อที่แน่นอนคุณสามารถใช้อักขระตัวแทน:

$ find ~/Library/Developer -name 'myname.*'


0

คุณสามารถลองใช้รหัสด้านล่าง

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);

0

หากต้องการเปิด dictories ที่แอพของคุณเป็นที่คุณสร้างใน xCode บนเครื่องจำลองให้ทำดังต่อไปนี้:

  1. เปิด Finder Windor (ไอคอนหน้ายิ้ม)
  2. จากนั้นคลิก GO -> ไปที่โฟลเดอร์
  3. ประเภท: ~ / Library / Application Support / iPhone Simulator
  4. Directories เป็นเวอร์ชั่นของ Simulators ที่ต่างกัน
  5. ไดเรกทอรีย่อยคือแอพที่ติดตั้งบนเครื่องจำลอง
  6. โฟลเดอร์เอกสารเป็นที่ที่ผู้ใช้สร้างเนื้อหาซึ่งจะสำรองข้อมูลลงบน iCloud

0

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.