Xcode Device Simulatorのドキュメントディレクトリパス


89

iOS 7では、iOSシミュレーターのドキュメントディレクトリは次の場所にあります。

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

ただし、iOS 8 Beta Simulatorでは、上記のディレクトリにiOS 8に対応するディレクトリが見つかりません。

iOS 8シミュレーターのドキュメントディレクトリパスはどこにありますか?

ここに画像の説明を入力してください


これを試してください。最新のアプリ実行のドキュメントディレクトリを直接開くアプリがあります。
NSRover 2014年



ライブラリフォルダーが見つからない場合は、おそらく非表示になっています。このコマンドをターミナルに入力すると、表示されます:chflags nohidden〜/ Library
simon_smiley

Xcodeプラグインが好きな場合は、github.com/onmyway133/XcodeWayを試してください。これは、シミュレーターフォルダーやその他の多くの場所に移動できるXcodeプラグインです
onmyway133

回答:


155

私のコンピュータでは、パスは次のとおりです。

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

注:おそらくそれらの長いID(つまりUDID)はコンピュータによって異なります。


1
あなたのアプリがCoreDataを使用している場合は、フォルダの場所を検索するための簡単な方法があるかもしれません。stackoverflow.com/a/25937606/1103584
DiscDev

12
いいえ、不正解です。ObjCプロジェクトとSwiftプロジェクトの違いはありません。それらはUDID(Unique Device IDentifiers)であり、 'xcrun simctl list'を実行することで確認できます
Jeremy Huddleston Sequoia

@JeremyHuddlestonSequoia、正しいかどうか、それはSwiftObjCプロジェクトが私のコンピューターにコピーされた方法です。両方ともシミュレータでのみコンパイルされたことを言及する必要はありません(それは元の質問でした)。場合はXcodeのは、異なる言語用のUDIDとの違いは、あなたはそれが正しいないと思う、あなたはアップルに報告する必要があるかもしれません。
holex

7
ホーレックス、私はあなたの発言が間違っていると言っています。デザインが間違っているというわけではありません(私が実際にCoreSimulatorをデザインしたのはAppleの男なので、おそらく私がここで何かを修正する最初の人になるでしょう)違う)。UDIDは個別のデバイスに対応します。swiftプロジェクトとobjcプロジェクトが異なるUDIDを使用する唯一の理由は、プロジェクトを異なるシミュレーターデバイスにデプロイしたためです(たとえば、1つはiPhone 5sにデプロイし、もう1つはiPhone 6にデプロイしたため)。
ジェレミーハドルストンセコイア

@JeremyHuddlestonSequoia、十分な自信があれば、いつでも私の答えを修正していただけます。
holex

75

NSLog以下の「AppDelegate」のどこかにコードを記述し、プロジェクトを実行してパスに従ってください。これは、「〜/ライブラリ/ Developer / CoreSimulator / Devices /」内をランダムに検索するのではなく、ドキュメントにアクセスするのが簡単になります。

Objective-C

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

Swift
Swift 1.2を使用している場合は、以下のコードを使用してください。このコードは、#if #endifブロックを使用しているため、シミュレーターを使用しているときに開発時にのみ出力されます。

#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 ..."からパスをコピーして、「Finder」に移動し、「Go to Folder」またはcommand+ shift+ gを使用してパスを貼り付け、Macにアクセスさせます。ドキュメントディレクトリ:)


シンプルで効率的!
loretoparisi 2015

43

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

出力
/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A / data / Containers / Data / Application / 25174F64-7130-4B91-BC41-AC74257CCC6E / Documents

「/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ...」からパスをコピーし、「Finder 」に移動してから「Go to Folder」またはコマンド+ shift + gとパスを貼り付け、Macがドキュメントディレクトリに移動するようにします


アプリが含まれているフォルダーをどのようにして知るのですか?ディレクトリが多すぎます。それぞれを検索する必要がありますか?
KarenAnne 2014年


これは、独自のシミュレータへのハードコードされたパスです。それは他の人にはうまくいきません。実際、シミュレータを再度実行すると、このパスも変更されます。
NSR、2015年

#if TARGET_IPHONE_SIMULATOR //どこにいますか?NSLog(@ "ドキュメントディレクトリ:%@"、[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya 2015年

16

