2014-06-11 5 views
0

일부 문자열 및 리소스를 교환 할 수있는 OS X 응용 프로그램이 있습니다. 나는 번들 skin.bundle을 만든 내가 쉽게이 코드리소스 번들을 PlugIns 폴더에로드 중

NSString *path = [[NSBundle mainBundle] pathForResource:@"skin" ofType:@"bundle"]; 
if (path != nil) { 
    self.skinBundle = [NSBundle bundleWithPath:path]; 
    [self.skinBundle load]; 
} 
을 나는 주요 응용 프로그램 번들로 번들을 넣어 경우에서 리소스를로드 (이 .APP/내용 아래에 넣어 가도록 (듯이)/자료) 및 사용할 수 있습니다

Cocoa bundle documentation은 모듈화 된 응용 프로그램 용 PlugIns (.app/Contents/PlugIns I believe?) 폴더를 사용하여 대화를하기 때문에 위의 코드를 약간 변경하여 시도했습니다.

NSString *plugins = [[NSBundle mainBundle] builtInPlugInsPath]; 
NSString *path = [[NSBundle mainBundle] pathForResource:@"skin" ofType:@"bundle" inDirectory:plugins]; 

그러나 이제 path은 nil입니다. 나는 또한 동일한 결과를 가진 [[NSBundle mainBundle] pathForResource:@"skin" ofType:@"bundle" inDirectory:@"PlugIns"]를 시도했다.

번들에는 유효한 Info.plist 파일이 포함되어 있습니다 (코드 서명 목적으로).

나는 첫 번째 접근 방식으로 살 수 있지만 물론 궁금해하고 있습니다. 그것을 생각해 보니 skin.obundle을 찾으면 Application Support 폴더에 번들되므로 업그레이드가 쉽게 지속됩니다.

답변

1

NSBundle은 리소스 자체 만 볼 수 있으므로 [NSBundle mainBundle]을 요청하면 Contents/Resources에서로드 할 수 있습니다. 너가 그것을 알 때 명백하게.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSLocalDomainMask, YES); 
NSString *appSupDir = [paths firstObject]; 
appSupDir = [applicationSupportDirectory stringByAppendingPathComponent:kApplicationSupportDirectory]; 
NSString *path = [appSupDir stringByAppendingPathComponent:@"skin.bundle" ]; 
id skinBundle = [NSBundle bundleWithPath:path]; 
(그래서 kApplicationSupportDirectory는 하드 코딩 된 일정이 특별한 경우에, 나는 우리의 소프트웨어 제품군에 대한 공유 AppSupport 디렉토리에서로드하고있어주의) 글로벌 응용 프로그램 지원 디렉토리에서로드 잘 작동

번들로드가 중지되었습니다.이 클래스는 프린시 펄 클래스가없는 리소스 번들이므로로드 할 필요가 없으며로드 할 필요가 없습니다.

관련 문제