1.5 Unreal SDK 설치

1.5. Unreal SDK 설치


1.5.1. 설치 환경 및 실행 환경

  • 권장 버전

    • Unreal 4.24.3 이상 지원

1.5.2. SDK 파일 구성

전달받은 KakaoGameSDK_Unreal_[버전].zip 파일은 다음과 같은 파일들로 구성되어 있습니다.

파일

설명

파일

설명

KakaoGameSDKPlugin

  • 배포되는 KakaoGameSDKPlugin 입니다.

APIReference

  • 카카오게임 Unreal SDK의 API 레퍼런스 문서입니다.

Sample.zip

  • 샘플 프로젝트 (Unreal 4.24.3 이상 지원)

Utils

  • 빌드에 필요한 스크립트가 포함 되어 있습니다.

Utils/IOSIPAScript.sh

  • Unreal iOS 빌드 후 SwiftSupport 관련 처리를 위한 스크립트 입니다.

 
1.5.3. SDK 환경 설정

1.5.3.1. Unreal Plugin 추가하기

Android, iOS, Windows용 카카오게임 SDK는 모두 Unreal Plugin 내에 포함되어 있습니다. 별도로 해당 SDK를 설치할 필요는 없습니다.

  • Unreal 프로젝트 폴더에서 Plugins 폴더를 찾습니다. (Plugins 폴더가 없는 경우 폴더를 생성합니다.)

  • 생성한 Plugins 폴더에 KakaoGameSDKPlugin 폴더를 추가합니다.

  • Unreal Engine의 플러그인 메뉴에서 새로 추가한 KakaoGameSDK Plugin을 활성화 합니다.

  • Unreal SDK를 프로젝트에서 사용하기 위해 프로젝트의 Build.cs 파일에서 다음과 같이 KakaoGameSDKPlugin과 Json 모듈을 추가합니다.

    KakaoGameSample.Build.cs

    using UnrealBuildTool;   public class KakaoGameSample : ModuleRules {   public KakaoGameSample(ReadOnlyTargetRules Target) : base(Target)   {     PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;         PublicDependencyModuleNames.AddRange(new string[] {       "KakaoGameSDKPlugin",       "Json",     });           PrivateDependencyModuleNames.AddRange(new string[] {  });   } }

 

1.5.3.2. Unreal Engine 설정하기

 

1.5.3.3. 카카오게임 SDK 설정 하기

  1. Unreal Editor에서 세팅 -> 프로젝트 세팅 메뉴를 선택합니다.

     

  2. 좌측 메뉴의 플러그인 -> KakaoGameSDK 항목에서 카카오게임 SDK 설정이 가능한 메뉴가 있습니다.

1.5.3.4. 카카오게임 속성 설정

  1. 먼저 카카오게임 속성 설정을 해야 합니다. 아래는 설정 항목에 대한 설명 입니다.

타입

필수

설명

예시

타입

필수

설명

예시

App Id

String

O

아래 둘 중 한곳에서 확인할 수 있습니다.
카카오 파트너센터 > 게임 관리 > 앱 선택 > 게임 세부정보
카카오게임3.0 어드민 -> 게임빌드 -> 클라이언트 버전 관리

103815

App Secret

String

O

카카오 파트너센터 > 앱정보에서 확인할 수 있는 네이티브 앱 키와 동일합니다.

951b75bf17fe0885ab5106ba2a9f9bc9

App Key

String

O

카카오 파트너센터 > 앱정보에서 확인할 수 있는 JavaScript 키와 동일합니다. (Windows 환경에서 사용하는 경우 필수로 설정해야 합니다.)

8fb581e48885cb370a0f203433653583

Market (Android)

String

O

안드로이드에서 배포할 마켓을 설정합니다.
카카오게임3.0 어드민 -> 게임빌드 -> 클라이언트 버전 관리에서 마켓 정보를 입력 해두어야 합니다. (iOS 마켓은 "appStore"입니다.)

googlePlay

Market (Windows)

String

O

윈도우즈에서 배포할 마켓을 설정합니다.
카카오게임3.0 어드민 -> 게임빌드 -> 클라이언트 버전 관리에서 마켓 정보를 입력 해두어야 합니다. (iOS 마켓은 "appStore"입니다.)

gameWeb

App Version

String

O

앱 버전을 설정합니다. 이 버전을 기반으로 앱의 업데이트 필요 여부를 자동으로 안내합니다.

1.0.0

Server Type

String

X

SDK 와 연결될 플랫폼의 서버 타입을 설정합니다. 채널링은 real만 사용해야 합니다.

real

Debug Level

String

X

SDK 로그 출력 레벨을 설정합니다. "verbose", "debug", "error", "none" 중 하나를 선택할 수 있습니다.

none

 

  1. 아래 그림과 같이 카카오게임 속성을 설정하도록 합니다.

