Jalur direktori dokumen dari Xcode Device Simulator

91

Di iOS 7, direktori dokumen simulator iOS dapat ditemukan di:

/Users/Sabo/Library/Application Support/iPhone Simulator/

Namun, di iOS 8 Beta Simulator , saya tidak dapat menemukan direktori yang sesuai untuk iOS 8 di direktori di atas.

Di mana jalur direktori dokumen untuk iOS 8 Simulator?

masukkan deskripsi gambar di sini

Tinju Api
sumber
Coba ini . Ada sebuah aplikasi yang langsung membuka direktori Dokumen dari aplikasi terbaru yang dijalankan.
NSRover
coba tautan ini stackoverflow.com/questions/24133022/…
Tunvir Rahman Tusher
Jika Anda tidak dapat menemukan folder perpustakaan Anda, folder itu mungkin tersembunyi. Mengetik perintah ini ke terminal akan menampilkannya: chflags nohidden ~ / Library
simon_smiley
Jika Anda menyukai plugin Xcode, coba github.com/onmyway133/XcodeWay , plugin Xcode yang dapat menavigasi ke folder simulator Anda, dan banyak tempat lainnya
onmyway133

Jawaban:

156

di komputer saya, jalurnya adalah:

~/Library/Developer/CoreSimulator/Devices/1A8DF360-B0A6-4815-95F3-68A6AB0BCC78/data/Container/Data/Application/

CATATAN: mungkin ID panjang tersebut (yaitu UDID) berbeda di komputer Anda.

holex
sumber
1
Jika aplikasi Anda menggunakan CoreData, mungkin ada cara yang lebih mudah untuk mencari lokasi folder: stackoverflow.com/a/25937606/1103584
DiscDev
13
Tidak, ini salah. Tidak ada perbedaan antara proyek ObjC dan proyek Swift. Itu adalah UDID (Unique Device IDentifiers) dan Anda dapat melihatnya dengan menjalankan 'xcrun simctl list'
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, benar atau tidak, begitulah cara proyek Swift dan ObjC disalin di komputer saya. Saya tidak perlu menyebutkan keduanya dikompilasi hanya pada simulator (itu pertanyaan asli). jika Xcode membuat perbedaan antara UDID untuk bahasa yang berbeda, dan menurut Anda itu tidak benar, Anda mungkin perlu melaporkannya ke Apple.
holex
7
Holex, saya mengatakan bahwa pernyataan Anda tidak benar, bukan karena desainnya salah (perhatikan bahwa saya sebenarnya orang di Apple yang merancang CoreSimulator, jadi saya mungkin orang pertama yang memperbaiki sesuatu yang menurut saya adalah salah). UDID sesuai dengan perangkat terpisah. Satu-satunya alasan proyek cepat dan obyektif Anda akan menggunakan UDID yang berbeda adalah karena Anda menyebarkan proyek Anda ke perangkat simulator yang berbeda (misalnya: untuk satu, Anda menyebarkan ke iPhone 5s dan yang lain Anda gunakan untuk iPhone 6).
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, Anda dipersilakan untuk mengoreksi jawaban saya kapan saja, jika Anda merasa cukup percaya diri.
holex
76

NSLogdi bawah kode di suatu tempat di "AppDelegate", jalankan proyek Anda dan ikuti jalurnya. Ini akan memudahkan Anda untuk mendapatkan dokumen daripada mencari secara acak di dalam "~ / Library / Developer / CoreSimulator / Devices /"

Objective-C

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

Swift
Jika Anda menggunakan Swift 1.2, gunakan kode di bawah ini yang hanya akan dihasilkan dalam pengembangan saat menggunakan Simulator karena #if #endifbloknya:

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

Salin jalur Anda dari "/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ..." buka " Finder " dan kemudian " Go to Folder " atau command+ shift+ gdan tempel jalur Anda, biarkan mac membawa Anda ke direktori dokumen :)

Ankur
sumber
sederhana dan efisien!
loretoparisi
43

Cukup tulis kode di bawah ini di AppDelegate -> didFinishLaunchingWithOptions
Objective C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 


Swift 2.X.

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

Swift 3.X.

#if arch(i386) || arch(x86_64)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Swift 4.2.0

#if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Output
/ Pengguna / mitul_marsonia / Perpustakaan / Pengembang / CoreSimulator / Perangkat / E701C1E9-FCED-4428-A36F-17B32D32918A / data / Wadah / Data / Aplikasi / 25174F64-7130-4B91-BC41-AC74257CCC6E / Dokumen

Salin jalur Anda dari "/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ..." buka "Finder" lalu "Go to Folder" atau command + shift + g dan tempel jalur Anda , biarkan mac membawa Anda ke direktori dokumen Anda

Mitul Marsoniya
sumber
Bagaimana Anda akan tahu folder mana dari aplikasi Anda? Ada terlalu banyak direktori, apakah saya harus mencari masing-masing?
KarenAnne
jawaban
ini adalah jalur hardcode ke simulator Anda sendiri. Ini tidak akan berhasil untuk orang lain. Sebenarnya jalur ini juga akan berubah untuk Anda setelah Anda menjalankan simulator lagi.
NSRover
#if TARGET_IPHONE_SIMULATOR // di mana Anda? NSLog (@ "Direktori Dokumen:% @", [[[NSFileManager defaultManager] URLForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya
16

Saya merekomendasikan aplikasi utilitas bagus bernama SimPholder yang memudahkan untuk menemukan file dan folder saat mengembangkan aplikasi iOS Anda. Ini memiliki versi baru untuk bekerja dengan simulator baru yang disebut SimPholder2. Ini dapat ditemukan di simpholder.com

JDibble
sumber
Itu akan menjadi aplikasi keren sekarang karena iOS8 Simulator terkubur dalam folder tidak jelas tetapi aplikasi itu belum diperbarui untuk mendukung iOS8.
wibobm
@wibob. SimPholder2 tentu saja mendukung iOS 8.0 dan iOS 8.1
JDibble
YA TUHAN. Saya pasti buta total. Terima kasih!
wibobm
16

Terlepas dari kenyataan bahwa ada banyak jawaban, tidak ada yang memberikan pemahaman tentang bagaimana struktur folder dari simulator iOS 8.3 telah berubah dan tidak menyediakan cara cepat untuk menemukan Data Aplikasi (folder Dokumen).

Karena iOS 8, folder penyimpanan Data dari suatu Aplikasi terpisah dari file aplikasi yang dapat dijalankan sedangkan iOS 7 dan di bawahnya memiliki struktur folder yang sama, satu-satunya perbedaan adalah kenyataan bahwa semua simulator (tipe dan versi berbeda) adalah sekarang dalam satu folder besar.

Jadi, jalur ke simulator iOS 8,7,6 adalah sebagai berikut:

~/Library/Developer/CoreSimulator/Devices

Setiap simulator sekarang berada dalam folder yang diberi nama dengan pengenal unik yang berubah di setiap reset simulator.

Anda dapat menemukan Identifieruntuk setiap perangkat & simulator Anda dengan pergi ke Xcode > Window > Devices(3 atau 4 karakter pertama dari pengenal lebih dari cukup untuk diingat).

Untuk menemukan aplikasi tempat Anda menginstal aplikasi, lihat Run scheme > devices(layar 2) Anda.

layar 1

layar 2

Sekarang, setelah Anda mengidentifikasi simulator Anda, bergantung pada versinya, struktur foldernya sangat berbeda:

Di iOS 8 , file yang dapat dieksekusi dan folder data aplikasi berada di folder yang berbeda:

Dapat dijalankan : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Folder Data : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

Folder Dokumen : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

Pada iOS 7 ke bawah struktur foldernya sama seperti sebelumnya hanya saja ingat bahwa sekarang setiap simulator ada di folder yang sama (lihat di atas).

Razvan
sumber
13

Jika aplikasi Anda menggunakan CoreData, trik yang bagus adalah mencari nama file sqlite menggunakan terminal.

find ~ -name my_app_db_name.sqlite

Hasilnya akan mencantumkan jalur file lengkap ke semua simulator yang telah menjalankan aplikasi Anda.

Saya sangat berharap Apple hanya menambahkan tombol ke menu file Simulator iOS seperti "Buka folder Dokumen di Finder".

DiscDev
sumber
1
Harus menyukai terminal.
kakubei
2
Ini sepertinya cara yang cukup panjang untuk menemukan ini. Cari seluruh direktori home Anda?
shortstuffsushi
11

Benar bahwa kita perlu melihat ke path ~ / Library / Developer / CoreSimulator / Devices /.

Tetapi masalah yang saya lihat adalah jalur terus berubah setiap kali saya menjalankan aplikasi. Path berisi satu set ID panjang setelah Application string dan itu terus berubah setiap kali saya menjalankan aplikasi. Ini pada dasarnya berarti bahwa aplikasi saya tidak akan memiliki data yang di-cache saat dijalankan di lain waktu.

Deepak GM
sumber
Saya melihat ini juga.
Nathan Jones
5
Jalur tidak terus berubah setiap kali Anda menjalankan aplikasi. Ada satu jalur per perangkat yang Anda miliki di perpustakaan Anda. Jalankan 'xcrun simctl list' untuk melihat daftar perangkat dan UDID-nya untuk melihat subdirektori mana yang harus Anda pertimbangkan.
Jeremy Huddleston Sequoia
9

Dengan iOS 9.2 dan Xcode 7.2, skrip berikut akan membuka folder Dokumen dari aplikasi yang terakhir diinstal pada simulator yang terakhir digunakan;

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

Untuk membuat skrip yang dapat dijalankan dengan mudah, letakkan di Aplikasi Automator dengan "Run Shell Script":

Jalankan Shell Script di dalam Aplikasi Automator

Bouke
sumber
7

Dengan adopsi CoreSimulator di Xcode 6.0, direktori data menjadi per perangkat, bukan per versi. Direktori data adalah ~ / Library / Developer / CoreSimulator / Devices // data yang dapat ditentukan dari 'xcrun simctl list'

Perhatikan bahwa Anda dapat dengan aman menghapus ~ / Library / Application Support / iPhone Simulator dan ~ / Library / Logs / iOS Simulator jika Anda tidak berencana untuk kembali ke Xcode 5.x atau sebelumnya.

Jeremy Huddleston Sequoia
sumber
Terima kasih telah memberikan apa yang mungkin bisa dilihat sebagai jawaban yang berwibawa. Apakah ada cara mudah (kecuali masuk dari dalam aplikasi) untuk menemukan lokasi aplikasi tertentu di dalam simulator?
fzwo
Maaf, tidak, tapi saya telah melihat beberapa permintaan untuk ini di sini dan di forum. Silakan mengajukan radar di bugreport.apple.com
Jeremy Huddleston Sequoia
7

memperbarui: Xcode 11.5 • Swift 5.2

if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
    print(documentsPath)   // "var/folder/.../documents\n" copy the full path
}

Buka Finder Anda, tekan command-shift-g (atau Buka> Buka Folder ... di bawah bilah menu) dan tempelkan jalur lengkap "var / folder /.../ dokumen" di sana dan tekan buka.

Leo Dabus
sumber
4

Mencoba ~/Library/Developer/CoreSimulator/Devices/

Droppy
sumber
4

