概要
CFBundleやNSBundleからはAPI経由で動的にBundle内の標準ディレクトリを参照できますが、それぞれ具体的にどこだったら分からなくなるため、SafariをBundleとした場合を例にまとめました。
手順
以下のコードで/Applications/Safari.app
をからBundleオブジェクトを作成したあと、各種パスを取得しました。
CFBundleの場合
/* Safariの場所を指定してCFURLを作成 */
CFURLRef bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
CFSTR("/Applications/Safari.app"),
kCFURLPOSIXPathStyle,
true);
/* SafariのBundleを作成 */
CFBundleRef bundle = CFBundleCreate(kCFAllocatorDefault, bundleURL);
/* 各種パスのURLを取得 */
CFURLRef folderURL = /* 今回試すAPIのいずれか */
/* CFURLから絶対パスを取得してログに表示 */
UInt8 buffer[512] = {0};
CFURLGetFileSystemRepresentation(folderURL,
true,
buffer,
sizeof(buffer));
CFStringRef path = CFStringCreateWithFileSystemRepresentation(kCFAllocatorDefault,
(char*)buffer);
CFShow(path);
CFRelease(path)
CFRelease(bundleURL);
CFRelease(bundle);
NSBundleの場合
/* Safariのパスを渡してNSBundleを作成 */
NSBundle* bundle = [NSBundle bundleWithPath:@"/Applicaitons/Safari.app"];
NSURL* url = [bundle /* 今回試すAPIのいずれか */];
printf("%s", url.fileSystemRepresentation);
CFBundle
CFBundleからはCFURLRefの形で返却されます。
絶対パスに直したものを記載しています。
API | 返却されるパス |
---|---|
CFBundleCopyBundleURL | /Applications/Safari.app |
CFBundleCopyAuxiliaryExecutableURL 1 | /Applications/Safari.app/Contents/MacOS/Safari |
CFBundleCopyBuiltInPlugInsURL | /Applications/Safari.app/Contents/PlugIns |
CFBundleCopyExecutableURL | /Applications/Safari.app/Contents/MacOS/Safari |
CFBundleCopyPrivateFrameworksURL | /Applications/Safari.app/Contents/Frameworks |
CFBundleCopyResourcesDirectoryURL | /Applications/Safari.app/Contents/Resources |
CFBundleCopySharedFrameworksURL | /Applications/Safari.app/Contents/SharedFrameworks |
CFBundleCopySharedSupportURL | /Applications/Safari.app/Contents/SharedSupport |
CFBundleCopySupportFilesDirectoryURL | /Applications/Safari.app/Contents |
NSBundle
CFBundleとほぼ同じですが、SupportFilesDirectoryURL
が消えappStoreReceiptURL
が増えています。
今回はNSURLを取得しましたが、NSStringの形でpathを取得することもできます。
API | 返却されるパス |
---|---|
bundleURL | /Applications/Safari.app |
URLForAuxiliaryExecutable 2 | /Applications/Safari.app/Contents/MacOS/Safari |
builtInPlugInsURL | /Applications/Safari.app/Contents/PlugIns |
executableURL | /Applications/Safari.app/Contents/MacOS/Safari |
privateFrameworksURL | /Applications/Safari.app/Contents/Frameworks |
resourcesURL | /Applications/Safari.app/Contents/Resources |
sharedFrameworksURL | /Applications/Safari.app/Contents/SharedFrameworks |
sharedSupportURL | /Applications/Safari.app/Contents/SharedSupport |
appStoreReceiptURL | /Applications/Safari.app/Contents/_MASReceipt/receipt |