블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 07:22

----------------------------------------------------

Unity 2020.3.27f1

Xcode 13.2.1

FBAEMKit 12.2.1

FBSDKCoreKit 12.2.1

FBSDKCoreKit_Basics 12.2.1

FBSDKLoginKit 12.2.1
GoogleMobileAds 6.1.2
GoogleMobileAds-FacebookUnityAdapter-3.6.0

----------------------------------------------------

회사 플랫폼에서 Firebase Auth를 쓰면서 FBSDK(12.2.1) framework 가 들어가게 됐는데,

여기서 광고를 쓰기 위해 GoogleMoblieAds(6.1.2)를 추가하고,

페이스북 광고를쓰기위해 GoogleMobileAds의 미디에이션인 FacebookUnityAdapter(3.6.0)을 추가했는데..

Android는 잘되는데 iOS에서 에러 남.

 

플러그인 추가 진행 상황은 아래와 같다.

----------------------------------------------------

1) 플랫폼 SDK 추가하면서 FBSDK(12.2.1) 추가

  1.1)Plugins/iOS에 프레임워크 추가 돼 있음(FBAEMKit.framework/FBSDKCoreKit.framework/FBSDKCoreKit_Basics.framework/FBSDKLoginKit.framework)

 

2) GoogleMobileAds(6.1.2) 추가 -> 빌드 잘 됨

 

3) GoogleMobileAds-FacebookUnityAdapter(3.6.0) 추가 -> 빌드 에러

  3.1) [에러메시지] Undefined Symbols for architecture arm64: "_OBJC_CLASS_$_GAD...

  3.2) [해결방법] Unity Editor-Menu-External Dependency Manager-iOS Resolver-Settings : Link frameworks statically <- 체크

  3.3) [참조] https://blueasa.tistory.com/2587

 

4) 3) 해결 후, 빌드는 되는데 런타임에서 에러 남 -> 런타임 에러

  4.1) [에러메시지] Library not loaded: @rpath/FBAEMKit.framework...

    4.1.1) [추천] 4.2.4 방식 먼저 시도

  4.2.) [해결방법] 구글링 하다보니 아래와 같은 내용이 있음.

     4.2.1) General->Frameworks, Library, and Embedded Content. If it's "Do Not Embed", change to "Embed Without Signing"

      (참조: https://stackoverflow.com/questions/58144104/xcode11-dyld-library-not-loaded-reason-image-not-found)

    4.2.2) 빌드하고 수정하긴 그래서 XcodePostProcessor.cs에 아래 내용을 추가함.

        (처음엔 weak 파라미터를 false로 추가해봤었는데 여전히 런타임 에러 남)

      [추가소스]

      /// Initialize PbxProject
      var projectPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj";
      PBXProject pbxProject = new PBXProject();
      pbxProject.ReadFromFile(projectPath);
      string targetGuid = pbxProject.GetUnityFrameworkTargetGuid();

 

      // 플랫폼 SDK에서 아래 4개 프레임워크를 추가해놔서 여기서도 4개 추가시킴

      pbxProject.AddFrameworkToProject(targetGuid, "FBAEMKit.framework", true); // weak 부분을 true로 넘김

      pbxProject.AddFrameworkToProject(targetGuid, "FBSDKCoreKit.framework", true);

      pbxProject.AddFrameworkToProject(targetGuid, "FBSDKCoreKit_Basics.framework", true);

      pbxProject.AddFrameworkToProject(targetGuid, "FBSDKLoginKit.framework", true);

 

    4.2.3) 위의 4.2.2) 방법이 안된다면 (스크립트로 프레임워크 추가를 안하고) 직접 넣어도 됨

              직접 넣는 건 아래 링크에서 원하는 버전의 FacebookSDK-Static_XCFramework를 다운받아서 추가.

              (iOS는 받아서 압축풀어보면 여러개의 폴더가 나오는데 ios-arm64(또는 ios-arm64_armv7) 폴더를 사용하면 된다)

              [링크] https://github.com/facebook/facebook-ios-sdk/releases

 

    4.2.3.1) static 프레임워크 추가하고  Undefined symbol: _vDSP 에러가 나면 Accelerate.framework도 추가하자.

                [참조] https://minmong.tistory.com/242

 

  4.2.4) 최근(2023-05-10)에 FacebookSDK 버전을 올리려고 확인 해보면서 FacebookSDK_Dynamic.xcframework를 적용해봤는데 이걸로 해도 잘되는 것 같다.

    4.2.4.1) FacebookSDK_Dynamic.xcframework 추가

    4.2.4.2) 기존 Dependencies.xml은 버전 맞춰 주기(난 15.0.0으로 맞춤)

      [참조] <iosPod name="FBSDKLoginKit" version="15.0.0" minTargetSdk="12.0"> </iosPod>

 

 

5) 4)까지 하고 빌드하니 런타임에서도 에러 안나고 잘 됨. -> 빌드 잘 됨

 

6) 빌드 성공!

 

 

[첨언]

결론적으로 GoogleMobileAds가 Static Framework을 강제(Link frameworks statically)하면서 생기는 문제로 보인다.

결국 GoogleMobileAds를 사용해야 된다면 dynamic framework 추가 방식은 불가능하므로, Facebook 관련 SDK 소스를 직접 추가(4.2.3)하는게 맞는 것 같다.

 

반응형
Posted by blueasa
, |