Di Xcode 6, saya memiliki aplikasi yang saya gunakan di Core Data, tetapi tidak ada folder di Dukungan Aplikasi untuk iOS 8 iPhone Simulator. Di mana file dan basis data Data Inti sqlite saya disimpan?
Di Xcode 6, saya memiliki aplikasi yang saya gunakan di Core Data, tetapi tidak ada folder di Dukungan Aplikasi untuk iOS 8 iPhone Simulator. Di mana file dan basis data Data Inti sqlite saya disimpan?
Jawaban:
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
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#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
Sekarang saya punya simlink yang berfungsi, meskipun iOS8 + XCode6 mengubah GUID Data App saya setiap kali saya membangun.
xcrun simctl list
perintah dapat digunakan untuk melihat kesesuaian antara nama-nama simulator dan perangkat UDID. Atau lebih khusus lagi xcrun simctl list devices
perintahnya.
Saya menyarankan agar Anda menggunakan SimPholder untuk menemukan file Simulator Anda. Ini adalah item menu bar yang melacak aplikasi simulator Anda dan memungkinkan Anda untuk langsung pergi ke folder dan konten mereka. Itu mengagumkan.
Saya menemukan SimulatorManager aplikasi sangat berguna. Ini akan membawa Anda langsung ke folder aplikasi dari simulator yang diinstal. Saya telah mencoba dengan simulator 7.1, 8.0 dan 8.1.
SimulatorManager berada sebagai ikon di baki sistem dan menyediakan opsi untuk "Luncurkan Saat Masuk".
Catatan : Ini hanya berfungsi dengan Xcode 6 (6.1.1 dalam kasus saya) dan di atasnya.
Semoga itu bisa membantu!
Untuk mengetahui di mana file .sqlite Anda disimpan di AppDelegate.m Anda, tambahkan kode berikut
- (NSURL *)applicationDocumentsDirectory
{
NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
sekarang panggil metode ini di AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//call here
[self applicationDocumentsDirectory];
}
Saya bergulat dengan ini selama beberapa waktu. Menjadi sakit besar untuk hanya sampai ke db sqlite lokal saya. Saya menulis skrip ini dan menjadikannya cuplikan kode di dalam XCode. Saya menempatkannya di dalam appDidFinishLaunching saya di dalam appDelegate saya.
//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
Ini menciptakan simlink di root drive Anda. (Anda mungkin harus membuat folder ini sendiri pertama kali, dan chmod, atau Anda dapat mengubah lokasi ke tempat lain) Kemudian saya menginstal plugin xcodeway https://github.com/onmyway133/XcodeWay
Saya memodifikasinya sedikit sehingga akan memungkinkan saya untuk cukup menekan cmd + d dan itu akan membuka penggulung finder ke direktori Dokumen persisten aplikasi saya saat ini. Dengan cara ini, tidak peduli berapa kali XCode mengubah jalur Anda, itu hanya berubah saat dijalankan, dan pembaruan simlink Anda segera di setiap proses.
Saya harap ini bermanfaat bagi orang lain!
Buka pencari> Perpustakaan> Pengembang> CoreSimulator> Perangkat
Kemudian Ubah ikon Pengaturan dari finder pilih Date Added
Pilih aplikasi Anda> data> Wadah> data> Aplikasi>
pilih aplikasi Anda> Dokumen> Ini adalah file db Anda
Dalam kasus saya:
/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite
Kalau tidak, lakukan ini:
NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
- Ini akan mencetak path lengkap ke folder data.
Cepat:
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
Gunakan Finder -> buka folder dan masukkan basepath yang diberikan untuk mencapai folder aplikasi
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSLog(@"%@",basePath);
Simulator menempatkan file di ~ / Library / Developer / CoreSimulator / Devices / ... tetapi path setelah / Devices berbeda untuk semua orang.
Gunakan metode praktis ini. Ini mengembalikan jalur direktori sementara untuk pengguna saat ini dan tidak mengambil argumen.
NSString * NSTemporaryDirectory ( void );
Jadi di kelas ViewController saya, saya biasanya meletakkan baris ini di viewDidLoad saya hanya untuk referensi ketika saya perlu mengambil file yang disimpan CoreData saya. Semoga ini membantu.
NSLog(@"FILE PATH :%@", NSTemporaryDirectory());
(Catatan: untuk pergi ke jalur, dari menu finder klik Go dan ketik ~ / Library untuk membuka direktori tersembunyi kemudian di Jendela Finder Anda dapat mengklik jalur yang ditampilkan di konsol Anda.)
Lokasi ini telah, sekali lagi, berubah, jika menggunakan Swift, gunakan ini untuk mencari tahu di mana folder itu (ini disalin dari file AppDelegate.swift yang dibuat Apple untuk Anda jadi jika itu tidak bekerja pada mesin Anda, cari di file itu untuk sintaksis yang tepat, ini bekerja pada saya menggunakan Xcode 6.1 dan iOS 8 simulator):
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")
Simulator terletak di bawah:
~/Library/Developer/CoreSimulator/
Di sini, mereka terdaftar sebagai direktori dengan nama UUID. Gunakan urutkan berdasarkan 'Tanggal dimodifikasi' untuk menemukan yang terbaru. Navigasi di dalam ke:
/data/Containers/Data/Application/
Di sini Anda akan mendapatkan daftar semua aplikasi pada perangkat itu. Anda dapat kembali menyortir ini 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.
Saya membuat skrip ini yang akan meng-zip aplikasi terbaru yang dibuat untuk simulator apa pun dan memasangnya ke desktop.
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"
Di Swift 4 atau Swift 5 Anda dapat menggunakan NSHomeDirectory()
.
Cara termudah di Xcode 10 (atau Xcode 11) adalah untuk menjeda aplikasi Anda (seperti ketika itu mencapai breakpoint) dan menjalankan baris ini di konsol debugger:
po NSHomeDirectory()
po
singkatan dari objek cetak dan mencetak banyak hal
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
Dengan Swift 4, Anda dapat menggunakan kode di bawah ini untuk mendapatkan direktori home aplikasi Anda. Direktori dokumen aplikasi Anda ada di sana.
print(NSHomeDirectory())
Saya pikir Anda sudah tahu bahwa direktori home aplikasi Anda dapat diubah, jadi jika Anda tidak ingin menambahkan kode tambahan ke basis kode Anda, SimPholder adalah alat yang bagus untuk Anda.
Dan lebih jauh lagi, Anda mungkin bertanya-tanya apakah ada alat, yang dapat membantu Anda menghemat waktu dari penutupan dan pembukaan kembali database SQLite yang sama setiap kali setelah direktori home aplikasi Anda diubah. Dan jawabannya adalah ya, alat yang saya tahu adalah SQLiteFlow . Dari dokumen itu, dikatakan bahwa:
Menangani perubahan nama file database atau direktori. Ini membuat SQLiteFlow dapat bekerja dengan baik dengan database SQLite Anda di simulator iOS.
Inilah sh untuk simulator dan aplikasi yang terakhir digunakan. Jalankan saja sh dan salin teks cetak dan tempel dan jalankan perintah untuk show in finder.
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication