Xcode Aygıt Simülatörünün belge dizini yolu


91

İOS 7'de, iOS simülatörlerinin belge dizini şurada bulunabilir:

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

Ancak iOS 8 Beta Simulator'da yukarıdaki dizinde iOS 8 için ilgili dizini bulamıyorum .

İOS 8 Simulator için belge dizini yolu nerede?

görüntü açıklamasını buraya girin


Deneyin bu . En son çalıştırılan uygulamanın Belgeler dizinini doğrudan açan bir uygulama var.
NSRover



Kitaplık klasörünüzü bulamazsanız, muhtemelen gizlidir. Terminale bu komutu yazmak onu gösterecektir: chflags nohidden ~ / Library
simon_smiley

Xcode eklentisini seviyorsanız , simülatör klasörünüze ve diğer birçok yere gidebilen bir Xcode eklentisi olan github.com/onmyway133/XcodeWay'i deneyin
onmyway133

Yanıtlar:


156

bilgisayarımda yol:

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

NOT: Muhtemelen bu uzun kimlikler (yani UDID'ler) sizin bilgisayarınızda farklıdır.


1
Uygulamanız CoreData kullanıyorsa, klasör konumunu aramanın daha kolay bir yolu olabilir: stackoverflow.com/a/25937606/1103584
DiscDev

13
Hayır, bu yanlış. ObjC projeleri ile Swift projeleri arasında bir ayrım yoktur. Bunlar UDID'lerdir (Benzersiz Cihaz Tanımlayıcıları) ve sizinkini 'xcrun simctl listesi' çalıştırarak görebilirsiniz
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia, doğru ya da değil, Swift ve bir ObjC projesi bu şekilde bilgisayarıma kopyalandı. Her ikisinin de sadece simülatörde derlendiğinden bahsetmeme gerek yok (asıl soru buydu). eğer Xcode Farklı diller için UDID'ler arasındaki fark yaratıyor ve bunu doğru olmadığını düşünüyorum, Apple haber vermesi gerekebilir.
holex

7
Holex, tasarımın yanlış olduğundan değil, ifadenizin yanlış olduğunu söylüyorum (aslında Apple'da CoreSimulator'ı tasarlayan kişi olduğuma dikkat edin, bu yüzden muhtemelen orada bir şeyi düzelten ilk kişi ben olurum yanlış). UDID'ler ayrı cihazlara karşılık gelir. Swift ve objc projelerinizin farklı UDID'ler kullanmasının tek nedeni, projelerinizi farklı simülatör cihazlarına dağıtmış olmanızdır (örneğin, biri için iPhone 5'lere ve diğerini iPhone 6'ya dağıtmışsınızdır).
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia, yeterince kendinden emin hissediyorsan, istediğin zaman cevabımı düzeltebilirsin.
holex

76

NSLogaşağıdaki kodu "AppDelegate" içinde bir yerde, projenizi çalıştırın ve yolu takip edin. Bu, "~ / Library / Developer / CoreSimulator / Devices /" içinde rastgele arama yapmak yerine belgelere ulaşmanız için kolay olacaktır.

Amaç-C

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

Swift
Swift 1.2 kullanıyorsanız, #if #endifblok nedeniyle Simülatörü kullanırken yalnızca geliştirme aşamasında çıkacak olan aşağıdaki kodu kullanın :

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

"/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ..." 'den yolunuzu kopyalayın, " Finder " a gidin ve ardından " Go to Folder " veya command+ shift+ gve yolunuzu yapıştırın, bırakın mac sizi belgeler dizini :)


basit ve verimli!
loretoparisi

43

Sadece yazma içinde feryat kodu 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

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

Çıktı
/ Kullanıcılar / mitul_marsonia / Kitaplık / Geliştirici / CoreSimulator / Cihazlar / E701C1E9-FCED-4428-A36F-17B32D32918A / veri / Kapsayıcılar / Veri / Uygulama / 25174F64-7130-4B91-BC41-AC74257CCC6E / Belgeler

Adresinin yolunu kopyalayın "Finder" gidin ve ardından "... / Users / mitul_marsonia / Library / Geliştirici / CoreSimulator / Cihazlar / E701C1E9-FCED-4428-A36F-17B32D32918A" "Git Klasörüne" veya komut + shift + g ve yolunuzu yapıştırın , bırakın mac sizi belgeler dizininize götürsün


Uygulamanızın hangi klasörde olduğunu nasıl bileceksiniz? Çok fazla dizin var, her birini aramak zorunda mıyım?
KarenAnne


bu, kendi simülatörünüze giden sabit kodlu bir yoldur. Başkası için işe yaramaz. Simülatörü tekrar çalıştırdığınızda aslında bu yol sizin için de değişecektir.
NSRover

#if TARGET_IPHONE_SIMULATOR // neredesin? NSLog (@ "Dokümanlar Dizini:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya

16

İOS uygulamanızı geliştirirken dosya ve klasörleri bulmanızı kolaylaştıran SimPholder adlı güzel bir yardımcı program uygulamasını öneririm. SimPholder2 adlı yeni simülatörlerle çalışmak için yeni bir sürümü var. Simpholders.com adresinde bulunabilir.


Bu, iOS8 Simulator klasör belirsizliğine gömüldüğü, ancak bu uygulama iOS8'i desteklemek için güncellenmediği için harika bir uygulama olurdu.
wibobm

@filmdenkare SimPholder2 kesinlikle iOS 8.0 ve iOS 8.1'i destekliyor
JDibble

AMAN TANRIM. Tamamen kör olmuş olmalıyım. Teşekkür ederim!
wibobm

16

Burada pek çok cevap olmasına rağmen, bunların hiçbiri iOS 8.3 simülatörlerinin klasör yapısının nasıl değiştiğini anlamıyor ve Uygulamanın Verilerini (Belgeler klasörü) bulmanın hızlı bir yolunu sağlamıyor.

İOS 8, bir Uygulamanın Veri depolama klasörleri, Uygulamanın yürütülebilir dosyalarından ayrı olduğundan, iOS 7 ve altı aynı klasör yapısına sahip olduğundan, tek fark, tüm simülatörlerin (farklı türler ve sürümler) şimdi tek, büyük bir klasörde.

Dolayısıyla, bir iOS 8,7,6 simülatörüne giden yol şudur:

~/Library/Developer/CoreSimulator/Devices

Her simülatör, simülatörün her sıfırlanmasında değişen benzersiz bir tanımlayıcıyla adlandırılan bir klasörde yer almaktadır.

Sen bulabilirsiniz Identifiergiderek cihazların ve simülatörleri her biri için Xcode > Window > Devices(tanımlayıcı ilk 3 veya 4 karakter birden yeterince hatırlamak vardır).

Uygulamalarınızı yüklediğinizi bulmak için Run scheme > devices(ekran 2) 'ye bir göz atın .

ekran 1

ekran 2

Simülatörünüzü tanımladıktan sonra, sürümüne bağlı olarak klasör yapısı çok farklıdır:

İOS 8'de bir uygulamanın yürütülebilir dosyası ve veri klasörü farklı klasörlerde bulunur:

Yürütülebilir : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Veri Klasörü : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

Belgeler Klasörü : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

On iOS 7 sadece şimdi hatırlıyorum önce her simülatör (yukarıya bakınız) aynı klasörde olduğu gibi ve klasör yapısı aşağıda aynıdır.


13

Uygulamanız CoreData kullanıyorsa, şık bir numara, terminali kullanarak sqlite dosyasının adını aramaktır.

find ~ -name my_app_db_name.sqlite

Sonuçlar, uygulamanızı çalıştıran simülatörlerin tam dosya yollarını listeler.

Apple'ın iOS Simulator dosya menüsüne "Finder'daki Belgeleri Göster klasörünü göster" gibi bir düğme eklemesini gerçekten isterdim.


1
Terminali sevmelisin.
kakubei

2
Bu, bunu bulmanın oldukça uzun bir yolu gibi görünüyor. Ana dizininizin tamamında arama yapmak ister misiniz?
shortstuffsushi

11

~ / Library / Developer / CoreSimulator / Devices / yoluna bakmamız gerektiği doğru.

Ancak gördüğüm sorun, uygulamayı her çalıştırdığımda yolun sürekli değişiyor olması. Yol, Uygulama dizesinden sonra başka bir uzun kimlik kümesi içeriyor ve bu, uygulamayı her çalıştırdığımda değişmeye devam ediyor. Bu, temelde uygulamamın bir dahaki sefere çalıştığında önbelleğe alınmış herhangi bir veriye sahip olmayacağı anlamına gelir.


Bunu ben de görüyorum.
Nathan Jones

5
Uygulamayı çalıştırdığınızda yollar sürekli değişmiyor. Kitaplığınızda bulunan cihaz başına bir yol vardır. Hangi alt dizini göz önünde bulundurmanız gerektiğini görmek için aygıtların listesini ve UDID'lerini görmek için 'xcrun simctl list' komutunu çalıştırın.
Jeremy Huddleston Sequoia

9

İOS 9.2 ve Xcode 7.2 ile, aşağıdaki komut dosyası, son kullanılan simülatörde son yüklenen uygulamanın Belgeler klasörünü açacaktır;

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

Kolay çalıştırılabilir bir komut dosyası oluşturmak için, onu "Kabuk Komut Dosyasını Çalıştır" ile bir Otomatöre yerleştirin:

Automator Uygulaması içinde Kabuk Komut Dosyasını Çalıştır


7

Xcode 6.0'da CoreSimulator'un benimsenmesiyle, veri dizinleri sürüm başına değil cihaz başına yapılır. Veri dizini ~ / Library / Developer / CoreSimulator / Devices // 'xcrun simctl list'den belirlenebilen verilerdir.

Xcode 5.x veya öncesine geri dönmeyi planlamıyorsanız ~ / Library / Application Support / iPhone Simulator ve ~ / Library / Logs / iOS Simulator'u güvenle silebileceğinizi unutmayın.


Muhtemelen yetkili cevap olarak görülebilecek şeyi verdiğiniz için teşekkürler. Bir simülatörde belirli bir uygulamanın konumunu bulmanın kolay bir yolu (uygulama içinden oturum açmak dışında) var mı?
fzwo

Üzgünüm hayır, ama burada ve forumlarda bunun için birkaç istek gördüm Lütfen bugreport.apple.com
Jeremy Huddleston Sequoia

7

güncelleme: 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
}

