2009-12-08 5 views
9

Apple이 개인 API 사용을 자동으로 확인하기 위해 일종의 정적 분석을 실행 했으므로 Three20 라이브러리로 인해 많은 사람들이 발견되었습니다. 필자는 코드에서 직접 컴파일 한 타사 라이브러리를 사용하며 Apple에 제출하기 전에 비공개 API 사용을 자동으로 감사하여 해당 부분을 제거/다시 작성할 수 있습니다.제 3 자 라이브러리에서 개인 API 사용을 탐지하고 피하는 방법

내 응용 프로그램 실행 파일에 nm을 실행하면 기호 목록이 표시되고 거기에 사용하지 않는 기호가 표시됩니다. 예를 들어 _AudioServicesPlaySystemSound를보고 XCode에서 "AudioServicesPlaySystemSound"를 검색하면 결과가 표시되지 않습니다. 자동으로 개인 API에 대한 호출을 식별 할 수있는 방법이 있습니까? 예를 들어 Apple이 초기 밑줄로 이름을 지정하는 습관이 있음을 알 수 있습니다.

그러나 개인 API에 대한 호출을 의도적으로 포함하면 nm의 출력에 나타나지 않지만 이진에서 strings을 실행하면 표시됩니다. 이를 바탕으로 내가 가진 한 가지 아이디어는 모든 개인 API 호출의 거대한 목록을 거대한 테이블로 컴파일하고 문자열 출력에서 ​​자동으로 검색하는 것이 었습니다. 나는 아직 그 짓을하지 않았다.

아무도이 물건을 자동으로 잡는 방법에 대한 조언이 없으므로 한 번만 검토 과정을 거 칩니 까?

+0

그들은 Three20에 반대합니까? 실제로 iPhone 용 Facebook 앱을 만든 개발자가 작성한 것입니다. 귀하의 애플 리케이션이 Three20으로 인해 거부 된 경우, Facebook 응용 프로그램도 있어야합니다 ... Heh. 그냥 선생님 ;-) –

+0

예 ... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 –

+0

다음에 Facebook에서 업데이트를 제출하면 거부 될 것이라고 생각합니다. Apple 정책을 준수하는 최신 버전을 사용하지 않습니다. – bpapa

답변

4

대신 링크 된 실행 파일의 오브젝트 파일에 나노를 실행 시도 할 수 :

nm -g -j *.o | sort | uniq 

객체는 build/<app>.build/*/<app>.build/Objects-normal 하위 디렉토리에 있어야합니다.

호출 한 기능 중 하나가 AudioServicesPlaySystemSound을 호출하기 때문에 AudioServicesPlaySystemSound에 대한 참조가 표시됩니다. 일반적으로 nm 덤프에 표시되지 않습니다

목표 C 호출, 당신은 그것을 위해 otool를 사용해야합니다 :

otool -ov <object file> 
3

사용이 개발 도구, App Scanner을. .app 파일에서 비공개 API 메소드를 검색합니다. 향후 릴리스에서는 비공개 API 인스턴스 변수도 확인합니다.

+1

링크가 깨졌습니다. 시도해보십시오. https://github.com/ChimpStudios/App-Scanner – chown

+0

APP 스캐너가 실제로 작동합니까? 정확도는 – Kiarash

+0

프로젝트가 종료되어 릴리스가 없습니다. –

관련 문제