1.5.3.5. 카카오 멀티앱 로그인 기능 사용시 필요한 설정

SDK 3.11.0 버전부터 iOS의 경우 카카오 멀티앱 로그인을 지원하게 됩니다.(Android는 기존처럼 키해시로 지원가능)

그에 따라 멀티앱 로그인을 사용하고 싶은 게임에서 각각 프로젝트의 언리얼 Setting UI 상에서 Kakao MultiApp Login 체크 박스를 클릭 후에 빌드합니다.

중요 : 기존처럼 하나의 앱에서 사용할 게임들은 저 체크박스를 해제 상태로 두시면 됩니다.(해당 옵션을 설정하는 경우 redirect uri 설정이 잘못될 수 있어서 사용하지 않는 앱에서는 반드시 해제 상태로 두어야 합니다.)

1.5.4. IDP 인증 정보 설정

1.5.4.1.카카오 정보 설정

게임에서 카카오 인증을 사용할 경우, 설정 하도록 합니다.

  1. 카카오 인증을 사용할 경우, Kakao Login 체크 박스를 클릭합니다.

1.5.4.2.구글 정보 설정

게임에서 구글(구글게임 포함) 인증을 사용할 경우, 설정 하도록 합니다.

  1. 구글 인증을 사용할 경우, Google Login 체크 박스를 클릭합니다.

     

  2. iOS앱에서 구글 인증을 할 경우, iOS 클라이언트 ID를 설정합니다.

     

  3. 안드로이드앱에서 구글 인증하거나, 구글 게임 인증을 사용할 경우, Webapp Client ID를 설정합니다.

     

  4. Windows에서 구글 인증을 사용할 경우 Webapp Client Secret을 설정합니다.

     

  5. 구글 AppId를 설정합니다.

     

  6. 구글 인증시, 기본 퍼미션 이외에 추가로 더 사용자의 동의를 받을 퍼미션이 있다면 목록을 추가하도록 합니다. 없을 경우, 해당 과정은 생략합니다.

     

1.5.4.3. 구글 게임 관련 언리얼 엔진 설정

구글 인증을 사용하는 경우 추가로 Google Play Service 설정이 필요합니다.

(프로젝트 세팅 -> 플랫폼 -> Android -> Google Play Services 메뉴에서 설정합니다.)ㅇ

  1. Enable Google Play Support 체크 박스를 클릭합니다.

  2. 위에서 설정한 구글 AppId를 Games App ID 항목에 설정합니다.

 

1.5.4.4. 페이스북 정보 설정

게임에서 페이스북 인증을 사용할 경우, 설정 하도록 합니다.

  1. 페이스북 인증을 사용할 경우, Facebook Login 체크 박스를 클릭합니다.

     

  2. 페이스북 App Key를 등록합니다.

     

  3. 페이스북 Client Token을 등록합니다. (SDK 3.15.0 이상을 사용하는 경우 필수)

     

  4. 페이스북 App Title을 등록합니다. 페이스북 로그인창이 노출 될 때 표기되는 타이틀입니다.

     

  5. 페이스북 인증시, 기본 퍼미션외 추가로 더 사용자의 동의를 받을 퍼미션이 있다면, Add버튼을 눌러서 추가하도록 합니다. 없을 경우, 해당 과정은 생략합니다.

     

페이스북에서 제공하는 SDK 에서는 인증 시 Read 퍼미션과 Publish 퍼미션을 동시에 요청할 수 없기 때문에 카카오 SDK를 통한 페이스북 인증 시에는 Read 퍼미션만 추가하 실 수 있습니다.

(Publish 퍼미션: "publish" 나 "manage" 로 시작하는 퍼미션 이나 "ads_management", "create_event", "rsvp_event" 등)

때문에 Publish 관련 기능이 필요한 경우에는 Publish 퍼미션으로 추가 인증을 받거나 ShareDialog 같은 페이스북 SDK에서 제공하는 Publish API 를 사용하셔야 합니다.

1.5.4.5. Sign in with Apple 정보 설정

게임에서 Sign in with Apple을 사용할 경우, 설정 하도록 합니다.

  1. 아래 링크에 따라서 언리얼 엔진 설정을 추가합니다. (iOS Only)
    SigninWithApple 환경 설정

  2. SigninWithApple 체크 박스를 클릭합니다.

     

  3. 애플 어드민에서 발급받은 ClientId 항목을 입력합니다.

 

1.5.4.6. Game Center 정보 설정 (iOS Only)

게임에서 Game Center 인증을 사용할 경우, 설정 하도록 합니다.

프로젝트 세팅 -> 플랫폼 -> iOS-> Online -> Enable Game Center Support 체크 박스를 클릭합니다.

1.5.5. Android 플랫폼 설정