Bulucunuza gidin command-shift-g tuşlarına basın (veya menü çubuğunun altındaki Git> Klasöre Git ...) ve "var / klasör /.../ belgelerinin" tam yolunu buraya yapıştırın ve git'e basın.


4

Deneyin ~/Library/Developer/CoreSimulator/Devices/


4

CoreData'yı kullanarak tam yolu depoladığımda da aynı sorunla karşılaştım. Tam yolu alırken, uygulama her yeniden başlatıldığında belge klasörü UUID'si farklı olduğundan boş döndürür. Benim çözümüm şu:

  1. CoreData'da yalnızca belgenin / dosyanın göreli yolunu kaydettiğinizden emin olun. Örneğin, "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg" yerine "Dosyalar / resim.jpg" depolayın.
  2. Uygulama belge konumunu almak için aşağıdakileri kullanın:

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

  3. Geri almak istediğiniz belgenin / dosyanın tam yolunu elde etmek için hem # 2 hem de # 1'i birleştirin.
Apple Geliştirici Notuna başvurabilirsiniz: https://developer.apple.com/library/ios/technotes/tn2406/_index.html


3

İOS 8 Simülatörü için Belgeler Dizini nerede

İPhone Simulator'un Xcode 6 ve bununla birlikte - tabii ki - simüle edilmiş uygulamalarınızın Documents Directory yolunun değiştiğini fark etmiş olabilirsiniz. Bazen ona bir bakmamız gerekebilir.

