빌드한 iOS 플레이어 크기 최적화
플레이어 크기를 줄이는 데는 Xcode 안에서 적절한 Release build 를 만들고 Unity 에서 Stripping Level 을 변경하는 두 가지 방법이 주로 사용됩니다.
최종 릴리스 빌드는 Xcode 커맨드 Product > Archive 를 사용하여 제작될 것으로 예상됩니다. 이 커맨드를 사용하면 빌드를 릴리스 설정으로 제작하고 모든 디버그 심볼을 제거할 수 있습니다. 이 커맨드를 전달하면 Xcode는 Organizer 창의 Archives 탭으로 전환합니다. 앱 크기를 계산하는 방법과 다른 크기 줄이기 팁은 앱 크기 줄이기에 관한 Apple의 기술 Q&A를 참조하십시오.
참고: 무선 전송 규정(over-the-air, OTA) 다운로드 한도(현재 150MB)를 목표로 하는 경우 오류에 대해 약간의 추가 마진을 확보하는 것이 좋습니다.
다음과 같이 작업을 스트리핑하여 Mono 스크립팅 백엔드 빌드에 대한 크기 최적화를 활성화하십시오.
Strip assemblies 수준: 스크립트의 바이트코드를 분석하여 스크립트에서 레퍼런스되지 않는 클래스와 메서드가 DLL에서 삭제하고 AOT 컴파일 단계에서 제외합니다. 이 최적화는 메인 바이너리와 첨부되는 DLL의 크기를 줄이며, 반사를 사용하지 않는 한 안전합니다.
Strip ByteCode 수준: (Data 폴더에 저장된) .NET DLL은 메타데이터만 남도록 스트립됩니다. 이렇게 할 수 있는 이유는 모든 코드가 AOT 단계에서 이미 미리 컴파일되어 메인 바이너리에 링크되기 때문입니다.
Use micro mscorlib 수준: 더 작고 특수한 mscorlib 버전을 사용합니다. Security, Reflection.Emit, Remoting, non-Gregorian calendars 등 일부 컴포넌트는 라이브러리에서 삭제됩니다. 또한 내부 컴포넌트 간 상호 종속성이 최소화됩니다. 이 최적화는 메인 바이너리와 mscorlib.dll의 크기를 줄이지만, 일부 System 및 System.Xml 어셈블리 클래스와 호환되지 않으므로 주의해서 사용해야 합니다.
각 수준은 누적되어 적용됩니다. 3수준 최적화는 1수준과 2수준 최적화를 포함하고, 2수준 최적화는 1수준 최적화를 포함합니다.
Micro mscorlib 은 많이 스트립된 코어 라이브러리 버전입니다. Mono 런타임에 필요한 항목만 Unity 에디터에 남습니다. Micro mscorlib을 사용하는 모범 사례는 애플리케이션에 필요하지 않은 클래스나 기타 .NET 기능을 사용하지 않는 것입니다. 제외할 수 있는 좋은 예로 GUID가 있습니다. GUID는 커스텀 의사(pseudo) GUID로 쉽게 대체할 수 있고, 이렇게 하면 성능이 향상되고 앱 크기가 줄어듭니다.
자세한 내용은 IL2CPP로 관리 바이트코드 스트리핑 문서를 참조하십시오.
참고: 이것은 때로 어떤 클래스가 애플리케이션에 필요한데도 스트리핑되고 있는지 알기 어려울 수 있습니다. 종종 스트리핑된 애플리케이션을 시뮬레이터에서 실행하고 Xcode 콘솔에서 오류 메시지가 표시되는지 확인하여 이와 관련된 유용한 정보를 얻을 수 있습니다.
모든 크기 최적화를 끄고 만든 빈 프로젝트는 앱 스토어에서 22MB 미만의 공간을 차지합니다. 코드 스트리핑을 사용하면 메인 카메라만 포함하는 빈 씬의 크기를 앱 스토어에서 12MB 미만(압축하고 DRM 연결 시)까지 줄일 수 있습니다.
앱을 퍼블리시하면 Apple 앱 스토어 서비스가 바이너리 파일을 먼저 암호화한 다음 zip 파일로 압축합니다. 암호화하면 코드 세그먼트의 “임의성”이 증가하므로 압축하기가 더 어려워집니다. 제출하기 전에 위의 “배포용 빌드” 섹션에서 앱 스토어 크기를 최적화하는 방법을 참조하십시오.
2018–06–14 페이지 수정됨
2017–14–06 - IL2CPP로 스트리핑 섹션 업데이트
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.