1.5.5.1. 기본 설정

  • 플러그인에 포함된 KakaoGameSDK_Android_UPL.xml 파일을 통해 SDK에 필요한 기본 설정을 추가하고 있습니다.

  • SDK 에서는 아래 퍼미션들을 추가해서 사용하고 있습니다.

    • android.permission.INTERNET

    • android.permission.ACCESSNETWORK_STATE

  • ADID 를 얻기 위한 구글 설정

    • 구글 Ads 최신 버전에서 해당 설정이 없는 경우 앱이 동작하지 않는 이슈가 있어 아래와 같이 기본 설정되어 있습니다.

    • 만약 게임에서 AdMob을 사용하고 있는 경우, KakaoGameSDK_Android_UPL.xml 파일에서 해당 필드에 게임의 AdMob App Id를 삽입합니다.

      KakaoGameSDK_Android_UPL.xml

      ... <!-- Google Ads Default Setting START --> <meta-data   android:name="com.google.android.gms.ads.APPLICATION_ID"   android:value="ca-app-pub-3940256099942544~1234567890"/> <!-- Google Ads Default Setting END --> ...

1.5.5.2. APK Packaging 설정

  1. 프로젝트 셋팅 -> 플랫폼 -> Android 메뉴를 선택합니다.

  2. 아래와 같이 APK Packaging 메뉴에서 Minimun SDK Version과 Target SDK Version을 설정합니다.

    1. Minumum SDK Version : 23

    2. Target SDK Version : 34

      image-20240723-031002.png

1.5.5.3. Manifest 설정

Unreal Engine의 설정 메뉴와 플러그인의 KakaoGameSDK_Android_UPL.xml 파일을 통해서 Android Manifest에 값을 추가하거나 수정할 수 있습니다.

  • 커뮤니티 웹뷰를 사용하는 경우, 바로가기 기능을 위하여 아래 퍼미션을 추가합니다.

    • com.android.launcher.permission.INSTALL_SHORTCUT

  • API 23 이상에서는 앱이 일반 텍스트 HTTP와 같은 일반 텍스트 네트워크 트래픽을 사용하는지 여부를 설정할 수 있습니다.

    • android:usesCleartextTraffic="true"

       

1.5.5.4. Http 사용 설정

targetSdkVersion을 28 버전 이상으로 설정하고 http 통신을 사용하는 게임은 아래와 같은 설정이 필요합니다.

카카오 게임 SDK 내부에서는 http를 사용하지 않습니다. 개발사에서 cdn등 이슈로 http 콜이 필요한 경우에만 설정합니다.

  • http 콜이 필요한 도메인 설정

    • KakaoGameSDKPlugin/Source/KakaoGameSDKPlugin/ThirdParty/Android/res/xml/network_security_config.xml 파일에 domain 추가

      network_security_config.xml

       <?xml version="1.0" encoding="utf-8"?> <network-security-config>   <domain-config cleartextTrafficPermitted="true">     <!-- Add Your Http Domain -->     <domain includeSubdomains="true">example.com</domain>   </domain-config> </network-security-config>
  • KakaoGameSDK_Android_UPL.xml 파일에서 networkSecurityConfig 설정

    KakaoGameSDK_Android_UPL.xml

    ... <androidManifestUpdates>   <addAttribute tag="application" name="android:networkSecurityConfig" value="@xml/network_security_config"/> ...

1.5.5.5. 키 해시 확인 및 등록 방법

1.2 Android SDK 설치 | 1.2.5. 키 해시 확인 및 등록 방법

  • 앱의 빌드를 위해서는 빌드 머신의 키 해시를 등록해야 하며 다음과 같은 방법으로 키 해시를 확인하실 수 있습니다.

  • 디버그 키 해시 및 릴리즈 키 해시를 위 가이드대로 구해서 [게임센터 > 게임관리 > 키 해시등록] 메뉴에 등록해주세요.

 

1.5.5.6. Unreal Engine aar-imports 설정 변경 

Unreal Engine의 아래 파일에서 엔진에서 필요한 종속성을 추가하고 있습니다.

(UE_4.XX/Engine/Build/Android/Java/aar-imports.txt)

KakaoGame Android SDK에서 포함하고 있는 다른 항목과 충돌하여 에러가 발생할 수 있어 다음과 같이 com.google.android.gms 항목들을 제거합니다.

aar-imports.txt

[기존] repositories $(ANDROID_HOME)/extras repositories $(ENGINEDIR)/Source/ThirdParty/Android/extras com.google.android.gms,play-services-auth,11.8.0 com.google.android.gms,play-services-games,11.8.0 com.google.android.gms,play-services-nearby,11.8.0 com.google.android.gms,play-services-plus,11.8.0       [변경] repositories $(ANDROID_HOME)/extras repositories $(ENGINEDIR)/Source/ThirdParty/Android/extras

 

