빌트인 프로파일러로 성능 측정(Measuring Performance with the Built-in Profiler)
물리 성능 최적화

Optimizing the size of the built iOS player

플레이어 크기를 줄이는 데는 Xcode 안에서 적절한 Release build 를 만들고 Unity에서 Stripping Level 을 변경하는 두 가지 방법이 주로 사용됩니다.

배포용 빌드

최종 릴리스 빌드는 Xcode 4.x/5.x 커맨드인 Product -> Archive__를 사용하여 만들어야 합니다. 커맨드를 사용하면 빌드가 릴리스 설정을 사용하여 만들어지고 모든 디버그 심볼이 스트립됩니다. 커맨드를 전달한 후에는 최근 Xcode가 Organizer 창의 Archives__ 탭으로 전환됩니다. Window -> Organizer 메뉴를 통해 수동으로 이 탭으로 이동할 수 있습니다. 탭에는 App Store size estimation__과 Distribution__이라는 매우 유용한 기능이 2개 있습니다. 빌드 크기 추정 기능은 꽤 효과적이지만, 3G 다운로드 최고 속도(현재 100MB)를 목표로 하는 경우 항상 약간의 오차를 감안하는 것이 좋습니다.

iOS stripping level

스트리핑 작업에 의해 활성화되는 크기 최적화는 다음과 같이 진행됩니다.

  1. Strip assemblies 레벨: 스크립트에서 레퍼런스되지 않는 클래스와 메서드가 DLL에서 삭제되어 AOT 컴파일 단계에서 제외되도록 하기 위해 스크립트의 바이트코드를 분석합니다. 최적화는 메인 바이너리와 첨부되는 DLL의 크기를 줄이고, 반사를 사용하지 않는 한 안전합니다.

  2. Strip ByteCode 레벨: (Data 폴더에 저장된) .NET DLL은 메타데이터만 남도록 스트립 다운됩니다. 이렇게 할 수 있는 이유는 모든 코드가 AOT 단계에 이미 미리 컴파일되어 메인 바이너리에 링크되기 때문입니다.

  3. Use micro mscorlib 레벨: 더 작고 특수한 mscorlib 버전이 사용됩니다. Security, Reflection.Emit, Remoting, non-Gregorian calendars 등 일부 컴포넌트는 라이브러리에서 삭제됩니다. 또한 내부 컴포넌트 간 상호 종속성이 최소화됩니다. 최적화는 메인 바이너리와 mscorlib.dll의 크기를 줄이지만, 일부 System 및 System.Xml 어셈블리 클래스와 호환되지 않으므로 주의해서 사용해야 합니다.

이들 레벨은 누적됩니다. 따라서 레벨 3 최적화는 암시적으로 레벨 2와 1을 포함하고, 레벨 2 최적화는 레벨 1을 포함합니다.

__Micro mscorlib__은 많이 스트립 다운된 코어 라이브러리 버전입니다. Unity에서 Mono 런타임에 필요하지 않는 항목만 남습니다. 마이크로 mscorlib을 사용하는 베스트 프랙티스는 애플리케이션에 필요하지 않은 클래스나 기타 .NET 기능을 사용하지 않는 것입니다. 제외할 수 있는 좋은 예로 GUID가 있습니다. GUID는 커스텀 의사 GUID로 쉽게 대체할 수 있고, 그러면 성능이 향상되고 앱 크기가 줄어듭니다.

IL2CPP를 사용한 스트리핑(Stripping)

Refer to documentation on managed bytecode stripping with IL2CPP for more information

Note: it can sometimes be difficult to determine which classes are getting stripped in error even though the application requires them. You can often get useful information about this by running the stripped application on the simulator and checking the Xcode console for error messages.

Simple checklist for making your distribution as small as possible

  1. Minimize your assets: enable PVRTC compression for textures and reduce their resolution as far as possible. Also, minimize the number of uncompressed sounds. There are some additional tips for file size reduction here.
  2. Set the iOS Stripping Level to Use micro mscorlib.
  3. 스크립트 호출 최적화 레벨을 __Fast but no exceptions__로 설정합니다.
  4. System.dll 또는 System.Xml.dll에 있는 것을 코드에 사용하지 않습니다. 이런 라이브러리는 마이크로 mscorlib와 호환되지 않습니다.
  5. 불필요한 코드 종속성을 제거합니다.
  6. API 호환성 레벨을 __.Net 2.0 subset__으로 설정합니다. .Net 2.0 서브셋은 다른 라이브러리와 제한적으로 호환됩니다.
  7. JS Arrays는 사용하지 마십시오.
  8. 제네릭 컨테이너를 구조체를 포함한 값과 결합하여 사용하는 것을 피하십시오.

Unity로 앱을 얼마나 작게 만들 수 있습니까?

모든 크기 최적화를 끈 경우 빈 프로젝트가 앱 스토어에서 차지하는 공간은 22MB 미만입니다. 코드 스트리핑을 사용하면 메인 카메라만 있는 빈 씬의 크기를 앱 스토어에서 12MB 미만까지 줄일 수 있습니다(압축하고 DRM 연결 시).

앱을 앱 스토어에 릴리스한 후 크기가 커진 이유는 무엇입니까?

When publishing your app, Apple App Store service first encrypts the binary file and then compresses it via zip. Encryption increases ’‘randomness’ of the code segment and thus makes it worse for compression. Check “Building for distribution” chapter above how to estimate App Store size before submission.


  • 2017–14–06 편집 리뷰 없이 페이지 수정됨

  • 2017–07–27 편집 리뷰 없이 페이지 수정됨

  • 2017–14–06 - Upated Stripping with IL2CPP section

빌트인 프로파일러로 성능 측정(Measuring Performance with the Built-in Profiler)
물리 성능 최적화