Bu yolu bulmak bir zamanlar olduğu kadar kolay değildir, yani Kitaplık / Uygulama Desteği / iPhone Simülatörü / 7.1 / Uygulamalar / ardından uygulamanızı temsil eden şifreli bir numara gelir.

Xcode 6 ve iOS 8'den itibaren burada bulabilirsiniz: Kitaplık / Geliştirici / Çekirdek Simülatörü / Cihazlar / şifreli numara / veri / Kaplar / Veri / Uygulama / şifreli numara

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


3

Appdelegate'de, Belge ve Önbellek Yönünü görmek için bu kodu girin:

#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

Günlükte:

Belgeler Dizini: / Kullanıcılar / xxx / Kitaplık / Geliştirici / CoreSimulator / Cihazlar / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / veri / Kapsayıcılar / Veri / Uygulama / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Belgeler /

Önbellek Dizini: / Kullanıcılar / xxx / Kitaplık / Geliştirici / CoreSimulator / Cihazlar / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / veri / Kapsayıcılar / Veri / Uygulama / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Kitaplık / Önbellekler


3

Neler olup bittiğini görmek için uygulama klasörlerine gitmeyi seviyorsanız ve labirent benzeri UUDID'lerden geçmek zorunda kalmak istemiyorsanız, bunu yaptım: https://github.com/kallewoof/plget