1.5.5.7. Unreal Engine 빌드 Gradle 버전 변경

KakaoGame Android SDK의 경우 SDK 버전에 따라서 아래와 같이 Gradle 버전을 지원하고 있습니다.

만약 호환되지 않은 버전인 경우 빌드 에러가 발생할 수 있습니다.

A problem occurred evaluating project ':app'. > Failed to apply plugin [id 'com.android.internal.version-check'] > Minimum supported Gradle version is x.x.x. Current version is 4.6. If using the gradle wrapper, try editing the distributionUrl in ***

Unreal Engine의 다음 경로의 gradle-wrapper.properties 파일에서 distributionUrl을 수정하여 gradle 버전을 변경할 수 있습니다.

(UE_4.2X/Engine/Build/Android/Java/gradle/gradle/wrapper/gradle-wrapper.properties)

gradle-wrapper.properties

SDK 3.19.4 이상 버전을 적용하는 경우 Android 14 (Target SDK 34) 대응을 위해 Gradle v7.2 이상으로 설정 되어 있어야 합니다.

distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip

Unreal Editor Android Gradle Plugin 버전 설정

SDK 3.19.4 이상 버전을 적용하는 경우 Android 14 (Target SDK 34) 대응을 위해 Android Gradle Plugin 버전 설정이 필요합니다.

(개발 환경에 따라서 설정하는 버전이 다를 수 있습니다.)

  • KakaoGameSDK > Android > Gradle Plugin 메뉴에서 아래와 같이 설정할 수 있습니다.

    • Use Custom Android Gradle Plugin 체크 활성화

    • Custom Android Gradle Plugin Version 버전 7.1.2 설정

image-20240723-021205.png

1.5.5.8. Android 14 지원을 위한 JDK 설정

  • Gradle v7.2, Android Gradle Plugin v7.1.2 버전으로 설정한 경우 JDK 버전 변경이 필요합니다.

  • Android SDK 빌드 설정에서 JDK 경로를 새로 다운로드한 JDK 11로 설정합니다.

    image-20240624-021151.png
  • Android 빌드 설정 시 Target SDK 버전을 34로 설정합니다.

1.5.5.9. Unreal Engine Android 14 빌드 지원

Android targetSDK 34로 설정하고 Shipping이 아닌 개발 모드로 빌드하는 경우 Engine 환경에 따라서 Android 14 디바이스에서 아래와 같은 에러가 발생하는 경우가 있습니다.

One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts  

UE_4.XX\Engine\Build\Android\Java\src\com\epicgames\ue4\GameActivity.java.template

아래 GameActivity.java.template 부분의 registerReceiver 호출 부분 수정이 필요합니다.

// 기존 코드 registerReceiver(consoleCmdReceiver, new IntentFilter(Intent.ACTION_RUN)); // 추가 코드 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { registerReceiver(consoleCmdReceiver, new IntentFilter(Intent.ACTION_RUN), RECEIVER_EXPORTED); } else { registerReceiver(consoleCmdReceiver, new IntentFilter(Intent.ACTION_RUN)); } //GameActivity.java.template //$${gameActivityClassAdditions}$$ @Override public void onStart() { super.onStart(); if (!BuildConfiguration.equals("Shipping")) { // Create console command broadcast listener Log.debug( "Creating console command broadcast listener"); consoleCmdReceiver = new ConsoleCmdReceiver(this); // Android 버전에 따라서 RECEIVER_EXPORTED를 추가로 설정하도록 분기처리 추가 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { registerReceiver(consoleCmdReceiver, new IntentFilter(Intent.ACTION_RUN), RECEIVER_EXPORTED); } else { registerReceiver(consoleCmdReceiver, new IntentFilter(Intent.ACTION_RUN)); } } //$${gameActivityOnStartAdditions}$$ Log.debug("==================================> Inside onStart function in GameActivity"); }

 

1.5.5.10. Unreal Engine Android 12 빌드 지원

Android 12 디바이스를 지원하기 위해 intent-filter를 사용하는 activity, service, broadcast receiver에서는 android:exported 속성을 명시적으로 선언해야 합니다.

(Behavior changes: Apps targeting Android 12  |  Android Developers )

