İPhone Simulator verilerini nerede saklıyor?


234

Uygulama verilerini depolamak için kullandığım bir SQLite DB'si var ve yaşadığım bir sorunu ayıklamak için içine bir göz atabilirim - ama iPhone Simulator genellikle verilerini nerede saklıyor?

Yanıtlar:


291

Kabul edilen cevap SDK 3.2 için doğrudur - SDK 4 , bu yoldaki / User klasörünü simüle edebileceği eski iPhone OS / iOS sürümleri için bir sayıyla değiştirir, böylece yol şöyle olur:

~ / Kütüphane / Uygulama Desteği / iPhone Simülatörü / [İşletim Sistemi sürümü] / Uygulamalar / [appGUID] /

önceki SDK'yı birlikte yüklediyseniz, 3.1.x simülatörü verilerini kaydetmeye devam edecektir:

~ / Kütüphane / Uygulama Desteği / iPhone Simülatörü / Kullanıcı / Uygulamalar / [appGUID] /

Xcode6 ve iOS8 için

~ / Library / Geliştirici / CoreSimulator / Cihazlar / [Deviceıd] / veri / Konteyner / Veri / uygulama / [Appıd] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert

174
GUID'nin size ait olduğu bulucuyu aramak yerine, pisca46'nın aşağıdaki cevabına dikkat edin: po NSHomeDirectory()Hata ayıklayıcıyı yazın. Kes ve Git> Klasöre Git (Cmd-Shift-G) içine yapıştırın.
mackworth

Simülatörü başlattığımda 8.2 diyor, ancak bu klasöre baktığımda gördüğüm tek sürüm numarasının 7.1 olması biraz endişeliyim. Bu beni yanlış yere baktığım için endişelendiriyor.
bugloaf


4
Bu cevabın ne kadar basit, daha kullanışlı, daha az hataya eğilimli ve daha az sinir bozucu olduğunu vurgulamak zordur (mackworth'un yukarıdaki yorumunda önerildiği gibi). Sadece bir satır ekleyebilir NSLogsenin bu AppDelegate's didFinishLaunchingWithOptions:veya mümkünse po NSHomeDirectory()ayıklananları. Her iki durumda da, dizeyi kopyalayın ve ile bulucuda açın Cmd+Shift+G. Değişen bir şey bilmek yerine standart bir komut istemiş olduğunuz için bu daha iyi çalışır .
Benjohn

93

Uygulama verilerinizin Terminal olmadan nerede olduğunu bulmanın başka (daha hızlı?) Bir yolu var:

  1. Simülatörde uygulamayı başlatın
  2. Açık Etkinlik Monitörü
  3. CPU sekmesinde uygulamanızın adını bulun
  4. Çift tıklayın ve "Dosya ve Bağlantı Noktalarını Aç" ı açın

resim açıklamasını buraya girin


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];cihaz tanımlayıcıyı verir
oabarca

@oabarca, tanımlayıcının simülatörün deviceID veya appFolder ile ilgisi yoktur; Xcode 11.2.1 ve iOS 13.2.2'yi kullanıyorum
DawnSong

78

Bulundu:

~/Library/Application Support/iPhone Simulator/User/

16
Nasıl aranır
rohan-patel

Lütfen dsmudger tarafından aşağıdaki güncellenmiş yanıta bakın, şu anda doğru cevaptır.
Tom Susel

74

iOS 8 ~ / Kütüphane / Geliştirici / CoreSimulator / Cihazlar / [Cihaz Kimliği] / veri / Uygulamalar / [appGUID] / Belgeler /


1
Cihaz Kimliği almanın herhangi bir yolu var mı?
msmq

2
@msmq denemekxcrun instruments -s
Shazron

11
@msmq Mevcut simülatörünüzü, Donanım -> Cihaz -> Cihazları Yönet ... -> Simülatörünüzü "SİMÜLATÖRLER" listesinden açın. Sonra sağ tarafta "Tanımlayıcı" bulunur. Bu Aygıt Kimliği.
RichX

Burada [appGUID] nasıl bulunur?
Yang Sen

66

Lion'da Users/[username]/Librarygizlidir.

Finder'da görüntülemek için, ekranın üst kısmındaki 'Git' menüsünü tıklayın ve 'Kütüphane'yi göstermek için' alt 'tuşunu basılı tutun.

'Kütüphane'yi tıklayın, daha önce gizli olan kütüphane klasörünüzü görebilirsiniz.

Önceden tavsiye edilenler:

kullanım

chflags nohidden /users/[username]/library

bir terminalde klasörü görüntülemek için.


1
daha sonra şu adreste bulabilirsiniz: ~ / Kütüphane / Uygulama Desteği / iPhone Simülatörü / [İşletim Sistemi sürümü] / Uygulamalar / [appGUID] /
Rafael Moreira

Bu normal kullanıcılar için ilginç bir öneri, ancak bana göre iOS / OS X geliştiricilerinin kütüphaneye oldukça düzenli bir şekilde erişmeleri gerekiyor ve bu yüzden bir daha gizlenmesini istemiyorlar. (Sonra tekrar, birçok geliştirici Finder yerine Terminal kullanıyor?)
ArtOfWarfare

58

Şimdiye kadarki en kolay yol.

  1. Bir yerde bir kesme noktası yakala.

  2. Enter po NSHomeDirectory()içinde konsol penceresi

Sonuç:

(lldb) po NSHomeDirectory () / Kullanıcılar / kullanıcı adı / Kütüphane / Geliştirici / CoreSimulator / Cihazlar / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Konteynerler / Veri / Uygulama / 395818BB-6D0F-499F-AAFE-068A783D9753


1
Bunu daha önce bilseydim. Bu doğru cevap olmalıydı
Ivan Cantarino

diğer tüm cevapların da doğru olduğunu düşünüyorum. Ama bu benim için kolay gibi görünüyor: -]
Lal Krishna

37

Simülatör çalışıyorsa, herhangi bir uygulamanın kapsayıcısına giden yolu alabilirsiniz:

xcrun simctl get_app_container booted <app bundle identifier>

Örnek çıktı:

$ 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", simctlbir aygıt UDID'sinin beklendiği her yerde çoğu komutun yerine kullanılabilir .

xcrun simctl listİle cihazların listesini görebilir ve belirli komutlarla ilgili yardım alabilirsiniz xcrun simctl help.

Güncelleme : Xcode 8.3'teki popüler istekle artık "app", "data", "groups" veya bir uygulama grubu tanımlayıcısı ekleyerek istediğiniz kapsayıcı türünü belirleyebilirsiniz.

Veri taşıyıcısını almak için:

$ xcrun simctl get_app_container booted com.example.app data

mükemmel bir tane. Device_id ve appId'yi almak için komut çalıştırmanıza gerek yoktur. Hepsini almak için bir adım
iamhite

Bu kabul edilmelidir, çünkü bu tür şeyleri yapmanın en "istikrarlı" yolu.
Olha

35

Xcode 5 ile aşağıdaki kodu kullanabilirsiniz:

#import <Foundation/NSFileManager.h>

ve:

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

Sonuç şöyle görünebilir:

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

hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhİOS uygulamanızı tanımlayan bir onaltılık dize nerede .


16
Bu aynı zamanda hata ayıklayıcıda çalışır: po NSHomeDirectory()
mackworth

30

Görünüşe göre Xcode 6.0, en azından iOS 8 simülatörleri için bu konumu bir kez daha taşıdı.

~ / Library / Geliştirici / CoreSimulator / Cihazlar / [Deviceıd] / veri / Konteyner / Veri / uygulama / [Appıd]


4
~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / içinde ayrıca "device.plist" adında bir .plist dosyası vardır. Eğer iphone-6 veya iphone-5s gibi cihaz adlarını bulabilirsiniz. DeviceID çok kafa karıştırıcı, bu yüzden .plist dosyasının içine bakmanız gerektiğini düşünüyorum.
EFE

1
AppID nasıl alınır?
Görünen Ad

1
'Ls -l' kullanarak ve en son hangi uygulamanın dosyalarının oluşturulduğunu anlayarak uygulama kimliğini bulmak için hile yaptım. Başkaları için de işe yarayabilir.
Maya Webster

1
Ya da Uygulamayı listenin en üstüne çıkarmak için bulucuda "oluşturulduğu tarihe" göre sıralayın.
Ammar Mujeeb

30

Uygulamanın simülatörde nerede olduğunu bulmanın en kolay yollarından biri. Kullanıcı "NSTemporaryDirectory ()"

adımları-

  1. Uygulamada herhangi bir yere kesme noktası uygulayın ve uygulamayı çalıştırın.
  2. Uygulama kesme noktasında durduğunda, Xcode konsoluna aşağıdaki komutu yazın.

    po NSTemporaryDirectory ()

