1. C++ 인터페이스 구현
// C++ 스타일 코드로 컴파일 지시어 추가
#ifdef __cplusplus
extern "C" {
#endif
// C 문자열을 NSString으로 변환
NSString* CStringToNSString(const char* c) {
return [NSString stringWithCString:c encoding:NSUTF8StringEncoding];
}
// Unity 초기화 메서드
void Initialize(const char* objectName) {
[UnityExtension sharedInstance].observer = CStringToNSString(objectName);
NSLog(@"등록된 객체명: %@", objectName);
}
#ifdef __cplusplus
}
#endif
2. 라이브러리 패키징 및 통합
프로젝트 설정 화면에서 아래와 같이 구성 후 실행 버튼 클릭
빌드 완료 후 생성된 .a 파일을 Unity의 Plugins/ios 폴더에 복사
3. Unity C# 인터페이스 구현
using System;
using UnityEngine;
/// <summary>
/// iOS 네이티브 API 브릿지
/// </summary>
public class IOSBridge
{
#if UNITY_IOS
[DllImport("__Internal")]
public static extern void Initialize(string objectName);
#endif
}
using System;
using UnityEngine;
/// <summary>
/// 확장 기능 관리자
/// </summary>
public class ExtensionManager : MonoBehaviour
{
private void Awake() {
DontDestroyOnLoad(this);
}
public void SetupSDK() {
#if UNITY_IOS
IOSBridge.Initialize(gameObject.name);
#endif
}
}
using UnityEngine;
/// <summary>
/// 싱글톤 패턴 기반 컨테이너
/// </summary>
/// <typeparam name="T">타입 파라미터</typeparam>
public abstract class SingletonContainer<T> : MonoBehaviour where T : SingletonContainer<T> {
private static T _instance;
public static T Instance {
get {
if (_instance == null) {
_instance = FindObjectOfType<T>();
if (_instance == null) {
GameObject container = new GameObject($"Singleton_{typeof(T)}");
_instance = container.AddComponent<T>();
_instance.Init();
}
}
return _instance;
}
}
protected virtual void Init() { }
}
using UnityEngine;
public class TestInitializer : MonoBehaviour {
void Start() {
Debug.Log("=== SDK 초기화 시작 ===");
ExtensionManager.Instance.SetupSDK();
}
}
4. iOS 배포 설정
5. 테스트 실행 절차
생성한 .ipa 파일을 이중클릭하여 설치
계정 인증 후 앱 실행 시 메시지 확인
성공적으로 연결되었음을 나타내는 로그 출력 확인