Android 빌드 시 언리얼 엔진에서 기본으로 사용하는 GameActivity와 SplashActivity에 Android 12 대응을 위한 속성을 추가해야 합니다.

  • 다음 경로에서 UnrealBuildTool.csproj 파일을 찾아서 실행합니다. (Visual Stidio가 설치되어 있어야 합니다.)
    (UE_4.XX\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.csproj)

  • 프로젝트의 UEDeployAndroid.cs 파일에서 아래와 같이 수정합니다.
    (UE_4.XX\Engine\Source\Programs\UnrealBuildTool\Platform\Android\UEDeployAndroid.cs)

  • GenerateManifest 함수에서 SplashActivity, GameActivity 설정 부분에 다음 코드를 추가하고 Visual Studio에서 빌드를 수행합니다.

    Text.AppendLine("\t\t android:exported=\"true\"");
    private string GenerateManifest(...)
    if (bShowLaunchImage) { // normal application settings Text.AppendLine("\t\t<activity android:name=\"com.epicgames.ue4.SplashActivity\""); Text.AppendLine("\t\t android:exported=\"true\""); // ... Text.AppendLine("\t\t</activity>"); Text.AppendLine("\t\t<activity android:name=\"com.epicgames.ue4.GameActivity\""); Text.AppendLine("\t\t android:exported=\"true\""); // ... } else { Text.AppendLine("\t\t<activity android:name=\"com.epicgames.ue4.GameActivity\""); Text.AppendLine("\t\t android:exported=\"true\""); // ... }

 

1.5.6. iOS 플랫폼 설정

1.5.6.1. Swift 환경 설정

Unreal Swift Issue

Unreal Engine에서는 Objective-c 와 Swift 를 혼합해서 사용하는 것을 지원하고 있지 않습니다. 혼합해서 사용하는 경우 빌드 에러가 발생합니다.

iOS SDK에서는 Swift가 포함되어 있어서 관련 설정을 추가하는 작업이 필요합니다.

  • Unreal Engine의 아래 경로에서 UnrealBuildTool.csproj 파일을 확인할 수 있습니다.
    (UE_4.XX/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.csproj)

  • UnrealBuildTool.csproj 파일을 클릭하여 Visual Studio를 실행합니다. (Mac에서 Visual Studio Community를 사용해도 됩니다.)

  • Unreal 5.x 버전

    • 프로젝트에서 XcodeProjectLegacy.cs 파일을 선택합니다. 
      (UE_5.XX/Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeProjectLegacy.cs)

  • Unreal 4.x 버전

    • 프로젝트에서 XcodeProject.cs 파일을 선택합니다. 

    • (UE_4.XX/Engine/Source/Programs/UnrealBuildTool/ProjectFiles/Xcode/XcodeProject.cs)

  • XcodeProject.cs 파일의 AppendProjectBuildConfiguration 함수에서 Swift 설정 관련 코드를 추가합니다.

    XcodeProject.cs

    private void AppendProjectBuildConfiguration(StringBuilder Content, string ConfigName, string ConfigGuid)

    XcodeProject.cs

    // Swift Setting Content.Append("\t\t\t\tCLANG_ENABLE_MODULES = YES;" + ProjectFileGenerator.NewLine); Content.Append("\t\t\t\tSWIFT_VERSION = 5.0;" + ProjectFileGenerator.NewLine); Content.Append("\t\t\t\tLIBRARY_SEARCH_PATHS = \"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\";" + ProjectFileGenerator.NewLine); if (ConfigName == "Debug") {      Content.Append("\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";" + ProjectFileGenerator.NewLine); } Content.Append("\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;" + ProjectFileGenerator.NewLine); Content.Append("\t\t\t\tEMBEDDED_CONTENT_CONTAINS_SWIFT = YES;" + ProjectFileGenerator.NewLine);
  • 프로젝트에서 IOSToolChain.cs 파일을 선택합니다. 
    (UE_4.XX/Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSToolChain.cs)

  • IOSToolChain.cs 파일의 GetLinkArguments_Global 함수에서 Swift 설정 관련 코드를 추가합니다.

    IOSToolChain.cs

    string GetLinkArguments_Global(LinkEnvironment LinkEnvironment)

    IOSToolChain.cs

    • Unreal 5.x 버전

      // Swift Setting Arguments.Add("-rpath \"/usr/lib/swift\""); Arguments.Add("-rpath \"@executable_path/Frameworks\""); // /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/swift/ String swiftLibPath = String.Format(" -L {0}Platforms/{1}.platform/Developer/SDKs/{1}{2}.sdk/usr/lib/swift", Settings.Value.XcodeDeveloperDir, bIsDevice ? Settings.Value.DevicePlatformName : Settings.Value.SimulatorPlatformName, Settings.Value.IOSSDKVersion); Arguments.Add(swiftLibPath); // /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos swiftLibPath = String.Format(" -L {0}Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/{1}", Settings.Value.XcodeDeveloperDir, bIsDevice ? Settings.Value.DevicePlatformName.ToLower() : Settings.Value.SimulatorPlatformName.ToLower()); Arguments.Add(swiftLibPath); // /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos swiftLibPath = String.Format(" -L {0}Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/{1}", Settings.Value.XcodeDeveloperDir, bIsDevice ? Settings.Value.DevicePlatformName.ToLower() : Settings.Value.SimulatorPlatformName.ToLower()); Arguments.Add(swiftLibPath); if (Settings.Value.IOSSDKVersionFloat >= 14.0f) { Arguments.Add(String.Format(" -lswiftCompatibility51")); }
    • Unreal 4.x 버전

      // Swift Setting Result += " -rpath \"/usr/lib/swift\""; Result += " -rpath \"@executable_path/Frameworks\""; // /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/swift/ String swiftLibPath = String.Format(" -L {0}Platforms/{1}.platform/Developer/SDKs/{1}{2}.sdk/usr/lib/swift",                             Settings.Value.XcodeDeveloperDir, bIsDevice ? Settings.Value.DevicePlatformName : Settings.Value.SimulatorPlatformName, Settings.Value.IOSSDKVersion); Result += swiftLibPath;               // /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos swiftLibPath = String.Format(" -L {0}Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/{1}",                             Settings.Value.XcodeDeveloperDir, bIsDevice ? Settings.Value.DevicePlatformName.ToLower() : Settings.Value.SimulatorPlatformName.ToLower()); Result += swiftLibPath;               // /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos swiftLibPath = String.Format(" -L {0}Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/{1}",                             Settings.Value.XcodeDeveloperDir, bIsDevice ? Settings.Value.DevicePlatformName.ToLower() : Settings.Value.SimulatorPlatformName.ToLower()); Result += swiftLibPath; if (Settings.Value.IOSSDKVersionFloat >= 14.0f) {     Result += String.Format(" -lswiftCompatibility51"); }
  • 코드 추가 후 변경 사항을 적용하기 위해서 다음과 같이 빌드를 수행합니다.

 

1.5.6.3. SigninWithApple 환경 설정

Sign in with Apple Entitlements

인증을 사용하기 위해 entitlement에 com.apple.developer.applesignin 를 추가해야 합니다.

  • Unreal Engine 4.25 이상 버전을 사용하는 경우

    • 프로젝트 DefaultEngine.ini의 /Script/IOSRuntimeSettings.IOSRuntimeSettings 부분에 다음과 같이 bEnableSignInWithAppleSupport을 추가합니다.

      [/Script/IOSRuntimeSettings.IOSRuntimeSettings] ... bEnableSignInWithAppleSupport=True ...
  • Unreal Engine 4.24 이하 버전을 사용하는 경우

    • Unreal Engine의 아래 경로에서 UnrealBuildTool.csproj 파일을 확인할 수 있습니다.
      (UE_4.XX/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.csproj)

    • 프로젝트에서 IOSExports.cs 파일을 선택합니다. 
      (UE_4.XX/Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSExports.cs)

    • IOSExports.cs 파일의 WriteEntitlements 함수에서 SigninWithApple 설정 관련 코드를 추가합니다.

      IOSExports.cs

      public static void WriteEntitlements(UnrealTargetPlatform Platform, ConfigHierarchy PlatformGameConfig,         string AppName, FileReference MobileProvisionFile, bool bForDistribution, string IntermediateDir)

      IOSExports.cs

      // Sign in with Apple Setting bool bSignInWithAppleSupported = false; PlatformGameConfig.GetBool("/Script/IOSRuntimeSettings.IOSRuntimeSettings", "bEnableSignInWithAppleSupport", out bSignInWithAppleSupported); if (bSignInWithAppleSupported) {     Text.AppendLine("\t<key>com.apple.developer.applesignin</key>");     Text.AppendLine("\t<array><string>Default</string></array>"); }
    • 프로젝트 DefaultEngine.ini의 /Script/IOSRuntimeSettings.IOSRuntimeSettings 부분에 다음과 같이 bEnableSignInWithAppleSupport을 추가합니다.

      [/Script/IOSRuntimeSettings.IOSRuntimeSettings] ... bEnableSignInWithAppleSupport=True ...

 

1.5.6.4. 접근 권한 설정

Privacy - Description

iOS10부터 시스템앱에 접근을 할 때 안내문구를 반드시 입력해야합니다. 입력되지 않았을 경우는 스토어에 빌드 업로드 시 거부 될 수 있습니다.

  1. 카카오게임 SDK에서는 카메라와 포토라이브러리에 접근 권한이 필요합니다. 따라서 해당 부분의 접근 권한 설명을 아래와 같이 입력하도록 합니다.

접근 권한

안내 문구

접근 권한

안내 문구

NSCameraUsageDescription

카메라 접근 권한 : 스크린 샷 촬영(고객센터 첨부) 기능을 위해서 카메라 사용을 허용해주세요.

NSPhotoLibraryUsageDescription

사진첩 접근 권한 : 프로필 사진 설정과 스크린 샷 촬영(고객센터 첨부) 기능을 위한 사진첩 접근을 허용해주세요.

  1. Additional Plist Data에 다음과 같이 추가할 수 있습니다. 

Additional Plist Data

<key>NSCameraUsageDescription</key><string>카메라 접근 권한 : 스크린 샷 촬영(고객센터 첨부) 기능을 위해서 카메라 사용을 허용해주세요.</string><key>NSPhotoLibraryUsageDescription</key><string>사진첩 접근 권한 : 프로필 사진 설정과 스크린 샷 촬영(고객센터 첨부) 기능을 위한 사진첩 접근을 허용해주세요.</string>

접근 권한 다국어 리소스 설정
다국어 설정을 위해서는 별도의 Localization 리소스가 빌드 폴더에 포함되어 있어야 합니다.

Extra PList Data에 값이 설정 되어 있어도 Localization 리소스가 추가 되어 있는 경우 Localization에 설정된 값이 노출 됩니다.

(Extra PList Data, Localization 리소스 둘 다 설정되어 있지 않는 경우 앱이 정상적으로 동작하지 않을 수 있습니다.)

iOS 환경에서 아래 경로에 다국어 지원을 위한 리소스 추가가 필요합니다. (Unreal Engine 가이드 문서)

{UEProjectDir}/Build/IOS/Resources/Localizations/

아래는 영어, 일본어, 한국어, 중국어(번체) 설정 예시입니다.

폴더 이름

설명

기타

폴더 이름

설명

기타

en.lproj

영어 다국어 지원 리소스

  • 각 폴더에 InfoPlist.strings 파일이 추가 되어 있어야 합니다.

ja.lproj

일본어 다국어 지원 리소스

ko.lproj

한국어 다국어 지원 리소스

zh-hant.lproj

중국어(번체) 다국어 지원 리소스

그 외 다른 언어 지원을 위해서는 Unreal Engine 가이드의 아래 내용에 따라서 추가가 필요합니다.

  • 현지화 폴더 이름은 ISO 639-2 표준 목록의 언어 코드를 사용하여 지정해야 합니다.

  • 예시) zh-hans.lproj / 중국어(간체) 다국어 지원 리소스 폴더

