Di mana iPhone Simulator menyimpan datanya?

234

Saya memiliki DB SQLite yang saya gunakan untuk menyimpan data aplikasi, dan saya bisa melakukan dengan melihat ke dalamnya untuk men-debug masalah yang saya alami - tetapi di mana iPhone Simulator menyimpan datanya, biasanya?

Codebeef
sumber

Jawaban:

291

Jawaban yang diterima benar untuk SDK 3.2 - SDK 4 menggantikan / folder Pengguna di jalur itu dengan nomor untuk masing-masing versi iPhone OS / iOS lama yang dapat disimulasikan, sehingga jalur menjadi:

~ / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / [Versi OS] / Aplikasi / [appGUID] /

jika Anda memiliki SDK yang sebelumnya diinstal bersama, simulator 3.1.x akan terus menyimpan datanya di:

~ / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / Pengguna / Aplikasi / [appGUID] /

Untuk Xcode6 dan iOS8

~ / Perpustakaan / Pengembang / CoreSimulator / Perangkat / [DeviceID] / data / Kontainer / Data / Aplikasi / [AppID] /

dsmudger
sumber
6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert
174
Alih-alih mencari di finder yang GUID milik Anda, perhatikan jawaban pisca46 di bawah ini: Cukup ketik po NSHomeDirectory()debugger. Potong dan tempel ke Go> Go To Folder (Cmd-Shift-G).
mackworth
Saya sedikit khawatir bahwa ketika saya meluncurkan simulator dikatakan 8.2, tetapi ketika saya melihat di folder ini, satu-satunya nomor versi yang saya lihat adalah 7.1. Itu membuat saya khawatir bahwa saya mencari di tempat yang salah.
bugloaf
1
@bugloaf Lihat pertanyaan atau jawaban di bawah ini
Raviprakash
4
Sulit untuk menekankan betapa lebih sederhana, lebih mudah, lebih sedikit kesalahan dan kurang membuat frustrasi jawaban ini (seperti yang direkomendasikan dalam komentar mackworth di atas). Anda hanya dapat menambahkan baris ke NSLogini dalam Anda AppDelegate's didFinishLaunchingWithOptions:, atau Anda dapat po NSHomeDirectory()dari debugger. Dalam kedua kasus, salin string dan buka dengan finder Cmd+Shift+G. Ini berfungsi lebih baik karena Anda bertanya dengan perintah standar alih-alih perlu mengetahui sesuatu yang berubah.
Benjohn
93

Ada cara (lebih cepat?) Lain untuk menemukan di mana data aplikasi Anda tanpa Terminal:

  1. Luncurkan aplikasi di simulator
  2. Buka Monitor Aktivitas
  3. Temukan nama aplikasi Anda di tab CPU
  4. Klik dua kali dan buka "Open Files and Ports"

masukkan deskripsi gambar di sini

Sergey Lost
sumber
1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];memberi Anda pengenal perangkat
oabarca
@oabarca pengenal yang Anda dapatkan tidak ada hubungannya dengan deviceID atau appFolder simulator; Saya menggunakan Xcode 11.2.1 dan iOS 13.2.2
DawnSong
78

Menemukannya:

~/Library/Application Support/iPhone Simulator/User/
Codebeef
sumber
16
Cara mencari: Di Finder tekan CMD + SHIFT + G
rohan-patel
Silakan lihat tanggapan yang diperbarui di bawah ini oleh dsmudger, itu adalah jawaban yang benar saat ini.
Tom Susel
74

iOS 8 ~ / Library / Developer / CoreSimulator / Perangkat / [Device ID] / data / Aplikasi / [appGUID] / Documents /

Wagh
sumber
1
Adakah cara untuk mendapatkan ID Perangkat?
msmq
2
@msmq cobaxcrun instruments -s
Shazron
11
@msmq Nyalakan simulator Anda saat ini, Perangkat Keras -> Perangkat -> Kelola Perangkat ... -> Pilih simulator Anda dalam daftar "SIMULATOR". Kemudian di sebelah kanan adalah "Identifier". Ini adalah Device ID.
RichX
Bagaimana menemukan [appGUID] di sini?
Yang You
66

Pada Singa Users/[username]/Libraryitu tersembunyi.

Untuk hanya melihat di Finder, klik menu 'Go' di bagian atas layar dan tahan tombol 'alt' untuk menampilkan 'Library'.

Klik 'Perpustakaan' dan Anda dapat melihat folder perpustakaan yang sebelumnya tersembunyi.

Sebelumnya disarankan:

Menggunakan

