ตำแหน่งการสนับสนุนแอปพลิเคชัน Xcode 6 iPhone Simulator


137

ใน Xcode 6 ฉันมีแอพที่ฉันใช้ Core Data อยู่ แต่ไม่มีโฟลเดอร์ใน Application Support สำหรับ iOS 8 iPhone Simulator ไฟล์และฐานข้อมูล Core Data sqlite ของฉันถูกเก็บไว้ที่ไหน?


ลองนี้ มีแอพที่เปิดไดเรกทอรีเอกสารของแอพที่รันล่าสุดโดยตรง
NSRover

ฉันเพิ่มคำตอบ (ที่ด้านล่างของคำตอบอื่น ๆ ) ที่แสดงวิธีการรับพา ธ ที่มีไฟล์ Core Data โดยทางโปรแกรม
SpokaneDude

ลองดูที่ลิงค์นี้ .. stackoverflow.com/questions/24133022/…
Tunvir Rahman Tusher

ใช้ "NSTemporaryDirectory ()" ดูนี่
Shubhendu

คำตอบ:


296

ไดเรกทอรีจำลองถูกย้ายไปพร้อมกับ Xcode 6 เบต้าไปที่ ...

~/Library/Developer/CoreSimulator

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

~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite

4
สิ่งนี้ถูกต้องโดยทั่วไป แต่ดูเหมือนว่าจะมีการเปลี่ยนแปลงโฟลเดอร์ภายในมากกว่า นี่คือเส้นทางที่เหมาะกับฉันใน Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
มีวิธีที่จะเข้าใจว่าตัวเลขหรือกำลังดุร้ายเป็นโอกาสเดียวที่จะได้รับข้อมูลหรือไม่
vir พวกเรา

89
NSLog (@ "แอป dir:% @", [[NSFileManager defaultManager] URLForDirectory: NSDocumentDirectory ในโดเมน: NSUserDomainMask] lastObject]); - จะพิมพ์เส้นทางแบบเต็มไปยังโฟลเดอร์ข้อมูล
vir us

2
ฉันต้องการช็อตคัตถาวรไปยังไดเรกทอรีเอกสารของแอพเพื่อการดีบักอย่างรวดเร็ว หลังจากแอปพลิเคชันไม่เสร็จสิ้นการเปิดใช้งานด้วยตัวเลือก #if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif ตอนนี้ฉันมีซิมลิงค์ที่ใช้งานได้แม้ว่า iOS8 + XCode6 จะเปลี่ยน Data GUID ของแอปทุกครั้งที่ฉันสร้าง
ปลากะพงขาว

32
xcrun simctl listคำสั่งที่สามารถใช้เพื่อดูความสอดคล้องระหว่างชื่อจำลองและ UDIDs อุปกรณ์ หรือโดยเฉพาะxcrun simctl list devicesคำสั่ง
ThomasW

36

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


ฉันยังมีปัญหากับ SimPholders2 บน Yosemite ดังนั้นฉันจึงเริ่มสคริปต์บรรทัดคำสั่งเพื่อช่วยคุณค้นหาและเปิดหน้าต่าง Finder ไปที่เครื่องมือจำลองและแอพที่คุณต้องการ มันจะผ่านโฟลเดอร์และมีข้อมูลเมตาเพื่อแสดงรายการโฟลเดอร์จำลองและแอพทั้งหมด หากสนใจตรวจสอบได้ที่นี่
Rodrigo Lima

SimPholders2 ทำงานใน Yosemite แต่มันค่อนข้างช้า เมื่อคุณคลิกที่ไอคอนในแถบสถานะเพียงแค่รอสักครู่และมันควรจะปรากฏขึ้น
Jason

โอ้โหมันยอดเยี่ยมและใช้ได้กับ Yosemite + Xcode 6.3!
TruMan1

21

ฉันพบว่าแอพพลิเคชั่นSimulatorManagerมีประโยชน์มาก มันจะนำคุณไปยังโฟลเดอร์แอปพลิเคชันของตัวจำลองที่ติดตั้งโดยตรง ฉันได้ลองกับเครื่องจำลอง 7.1, 8.0 และ 8.1

SimulatorManager อยู่เป็นไอคอนในซิสเต็มเทรย์และมีตัวเลือก "เรียกใช้เมื่อเข้าสู่ระบบ"

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

หมายเหตุ : ใช้งานได้เฉพาะกับ Xcode 6 (6.1.1 ในกรณีของฉัน) ขึ้นไป

หวังว่าจะช่วย!


Amar คุณติดตั้ง SimulatorManager อย่างไร ฉันคิดว่ามันเป็นปลั๊กอินไปยัง Xcode แต่มันเป็นโครงการ Xcode
malena

