Version: 1.7
语言 : 中文
构建适用于 iOS 的插件
Deep linking on iOS

将 Tuanjie 集成到原生 iOS 应用程序中

本页说明如何使用“Tuanjie 用作库”功能将 Tuanjie 运行时库集成到 iOS 原生应用程序中。

使用此功能可以在原生应用程序中包含 Tuanjie 支持的功能(例如 3D/2D 实时渲染、AR 体验、3D 模型交互或 2D 迷你游戏)。Tuanjie 运行时库公开了多种控件来管理何时以及如何在原生应用程序中加载、激活和卸载内容。

工作原理

要将“Tuanjie 用作 iOS 库”,请像往常一样,先从 Tuanjie 构建 Xcode 项目(有关更多信息,请参阅 iOS 构建设置)。

每个 Tuanjie iOS Xcode 项目具有以下结构

  • TuanjieFramework 目标中的一个库部分,其中包含源、插件和相关框架。它还生成 TuanjieFramework.framework 文件。
  • Tuanjie-iPhone 目标中的一个瘦启动器部分,其中包含应用程序表示数据并会运行该库。Tuanjie-iPhone 目标对 TuanjieFramework 目标具有单一依赖关系。

要将 Tuanjie 集成到另一个 Xcode 项目中,必须将两个 Xcode 项目(原生项目和 Tuanjie 生成的项目)合并到一个 Xcode 工作空间中,并将 TuanjieFramework.framework 文件添加到原生 Xcode 项目的应用程序 (Application) 目标的嵌入式二进制文件 (Embedded Binaries) 部分中。完成此操作后,可以使用 TuanjieFramework 类来控制 Tuanjie 运行时。

TuanjieFramework 类

可通过 TuanjieFramework Objective-C 类(该类是 TuanjieFramework.framework 的主体类)的实例来控制 Tuanjie 运行时:

方法 描述
+ (TuanjieFramework*)getInstance; 单例类方法,可将实例返回到 TuanjieFramework
- (UnityAppController*)appController; 返回 UIApplicationDelegateUnityAppController 子类。这是原生端的根类,可以访问应用程序的视图相关对象,例如 UIViewUIViewControllersCADisplayLinkDisplayConnection
- (void)setDataBundleId:(const char*)bundleId; 设置捆绑包,Tuanjie 运行时应在其中查找 Data 文件夹。有关更多信息,请参阅 Data 文件夹的相关文档。应在调用 runUIApplicationMainWithArgcrunEmbeddedWithArgc 之前调用此方法。
- (void)runUIApplicationMainWithArgc:(int)argc argv:(char*[])argv; 从没有其他视图的主要方法中运行 Tuanjie 的默认方式。
- (void)runEmbeddedWithArgc:(int)argc argv:(char*[])argv appLaunchOpts:(NSDictionary*)appLaunchOpts; 存在其他视图时,如果需要运行 Tuanjie,请调用此方法。
- (void)unloadApplication; 调用此方法可卸载 Tuanjie,并在卸载完成后接收对 UnityFrameworkListener 的回调。Tuanjie 将释放占用的大部分内存,但不会全部释放。您将可以再次运行 Tuanjie。
- (void)registerFrameworkListener:(id<UnityFrameworkListener>)obj; 注册监听器对象,用于接收 TuanjieFramework 生命周期相关事件的回调。
- (void)unregisterFrameworkListener:(id<UnityFrameworkListener>)obj; 取消注册监听器对象。
- (void)showUnityWindow; 在显示非 Tuanjie 视图时调用此方法,也会显示已经在运行的 Tuanjie 视图。
- (void)pause:(bool)pause; 暂停 Tuanjie。
- (void)setExecuteHeader:(const MachHeader*)header; 必须在运行 Tuanjie 之前调用此命令,CrashReporter 才能正常工作。
- (void)sendMessageToGOWithName:(const char*)goName functionName:(const char*)name message:(const char*)msg; 此方法是 UnitySendMessage 的代理。它通过名称查找游戏对象,并使用单字符串消息参数来调用 functionName。
(void)quitApplication:(int)exitCode; 调用此方法可完全卸载 Tuanjie,并在 Tuanjie 退出后接收对 UnityFrameworkListener 的回调。Tuanjie 将释放所有内存。

注意:进行此调用后,您将无法在同一进程中再次运行 Tuanjie。可在 AppController 上设置 quitHandler 以覆盖默认进程终止。

限制

Tuanjie 不会控制运行时生命周期,因此“Tuanjie 用作库”可能并不适用于所有可能的用例。已知限制包括:

  • “Tuanjie 用作库”仅支持全屏渲染,不支持在部分屏幕中渲染。
  • 您不能加载多个 Tuanjie运行时实例。
  • 您可能需要调整第三方插件(原生托管插件)才能使用 Tuanjie 运行时。
构建适用于 iOS 的插件
Deep linking on iOS