iOSアプリの開発中にファイルやフォルダーを簡単に見つけられるSimPholdersと呼ばれる素晴らしいユーティリティアプリをお勧めします。SimPholders2と呼ばれる新しいシミュレータで動作する新しいバージョンがあります。それはで見つけることができますsimpholders.com


iOS8シミュレーターがフォルダーの覆い隠しに埋もれているが、そのアプリはiOS8をサポートするように更新されていないので、これはクールなアプリになります。
wibobm 2014年

@wibobm。SimPholders2は確かにiOS 8.0とiOS 8.1をサポートしています
JDibble 2014年

ああ、神様。私は完全に盲目だったに違いありません。ありがとうございました!
wibobm 2014年

16

ここに多くの答えがあるという事実にもかかわらず、どれも、iOS 8.3シミュレーターのフォルダー構造がどのように変更されたかを理解できず、アプリのデータ(ドキュメントフォルダー)をすばやく見つける方法を提供していません。

iOS 8はアプリのデータストレージフォルダーがアプリの実行可能ファイルから分離されているため、iOS 7以下は同じフォルダー構造を持っています。唯一の違いは、すべてのシミュレーター(異なるタイプとバージョン)が現在、1つの大きなフォルダにあります。

したがって、iOS 8,7,6シミュレータへのパスは次のとおりです。

~/Library/Developer/CoreSimulator/Devices

すべてのシミュレータは、シミュレータをリセットするたびに変化する一意の識別子で名前が付けられたフォルダに含まれています。

に移動するとIdentifier、各デバイスとシミュレータのを見つけることができますXcode > Window > Devices(識別子の最初の3または4文字は覚えるだけで十分です)。

アプリをインストールしたアプリを見つけるには、Run scheme > devices(画面2)を見てください。

画面1

画面2

ここで、シミュレーターを特定した後、そのバージョンに応じて、フォルダー構造が大きく異なります。

iOS 8では、アプリの実行可能ファイルとデータフォルダーは別のフォルダーにあります。

実行可能~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

データフォルダ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

ドキュメントフォルダ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

のiOS 7およびフォルダ構造の下には、前にのみ(上記参照)、今、すべてのシミュレータは同じフォルダ内にあることを覚えておくと同じです。


13

アプリがCoreDataを使用している場合、気の利いたトリックは、ターミナルを使用してsqliteファイルの名前を検索することです。

find ~ -name my_app_db_name.sqlite

結果には、アプリを実行したシミュレータへの完全なファイルパスが一覧表示されます。

AppleがiOSシミュレータのファイルメニューに「Finderのドキュメントフォルダを表示する」のようなボタンを追加することを本当に望みます。


1
端末が大好きです。
角兵衛2014年

2
これは、これを見つけるかなり長い道のりのようです。ホームディレクトリ全体を検索しますか?
shortstuffsushi 2015年

11

パス〜/ Library / Developer / CoreSimulator / Devices /を調べる必要があることは正しいです。

しかし、私が目にしている問題は、アプリを実行するたびにパスが変化し続けることです。パスには、アプリケーション文字列の後に別の長いIDのセットが含まれており、アプリを実行するたびに変化し続けます。これは基本的に、次回の実行時にアプリにキャッシュデータがないことを意味します。


私もこれを見ています。
ネイサンジョーンズ

5
アプリを実行するたびにパスが変化し続けることはありません。ライブラリには、デバイスごとに1つのパスがあります。「xcrun simctl list」を実行して、デバイスとそのUDIDのリストを表示し、検討する必要があるサブディレクトリを確認します。
ジェレミーハドルストンセコイア

8

iOS 9.2およびXcode 7.2では、次のスクリプトは、最後に使用したシミュレーターに最後にインストールされたアプリケーションのドキュメントフォルダーを開きます。

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

簡単に実行可能なスクリプトを作成するには、「Run Shell Script」を使用してそれをAutomatorアプリケーションに配置します。

Automatorアプリケーション内でシェルスクリプトを実行する


7

Xcode 6.0でCoreSimulatorを採用すると、データディレクトリはバージョンごとではなくデバイスごとになります。データディレクトリは〜/ Library / Developer / CoreSimulator / Devices // dataで、 'xcrun simctl list'から判断できます。

Xcode 5.x以前にロールバックする必要がない場合は、〜/ Library / Application Support / iPhone Simulatorおよび〜/ Library / Logs / iOS Simulatorを安全に削除できることに注意してください。


