2014-05-21 4 views
0

제품의 .dSYM DWARF 파일에서 제외 할 기호가있는 하위 프로젝트가 포함 된 iOS 프로젝트를 작성하고 있습니다.dSYM에서 특정 기호 제외

상황에 따라 하위 프로젝트 (정적 라이브러리)에는 침입자가 전체 앱에 대한 재 충돌 보고서에 dSYM 파일을 사용 했음에도 불구하고 기호화 할 수없는 가치있는 독점 코드가 포함되어 있습니다 . 하위 프로젝트는 매우 특정한 영역을 다루며 독립적으로 잘 테스트되기 때문에 그 코드에서 스택 트레이스를 다시 심벌 링 할 수 없다는 걱정은하지 않습니다. 그러나, 나는 나머지 애플 리케이션을 위해 충돌 보고서를 다시 심벌 링 할 수 있어야한다. 그래서 나는 dSYM이 필요하다. (앱으로 심볼을 배포하는 것은 옵션이 아니다.)

관련 심볼이 모두 바이너리에서 제거되었는지 확인하고 GCC_GENERATE_DEBUGGING_SYMBOLS = NO를 dSYM에서 많이 삭제 했는데도 여전히 클래스 개인용 C++ 메소드 이름을 볼 수 있습니다. dSYM 파일. 참고로, 나는 clang을 사용하고 있습니다.

이 하위 프로젝트의 상징을 손상시키지 않으면 서 어떻게 내 앱용 dSYM을 만들 수 있습니까?

답변

0

늪지 표준 Xcode 워크 플로우를 사용하면이 작업이 어려울 수 있습니다. 정적 라이브러리를 다른 파일 이름으로 이동 ("숨김")하는 쉘 스크립트 단계를 사용하여 무언가를 수행 한 다음 기본 응용 프로그램 바이너리에서 dsymutil을 실행하여 dSYM을 만들 수 있습니다. dsymutil은 정적 라이브러리를 찾을 수 없으므로 해당 기능에 대한 디버그 정보를 포함 할 수 없습니다. 또는 정적 라이브러리의 디버그 정보가없는 버전을 만들 수 있습니다.하지만 스크립팅이 조금 더 필요합니다. 정적 라이브러리는 실제로 파일 (.o)의 zip 파일입니다. 디렉토리를 만들고 .o 파일 (ar x mylib.a)을 추출하고 .o 파일을 제거한 다음 새 정적 라이브러리 (ar q mylib-nodebuginfo.a *.o라고 생각합니다)를 넣고 실행하기 전에 자리에 dsymutil.

일단 내가 생성되면 dSYM에서 디버그 정보를 선택적으로 제거하는 방법을 알지 못합니다. 그것은 가능하지만 누군가는 그런 도구를 작성했다고 생각하지 않습니다.

+0

전체 프로젝트의 하위 프로젝트의 정적 라이브러리에서 디버그 기호가 dSYM으로 전파되는 방식은 무엇입니까? 마치 디버그 심볼이없는 제 3 자 라이브러리 인 것처럼 정적 라이브러리에 링크하여 수행 할 수있는 것처럼 보이지만 실제로 흐름을 올바르게 이해하지 못하는 것 같습니다. – MxSagan

+0

디버그 정보는 .o 파일에 있습니다. 정적 라이브러리 ("ranlib 라이브러리")는 .o 파일 모음입니다. 기본 응용 프로그램은 .o 파일에 포인터 (파일 이름)를 가지고 있습니다. 앱에서 dsymutil을 실행하면 해당 파일 이름을 따라 모든 디버그 정보를 가져 와서 dSYM 번들로 수집합니다. –