Xcode 6 iPhoneシミュレータアプリケーションサポートの場所


137

Xcode 6では、Core Dataを使用しているアプリがありますが、iOS 8 iPhoneシミュレーターのアプリケーションサポートにフォルダーがありません。ファイルとCore Data sqliteデータベースはどこに保存されていますか?


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

Core Dataファイルが存在するパスをプログラムで取得する方法を示す回答を(他の回答の下部に)追加しました。
SpokaneDude、2015


「NSTemporaryDirectory()」を使用します。this-見てstackoverflow.com/questions/1108076/...
Shubhendu

回答:


296

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

4
これは一般的には正しいですが、内部フォルダーの変更がさらにあるようです。これはXcodeのベータ3で私の作品のパスです:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
数値またはブルートフォースがデータにアクセスする唯一のチャンスであることを理解する方法はありますか?
2014

89
NSLog(@ "app dir:%@"、[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); -データフォルダーへの完全なパスを印刷します
2014

2
迅速なデバッグのために、アプリのドキュメントディレクトリへの永続的なショートカットが必要でした。アプリケーションの後で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 iOS8 + XCode6はビルドするたびにアプリのデータGUIDを変更しますが、動作するsimlinkができました。
シーバス14

32
このxcrun simctl listコマンドを使用して、シミュレーター名とデバイスUDIDの間の対応を確認できます。または、より具体的にはxcrun simctl list devicesコマンド。
ThomasW 2014年

36

SimPholdersを使用してシミュレータファイルを見つけることをお勧めします。これは、シミュレーターアプリを追跡し、それらのフォルダーとコンテンツに直接移動できるメニューバー項目です。それは素晴らしいです。


YosemiteのSimPholders2にも問題があったため、コマンドラインスクリプトを開始して、目的のシミュレーターとアプリのFinderウィンドウを見つけて開くことができるようにしました。フォルダーとメタデータのplistを調べて、すべてのシミュレーターフォルダーとアプリを一覧表示します。興味のある方はこちら
ロドリゴリマ2015年

SimPholders2はヨセミテで動作しますが、少し遅いです。ステータスバーのアイコンをクリックしたら、数秒待つだけで表示されます。
Jason

おっと、それは素晴らしく、最新のヨセミテ+ Xcode 6.3で動作します!
TruMan1 2015年

21

私が見つかりました。SimulatorManagerのアプリケーションは非常に便利。インストールされているシミュレーターのアプリケーションフォルダーに直接移動します。7.1、8.0、8.1のシミュレーターで試しました。

SimulatorManagerはシステムトレイにアイコンとして常駐し、「ログイン時に起動」するオプションを提供します。

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

:これはXcode 6(私の場合は6.1.1)以上でのみ機能します。

お役に立てば幸いです。


Amar、SimulatorManagerはどのようにインストールしますか?私はそれがXcodeのプラグインだと思ったが、それはXcodeプロジェクト
malena

1
上部のバーで次を選択します:製品->アーカイブ->再署名せずにアーカイブをMacアプリケーションとしてエクスポート(最後のオプション)すると、通常のアプリケーションのようにアプリケーションフォルダーに配置できる.appファイルが得られます。 ..
Heckscheibe

11

.sqliteファイルがAppDelegate.mのどこに保存されているかを確認するには、次のコードを追加します

- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory      inDomains:NSUserDomainMask] lastObject]);

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

AppDelegate.mでこのメソッドを呼び出します

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  //call here
   [self applicationDocumentsDirectory];

}

素晴らしい..複数のシミュレータがある場合に特に便利
Yasitha Waduge

6

これは私にとって迅速に機能しました:

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

3

しばらくこれに取り組みました。私のローカルsqlite dbに簡単にアクセスするのは大変な苦痛になりました。このスクリプトを記述して、XCode内のコードスニペットにしました。appDelegate内のappDidFinishLaunching内に配置します。


//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