1
ในแถบด้านบนเลือก: ผลิตภัณฑ์ -> เก็บถาวร -> แล้วส่งออกการเก็บถาวรเป็นแอปพลิเคชัน Mac โดยไม่ต้องลงชื่อใหม่ (ตัวเลือกสุดท้าย) คุณจะได้รับไฟล์. app ซึ่งคุณสามารถใส่ไว้ในโฟลเดอร์แอปพลิเคชันของคุณ ..
Heckscheibe

11

หากต้องการทราบว่าไฟล์. sqlite ของคุณถูกเก็บไว้ที่ใดใน AppDelegate.m ให้เพิ่มรหัสต่อไปนี้

- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory      inDomains:NSUserDomainMask] lastObject]);

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory     inDomains:NSUserDomainMask] lastObject];
 }

ตอนนี้เรียกวิธีนี้ใน AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  //call here
   [self applicationDocumentsDirectory];

}

ยอดเยี่ยม .. มีประโยชน์เป็นพิเศษเมื่อมีตัวจำลองหลายตัว
Yasitha Waduge

6

สิ่งนี้ใช้ได้กับฉันอย่างรวดเร็ว:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

3

ฉันปล้ำกับบางครั้ง มันกลายเป็นความเจ็บปวดครั้งใหญ่ที่จะไปที่ sqlite db ในพื้นที่ของฉัน ฉันเขียนสคริปต์นี้และทำให้เป็นข้อมูลโค้ดใน XCode ฉันวางไว้ในแอพของฉัน


