ฉันมี SQLite DB ที่ฉันใช้เพื่อจัดเก็บข้อมูลแอพและฉันสามารถดูด้านในเพื่อแก้ไขข้อผิดพลาดที่เกิดขึ้นได้ แต่ iPhone Simulator เก็บข้อมูลไว้ที่ไหน
ฉันมี SQLite DB ที่ฉันใช้เพื่อจัดเก็บข้อมูลแอพและฉันสามารถดูด้านในเพื่อแก้ไขข้อผิดพลาดที่เกิดขึ้นได้ แต่ iPhone Simulator เก็บข้อมูลไว้ที่ไหน
คำตอบ:
คำตอบที่ได้รับการยอมรับนั้นถูกต้องสำหรับ 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] /
po NSHomeDirectory()
ในโปรแกรมดีบั๊ก ตัดและวางใน Go> ไปที่โฟลเดอร์ (Cmd-Shift-G)
NSLog
ในส่วนนี้AppDelegate
ได้didFinishLaunchingWithOptions:
หรือpo NSHomeDirectory()
จากตัวดีบั๊ก Cmd+Shift+G
ในทั้งสองกรณีคัดลอกสตริงและเปิดในการค้นหาด้วย วิธีนี้ใช้งานได้ดีกว่าเพราะคุณกำลังถามด้วยคำสั่งมาตรฐานแทนที่จะต้องการรู้ว่ามีอะไรเปลี่ยนแปลงบ้าง
มีวิธีอื่น (เร็วกว่า) ในการค้นหาว่าข้อมูลแอปของคุณอยู่ที่ไหนโดยไม่มี Terminal:
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
ให้ตัวระบุอุปกรณ์
พบมัน:
~/Library/Application Support/iPhone Simulator/User/
iOS 8 ~ / Library / Developer / CoreSimulator / อุปกรณ์ / [รหัสอุปกรณ์] / ข้อมูล / แอปพลิเคชัน / [appGUID] / เอกสาร /
xcrun instruments -s
บน Lion Users/[username]/Library
ถูกซ่อนอยู่
หากต้องการดูง่ายๆใน Finder ให้คลิกเมนู 'ไป' ที่ด้านบนของหน้าจอและกดปุ่ม 'alt' ค้างไว้เพื่อแสดง 'Library'
คลิกที่ 'Library' แล้วคุณจะเห็นโฟลเดอร์ไลบรารีที่ซ่อนไว้ก่อนหน้านี้
คำแนะนำก่อนหน้านี้:
ใช้
chflags nohidden /users/[username]/library
ในเทอร์มินัลเพื่อแสดงโฟลเดอร์
จับเบรกพอยต์ที่ไหนสักแห่ง
ใส่po NSHomeDirectory()
ในหน้าต่างคอนโซล
(lldb) po NSHomeDirectory () / ผู้ใช้ / usernam / Library / ผู้พัฒนา / CoreSimulator / อุปกรณ์ / 4734F8C7-B90F-4566-8E89-5060505E387F / ข้อมูล / แอปพลิเคชัน / 395818BB-6D0F-499F-AAFE-068A789
หาก 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
ด้วย 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 ของคุณอยู่ที่ไหน
po NSHomeDirectory()
ดูเหมือนว่า Xcode 6.0 ได้ย้ายตำแหน่งนี้อีกครั้งอย่างน้อยสำหรับเครื่องจำลอง iOS 8
~ / Library / Developer / CoreSimulator / อุปกรณ์ / [DeviceID] / ข้อมูล / บรรจุภัณฑ์ / ข้อมูล / แอพลิเคชัน / [AppID]
หนึ่งในวิธีที่ง่ายที่สุดในการค้นหาว่าแอปอยู่ที่ไหนในเครื่องมือจำลอง ผู้ใช้"NSTemporaryDirectory ()"
Steps-
เมื่อแอปหยุดที่เบรกพอยต์ให้พิมพ์คำสั่งต่อไปนี้ในคอนโซล Xcode
po NSTemporaryDirectory ()
ดูภาพด้านล่างสำหรับข้อมูลเชิงลึกที่เหมาะสม
ตอนนี้คุณมีเส้นทางที่แน่นอนสำหรับโฟลเดอร์ชั่วคราว คุณสามารถกลับไปดูโฟลเดอร์ที่เกี่ยวข้องกับแอพทั้งหมดได้
หวังว่ามันจะช่วยได้เช่นกัน Happy Coding :)
po NSHomeDirectory()
?
$ 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
คุณสามารถเห็นภาพรวม แต่ถ้าคุณต้องการค้นหาตำแหน่งทางกายภาพของตัวจำลองเหล่านี้ให้ดูในไดเรกทอรีเหล่านี้ที่ฉันได้แสดง
การลบรันไทม์ที่คุณไม่สนับสนุนนั้นปลอดภัยอย่างสิ้นเชิง คุณสามารถติดตั้งใหม่ได้ในภายหลังหากต้องการ
ทำเช่นนี้:
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 5:
/ Users / [ชื่อผู้ใช้] / Library / Application Support / iPhone Simulator / 5.0 / Applications / [AppGUID] /
สำหรับ Xcode 4.6 จะได้รับการจัดเก็บในเส้นทางต่อไปนี้ ...
/ Users / [currentuser] / Library / Application Support / iPhone Simulator / 6.1 / แอปพลิเคชัน /
หากต้องการทราบว่าโปรแกรมใช้รหัสต่อไปนี้
NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
print("path: \(NSBundle.mainBundle().bundlePath)")
สำหรับ 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
หากใครยังคงประสบปัญหานี้ในสิงโตมีบทความที่ดีกับ 19 เคล็ดลับต่าง ๆ เพื่อดู ~ / Library dir ของคุณ ค้นหาบทความโดย Dan Frakes ที่นี่http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html
จำไว้ว่าไดเรคทอรี่สำหรับตัวจำลองได้รับด้านล่าง
~ / Library / Application Support / iPhone Simulator / ผู้ใช้ /
สำหรับ macOS Catalina ฉันพบ db ของฉันใน:
~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db
เพื่อให้ได้applicationId
ฉันเพิ่งเรียงโฟลเดอร์ตามวันที่แก้ไขแม้ว่าฉันแน่ใจว่ามีวิธีที่ดีกว่าในการทำเช่นนั้น
สำหรับผู้ใช้ที่ตอบสนองพื้นเมืองที่ไม่ได้ใช้ Xcode find
บ่อยครั้งคุณก็สามารถใช้ เปิดเทอร์มินัลแล้วค้นหาด้วยชื่อฐานข้อมูล
$ find ~/Library/Developer -name 'myname.db'
หากคุณไม่ทราบชื่อที่แน่นอนคุณสามารถใช้อักขระตัวแทน:
$ find ~/Library/Developer -name 'myname.*'
คุณสามารถลองใช้รหัสด้านล่าง
NSString *fileName = @"Demo.pdf";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
NSLog(@"File path%@",pdfFileName);
หากต้องการเปิด dictories ที่แอพของคุณเป็นที่คุณสร้างใน xCode บนเครื่องจำลองให้ทำดังต่อไปนี้:
ฉันไม่มีส่วนเกี่ยวข้องกับโปรแกรมนี้ แต่ถ้าคุณกำลังมองหาที่จะเปิดสิ่งนี้ในตัวค้นหาSimPholdersทำให้มันง่ายอย่างไม่น่าเชื่อ
cd ~/Library/Application\ Support/iPhone\ Simulator/