image-20240627-062752.png

InfoPlist.strings (en.lproj 영어 설정 파일 예시)

"NSCameraUsageDescription" = "Camera access : Allow taking screenshots (for customer service attachments)."; "NSPhotoLibraryUsageDescription" = "Photo library access : For setting profile pictures and taking screenshots (for customer service attachments).";

InfoPlist.strings (ja.lproj 일본어 설정 파일 예시)

"NSCameraUsageDescription" = "カメラアクセス権限:スクリーンショット撮影(お問い合わせ添付用)機能の使用のため、カメラへのアクセスを許可をお願いします。"; "NSPhotoLibraryUsageDescription" = "アルバムアクセス権限:プロフィール写真設定とスクリーンショット撮影(お問い合わせ添付用)機能の使用のため、アルバムへのアクセスを許可をお願いします。";

InfoPlist.strings (ko.lproj 한국어 설정 파일 예시)

"NSCameraUsageDescription" = "카메라 접근 권한 : 스크린 샷 촬영(고객센터 첨부) 기능을 위해서 카메라 사용을 허용해주세요."; "NSPhotoLibraryUsageDescription" = "사진첩 접근 권한 : 프로필 사진 설정과 스크린 샷 촬영(고객센터 첨부) 기능을 위한 사진첩 접근을 허용해주세요.";

