Lokasi Dukungan Aplikasi Simulator iPhone Xcode 6


137

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?


Coba ini . Ada aplikasi yang langsung membuka direktori Documents dari menjalankan aplikasi terbaru.
NSRover

Saya menambahkan jawaban (di bagian bawah dari jawaban lain) yang menunjukkan bagaimana secara terprogram mendapatkan path tempat file Core Data berada.
SpokaneDude


Gunakan "NST temporaryDirectory ()". Lihat ini- stackoverflow.com/questions/1108076/…
Shubhendu

Jawaban:


296

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

4
ini benar secara umum tetapi tampaknya ada lebih banyak perubahan folder internal. Ini adalah jalur yang berfungsi untuk saya di Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
Apakah ada cara untuk memahami bahwa angka atau kekuatan kasar adalah satu-satunya kesempatan untuk mendapatkan data?
vir us

89
NSLog (@ "dir aplikasi:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - akan mencetak path lengkap ke folder data
vir us

2
Saya membutuhkan jalan pintas terus-menerus ke direktori dokumen aplikasi saya, untuk debugging cepat. Setelah aplikasi didFinishLaunchingWithOptions. #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.
seabass

32
The xcrun simctl listperintah dapat digunakan untuk melihat kesesuaian antara nama-nama simulator dan perangkat UDID. Atau lebih khusus lagi xcrun simctl list devicesperintahnya.
ThomasW

36

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 juga mengalami masalah dengan SimPholder2 di Yosemite, jadi saya memulai skrip baris perintah untuk membantu Anda menemukan dan membuka jendela Finder ke simulator dan Aplikasi yang Anda inginkan. Ia masuk ke folder dan daftar metadata untuk mendaftar semua folder simulator dan aplikasi. Jika tertarik, lihat di sini
Rodrigo Lima

SimPholder2 bekerja di Yosemite tetapi agak lambat; setelah Anda mengklik ikon di bilah status, tunggu saja beberapa detik dan itu akan muncul.
Jason

Whoa itu karya yang luar biasa dan terbaru dengan Yosemite + Xcode 6.3!
TruMan1

21

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".

masukkan deskripsi gambar di sini

Catatan : Ini hanya berfungsi dengan Xcode 6 (6.1.1 dalam kasus saya) dan di atasnya.

Semoga itu bisa membantu!


Amar, bagaimana Anda menginstal SimulatorManager? Saya pikir itu adalah plugin untuk Xcode tetapi ini adalah proyek Xcode
malena

1
di bilah atas pilih: Produk -> Arsip -> dan kemudian Ekspor Arsip sebagai Aplikasi Mac tanpa penandatanganan kembali (opsi terakhir) Anda akan mendapatkan file .app yang dapat Anda masukkan ke dalam folder Aplikasi Anda seperti aplikasi normal. ..
Heckscheibe

11

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

}

Hebat .. berguna khusus ketika ada beberapa simulator
Yasitha Waduge

6

Ini berhasil bagi saya dengan cepat:

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

3

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!


Terima kasih, saya baru saja memperbarui XcodeWay untuk mendukung folder simulator iOS 8
onmyway133

3

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)")

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

2

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

1

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.)


1

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)")

1

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.


1

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"

1

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


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. 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())

  2. 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.

  3. 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.


0

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.