Xcode 6では、Core Dataを使用しているアプリがありますが、iOS 8 iPhone Simulatorのアプリケーションサポートにフォルダはありません。私のファイルとCore Data sqliteデータベースはどこに保存されていますか?
シミュレータディレクトリはXcode 6ベータ版に移動しました...
~/Library/Developer/CoreSimulator
ディレクトリをアプリのDocumentsフォルダに移動するのは少し面倒です。たとえば、
~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite
シミュレータファイルを見つけるには、 SimPholders を使用することをお勧めします。それはあなたのシミュレータアプリを追跡し、あなたがそれらのフォルダとコンテンツに直接行くことを可能にするメニューバーアイテムです。それは素晴らしいです。
SimulatorManager アプリケーションはとても便利です。インストールされているシミュレータのアプリケーションフォルダに直接移動します。 7.1、8.0、8.1のシミュレータで試しました。
SimulatorManagerはシステムトレイにアイコンとして表示され、[ログイン時に起動]オプションを提供します。
注:これはXcode 6(私の場合は6.1.1)以上でのみ動作します。
それが役立つことを願っています!
AppDelegate.mのどこに.sqliteファイルが保存されているかを知るには、次のコードを追加します。
- (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];
}
これは私にとってSwiftでうまくいきました:
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
Open Finder>ライブラリ>開発者> CoreSimulator>デバイス
次に、「アレンジの変更」アイコンを「ファインダー」から「追加日」を選択
アプリ>データ>コンテナ>データ>アプリケーション>を選択します。
アプリを選択してください>ドキュメント> これはあなたの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)")
私はしばらくこれに取り組んだ。私の地元の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
これにより、ドライブのルートにシムリンクが作成されます。 (あなた自身がこのフォルダを最初に作成し、それをchmodするか、あるいは他の場所に場所を変更する必要があるかもしれません)それから私はxcodewayプラグインをインストールしました https://github.com/onmyway133/XcodeWay
私はそれを私が単にcmd + dを押すことを可能にし、それが私の現在のアプリケーションの永続的なDocumentsディレクトリへのFinderワインダを開くことができるようにそれを少し修正しました。このように、XCodeがパスを何回変更しても、実行時にのみ変更され、実行ごとにただちにSimlinkを更新します。
これが他の人に役立つことを願っています!
Finderを使用して - >フォルダに移動し、アプリケーションフォルダにアクセスするために所定のベースパスを入力
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSLog(@"%@",basePath);
Swiftを使用している場合は、この場所が再度変更されます。フォルダがどこにあるかを確認するためにこれを使用します(これはAppleが作成したAppDelegate.Swiftファイルからコピーされます。正しい構文のためのそのファイル、これはXcode 6.1とiOS 8シミュレータを使って私の上で動きます:
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")
シミュレータはファイルを〜/ Library/Developer/CoreSimulator/Devices/...に置きますが、/ Devicesの後のパスはすべての人にとって異なります。
この便利な方法を使ってください。現在のユーザーの一時ディレクトリのパスを返し、引数を取りません。
NSString * NSTemporaryDirectory ( void );
だから私のViewControllerクラスで私は私のCoreDataの保存されたファイルをつかむ必要があるとき私は通常参照のために私のviewDidLoadに通常この行を置きます。お役に立てれば。
NSLog(@"FILE PATH :%@", NSTemporaryDirectory());
(注:パスに移動するには、Finderメニューから[移動]をクリックして「〜/ Library」と入力して隠しディレクトリを開き、Finderウィンドウでコンソールに表示されているパスをクリックします。
シミュレータは以下の場所にあります。
~/Library/Developer/CoreSimulator/
ここでは、それらはUUID名を持つディレクトリとしてリストされています。最新のものを見つけるために '更新日'でソートを使用してください。内側に移動します。
/data/Containers/Data/Application/
ここであなたはそのデバイス上のすべてのアプリケーションのリストを取得します。これをソートして最新のアプリを入手することができます。
注:Xcodeはアプリケーションを実行するたびにディレクトリ名を変更するので、デスクトップでエイリアス/ショートカットを作成することに頼らないでください。
一番簡単な方法はapp ここ を使うことです。これはすべてを自動的に行います。
私はこのスクリプトを作成しました。これは、任意のシミュレータ用に構築された最新のアプリをZipし、それをデスクトップに圧縮します。
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. 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
Swift 4またはSwift 5では、NSHomeDirectory()
を使用できます。
Xcode 10(またはXcode 11)で最も簡単な方法は、アプリを一時停止し(ブレークポイントに達したときなど)、デバッガコンソールで次の行を実行することです。
po NSHomeDirectory()
po
は印刷オブジェクトを表し、ほとんどのものを印刷します
Swift 4では、以下のコードを使ってアプリのホームディレクトリを取得できます。あなたのアプリのドキュメントディレクトリはそこにあります。
print(NSHomeDirectory())
私はあなたがすでにあなたのアプリケーションのホームディレクトリが変更可能であることを知っていると思うので、あなたがあなたのコードベースに追加のコードを追加したくないなら、 SimPholder はいいですあなたのための道具。
さらに、アプリのホームディレクトリが変更された後に毎回同じSQLiteデータベースを閉じて再度開くことから時間を節約するのに役立つツールがあるのではないかと思います。そして答えはイエスです、私が知っているツールは SQLiteFlow です。その文書から、それはそれが言う:
データベースのファイル名またはディレクトリの変更を処理します。これにより、SQLiteFlowはiOSシミュレータのSQLiteデータベースと連携して動作するようになります。
これが最後に使われたシミュレータとアプリケーションのためのshです。 shを実行して印刷されたテキストをコピーし、Finderでshowのコマンドを貼り付けて実行するだけです。
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication