Unreal iOS
Hive SDK Unreal iOS로 앱을 개발 완료 후 앱을 빌드할 때 다음 항목을 설정해야 합니다.
- Unreal Editor의 메뉴에서 편집 > 프로젝트 세팅 메뉴를 클릭하세요. 프로젝트 설정 창이 화면에 나타납니다.
- 프로젝트 설정 창의 좌측 패널에서 플랫폼 제목 아래의 iOS 메뉴를 선택하세요. iOS 설정 화면이 나타나면, 그룹 별로 안내된 항목을 설정하세요.
그룹별 설정¶
그룹별 설정 안내입니다.
-
Bundle Information 그룹: 번들 식별자(Bundle Identifier) 필드에 게임의 AppID를 입력하세요.
-
OS Info 그룹: Unreal Engine 4.25부터 지원하는 OS 버전이 11.0 이상으로 변경되었습니다. Minimum OSVersion 필드 값을 11.0으로 설정하세요.
-
Build 그룹: Additional Non-Shipping Linker Flags 필드와 Additional Shipping Linker Flags 필드에 -ObjC를 입력하세요.
Extra PList Data 그룹 설정¶
Additional PList Data 필드에 아래에서 안내하는 각 설정 항목에 따라 코드 라인들을 입력하세요. 아래 모든 코드들을 합쳐 한 줄로 입력해야 합니다.
접근 권한 요청 설정¶
접근 권한 요청 설정을 위해 Additional PList Data 필드에 다음 코드를 추가하세요.
<key>NSCameraUsageDescription</key>
<string>Approval required to take pictures.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Approval required to upload image files.</string>
<key>NSUserTrackingUsageDescription</key>
<string>We need your permission to use the Advertising Identifiers (IDFA) for promotion targeting and tracking analysis.</string>
인증: Facebook, QQ, VK, WeChat, Line 설정¶
Facebook, QQ, VK, WeChat, Line 인증을 이용할 경우, 서버 Whitelist를 설정하기 위해 Additional PList Data 필드에 다음 코드를 추가하세요.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>vk-share</string>
<string>vkauthorize</string>
<string>vk</string>
<string>weixinULAPI</string>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqopensdkapiV2</string>
<string>lineauth2</string>
<string>mqqopensdkapiV3</string>
<string>wtloginmqq2</string>
<string>mqq</string>
<string>mqqapi</string>
</array>
Facebook 이용 시 다음의 코드를 이용하여 Facebook AppID와 ClientToken을 추가하세요. 반드시 여러분 게임에 대한 Facebook AppID와 ClientToken 값을 입력하세요.
<key>FacebookAppID</key><string>926000000000000</string>
<key>FacebookClientToken</key><string>d123783h7sdfyh8031h23unf81h3</string>
각 IdP별로 URL Scheme을 설정합니다.
<key>CFBundleURLTypes</key>
<array>
<!--Facebook 이용을 위함. 여러분의 앱의 Facebook App ID 값을 넣어 주세요-->
<dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>fb926000000000000</string></array></dict>
<!--Hive 플랫폼에서 딥링크 사용을 위함. 여러분의 AppID 값을 넣어 주세요-->
<dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>com.com2us.misample.normal.freefull.apple.global.ios.universal</string></array></dict>
<!--Google Sign-in을 위함. 여러분 앱의 Google Sign-in 키 값을 넣어 주세요-->
<dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>com.googleusercontent.apps.270000000000-0m7r8tb2co1q00000000000000000000</string></array></dict>
<!--QQ Sign-in을 위함. 여러분 앱의 QQ 키 값을 넣어 주세요-->
<dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>tencent</string>
<key>CFBundleURLSchemes</key><array><string>tencent1106227203</string></array></dict>
<!--Wechat Sign-in을 위함. 여러분 앱의 Wechat 키 값을 넣어 주세요-->
<dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>weixin</string><key>CFBundleURLSchemes</key><array><string>wx78176cf0c698c0f9</string></array></dict>
<!--VK Sign-in을 위함. 여러분 앱의 VK 키 값을 넣어 주세요-->
<dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>vk6270065</string><key>CFBundleURLSchemes</key><array><string>vk6270065</string></array></dict>
<!--Line Sign-in을 위함-->
<dict><key>CFBundleTypeRole</key><string>Editor</string>
<key>CFBundleURLSchemes</key><array><string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string></array></dict>
</array>
다음은 위 안내의 모든 값을 Additional PList Data 필드에 넣은 값의 예제입니다.
<key>NSCameraUsageDescription</key>
<string>Approval required to take pictures.</string>
<key>NSContactsUsageDescription</key>
<string>You must agree to add friends from your Contacts.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Approval required to upload image files.</string>
<key>NSUserTrackingUsageDescription</key>
<string>We need your permission to use the Advertising Identifiers (IDFA) for promotion targeting and tracking analysis.</string>
<key>FacebookAppID</key>
<string>1809615065921877</string>
<key>FacebookClientToken</key>
<string>c41e47ba5512ea3fb5bfb29d5cfeb244</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>line3rdp.$(PRODUCT_BUNDLE_IDENTIFIER)</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb926000000000000</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.com2us.hivesdk.normal.freefull.apple.global.ios.universal</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.331526026701-s41n272jsv6c0f72kt5o7of0jns350gl</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>tencent</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tencent1106227203</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>weixin</string>
<key>CFBundleURLSchemes</key>
<array>
<string>wx78176cf0c698c0f9</string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>vk6270065</string>
<key>CFBundleURLSchemes</key>
<array>
<string>vk6270065</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>vk-share</string>
<string>vkauthorize</string>
<string>vk</string>
<string>weixinULAPI</string>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqopensdkapiV2</string>
<string>lineauth2</string>
<string>mqqopensdkapiV3</string>
<string>wtloginmqq2</string>
<string>mqq</string>
<string>mqqapi</string>
</array>
Apple SignIn 설정¶
Apple SignIn 지원을 위해 프로젝트 폴더 > Config > DefaultEngine.ini 파일 내 아래 코드를 추가하세요.
다국어 설정¶
앱을 다국어로 서비스하려면 위해서는 다국어 설정 파일을 추가해야 합니다. 다국어 설정 파일을 다운로드 후 압축을 풀고 localize 폴더 하위에 있는 내용을 /Plugins/HIVESDK/Source/HIVESDK/ThirdParty/iOS/resource에 복사하세요.
HIVEAppDelegate 적용하기¶
iOS 빌드의 경우 AppDelegate 메서드 수정이 필요합니다. Unreal Engine의 경우 Swizzling을 이용하여 AppDelegate에 접근합니다. 앱 시작 시 앱을 초기화하는 단계에서 아래 코드를 추가해주세요.
// IOSAppDelegate.h 헤더 추가
#if PLATFORM_IOS
#include "Runtime/ApplicationCore/Public/iOS/IOSAppDelegate.h"
#endif
// AppDelegate 코드 추가
#if PLATFORM_IOS
UIApplication * dummyApplication = [UIApplication sharedApplication];
Class clzHIVEAppDelegate = NSClassFromString(@"HIVEAppDelegate");
SEL selApplicationDidFinishLaunchingWithOptions = NSSelectorFromString(@"application:didFinishLaunchingWithOptions:");
if( clzHIVEAppDelegate != nil && [clzHIVEAppDelegate respondsToSelector:selApplicationDidFinishLaunchingWithOptions] ) {
NSMethodSignature *method = [clzHIVEAppDelegate methodSignatureForSelector:selApplicationDidFinishLaunchingWithOptions];
if (method != nil) {
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:method];
[invocation setSelector:selApplicationDidFinishLaunchingWithOptions];
[invocation setTarget:clzHIVEAppDelegate];
[invocation setArgument:(void*)&dummyApplication atIndex:2];
NSDictionary *localLaunchOptions = [IOSAppDelegate GetDelegate].launchOptions;
if( localLaunchOptions != nil ) {
[invocation setArgument:(void*)&localLaunchOptions atIndex:3];
}
[invocation invoke];
}
}
#endif
iOS FMallocAnsi 설정¶
Unreal Engine iOS 환경과 C++ 표준 템플릿 라이브러리가 정상적으로 호환되려면 아래와 같이 FMallocAnsi 설정이 필요합니다. 앱 프로젝트의 {YourProject}.Target.cs
파일에 다음 코드를 추가합니다.