Doğru bir fikir edinmek için aşağıdaki resme bakınresim açıklamasını buraya girin

Artık geçici klasöre giden tam yol var. Geri dönebilir ve uygulamayla ilgili tüm klasörleri görebilirsiniz.

Umarım bu da yardımcı olur. Mutlu Kodlama :)


1
Güzel ipucu, ama neden olmasın po NSHomeDirectory()?
Code Roadie

9

Xcode'un simülatörleri 2019'da nerede sakladığı Catalina, Xcode 11.0

Runtimes

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

Örneğin: iOS 13.0, watchOS 6.0Bunlar farkla, en çok yer kaplar. Her biri ~ 5GB'a kadar olabilir

Cihazlar

$ open ~/Library/Developer/CoreSimulator/Devices

Örneğin: iPhone Xr, iPhone 11 Pro Max. Bunlar tipik olarak her biri <15 mb'dir.

açıklama

Simülatörler çalışma zamanları ve cihazlar arasında bölünür. Çalıştırırsanız $ xcrun simctl listbir genel bakış görebilirsiniz, ancak bu simülatörlerin fiziksel konumunu bulmak istiyorsanız, gösterdiğim bu dizinlere bakın.

Desteklemediğiniz çalışma zamanlarını silmek tamamen güvenlidir. İsterseniz bunları daha sonra yeniden yükleyebilirsiniz.


8

Sadece bunu yapın:

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

Ve şöyle bir şey elde edeceksiniz:

/ Users / yönetici / Library / Geliştirici / CoreSimulator / Cihazlar / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / veri / Kapları / Veri / Uygulama / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Belgeler

Oraya gidin ve XCode sürümü ne olursa olsun uygulamanızın belge klasörünü göreceksiniz. (Finder'da "Klasöre Git ..." komutunu kullanın ve "~ / kütüphane" yolunu belirtin).

Dize yolu için hızlı sürüm:

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

ve klasör URL'si:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)

Neredeyse aynı cevabı göndermek üzereydi. Bu yöntem, iOS simülatörünün herhangi bir sürümünde her zaman doğru yolu verme avantajına sahiptir. Bu arada, oturum açmak istemiyorsanız url değişkeninin değerini de ayıklayıcıda kopyalayabilirsiniz;)
Moose

7

İOS 5'te:

/ Kullanıcılar / [Kullanıcı Adı] / Kütüphane / Uygulama Desteği / iPhone Simülatörü / 5.0 / Uygulamalar / [AppGUID] /


6

Xcode 4.6 için aşağıdaki yolda saklanır ...

/ Kullanıcılar / [currentuser] / Kütüphane / Uygulama Desteği / iPhone Simulator / 6.1 / Uygulamalar /

Programlı olarak bilmek için aşağıdaki kodu kullanın

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);

2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect

4

İOS 8 için

Belgeler klasörünü bulmak için Belgeler klasörüne bir dosya yazabilirsiniz:

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

söyle didFinishLaunchingWithOptions.

Ardından bir Terminal açabilir ve klasörü bulabilirsiniz:

$ find ~/Library -name Words.txt


2

MacOS Catalina için, benim db bulundu:

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

Almak için, applicationIdklasörleri değiştirildiği tarihe göre sıraladım, ancak bunu yapmanın daha iyi bir yolu olduğundan eminim.


1

Xcode'u sık kullanmayan yerel tepki kullanan kullanıcılar için kullanabilirsiniz find. Bir terminal açın ve veritabanı adıyla arayın.

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

Tam adı bilmiyorsanız joker karakterler kullanabilirsiniz:

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


0

Aşağıdaki kodu kullanmayı deneyebilirsiniz

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

0

Simülatörlerde xCode'da oluşturduğunuz Uygulamanın bulunduğu sözlükleri açmak için aşağıdakileri yapın:

  1. bir Finder windor açın (gülen yüz simgesi)
  2. ardından DEVAM -> Klasöre Git seçeneklerini tıklayın
  3. tür: ~ / Kütüphane / Uygulama Desteği / iPhone Simülatörü
  4. Dizinler, farklı Simülatörlerin iOS sürümüdür
  5. Alt Dizinler simülatöre yüklenen uygulamalar
  6. Belgeler klasörü, kullanıcının iCloud'a yedekleme yapan içerik oluşturduğu yerdir

0

Bu programla herhangi bir bağlantım yok, ancak eğer herhangi birini bulucuda açmak istiyorsanız SimPholders bunu inanılmaz derecede kolaylaştırıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.