chflags nohidden /users/[username]/library

di terminal untuk menampilkan folder.

Rafael Moreira
sumber
1
kemudian setelah itu Anda dapat menemukannya di: ~ / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / [Versi OS] / Aplikasi / [appGUID] /
Rafael Moreira
Itu saran yang menarik bagi pengguna normal, tetapi bagi saya pengembang iOS / OS X perlu mengakses perpustakaan secara teratur sehingga tidak ingin disembunyikan lagi. (Kemudian lagi, saya kira banyak pengembang menggunakan Terminal bukan Finder?)
ArtOfWarfare
58

Cara termudah yang pernah ada.

  1. Tangkap Breakpoint di suatu tempat.

  2. Masuk po NSHomeDirectory()ke jendela konsol

Hasil:

(lldb) po NSHomeDirectory () / Pengguna / usernam / Perpustakaan / Pengembang / CoreSimulator / Perangkat / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Wadah / Data / Aplikasi / 395818BB-6D0F-499F-AAFE-068A783

Lal Krishna
sumber
1
Kalau saja aku tahu ini sebelumnya. Ini seharusnya jawaban yang benar
Ivan Cantarino
Saya pikir semua jawaban lain juga benar. Tetapi ini tampaknya mudah bagi saya: -]
Lal Krishna
37

Jika Simulator sedang berjalan, Anda bisa mendapatkan jalur ke wadah aplikasi apa pun:

xcrun simctl get_app_container booted <app bundle identifier>

Contoh output:

$ 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" dapat digantikan dengan sebagian besar simctlperintah di mana saja perangkat UDID diharapkan.

Anda dapat melihat daftar perangkat dengan xcrun simctl listdan mendapatkan bantuan tentang perintah khusus xcrun simctl help.

Pembaruan : Dengan permintaan populer di Xcode 8.3 Anda sekarang dapat menentukan jenis wadah yang Anda inginkan dengan menambahkan "aplikasi", "data", "grup", atau pengidentifikasi grup aplikasi.

Untuk mendapatkan wadah data:

$ xcrun simctl get_app_container booted com.example.app data
russbishop
sumber
sangat bagus. Tidak perlu menjalankan perintah untuk mendapatkan device_id dan appId. Satu langkah untuk mendapatkan semua
iamhite
Yang ini harus diterima, karena itu cara "paling stabil" untuk melakukan hal-hal seperti itu.
Olha
35

Dengan Xcode 5 Anda dapat menggunakan kode di bawah ini:

#import <Foundation/NSFileManager.h>

dan:

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

Hasilnya mungkin terlihat seperti:

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

Di mana hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhbeberapa string hex mengidentifikasi aplikasi iOS Anda.

Pisca46
sumber
16
Ini juga berfungsi di debugger: po NSHomeDirectory()
mackworth
30

Sepertinya Xcode 6.0 telah memindahkan lokasi ini sekali lagi, setidaknya untuk simulator iOS 8.

~ / Perpustakaan / Pengembang / CoreSimulator / Perangkat / [DeviceID] / data / Kontainer / Data / Aplikasi / [AppID]

seekor serigala
sumber
4
di ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / ada juga file .plist bernama "device.plist" jika Anda melihat ke dalam, Anda dapat mengetahui nama perangkat seperti iphone-6 atau iphone-5s. deviceID sangat membingungkan jadi saya pikir Anda harus melihat ke dalam file .plist.
EFE
1
Bagaimana cara mendapatkan AppID?
Nama Tampilan
1
Saya menipu untuk menemukan id aplikasi, dengan menggunakan 'ls-l' dan mencari tahu file aplikasi mana yang paling baru dibuat. Mungkin bekerja untuk orang lain juga.
Maya Webster
1
Atau dalam sortir pencari berdasarkan "tanggal dibuat" untuk mendapatkan Aplikasi di bagian atas daftar.
Ammar Mujeeb
30

Salah satu cara paling mudah untuk menemukan di mana aplikasi berada dalam simulator. Pengguna "NST temporaryDirectory ()"

Langkah-

  1. Terapkan breakpoint di mana saja di dalam aplikasi dan jalankan aplikasi.
  2. Saat aplikasi berhenti di breakpoint, ketikkan perintah berikut di konsol Xcode.

    po NST temporaryDirectory ()

Lihat gambar di bawah ini untuk wawasan yang tepatmasukkan deskripsi gambar di sini

Sekarang Anda memiliki jalur yang tepat hingga folder sementara. Anda dapat kembali dan melihat semua folder terkait aplikasi.

Semoga ini juga membantu. Selamat Coding :)

