APK에서는 잘됐지만, AAB에서만 발생하는 이슈
IL2CPP를 사용하면 AAB 관련되어서 디펜던시 추가가 필요할 때가 있습니다. AAB는 APK 파일을 분리하는 시스템이고, 분리하는 과정에서 IL2CPP 빌드시스템을 이용할 경우 메인이 되는 APK 기준으로 내부 클래스들이 빌드되기에 사용되지 않는 클래스와 관련된 정보는 빌드에 포함시키지 않게 하여 용량도 줄이고 빌드 속도도 빠르게 하는 스마트한 기능이 있습니다.
하지만, '메인APK ( base)'기준이기 때문에, '메인APK'에 없는 클래스나 정보가 '추가 다운로드APK'에 있는 경우 애러가 발생합니다. (빌드된 내용에는 클래스 정보가 존재하지 않아서 애러가 발생 및 기능 작동하지 않거나 버그 또는 사이드이펙트가 발생함)
애러 전문
애러 전문은 아래와 같습니다.
Could not produce class with ID '(number)'
해결 방법 1
위와 같은 애러가 생겼을 때는 아래 주소의 'YAML Class ID Reference' 문서를 참고하여 해당하는 number에 매칭되는 컴포넌트를 가진 빈오브젝트를 Resources폴더에 추가해주면 됩니다.
"YAML Class ID Reference": https://docs.unity3d.com/Manual/ClassIDReference.html
Could not produce class with ID 135
예를 들어 '135'라면, 'SphereCollider'에 해당하므로, 아래와 같이 빈 오브젝트에 콜라이더 컴포넌트를 달아주고,
프리팹으로 만들어서 Resources폴더에 넣어줍니다.
이후에 AAB 빌드를 진행하면 해당 애러가 없어지는 것을 확인할 수 있습니다.
해결 방법 2
위와 같이 Stip Engine Code를 비활성화 해준다. 이 기능은 앞서 언급했던, 메인APK(base)를 기준으로 필요한 클래스 정보들만 빌드할 수 있게하는 기능인데, 이 기능을 비활성화 함으로써 사용되지 않는 모든 클래스 정보를 빌드에 포함한다. 이로써 '추가 다운로드APK'에 대해서는 자유로울 수 있다. 하지만 그에 따른 용량과 빌드 속도 등등 단점이 매우 크다.
마무리
빈 오브젝트에 필요한 컴포넌트를 Resources폴더에 넣어 필요한 시스템만 가져가는 것이 빌드 속도나 용량등 매우 유리합니다. 테스트로 인해서 애러 코드가 나오고 무엇이 필요한지가 나오므로 필요한 시스템만 가져가는 것이 좋다고 생각합니다.
참고 2: https://qwertystar.tistory.com/entry/Unity-iOS-Could-not-produce-class-with-ID-%EC%97%90%EB%9F%AC
'Achaive' 카테고리의 다른 글
Unity, XCode15 업데이트 이후 빌드 애러 (0) | 2024.04.03 |
---|---|
Unity, 버전 업그레이드 이후 SDK 애러로 인한 빌드 실패 (0) | 2024.03.21 |
Unity, 버전 업그레이드 이슈 Analytics SDK (0) | 2024.03.09 |
Unity, 안드로이드 빌드 오류 또는 Resolution 작동 오류 (0) | 2024.02.27 |
Unity, Gradle 버전 빌드 애러 (0) | 2023.08.22 |
댓글