문제

Xcode에 정적 라이브러리를 만들었습니다.이 도서관은 다른 프로젝트에서 성공적으로 사용할 수 있습니다. 그러나 Plist와 같은 자원을 사용하면 프로젝트가 사용되는 주요 프로젝트의 라이브러리에 참조 된 plist를 포함해야합니다.

정적 라이브러리 프로젝트에서 대상의 "복사 번들 리소스"단계에 포함되어 있습니다. 내 코드에서 여기에 내가하고있는 일이 있습니다.

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath   = [mainBundle pathForResource:@"MyClassParams" ofType:@"plist"];

NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

MainBundle을 사용하고 MyClassparams.plist가 메인 프로젝트에 포함되어 있으면 모두 좋습니다. MyClassparams.plist가 라이브러리 프로젝트에 포함되어 있으면 작동하지 않습니다.

NSBUNDLE MAINBUNDLE]이 사용하기에 잘못된 정적 방법을 참조하고 있다고 가정하자면 다음과 같이 대체했습니다.

NSBundle *mainBundle = [NSBundle bundleForClass:[MyClass class]];

이것은 작동하지 않았습니다.

그렇다면 정적 라이브러리에 Plist 또는 기타 리소스를 포함시킬 수 있습니까? 아니면 LIB가 사용되는 프로젝트에 필요한 것을 포함해야합니까?

도움이 되었습니까?

해결책

정적 라이브러리는 번들에 있지 않으며 응용 프로그램에 연결되면 해당 응용 프로그램 번들의 일부입니다. iPhone에서는 효과적으로 작성된 모든 코드가 임베디드 프레임 워크를 포함 할 수 없으므로 MainBundle에 있습니다.

예, 정적 프레임 워크를 연결하는 프로젝트에 모든 리소스를 복사해야합니다.

다른 팁

리소스 파일을 정적 라이브러리에 포함시킬 수 없다는 것을 알고 있습니다 (프레임 워크가하는 일). 프로젝트에서 다른 솔루션을 사용합니다.

정적 라이브러리 "YYY"프로젝트 내부 :

  • 내 정적 라이브러리 프로젝트에 "로드 가능한 번들"대상을 추가합니다 (대상 추가, 코코아,로드 가능한 번들 추가)
  • 이 목표를 정적 라이브러리 대상의 종속성으로 추가합니다.

메인 프로젝트 내부 :

  • 링크 libYYY.a
  • 번들을 추가하십시오 YYY.bundle 복사 된 리소스 파일에

이러한 방식으로 정적 라이브러리에 사용 된 리소스 파일은 기본 프로젝트에서 관리되지 않습니다. 내가 가지고 있다고 말합니다 foo.png 정적 라이브러리에서 사진을 사용합니다

[UIImage imageNamed:@"YYY.bundle/foo.png"]

그런 다음 다음과 같은 분위기를 얻을 수 있습니다.

NSBundle *staticLibBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"YYY" ofType:@"bundle"]];
NSString *filePath   = [staticLibBundle pathForResource:@"MyClassParams" ofType:@"plist"];

NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

아래에서 두 개의 스크린 샷 :

  • 왼쪽:로드 가능한 번들 대상이있는 정적 라이브러리 프로젝트
  • 오른쪽: "라이브러리와 링크 바이너리"에 추가 된 정적 라이브러리 바이너리와 "복사 번들 자원"에 추가 된 리소스 번들을 표시합니다.

Static library project Main project

나는 @jilouc가 제안한 모든 것을 따랐지만 번들을 얻을 수는 있지만 그 안에 파일을 넣지 못했습니다. 두 가지 방법을 모두 시도했습니다 (@"yyy.bundle/image" 또는 staticlib pathforresource...)

그런 다음 아래 방법을 사용하여 작동했습니다!

NSBundle *staticBundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"yy.bundle"]];

NSString *filePath = [[jsBundle resourcePath]stringByAppendingPathComponent:fileName];

NSString* content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top