//xcode 6 moves the documents dir every time. haven't found out why yet. 

    #if DEBUG 

         NSLog(@"caching documents dir for xcode 6. %@", [NSBundle mainBundle]); 

         NSString *toFile = @"XCodePaths/lastBuild.txt"; NSError *err = nil; 

         [DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err]; 

         if(err) 
            NSLog(@"%@", [err localizedDescription]);

         NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];   

         NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; 

         remove([aliasPath UTF8String]); 

         [[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; 

     #endif

สิ่งนี้จะสร้าง simlink ที่รากของไดรฟ์ของคุณ (คุณอาจต้องสร้างโฟลเดอร์นี้ด้วยตัวเองเป็นครั้งแรกและเปลี่ยนมันหรือคุณสามารถเปลี่ยนตำแหน่งเป็นที่อื่น) จากนั้นฉันติดตั้งปลั๊กอินxcodeway https://github.com/onmyway133/XcodeWay

ฉันแก้ไขมันเล็กน้อยเพื่อให้ฉันกด cmd + d แล้วมันจะเปิดตัวค้นหาไปยังไดเรกทอรีเอกสารของแอปพลิเคชันปัจจุบันของฉัน ด้วยวิธีนี้ไม่ว่า XCode จะเปลี่ยนเส้นทางของคุณกี่ครั้ง แต่จะเปลี่ยนเฉพาะเมื่อรันและจะอัปเดต simlink ของคุณทันทีในการรันแต่ละครั้ง

ฉันหวังว่านี่จะเป็นประโยชน์สำหรับคนอื่น ๆ !


ขอขอบคุณฉันเพิ่งอัปเดต XcodeWay เพื่อสนับสนุนโฟลเดอร์จำลอง iOS 8
onmyway133

3

เปิดตัวค้นหา> ไลบรารี> นักพัฒนา> CoreSimulator> อุปกรณ์

จากนั้นเปลี่ยนไอคอนการจัดเรียงจากตัวค้นหาเลือกเพิ่มวันที่

เลือกแอปของคุณ> ข้อมูล> คอนเทนเนอร์> ข้อมูล> แอปพลิเคชัน>

เลือกแอปของคุณ> เอกสาร> นี่คือไฟล์ db ของคุณ

ในกรณีของฉัน:

/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite

มิฉะนั้นทำสิ่งนี้:

NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 

- มันจะพิมพ์เส้นทางแบบเต็มไปยังโฟลเดอร์ข้อมูล

สวิฟท์:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

Swift 3.0:let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
AtomicBoolean

2

ใช้ Finder -> ไปที่โฟลเดอร์และป้อน basepath ที่กำหนดเพื่อเข้าถึงโฟลเดอร์แอปพลิเคชัน

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSLog(@"%@",basePath);

1

ตัวจำลองวางไฟล์ไว้ใน ~ / Library / Developer / CoreSimulator / Devices / ... แต่เส้นทางหลังจาก / Devices นั้นแตกต่างกันสำหรับทุกคน

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

NSString * NSTemporaryDirectory ( void );

ดังนั้นในชั้นเรียน ViewController ของฉันฉันมักจะใส่บรรทัดนี้ไว้ใน viewDidLoad ของฉันเพื่อการอ้างอิงเมื่อฉันต้องการที่จะคว้าไฟล์ CoreData ของฉันที่เก็บไว้ หวังว่านี่จะช่วยได้

  NSLog(@"FILE PATH :%@", NSTemporaryDirectory());

(หมายเหตุ: หากต้องการไปยังเส้นทางจากเมนูค้นหาให้คลิกที่ไปและพิมพ์ ~ / Library เพื่อเปิดไดเรกทอรีที่ซ่อนอยู่จากนั้นในหน้าต่างค้นหาคุณสามารถคลิกบนเส้นทางที่แสดงบนคอนโซลของคุณ)


1

ตำแหน่งนี้มีการเปลี่ยนแปลงอีกครั้งหากใช้ Swift ให้ใช้สิ่งนี้เพื่อค้นหาว่าโฟลเดอร์อยู่ที่ใด (จะถูกคัดลอกจากไฟล์ AppDelegate.swift ที่ Apple สร้างให้คุณดังนั้นถ้ามันไม่ทำงานบนเครื่องของคุณให้ค้นหา ไฟล์นั้นสำหรับไวยากรณ์ที่ถูกต้องใช้งานได้กับฉันโดยใช้ Xcode 6.1 และ iOS 8 simulator)

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")

1

ตัวจำลองอยู่ภายใต้:

~/Library/Developer/CoreSimulator/

ที่นี่พวกเขาจะถูกระบุว่าเป็นไดเรกทอรีที่มีชื่อ UUID ใช้จัดเรียงตาม 'แก้ไขวันที่' เพื่อค้นหาไฟล์ล่าสุด ภายในนำทางไปยัง:

/data/Containers/Data/Application/

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

หมายเหตุ: Xcode เปลี่ยนชื่อไดเรกทอรีทุกครั้งที่คุณเรียกใช้แอปดังนั้นอย่าพึ่งพาการใช้นามแฝง / ทางลัดบนเดสก์ท็อป

วิธีที่ง่ายที่สุดคือใช้แอปที่นี่ซึ่งทำทุกอย่างโดยอัตโนมัติ


1

ฉันสร้างสคริปต์นี้ที่จะซิปแอพล่าสุดที่สร้างขึ้นสำหรับเครื่องมือจำลองใด ๆ และซิปไปยังเดสก์ท็อป

https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c

#!/bin/bash

DESTINATION_DIR="$HOME/Desktop"
APP_PATH=$(find ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/*.app -type d -maxdepth 0 -print0 | xargs -0 ls -td | head -n1)
APP_DIRNAME=$(dirname "$APP_PATH")
APP_BASENAME=$(basename "$APP_PATH")
FILE_NAME="${APP_BASENAME%.*}"

cd "$APP_DIRNAME"
zip -qr "$DESTINATION_DIR/$FILE_NAME.zip" "$APP_BASENAME"

1

ใน Swift 4 หรือ Swift 5 คุณสามารถใช้ได้ NSHomeDirectory()ใช้ได้

วิธีที่ง่ายที่สุดใน Xcode 10 (หรือ Xcode 11) คือการหยุดแอปของคุณชั่วคราว (เช่นเมื่อมันถึงจุดพัก) และเรียกใช้บรรทัดนี้ในคอนโซลดีบักเกอร์:

po NSHomeDirectory()

po ย่อมาจากวัตถุพิมพ์และพิมพ์สิ่งต่าง ๆ ส่วนใหญ่


0
 1.   NSTemporaryDirectory() gives this:

    /Users/spokaneDude/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/199B1ACA-A80B-44BD-8E5E-DDF3DCF0D8D9/tmp

 2. remove "/tmp" replacing it with "/Library/Application Support/<app name>/"  --> is where the .sqlite files reside

0
  1. ด้วย Swift 4 คุณสามารถใช้รหัสด้านล่างเพื่อรับไดเรกทอรีบ้านของแอปของคุณ ไดเรกทอรีเอกสารของแอปของคุณอยู่ในนั้น

    print(NSHomeDirectory())

  2. ฉันคิดว่าคุณรู้แล้วว่าโฮมไดเร็กตอรี่ของแอพของคุณสามารถเปลี่ยนแปลงได้ดังนั้นหากคุณไม่ต้องการเพิ่มรหัสเพิ่มเติมลงในฐานข้อมูลของคุณSimPholderเป็นเครื่องมือที่ดีสำหรับคุณ

  3. และยิ่งไปกว่านั้นคุณอาจสงสัยว่ามีเครื่องมือที่ช่วยให้คุณประหยัดเวลาจากการปิดและเปิดฐานข้อมูล SQLite เดียวกันทุกครั้งหลังจากที่เปลี่ยนไดเรกทอรีหลักของแอป และคำตอบคือใช่เครื่องมือที่ผมรู้ก็คือSQLiteFlow จากเอกสารมันบอกว่า:

    จัดการกับชื่อไฟล์ฐานข้อมูลหรือการเปลี่ยนแปลงไดเรกทอรี สิ่งนี้ทำให้ SQLiteFlow สามารถทำงานกับฐานข้อมูล SQLite ของคุณในโปรแกรมจำลอง iOS ได้


0

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

#!/bin/zsh

lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`

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