[Gideros + Tapjoy](3) iOS integration
이번 글에서는 iOS 연동을 해보도록 하겠습니다. 사실 완전한 플러그인이면 native code 추가 작성 없이 연동이 바로 되어야 하는데, 그렇게 만들기가 쉽지 않아서 대신 연동 방법을 공유합니다. 모든 코드는 여기에 있습니다 — https://github.com/keewon/abplugin_for_gideros
Native code 연동은 다음과 같이 합니다.
- 처음 Gideros Studio 에서 Export할 때에는 Full export 후 연동 작업 진행
- 이후 작업부터는 Export 시 ‘Assets Only’ 옵션 이용하면 기존 연동 코드가 덮여쓰여지지 않음.
- Gideros 버전 업데이트 등의 이유로 Full export 가 필요한 경우 연동 작업 재진행…
개인적으로 Firebase와 AdMob도 사용하고 있기 때문에, 해당 서비스를 이용하시는 분들은 코드를 참고하셔도 좋습니다.
iOS용 프로젝트를 Export 하면 xcodeproj 가 생성됩니다. 해당 프로젝트가 있는 디렉토리의 Podfile에 Tapjoy SDK를 추가합시다. tvOS 쪽에는 추가하지 마시기 바랍니다.
pod 'TapjoySDK'
전체 Podfile은 여기에 있습니다 - https://github.com/keewon/abplugin_for_gideros/blob/master/ios/ABPluginExample/Podfile
굳이 SDK의 모든 기능을 Plugin에 포팅하지 않고, SDK 초기화 같은 기능은 직접 AppDelegate 에서 호출하도록 하였습니다. ‘Show Offers’, ‘Show Video’, ‘Send Event’ 처럼 게임 로직 (즉 Lua layer)에서 직접 호출해야 하는 기능만 Plugin 쪽에 넣었습니다.
AppDelegate 수정 사항
- application:didFinishLaunchingWithOptions: 에는 아래 언급할 ABPlugin을 위한 코드와 Tapjoy SDK 초기화 코드인 [Tapjoy connect:]가 들어갔습니다.
Plugin
Plugin을 구성하는 파일에 대해 알아보겠습니다.
abpluginbinder.cpp
Lua 및 Gideros 연결 코드입니다. Lua에서 native plugin의 함수를 호출하면 이쪽이 제일 먼저 호출되게 됩니다. C++로 되어있으며 Android와 iOS에서 같은 코드를 사용합니다.
gabplugin.mm
Native code가 들어가는 부분으로 abpluginbinder 에서 이쪽 코드를 호출합니다. C++ 코드와 iOS native code 가 함께 들어가야 하는 관계로 .mm 확장자를 사용합니다.
ABPlugin.h/mm
Plugin의 내부 로직을 담고 있는 class입니다. Android에도 비슷한 코드가 Java로 되어있습니다. Lua쪽에 비동기적으로 콜백 결과를 보내야하는 경우 gabplugin_enqueueEventX() 함수를 호출하여 Event를 보냅니다.
한가지 주의해야 할 점이 있습니다. Gideros Studio 가 만드는 project는 기본적으로 ARC를 사용하지 않게 되어있습니다. 저는 ARC를 선호하는 관계로 ABPlugin.mm 에 대해서는 compile option 으로 -fobjc-arc 옵션을 주어야 합니다.
그 외 중요한 사항은 Repository에 있는 README에 적어두었습니다.