ve bunu kullanarak bunu yaptım: https://gist.github.com/kallewoof/de4899aabde564f62687

Temel olarak, bir uygulamanın klasörüne gitmek istediğimde şunu yaparım:

$ 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

./app.shBölüm senkronizasyonlar bağlantıları. Uygulamalar 6.0'dan itibaren Xcode'da her çalıştırma için UUID'yi değiştirdiği için temelde her zaman gereklidir. Ayrıca maalesef uygulamalar 8.x için paket kimliğine ve <8 için uygulama adına göre.


3

Ankur'un cevabına göre ama biz Swift kullanıcıları için:

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

ViewDidLoad'a koyun ve uygulamanın çalıştırılmasının hemen ardından yazdırılacaktır.


3

Simülatörler aşağıda yer almaktadır:

~/Library/Developer/CoreSimulator/

Burada UUID adlarıyla dizinler olarak listelenir. En sonuncuyu bulmak için "Değiştirilme tarihi" ne göre sıralayın. İçeride şuraya gidin:

/data/Containers/Data/Application/

Burada o cihazdaki tüm uygulamaların bir listesini alacaksınız. En son uygulamayı almak için bunu tekrar sıralayabilirsiniz.

NOT: Xcode, uygulamayı her çalıştırdığınızda dizin adını değiştirir, bu nedenle masaüstünde takma ad / kısayol yapmaya güvenmeyin.

En kolay yol, her şeyi otomatik olarak yapan uygulamayı burada kullanmaktır .


2

Simülatör dizini Xcode 6 beta ile şu adrese taşındı ...

 ~/Library/Developer/CoreSimulator

Dizinde uygulamanızın Belgeler klasörüne göz atmak biraz daha zahmetlidir, örneğin,

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

2

Yolu bulmanın en iyi yolu kod aracılığıyla yapmaktır.

Swift kullanarak, sadece fonksiyon içindeki aşağıdaki kodu yapıştırın uygulaması sizin de AppDelegate.swift

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

Obj-C kodu için, @Ankur'daki cevaba bakın.


2

Swift 3.x için

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

1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
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.