2013-04-30 5 views
6

저는 애플리케이션에서 링크 된 정적 라이브러리를 가지고 있습니다. 라이브러리 코드는 응용 프로그램 번들에있는 번들에있는 파일을 엽니 다. 열기는 다음과 같이 실행됩니다.테스트 대상에 번들 파일을 추가/열기하는 방법

이 작업은 정상적으로 작동합니다.

그러나 라이브러리에 단위 테스트 코드를 추가하고 논리 테스트 대상을 갖고 싶습니다. 파일이 정적 라이브러리의 번들이 아닌 응용 프로그램의 번들에 있으므로 Config.plist 파일을 복사하여 Copy Bundle Resources을 통해 테스트 코드 대상에 추가했습니다. 그러나 테스트 코드를 실행할 때 파일을 찾을 수 없습니다. 왜 그런가요?

위의 내용이 혼란 스럽다는 점에서, 여기에 작업 영역 구조에 대한 요약이 있습니다.

Workspace contains: 
    Application Project with application target, which contains (X) 
     Config.plist (a) 
    Library project which contains: 
     Library target, which contains: 
      the code opening the file in the bundle (b) 
     Test library target, which contains: (Y) 
      A Copy of the Config.plist (c) 

따라서 X를 빌드하면 b가 실행될 때 다음을 찾을 수 있습니다. 그러나 그것이 실행될 때 Y를 만들면 b는 c를 찾을 수 없습니다.

답변

10

내가 [번들 mainBundle] [NSBundle bundleForClass : [자체 클래스]로 변경 한 경우 내가 찾은

+0

+1 어떻게 찾았습니까? – prodos

+0

나는 기억할 수 없다 – Gruntcakes

+0

Brilliant. 내가 필요한 것. – fatuhoku

0

프로젝트 라이브러리에서 응용 프로그램 대상을 만들고 해당 파일을 해당 대상에 복사 한 다음 라이브러리 코드를 테스트하는 응용 프로그램 테스트 대상을 동일한 프로젝트 내에서 만들 수 있습니다.

0

문제는 정적 라이브러리에 번들 리소스가 없음을 나타냅니다. 일단 컴파일되면 컴파일 된 코드와 헤더 파일로만 구성됩니다. 따라서 정적 라이브러리 plist 리소스를 복사 할 수 없습니다.

그래서 라이브러리 번들을 복사하는 다른 프로세스가 필요하므로 빌드 디렉토리에서 끝납니다.

가장 효과적인 방법은 링크 이진 라이브러리 단계 전에 스크립트 실행 단계에서 스크립트를 사용하여이 작업을 수행하는 것입니다. 비슷한 프로젝트를 수행해야하는 프로젝트 중 하나의 스크린 샷을 첨부합니다. 스크립트의 첫 번째 행에 파일 이름을 적용하여 필요한 것을 얻을 수 있어야합니다. 모든 환경 변수는 표준으로 미리 정의되어 있으므로이 스크립트 외의 추가 구성은 필요하지 않습니다.

환경 변수가 기본 xCode 4 빌드 위치 이외의 다른 곳에서 작동하는지 테스트하지 않았습니다.

Script to copy resource from static library to Parent Project build directory

+0

정적 라이브러리 번들이없는 다음 두 경우 모두에서 작동하지만 논리를 정적 라이브러리의 테스트 대상은 않습니다. – Gruntcakes

+0

그러나 라이브러리 프로젝트는 않습니다. 위의 구성에서 라이브러리 프로젝트가 있다고 진술합니다. 귀하의 구성을 다시 살펴보면서 내가 제공 한 내용이 귀하가 설정 한 방식에 적용되지 않는다는 것을 알고 있습니다. 그렇다면 라이브러리 테스트 대상에 config plist가 필요한 경우 라이브러리 프로젝트의 config.plist에 라이브러리에 필요한 데이터 사본 하나를 저장하는 것이 가장 좋습니다. 그런 다음 위의 기술을 사용하여 라이브러리의 기본 데이터를 기본 프로젝트로 복사 할 수 있습니다. 전체 결과는 모듈화 된 빌드 프로세스가되어야합니다. – TheBasicMind

+0

논리 테스트 라이브러리가 있고 구조에 라이브러리 프로젝트와 테스트 라이브러리 프로젝트가 모두 있고 테스트 라이브러리의 일부로 plist가 표시되어 있습니다. 논쟁하지 않으려 고합니다. 당신의 대답에 감사드립니다. 감사. – Gruntcakes