NSHomeDirectory()
ホームディレクトリではなく、サンドボックスのルートを戻しています。[@"~" stringByExpandingTildeInPath]
同じことをしています。
これ/Users/username/Library/Containers/appID/Data
が返ってきたものです。どうすれば入手でき/Users/username/
ますか?
NSHomeDirectory()
ホームディレクトリではなく、サンドボックスのルートを戻しています。[@"~" stringByExpandingTildeInPath]
同じことをしています。
これ/Users/username/Library/Containers/appID/Data
が返ってきたものです。どうすれば入手でき/Users/username/
ますか?
ユーザーの実際のホーム ディレクトリへのパスが必要な場合は、次を使用できます。
char *realHome = getpwuid(getuid())->pw_dir;
完全な例:
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <assert.h>
NSString *RealHomeDirectory() {
struct passwd *pw = getpwuid(getuid());
assert(pw);
return [NSString stringWithUTF8String:pw->pw_dir];
}
これにより、ユーザーのホームへのパスが提供されますが、そのフォルダーへのアクセスが自動的に提供されるわけではありません。コメントに記載されているように、このパスは次の目的で使用できます。
NSHomeDirectory()
アップルのドキュメントから:
ユーザーデータへのアクセス
Mac OS X のパス検索 API は、POSIX レイヤーの上にあり、ユーザーのホーム ディレクトリに対してではなく、コンテナーに対して相対的なパスを返します。アプリをサンドボックス化する前に、ユーザーの実際のホーム ディレクトリ (~) 内の場所にアクセスし、Cocoa または Core Foundation API を使用している場合、サンドボックス化を有効にした後、パス検索コードは代わりにアプリのコンテナーを自動的に使用します。
サンドボックス化されたアプリの初回起動時に、Mac OS X はアプリのメインの設定ファイルを自動的に移行します。アプリで追加のサポート ファイルを使用する場合は、「サンドボックスへのアプリの移行」で説明されているように、それらのファイルをコンテナーに一度だけ移行します。</p>
getpwuid などの POSIX コマンドを使用してユーザーの実際のホーム ディレクトリへのパスを取得している場合は、代わりに NSHomeDirectory 関数などの Cocoa または Core Foundation シンボルを使用することを検討してください。Cocoa または Core Foundation を使用することで、ユーザーのホーム ディレクトリへの直接アクセスに対するアプリ サンドボックスの制限をサポートします。
アプリが機能するためにユーザーのホーム ディレクトリへのアクセスが必要な場合は、Apple のバグ報告システムを使用して、その必要性を Apple に知らせてください。