Shubhendu
sumber
1
Tip keren, tapi kenapa tidak po NSHomeDirectory()?
Kode Roadie
9

Di mana Xcode menyimpan simulator di 2019+ Catalina, Xcode 11.0

Runtime

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

Sebagai contoh: iOS 13.0, watchOS 6.0ini mengambil ruang yang paling, jauh. Masing-masing bisa hingga ~ 5GB

Perangkat

$ open ~/Library/Developer/CoreSimulator/Devices

Sebagai contoh: iPhone Xr, iPhone 11 Pro Max. Ini biasanya masing-masing <15 mb.

Penjelasan

Simulator dibagi antara runtime dan perangkat. Jika Anda menjalankan, $ xcrun simctl listAnda dapat melihat gambaran umum, tetapi jika Anda ingin menemukan lokasi fisik dari simulator ini, lihat di direktori ini yang saya tunjukkan.

Benar-benar aman untuk menghapus runtime yang tidak Anda dukung. Anda dapat menginstalnya kembali nanti jika diinginkan.

joshuakcockrell
sumber
8

Cukup lakukan ini:

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

Dan Anda akan mendapatkan sesuatu seperti ini:

/ Pengguna / admin / Perpustakaan / Pengembang / CoreSimulator / Perangkat / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Wadah / Data / Aplikasi / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Dokumen

Pergi ke sana dan Anda akan melihat folder dokumen aplikasi Anda terlepas dari versi XCode. (Gunakan perintah "Pergi ke Folder ..." di Finder dan tentukan path "~ / library").

Versi cepat untuk jalur string:

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

dan URL folder:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)
Lemberg
sumber
Akan memposting jawaban yang hampir sama. Metode ini memiliki keuntungan untuk selalu memberikan jalur yang benar, pada setiap versi simulator iOS. Omong-omong, Anda juga dapat menyalin nilai variabel url di debugger, jika Anda tidak ingin mencatatnya;)
Moose
7

Di iOS 5:

/ Pengguna / [Nama Pengguna] / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / 5.0 / Aplikasi / [AppGUID] /

Karthi
sumber
6

Untuk Xcode 4.6 disimpan di jalur berikut ...

/ Pengguna / [pengguna saat ini] / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / 6.1 / Aplikasi /

Untuk mengetahuinya secara terprogram gunakan kode berikut

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
Durai Amuthan.H
sumber
2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect
4

Untuk iOS 8

Untuk menemukan folder Dokumen , Anda dapat menulis file di folder Dokumen:

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];

katakan, di didFinishLaunchingWithOptions .

Kemudian Anda dapat membuka Terminal dan menemukan folder:

$ find ~/Library -name Words.txt
ohho
sumber
2

jika ada yang masih mengalami masalah ini di singa, ada artikel bagus dengan 19 tips berbeda untuk melihat dir ~ / Library Anda. temukan artikel oleh Dan Frakes di sini http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

Ingat direktori ke simulator diberikan di bawah ini

~ / Perpustakaan / Dukungan Aplikasi / iPhone Simulator / Pengguna /

Edwin
sumber
2

Untuk macOS Catalina, saya menemukan db saya di:

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

Untuk mendapatkan applicationId, saya hanya mengurutkan folder berdasarkan tanggal yang dimodifikasi, meskipun saya yakin ada cara yang lebih baik untuk melakukannya.

stevenspiel
sumber
1

Untuk pengguna yang bereaksi asli yang tidak sering menggunakan Xcode, Anda bisa menggunakannya find. Buka terminal dan cari dengan nama database.

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

Jika Anda tidak tahu nama persisnya, Anda dapat menggunakan wildcard:

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

anjing gembala
sumber
0

Anda dapat mencoba menggunakan kode di bawah ini

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

Untuk membuka dikte di mana Anda App adalah yang Anda bangun di xCode pada simulator, lakukan hal berikut:

  1. buka windor Finder (ikon wajah tersenyum)
  2. lalu klik GO -> Go to Folder
  3. ketik: ~ / Perpustakaan / Dukungan Aplikasi / iPhone Simulator
  4. Direktori adalah versi iOS dari berbagai Simulator
  5. Sub Direktori adalah Aplikasi yang dipasang di simulator
  6. Folder Dokumen adalah tempat pengguna membuat konten yang membuat cadangan ke iCloud
Mike Zriel
sumber
0

Saya tidak memiliki afiliasi dengan program ini, tetapi jika Anda ingin membuka semua ini di finder, SimPholder membuatnya sangat mudah.

Jason
sumber