2010-03-18 5 views
0

저는 코코아 프로젝트에서 매우 유용한 ID3 프레임 워크로 작업하고 있습니다. 내가 수정하고자하는 작은 것이 하나 있지만, 내가 만든 프레임 워크에 적용하기 위해 변경 한 사항을 얻을 수없는 것 같습니다.커스텀 코코아 프레임 워크를 올바르게 수정하려면 어떻게해야합니까?

프레임 워크와 함께 제공되는 소스 코드는 Xcode 프로젝트와 함께 제공되기 때문에 열어 본 후 테스트 용으로 NSLog(@"hello");을 넣습니다. 전화가 걸려 오는 장소에 다른 NSLog() 호출이 있습니다. 표시되는 프레임 워크는 단순한 콘솔 출력 만은 아닙니다.

일단 프레임 워크를 수정하려면 먼저 빌드 폴더를 정리하고 파일을 실제로 제거했는지 확인한 다음 빌드해야합니다. 그런 다음 프레임 워크를 사용하는 Xcode 프로젝트에서 이전 참조를 삭제하고 새롭게 프레임 워크에 새 프레임을 추가했습니다. 새로 빌드 된 프레임 워크로 프로젝트를 실행해도 수정 된 프레임 워크 코드는 호출되지 않습니다. 프레임 워크 Xcode 프로젝트의 일부인 개발 및 배포 빌드를 사용해 보았습니다.

내 직감은 프레임 워크 코드가 컴파일 된 실행 파일이 어떻게 든 캐시된다는 것입니다. 그러나 프레임 워크의 작동 방식에 익숙하지 않으므로 어디서 볼지 잘 모르겠습니다. 무슨 일이 일어나고 있는지 디버깅하는 맥 OS X에서 실행 또는 프레임 워크에 대한 캐싱이 없습니다

답변

1

도움 트릭의 몇 가지가 있습니다 :

명령 행에 대한 사용 otool -L <path_to_your_executable> (부하 명령에 대해 알아 찾을 수는 라이브러리와 프레임 워크를 실행 파일에로드하십시오. ID3 프레임 워크를 찾아 경로를 확인하십시오. @executable_path로 시작하면 프레임 워크를 실행 파일의 래퍼에 복사해야합니다.

어떤 라이브러리가로드되었는지 실제로 확인하려면 환경 변수 DYLD_PRINT_LIBRARIESYES으로 설정하십시오. Xcode (실행 파일 설정에서) 또는 터미널에서이 작업을 수행 할 수 있습니다.

dyld가로드 할 때 라이브러리와 경로가 표시됩니다.

당신의 실행 파일은 실행 파일의 app 래퍼 또는 설치 될 수있는 다른 장소에서 여전히 오래된 프레임 워크를로드합니다. 프로젝트 (프레임 워크 자체가 아니라 프레임 워크를 사용하는 프로젝트)를 정리하십시오.

+0

맞지요. 어떤 이유로 든 otool을 사용할 수 없지만 DYLD_PRINT_LIBRARIES는 매우 유용하며 Library/Frameworks /에서로드 중임을 보여줍니다. 거기에 있다고 주장하는 것 같습니다 (즉, 거기에서 삭제하면 컴파일되지 않습니다).하지만 프레임 워크의 새 빌드를 복사하면됩니다. 고맙습니다. – Septih

+0

거기에서 프레임 워크를로드하려는 이유는 프레임 워크의 'INSTALL_PATH' 빌드 설정 때문입니다. 'otool -L/Library/Frameworks/ID3.framework/ID3'을 사용하면 프레임 워크 설치 경로 (출력의 첫 번째 줄)가 표시됩니다. 항상 프레임 워크를 복사 할 필요는 없습니다. 프레임 워크 빌드 디렉토리에있는 프레임 워크를 사용할 수 있습니다. 메인 실행 파일이이 프레임 워크를로드 할 수있게하려면 또 다른 환경 변수 인'DYLD_FRAMEWORK_PATH'가 있어야합니다. 'man dyld'를 보라. –

관련 문제