InfoPlist.strings (zh-hant.lproj 중국어(번체) 설정 파일 예시)

"NSCameraUsageDescription" = "相機存取權限:為了截圖(提供客服中心)功能,請允許使用相機。"; "NSPhotoLibraryUsageDescription" = "相簿存取權限:為了設定個人資料照片和截圖(客服中心附加)功能,請允許存取相簿。";

다국어 리소스가 추가된 경우 .ipa 내부에 아래와 같이 리소스 폴더가 포함되어 있습니다.

image-20240626-073511.png

1.5.6.5. 게임 내 지원 언어 리소스

  1. KakaoGameSDK에서 제공하는 언어를 사용자의 기기 언어 설정에 맞게끔 로드하기 위해서 info.plist 설정 필요.

타입

설명

예시

타입

설명

예시

Localized resources can be mixed

Boolean

KakaoGameSDK에서 제공하는 언어를 사용자의 기기 언어 설정에 맞게끔 로드하기 위해서 설정 필요.

YES

  1. Unreal Engine의 Additional Plist Data에 다음과 같이 추가할 수 있습니다.

Additional Plist Data

<key>CFBundleAllowMixedLocalizations</key><true/>

1.5.6.6. 사용자 추적 허용 팝업 노출 제어하기

iOS 14 이상 버전을 사용하는 사용자로 하여금 추적 허용 팝업을 노출할 수 있는 기능을 제공하고 있습니다.

(NSUserTrackingUsageDescription 권한 설정이 필요합니다.)

