콘텐츠로 이동

EDM4U iOS Resolver 설정이 프로젝트마다 달라야 하는 이유

같은 EDM4U iOS Resolver를 쓰는 두 Unity 프로젝트에서 최적 설정이 서로 달랐다. 한 프로젝트의 설정을 다른 프로젝트에 그대로 옮기면 빌드나 런타임에 문제가 생긴다. 실제로 Facebook SDK를 쓰는 프로젝트에서 iOS Firebase Analytics 이벤트가 수집되지 않는 빌드 설정 문제가 있었다.

  • Swift Workaround: Unity가 생성한 Xcode 프로젝트에 가짜 Swift 파일을 하나 넣어 Xcode가 Swift 프로젝트로 인식하게 한다. Facebook SDK 구동에 필요한 Swift 라이브러리를 강제로 포함시키는 옵션이다.
  • Always add main target to Podfile: CocoaPods 라이브러리를 UnityFramework뿐 아니라 메인 앱 타깃(Unity-iPhone)에도 강제로 추가한다. 켜면 같은 라이브러리가 양쪽에서 로드되어 중복 충돌이 날 수 있다.
설정 항목 게임 A (Facebook SDK 사용) 게임 B 일치 여부
Podfile Generation ON ON 일치
Use Shell to Execute… ON ON 일치
Auto Install Cocoapod Tools in Editor ON ON 일치
Add use_frameworks! ON ON 일치
Link frameworks statically OFF OFF 일치
Always add main target to Podfile OFF ON 불일치
Allow same pod to be in multiple targets ON ON 일치
Swift Workaround ON OFF 불일치

Facebook SDK를 쓰는 게임 A는 Swift가 필수라 Swift Workaround를 켜야 한다. 여기서 Always add main target까지 켜면 같은 Pod이 UnityFramework와 메인 앱 타깃(Unity-iPhone) 양쪽에 링크된다. 실행 로그에 Class X is implemented in both ... 경고가 찍히고, Firebase는 Attempted to register protocol FIRAnalyticsInterop, but it already has an implementation처럼 같은 구현을 두 번 등록하려 한다. 어느 쪽 구현이 쓰일지 정해지지 않아 Analytics 이벤트가 빠지거나 앱이 죽는다. 그래서 게임 A는 Always add main target을 꺼야 했다. AppLovin 지원 문서와 EDM4U 이슈도 같은 증상에 이 옵션을 끄라고 안내한다.

Facebook SDK의 에디터 스크립트는 이 옵션과 별개로 Podfile에 target 'Unity-iPhone'과 use_frameworks!를 직접 써 넣기도 한다. 옵션을 끈 뒤에도 Podfile에 메인 타깃 블록이 남아 있는지 확인한다.

Facebook SDK를 쓰지 않는 게임 B는 Objective-C 환경이고, main target을 켠 상태에서 중복 문제가 관찰되지 않았다.

항목 게임 A 게임 B
환경 Swift 필수(Facebook SDK) Objective-C
main target 포함 시 같은 Pod이 두 타깃에 링크돼 Analytics 누락·크래시 문제 관찰되지 않음
최적 설정 Main Target OFF Main Target ON

Resolver 설정은 프로젝트마다 따로 정한다. Swift 런타임이 필요한 SDK가 있으면 main target 포함 여부부터 확인하고, 빌드한 앱의 실행 로그에서 implemented in both 경고로 중복 링크를 확인한다.