LinkMap 분석 초기 정보

4541 단어
                  ,LinkMap           

1.우리가 왜 링크맵을 써야 하는지


  중대형 iOS 프로젝트가 계속 갱신되는 과정에서 코드의 양이 점점 커지고 재구성과 리뷰가 필요한 코드도 점점 많아진다. 그러나 코드가 어느 정도에 이르면 제어할 수 없게 된다. 프로젝트가 지속적으로 통합되고 안정적으로 개발될 수 있도록 iOS 설치 패키지의 크기를 줄이는 것은 필수적인 일이다. 보통 그림과 오디오 파일을 압축하는 것부터 시작한다.개발 도구를 사용하여 불필요하게 사용하지 않는 자원 파일을 찾습니다. 이 단계 이후에는 코드에 대한 재구성을 통해 실행 가능한 파일 전체의 다이어트 효과를 얻을 수 있습니다.
  가 참여한 프로젝트가 계속 교체되는 과정에서 App의 설치 패키지가 계속 커지고 자신의 셸 스크립트 분석을 통해 수십만 줄에 달하는데 이럴 때 몸을 뺄 필요가 있다. 여기에 포함된다.h.m.mm.cpp.rss 형식 파일.프로젝트에 도입된 Pods 파일과 관련된 제3자 라이브러리를 살펴보면 수백 개의 라이브러리에 달한다. 이 때 중대형 앱은 다이어트를 응용하는 문제와 관련된다. 코드가 제어할 수 없는 문제를 어떻게 효과적으로 해결하고 프로젝트의 밑바닥 기초 구조의 안정성과 건장성을 높일 수 있는지 링크맵이 우리에게 답을 줄 수 있다고 믿는다.

2. 링크맵은 무엇인가


iOS 개발 분야에서 LinkMap은 초보자에게 낯선 명사일 수 있다. 쉽게 말하면 LinkMap의 출력은 순수한 텍스트 형식의 파일로 중요한 컴파일 정보와 오류 정보를 포함한다. 이것은 Apple가 당신의 응용을 분석하는 주요한 방식이다. 이런 방식을 통해 응용 프로그램에서 개인 라이브러리를 사용했는지 등 Apple가 응용 규범에 부합되지 않는 내용을 발견할 수 있지만 우리 개발자에게LinkMap은 소스를 분석하고 Crash를 보는 데 유용한 방법입니다.

3. 링크맵의 구성


전체 LinkMap 파일에는
  • App의 컴파일 경로(#Path)
    # Path: /Users/XXXXX/Library/Developer/Xcode/DerivedData/XXXXXXXXXXXX-fwtuexpkzxsfkjaootcqwizogrhf/Build/Products/Debug-iphonesimulator/XXXXX.app/XXXXXXX
    
  • App 대응 아키텍처(#Arch)
    # Arch: x86_64
    
  • App의 전체 대상 파일 목록(#Object files)
  •     [1] /Users/XXXX/Library/Developer/Xcode/DerivedData/XXXXXXX-fwtuexpkzxsfkjaootcqwizogrhf/Build/Intermediates/XXXXX.build/Debug-iphonesimulator/XXXX.build/Objects-normal/x86_64/main.o
        [2] /Users/XXXX/Library/Developer/Xcode/DerivedData/XXXX-fwtuexpkzxsfkjaootcqwizogrhf/Build/Products/Debug-iphonesimulator/libPods-XXXX-XXX-AFHTTPRequestOperationLogger.a(AFHTTPRequestOperationLogger.o)
        [3] /Users/XX/Library/Developer/Xcode/DerivedData/XXXX-fwtuexpkzxsfkjaootcqwizogrhf/Build/Products/Debug-iphonesimulator/libPods-XXX-XXX-AFHTTPRequestOperationLogger.a(Pods-XXX-XXX-AFHTTPRequestOperationLogger-dummy.o)
        [4] /Users/XX/Library/Developer/Xcode/DerivedData/XXXXXX-fwtuexpkzxsfkjaootcqwizogrhf/Build/Products/Debug-iphonesimulator/libPods-XXX-XXX-AFNetworking.a(AFHTTPClient.o)
    ...
    
    
  • App의 세그먼트 테이블(#Section) 세그먼트 테이블 제목에는 주소, 크기, 세그먼트 유형 및 세그먼트 이름이 나열되어 있습니다.데이터 유형은 두 가지 유형으로 나뉘는데 하나는 이다프로그램 코드 세그먼트가 컴파일된 기계 코드를 저장하는 데 사용되는 TEXT, 다른 하나는DATA는 글로벌 변수나 로컬 변수와 같은 저장에 사용됩니다.세그먼트를 더 많이 구분합니다(예:).cstring은 문자열 상수,bss는 초기화되지 않은 전역 변수 및 국부 정적 변수를 나타낸다.const는 대응하는 변수입니다.물론 이 모든 데이터는 파일이 차지하는 공간이지 실행할 때 차지하는 공간이 아니다.
    # Address   Size        Segment Section
    0x100001E80 0x0176F009  __TEXT  __text
    0x101770E8A 0x00002C58  __TEXT  __stubs
    0x101773AE4 0x00003288  __TEXT  __stub_helper
    0x101776D6C 0x000CD35C  __TEXT  __objc_methname
    0x1018440D0 0x0011D09D  __TEXT  __cstring
    0x10196116D 0x0001A327  __TEXT  __objc_classname
    0x10197B494 0x0001F64C  __TEXT  __objc_methtype
    0x10199AAE0 0x00077720  __TEXT  __const
    ...
    
  • App의 구체적인 대상 파일이 대응하는 섹션에서의 위치와 크기(#Symbols)
    0x100001E80 0x00000097  [  1] _main
    0x100001F20 0x000000B0  [  2] +[AFHTTPRequestOperationLogger sharedLogger]
    0x100001FD0 0x00000050  [  2] ___44+[AFHTTPRequestOperationLogger sharedLogger]_block_invoke
    0x100002020 0x00000010  [  2] ___copy_helper_block_
    0x100002030 0x00000010  [  2] ___destroy_helper_block_
    0x100002040 0x000000D0  [  2] -[AFHTTPRequestOperationLogger init]
    0x100002110 0x00000060  [  2] -[AFHTTPRequestOperationLogger dealloc]
    ...
    
  • 4. LinkMap 서비스 시작 방법 및 파일 디렉토리

  • Xcode->Project->Build Settings->Search map->Write Link Map Files 옵션을 YES로 설정합니다. (여기서 주의해야 할 것은 Pods.xcodeproj의 Link Map을 설정하는 것이 아니라 xx-xxxxx.x.xcodeproj를 설정하는 것입니다. 다른 항목도 메인 프로젝트의 컴파일 옵션을 설정하여 유추해야 합니다)
  • 파일은 지정한 경로에 위치하고 기본적으로 ~/Library/Developer/Xcode/Derived Data/xxx-xx-x-fwtuexpkzxsfkjaootcqwizogrhf/Build/Intermediates/xx-xxxxx에 있습니다.build/Debug-iphonesimulator/xxx-xxx.build/xxx-xxx-LinkMap-normal-x86_64.txt(파일 경로 순서가 기본적으로 일치하고 파일 이름이 다를 수 있음)
  • 5. LinkMap 서비스화

  • 기초 서비스로서 우리는 링크맵 파일을 직접 보는 것이 때때로 매우 힘들 때가 있다. 만약에 도형화된 방식에 맞추어 응용을 분석할 수 있다면 개발자에게 큰 편리가 될 것이다.

  • 6. 앱 다이어트 및 전망


      앱 다이어트는 현재 티몰 앱이 해결해야 할 문제이다. 링크맵을 통해 원본 코드를 분석하는 것이 아니라 실제적으로 여러 차원에서 다이어트를 할 수 있다. 이는 자원 파일 최적화, 컴파일 옵션 최적화, 실행 가능한 파일 최적화를 포함한다. 물론 이런 것들은 계속 깊이 있게 세분화할 수 있다.
    애플 정부에서도 앱 다이어트에 대한 좋은 소식을 가져왔다. WWDC2015는 앱 Thining의 앱 다이어트 기능을 가져왔다. 이것은 Xcode7 테스트 버전의 기능 중 하나이다. 앱 Thining은 사용자 장비 유형과 화면 해상도에 따라 다양한 다운로드 패키지를 맞춤형으로 만들어서 사용자에게 저장 공간을 절약할 수 있다. 이것은 좋은 앱 다이어트 방식이라고 믿는다.

    좋은 웹페이지 즐겨찾기