1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CFBundle、NSBundleからAPIで参照できるディレクトリ一覧

Last updated at Posted at 2020-04-26

概要

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
  1. 第2引数にはNULLを指定。

  2. 引数には"Safari"を指定。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?