pod install output:
Analyzing dependencies
[!] CocoaPods could not find compatible versions for pod "GTMSessionFetcher/Core":
In Podfile:
Firebase/Auth (= 10.4.0) was resolved to 10.4.0, which depends on
FirebaseAuth (~> 10.4.0) was resolved to 10.4.0, which depends on
GTMSessionFetcher/Core (< 4.0, >= 2.1)
최근 Firebase 10.x 버전이 Xcode 14.x 버전에서 위와 같은 오류를 내면서 빌드가 제대로 되지 않는 문제가 있어서 이리저리 알아보니 구글에서 확인하고 수정중이라고 하는 것 같다.
pod install output:
Analyzing dependencies
[!] CocoaPods could not find compatible versions for pod "Firebase/Messaging":
In Podfile:
Firebase/Messaging (= 10.4.0)
None of your spec sources contain a spec satisfying the dependency: `Firebase/Messaging (= 10.4.0)`.
* What went wrong: Execution failed for task ':launcher:dexBuilderRelease'. > java.lang.UnsupportedOperationException: This feature requires ASM7
...
[해결]
gradle 버전이 낮아서 생기는 문제라고 한다.
Android 11이슈로 쓰던 gradle 버전이 com.android.tools.build:gradle:3.4.3 이었는데,
Unity 2021.3.16f1 기준 기본 버전이 com.android.tools.build:gradle:4.0.1 이어서 해당 버전을 사용하니 빌드가 잘된다.
다시 해보니 Unity 2021.3.16f1 기본 버전인 com.android.tools.build:gradle:4.0.1 이 빌드가 제대로 안돼서,
com.android.tools.build:gradle:4.0.1+로 수정하고 나서 제대로 되는 걸 확인했다.
(GoogleMobileAds 7.4.0이 gradle 4.0.1에서 에러나는걸로 봐서는 상위 버전 뭔가를 쓰는 것 같은데 무슨 버전을 쓰는지 모르겠어서 +를 붙였음)
[주의]
gradle 버전을 해당 Unity 엔진이 가지고 있는 버전보다 높게 올리면 아래와 같은 에러를 보게 된다.
지정한 gradle 버전을 사용하려면 맞는 gradle 플러그인 버전을 받아서 해당 위치에 넣어주거나,
현재 Unity 엔진이 가지고 있는 버전에 맞추거나 하자.
(난 받기 귀찮기도 하고, 협업을 하려면 다른 곳도 설치해줘야 되는 문제들로 인해서
현재 Unity 버전이 지원하는(gradle 4.0.1) 걸로 셋팅 함)
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Project\git\GuitarGirl\Library\Bee\Android\Prj\IL2CPP\Gradle\launcher\build.gradle' line: 1
* What went wrong:
A problem occurred evaluating project ':launcher'.
> Failed to apply plugin [id 'com.android.internal.version-check']
> Minimum supported Gradle version is 6.5. Current version is 6.1.1. If using the gradle wrapper, try editing the distributionUrl in C:\Project\git\GuitarGirl\Library\Bee\Android\Prj\IL2CPP\Gradle\gradle\wrapper\gradle-wrapper.properties to gradle-6.5-all.zip
NullReferenceException: Object reference not set to an instance of an object.
at System.Linq.Expressions.Interpreter.LightLambda.MakeRunDelegateCtor (System.Type delegateType) [0x00000] in <00000000000000000000000000000000>:0
at System.Linq.Expressions.Interpreter.LightLambda.GetRunDelegateCtor (System.Type delegateType) [0x00000] in <00000000000000000000000000000000>:0
at System.Linq.Expressions.Interpreter.LightDelegateCreator.CreateDelegate () [0x00000] in <00000000000000000000000000000000>:0
at System.Linq.Expressions.Expression`1[TDelegate].Compile (System.Boolean preferInterpretation) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.CallSite`1[T].MakeUpdateDelegate () [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.CallSite`1[T].GetUpdateDelegate (T& addr) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.CallSite`1[T]..ctor (System.Runtime.CompilerServices.CallSiteBinder binder) [0x00000] in <00000000000000000000000000000000>:0
at System.Runtime.CompilerServices.CallSite`1[T].Create (System.Runtime.CompilerServices.CallSiteBinder binder) [0x00000] in <00000000000000000000000000000000>:0
실행은 되지만 최신 폰(좀 안좋은 폰은 정상)에서 실행 중 아래와 같은 에러메시지를 띄우면서 크래시가 남.
----
AndroidJavaException: java.lang.IllegalArgumentException: com.xxx.xxx.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. java.lang.IllegalArgumentException: com.xxx.xxx.xxx: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
기기에서 앱을 실행하면 'dyld: Library not loaded: @rpath/FBAudienceNetwork.framework' 오류와 함께 바로 중단됩니다. 이 오류는 앱에 Audience Network SDK를 포함하지 않았다는 것을 의미합니다. 타겟 설정으로 이동하고 '일반' 탭에서 'FBAudienceNetwork.xcframework'에 '포함 및 서명'을 선택하세요.
[해결방법]
출처 링크의 내용에서는 Xcode에서 처리하는 방법을 써놨는데, 유니티 사용하는 상황에서 추가 작업을 Xcode에서 하면 귀찮아져서 Xcode PostProcessor에서 아래 소스 추가함.
기본적으로 어떤 카메라에도 보이지 않는 스킨드 메시는 업데이트 되지 않습니다. 메시가 스크린에 다시 나타날 때까지 스키닝은 업데이트 되지 않습니다. 이는 시스템을 절약하기 위해서입니다.
오브젝트의 가시성은 메시의Bounds에서 결정됩니다(전체 바운딩 영역은 모든 활성화된 카메라의 뷰 밖에 있어야 합니다). 하지만 애니메이션 메시의 트루 바운딩 영역은 애니메이션이 재생되면서 변경될 수 있습니다(예를 들어 캐릭터가 공중으로 손을 들어 올리면 영역은 커집니다). Unity는 최대 바운딩 영역을 계산할 때 첨부된 모든 애니메이션을 고려하지만 일어날 만한 모든 경우를 예측하기 위해 바운드를 계산할 수 없는 경우도 존재합니다.
다음의 각 예제 상황은 뼈대나 버텍스를 미리 계산된 바운딩 영역 밖으로 밀어낼 때 문제가 됩니다.
런타임에 애니메이션이 추가된 경우
추가 애니메이션
스크립트에서 뼈대의 포지션을 순서대로 바꿀 때
버텍스를 미리 계산된 바운드 바깥으로 밀어내는 버텍스 셰이더를 사용할 때
래그돌을 사용하는 경우
이런 문제에는 두 가지 해결책이 있습니다.
바운드를 수정해 메시의 잠재적 바운딩 영역을 일치시키기
Update When Offscreen을 활성화해 스킨드 메시를 항상 스킨 및 렌더링합니다.
일반적으로 퍼포먼스가 더 나은 첫 번째 옵션을 사용해야 합니다. 하지만 퍼포먼스가 주요 관심사가 아니거나 (래그돌을 사용할 때처럼)바운딩 영역의 크기를 예측할 수 없는 경우에 두 번째 옵션을 추천합니다.
스킨드 메시가 래그돌과 더 잘 작동하기 위해 Unity는 임포트할 때 스킨드 메시 렌더러를 루트 뼈대에 자동으로 리맵합니다. 하지만 이는 모델 파일에 스킨드 메시 렌더러가 하나일 때만 해당됩니다. 이는 스킨드 메시 렌더러 전체를 루트 뼈대이나 자식에 첨부하지 못하고 래그돌을 사용하면 이 최적화를 해제해야 함을 뜻합니다.