おそらく権威ある答えと見なすことができるものを与えてくれてありがとう。シミュレータ内で特定のアプリの場所を見つける簡単な方法はありますか(アプリ内からのロギングを除く)?
fzwo 2014年

申し訳ありませんが、こちらとフォーラムでこれに対するリクエストがいくつかありました。bugreport.apple.comで
Jeremy Huddleston Sequoia

6

アップデート: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
}

Finderに移動し、command-shift-g(またはメニューバーの下の[移動]> [フォルダに移動...])を押して、その完全パス「var / folder /.../ documents」をそこに貼り付け、[移動]を押します。



4

CoreDataを使用してフルパスを保存したときも、同じ問題に直面しました。完全パスを取得すると、アプリが再起動するたびにドキュメントフォルダーのUUIDが異なるため、nullを返します。以下は私の解決策です:

  1. CoreDataにはドキュメント/ファイルの相対パスのみを保存してください。たとえば、「/ Users / yourname /.../ Applications / UUID / Document / Files / image.jpg」の代わりに「Files / image.jpg」を保存します。
  2. 以下を使用して、アプリのドキュメントの場所を取得します。

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

  3. #2と#1の両方を連結して、取得するドキュメント/ファイルの完全パスを取得します。
Apple Developer Noteを参照できます:https : //developer.apple.com/library/ios/technotes/tn2406/_index.html


3

iOS 8シミュレーターのドキュメントディレクトリはどこにありますか

iPhoneシミュレーターがXcode 6で変更されたことに気づいたかもしれません。Xcode6ではもちろん、シミュレートされたアプリのドキュメントディレクトリへのパスが変更されています。時々それを見る必要があるかもしれません。

そのパスを見つけるのは、かつてほど簡単ではありません。つまり、ライブラリ/アプリケーションサポート/ iPhoneシミュレータ/7.1/アプリケーション/の後に、アプリを表す暗号の番号が続きます。

Xcode 6およびiOS 8以降では、次の場所にあります:ライブラリ/ Developer / CoreSimulator / Devices / cryptic number / data / Containers / Data / Application / cryptic number

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


3

Appdelegateで、次のコードを挿入してドキュメントとキャッシュディレクトリを確認します。

#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

ログ:

ドキュメントディレクトリ: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

キャッシュディレクトリ: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches


3

アプリフォルダーに移動して何が起こっているのかを確認し、迷路のUUDIDを通過する必要がない場合は、次のようにします。 https //github.com/kallewoof/plget

そしてそれを使って、私はこれを作りました:https : //gist.github.com/kallewoof/de4899aabde564f62687

基本的に、アプリのフォルダに移動したいときは、次のようにします。

$ 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.sh一部の同期リンク。アプリは6.0の時点でXcodeで実行するたびにUUIDを変更するため、基本的には最近は常に必要です。また、残念ながら、アプリは8.xの場合はバンドルIDで、<8の場合はアプリ名です。


3

Ankurの回答に基づくが、Swiftユーザーの場合:

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

ViewDidLoad内に配置すると、アプリの実行時にすぐに印刷されます。


3

シミュレータは以下にあります:

~/Library/Developer/CoreSimulator/

ここでは、UUID名のディレクトリとしてリストされています。「更新日」によるソートを使用して、最新のものを見つけます。内部ナビゲート:

/data/Containers/Data/Application/

ここでは、そのデバイス上のすべてのアプリケーションのリストを取得します。これを再度ソートして、最新のアプリを取得できます。

注: Xcodeはアプリを実行するたびにディレクトリ名を変更するため、デスクトップでエイリアス/ショートカットを作成することに依存しないでください。

最も簡単な方法は、ここでアプリを使用することです。


2

Xcode 6ベータでシミュレータディレクトリが移動されました...

 ~/Library/Developer/CoreSimulator

アプリのドキュメントフォルダーへのディレクトリの参照は少し難しいです。たとえば、

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

2

パスを見つける最善の方法は、コードを使用することです。

Swiftを使用して、AppDelegate.swiftの関数アプリケーション内に以下のコードを貼り付けるだけです

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

Obj-Cコードについては、@ Ankurからの回答を参照してください


2

Swift 3.xの場合

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)")
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.