Integrating Unity into native iOS applications
Integrate the Unity Runtime Library into iOS applications.
Read time 4 minutesLast updated 13 days ago
This page describes how to integrate the Unity Runtime Library into iOS native applications with the Unity as a Library feature.
You can use this feature to include Unity-powered features, such as 3D/2D Real-Time Rendering, AR Experience, 3D model interaction, or 2D mini-games, in your native application. The Unity Runtime Library exposes controls to manage when and how to load, activate, and unload content in your native application.
How it works
To use Unity as a Library for iOS, first build your Xcode project as usual from Unity. For more information, refer to Build an iOS application.
Every Unity iOS Xcode project has the following structure:
- A library part in the UnityFramework target that includes source (including ), plug-ins, and dependent frameworks. Building this target in Xcode produces the
UnityFramework/UnityFramework.hbundle. Unity doesn't place a prebuiltUnityFramework.frameworkin the export folder..framework - A thin launcher part in the Unity-iPhone target that includes app representation data and runs the library. The Unity-iPhone target has a single dependency on the UnityFramework target.
To integrate Unity into another Xcode project, combine both Xcode projects (the native one and the one Unity generates) into a single Xcode workspace, and add the built to Frameworks, Libraries, and Embedded Content (or Embedded Binaries) for your native application's target. Once you do this, you can use the class to control the Unity runtime.
UnityFramework.frameworkUnityFrameworkThis repository contains example Projects and plug-ins that demonstrate how to integrate Unity into an Xcode project, along with further documentation.
UnityFramework class
After you load in the host app, control the Unity runtime through the Objective-C class. The class is declared in and is the principal class of the framework bundle:
UnityFramework.frameworkUnityFrameworkUnityFramework/UnityFramework.hMethod | Description |
|---|---|
| Singleton class method that returns an instance to |
| Returns the |
| Sets the Bundle where the Unity runtime should look for the Data folder. For more information, see documentation on the Data folder. Call this method before calling |
| The default way to run Unity from the main method where there are no other Views. |
| Call this method when you need to run Unity when other Views exist. |
| Call this to unload Unity and receive a callback to |
| Register the listener object that receives callbacks of UnityFramework lifecycle-related events. |
| Unregister a listener object. |
| Call this method while a non-Unity View is showing to also show a Unity View that's already running. |
| Pause Unity. |
| You must call this before running Unity in order for CrashReporter to work properly. |
| This method is a proxy to UnitySendMessage. It finds a game object by name and calls functionName with a single-string message parameter. |
| Call this to unload Unity completely and receive a callback to Note: You won’t be able to run Unity again in the same process after this call. You can set |
Limitations
Unity doesn't control the runtime lifecycle, so Unity as a Library might not work for all possible use cases. Known limitations include:
-
Unity as a Library only supports full-screen rendering, and doesn't support rendering on part of the screen.
-
You can't load more than one instance of the Unity runtime.
-
You can't adjust the device’s status bar visibility through the iOS Player settings when using Unity as a Library in a native iOS application. Consider using either of the following options to achieve the same:
- Set or
UIStatusBarHiddenkey in the info.plist file of your project.UIViewControllerBasedStatusBarAppearance - Set the view controller property and call
prefersStatusBarHiddenmethod.setNeedsStatusBarAppearanceUpdate - Set the view controller property .
childViewControllerForStatusBarHidden
- Set