1.5.6.7. (참고) 다중 Bundle ID 지원에 대한 안내

  • 한 앱(app id)에 대하여 bundle ID를 여러 개 사용할 수 있습니다.

    • 테스트 빌드 등 복수의 번들 아이디가 필요한 경우를 지원 해드립니다.

    • 단, 게임센터에 등록된 bundle ID는 라이브 버전 (마켓에 올라가는 빌드 버전)과 일치해야 합니다.

  • 아래의 규칙에 해당하는 bundle ID는 카카오게임 API를 호출할 수 있습니다.
    단, 일부 기능에 대해 다소 제약이 있을 수 있습니다.

게임센터에 등록된 bundle ID가 3단어 이상이고, 해당 bundle ID에 postfix가 붙을 경우

(예) 게임센터에 등록된(라이브 빌드의) bundle ID가 com.kakaogame.support 라면

    com.kakaogame.support.alpha

    com.kakaogame.support.beta

    com.kakaogame.support.test

등의 bundle ID를 가진 앱 또한 카카오게임 API를 호출할 수 있습니다.

 

1.5.6.8. iOS 빌드 SwiftSupport 관련 앱스토어 리젝 이슈

Unreal에서 Swift 관련 라이브러리 설정 후 빌드를 하게 되면 ipa 파일 내에 SwiftSupport 폴더가 포함되어 있지 않습니다.

앱스토어에서 다음과 같은 사유로 앱 등록이 거절될 수 있습니다. (ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing.)

Utils 폴더에 포함되어 IOSIPAScript  스크립트를 이용하여 SwiftSupport 폴더가 추가된 ipa를 생성할 수 있습니다.

  • ipa_path는 ipa 파일의 절대 경로로 입력되어야 합니다.

bash IOSIPAScript.sh ipa_path="path/Distro_KakaoGameSample-IOS-Shipping.ipa" project_name="KakaoGameSample"
  • toolchain_path가 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos 기본 경로로 설정되어 있습니다.

  • toolchain_path5_5가 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.5/iphoneos 기본 경로로 설정되어 있습니다.

(빌드 환경에 따라서 내부 스크립트 수정이 필요할 수 있습니다.)

 

스크립트는 다음과 같이 ipa_path로 unreal에서 ios 빌드 후 생성된 ipa 파일의 경로를 넘겨서 사용합니다.

스크립트 동작이 완료 되면 -with-swift-support 가 붙은 ipa 파일이 생성 되고 내부에 SwiftSupport 폴더가 포함 된 것을 확인할 수 있습니다.

1.5.7. Windows 플랫폼 설정

1.5.7.1. 기본 설정

  • 플러그인의 아래 경로에 KakaoGame Windows SDK의 Binary(x64)가 포함되어 있습니다.
    (KakaoGameSDKPlugin/Source/KakaoGameSDKPlugin/ThirdParty/Windows/Binary)

  • Unreal 환경에서 Windows SDK를 사용하기 위해서는 Binaries/Win64 폴더에 KakaoGame Windows SDK가 포함되어 있어야 합니다.

    • 플러그인의 KakaoGameSDKPlugin.Build.cs 파일에 아래와 같이 기본 설정이 되어 있습니다.

      ... // KakaoGame Windows SDK Copy string TargetDir = Path.Combine(ModuleDirectory, "ThirdParty/Windows/Binary"); string[] ExtraFiles = Directory.GetFiles(TargetDir, "*.*", SearchOption.AllDirectories); string OutDirectory = "$(BinaryOutputDir)";   foreach (var path in ExtraFiles) {   string relativePath = path.Replace(TargetDir, ".");   string finalPath = Path.Combine(OutDirectory, relativePath);   RuntimeDependencies.Add(finalPath, path); } ...
    • Unreal Editor에서 Windows 빌드를 수행하는 경우 KakaoGame Windows SDK가 프로젝트의 Binaries/Win64와 빌드 된 경로의 PROJECT_NAME/Binaries/Win64 경로에 복사가 됩니다.

1.5.7.2. Unreal Editor 모드

프로젝트에 플러그인을 추가하고 실행하는 경우 KakaoGame Windows SDK가 기본적으로 프로젝트의 Binaries/Win64에 포함되어 있지 않아 Editor 환경에서 KakaoGameSDK 기능을 사용할 수 없습니다.

KakaoGame Windows SDK의 Binary를 프로젝트의 Binaries/Win64의 경로에 직접 추가해야 합니다.

(Unreal Editor에서 Windows 빌드를 수행하는 경우 자동으로 추가됩니다.)

  • 64-bit 환경인 경우 다음 경로의 파일들을 복사합니다. (KakaoGameSDKPlugin/Source/KakaoGameSDKPlugin/ThirdParty/Windows/Binary/x64)

  • Editor에서 로그인 기능을 사용하기 위해서는 2. IDP 개발자 사이트 설정 에서 Windows 관련 설정이 필요합니다.