これにより、ドライブのルートにsimlinkが作成されます。(最初に自分でこのフォルダーを作成してchmodする必要がある場合があります。または、場所を別の場所に変更できます)次に、xcodewayプラグインをインストールしましたhttps://github.com/onmyway133/XcodeWay

少し変更して、cmd + dを押すだけで、現在のアプリケーションの永続的なDocumentsディレクトリにファインダーワインダーが開くようにしました。この方法では、XCodeがパスを変更する回数に関係なく、実行時にのみ変更され、実行のたびにsimlinkが即座に更新されます。

これが他の人に役立つことを願っています!


ありがとう、私はXcodeWayを更新してiOS 8シミュレーターフォルダーをサポートします
onmyway133

3

ファインダーを開く>ライブラリ>開発者> CoreSimulator>デバイス

次に、ファインダーからアレンジメントの変更アイコンを選択し、追加日を選択します

アプリを選択>データ>コンテナ>データ>アプリケーション>

アプリを選択> Documents>これはあなたのdbファイルです

私の場合:

/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite

それ以外の場合は、次のようにします。

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

-データフォルダへのフルパスを印刷します。

迅速:

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

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

2

Finder->フォルダに移動し、指定されたベースパスを入力して、アプリケーションフォルダにアクセスします

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSLog(@"%@",basePath);

1

シミュレーターはファイルを〜/ Library / Developer / CoreSimulator / Devices / ...に配置しますが、/ Devicesの後のパスは全員で異なります。

この便利な方法を使用します。現在のユーザーの一時ディレクトリのパスを返し、引数は取りません。

NSString * NSTemporaryDirectory ( void );

そのため、私のViewControllerクラスでは、CoreDataに保存されたファイルを取得する必要がある場合に、参照用としてこの行を通常はviewDidLoadに配置します。お役に立てれば。

  NSLog(@"FILE PATH :%@", NSTemporaryDirectory());

(注:パスに移動するには、ファインダーメニューから[移動]をクリックし、〜/ Libraryと入力して隠しディレクトリを開き、Finderウィンドウでコンソールに表示されているパスをクリックします。)


1

この場所が再び変更されました。Swiftを使用している場合は、これを使用してフォルダーの場所を確認します(これはAppleが作成したAppDelegate.swiftファイルからコピーされるため、コンピューターで機能しない場合は、正しい構文のファイル、これは私の場合Xcode 6.1とiOS 8シミュレータを使用して動作します):

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

1

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

~/Library/Developer/CoreSimulator/

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

/data/Containers/Data/Application/

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

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

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


1

私は、任意のシミュレーター用に構築された最新のアプリを圧縮し、デスクトップに圧縮するこのスクリプトを作成しました。

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

Swift 4またはSwift 5では使用できますNSHomeDirectory()

Xcode 10(またはXcode 11)で最も簡単な方法は、アプリを一時停止し(ブレークポイントに達したときなど)、デバッガーコンソールで次の行を実行することです。

po NSHomeDirectory()

po 印刷オブジェクトを表し、ほとんどのものを印刷します


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. Swift 4では、以下のコードを使用してアプリのホームディレクトリを取得できます。アプリのドキュメントディレクトリがそこにあります。

    print(NSHomeDirectory())

  2. アプリのホームディレクトリが変更可能であることはすでにご存じだと思います。コードベースにコードを追加したくない場合は、SimPholderが最適なツールです。

  3. さらに、アプリのホームディレクトリが変更された後に毎回同じSQLiteデータベースを閉じて再度開く手間を省くのに役立つツールがあるのではないでしょうか。そして答えは「はい」です。私が知っているツールはSQLiteFlowです。そのドキュメントから、それは言う:

    データベースファイル名またはディレクトリの変更を処理します。これにより、SQLiteFlowはiOSシミュレーターでSQLiteデータベースと連携して機能します。


0

最後に使用したシミュレータとアプリケーションのshは次のとおりです。shを実行して、印刷されたテキストをコピーし、Finderに表示するコマンドを貼り付けて実行します。

#!/bin/zsh

lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`

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