Saya menghadapi masalah yang sama ketika saya menyimpan jalur lengkap menggunakan CoreData. Saat mengambil jalur lengkap, itu mengembalikan nol karena folder dokumen UUID berbeda setiap kali aplikasi dimulai ulang. Berikut adalah resolusi saya:

  1. Pastikan hanya menyimpan jalur relatif dari dokumen / file di CoreData. Misalnya, simpan "File / gambar.jpg" daripada "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg".
  2. Gunakan yang berikut ini untuk mengambil lokasi dokumen aplikasi:

    [[[NSFileManager defaultManager] URLForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject];

  3. Gabungkan # 2 dan # 1 untuk mendapatkan path lengkap dari dokumen / file yang ingin Anda ambil.
Anda dapat merujuk ke Catatan Pengembang Apple: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

netliner
sumber
3

Di mana Direktori Dokumen untuk iOS 8 Simulator

Anda mungkin telah memperhatikan bahwa Simulator iPhone telah berubah dengan Xcode 6, dan dengan itu - tentu saja - jalur ke Direktori Dokumen aplikasi simulasi Anda. Kadang-kadang kita mungkin perlu melihatnya.

Menemukan jalur itu tidak semudah dulu, yaitu Library / Application Support / iPhone Simulator / 7.1 / Applications / diikuti dengan nomor samar yang mewakili aplikasi Anda.

Pada Xcode 6 dan iOS 8, Anda akan menemukannya di sini: Library / Developer / CoreSimulator / Devices / cryptic number / data / Containers / Data / Application / cryptic number

http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/

jbchitaliya.dll
sumber
3

di Appdelegate, letakkan kode ini untuk melihat Document and Cache Dir:

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    NSArray* cachePathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = [cachePathArray lastObject];
    NSLog(@"Cache Directory: %@", cachePath);
#endif

di Log:

Direktori Dokumen: / Pengguna / xxx / Perpustakaan / Pengembang / CoreSimulator / Perangkat / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Wadah / Data / Aplikasi / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Dokumen /

Direktori Cache: / Pengguna / xxx / Perpustakaan / Pengembang / CoreSimulator / Perangkat / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Kontainer / Data / Aplikasi / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Perpustakaan / Cache

ikanimo
sumber
3

Jika Anda ingin masuk ke folder aplikasi untuk melihat apa yang terjadi dan tidak ingin melalui UUDID labirin, saya membuat ini: https://github.com/kallewoof/plget

dan menggunakannya, saya membuat ini: https://gist.github.com/kallewoof/de4899aabde564f62687

Pada dasarnya, ketika saya ingin membuka folder beberapa aplikasi, saya melakukan:

$ cd ~/iosapps
$ ./app.sh
$ ls -l
total 152
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/BD660795-9131-4A5A-9A5D-074459F6A4BF
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/A74C9F8B-37E0-4D89-80F9-48A15599D404
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/07BA5718-CF3B-42C7-B501-762E02F9756E
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/5A4642A4-B598-429F-ADC9-BB15D5CEE9B0
-rwxr-xr-x  1 me  staff  3282 Nov 14 17:04 app.sh
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/69F7E3EF-B450-4840-826D-3830E79C247A
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/976D1E91-DA9E-4DA0-800D-52D1AE527AC6
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/473F8259-EE11-4417-B04E-6FBA7BF2ED05
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/CB21C38E-B978-4B8F-99D1-EAC7F10BD894
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.otherapp-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/DE3FF8F1-303D-41FA-AD8D-43B22DDADCDE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-7-1_iPad-Retina.dr -> simulator/4DC11775-F2B5-4447-98EB-FC5C1DB562AD/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-2.dr -> simulator/6FC02AE7-27B4-4DBF-92F1-CCFEBDCAC5EE/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-Retina.dr -> simulator/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-1_iPad-Retina.dr -> simulator/414E8875-8875-4088-B17A-200202219A34/data
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 org.cocoapods.demo.pajdeg-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/C3069623-D55D-462C-82E0-E896C942F7DE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 simulator -> /Users/me/Library/Developer/CoreSimulator/Devices

Bagian ini ./app.shmenyinkronkan tautan. Hal ini pada dasarnya selalu diperlukan saat ini karena aplikasi mengubah UUID untuk setiap proses di Xcode mulai 6.0. Selain itu, sayangnya, aplikasi menggunakan id bundel untuk 8.x dan berdasarkan nama aplikasi untuk <8.

Kalle
sumber
3

Berdasarkan jawaban Ankur tetapi bagi kami pengguna Swift:

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

Taruh di dalam ViewDidLoad dan itu akan segera dicetak setelah aplikasi dijalankan.

kakubei
sumber
3

Simulator berada di bawah:

~/Library/Developer/CoreSimulator/

Di sini, mereka terdaftar sebagai direktori dengan nama UUID. Gunakan urutkan berdasarkan 'Tanggal diubah' untuk menemukan yang terbaru. Di dalam navigasi ke:

/data/Containers/Data/Application/

Di sini Anda akan mendapatkan daftar semua aplikasi di perangkat itu. Anda dapat mengurutkan ini lagi untuk mendapatkan aplikasi terbaru.

CATATAN: Xcode mengubah nama direktori setiap kali Anda menjalankan aplikasi, jadi jangan mengandalkan membuat alias / pintasan di desktop.

Cara termudah adalah menggunakan aplikasi di sini , yang melakukan semuanya secara otomatis.

NSRover
sumber
2

Direktori simulator telah dipindahkan dengan Xcode 6 beta ke ...

 ~/Library/Developer/CoreSimulator

Menjelajahi direktori ke folder Dokumen aplikasi Anda sedikit lebih sulit, misalnya,

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

Cara terbaik untuk menemukan jalur adalah dengan melakukan melalui kode.

Menggunakan Swift, cukup tempelkan kode di bawah ini ke dalam aplikasi fungsi di AppDelegate.swift Anda

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

Untuk kode Obj-C, lihat jawaban dari @Ankur

rsc
sumber
2

Untuk Swift 3.x

if let documentsPath = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: " + documentsPath)
    }
Boris
sumber
1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
SwiftArchitect
sumber