When you build a Unity project for the iOS platform, Unity creates a folder that contains an Xcode project. You need to build and sign this project before you deploy it on a device or distribute it on the App Store.
Note: You can modify a generated Xcode project using Xcode.PBXProject.
Every generated Unity iOS Xcode project has the following structure and targets:
The Xcode project includes the Xcode project file xcodeproj
, and framework links that only appear in the Xcode project navigator. Apart from the default folders, you can create custom folders to add your custom files.
MainApp
folder and app representation data such as Launch Screens, .xib
files, icons, data, and Info.plist
files. The Unity-iPhone target has a single dependency on the UnityFramework target.UnityFramework.framework
bundle. It includes the Unity runtime, Classes
, UnityFramework
, and Libraries
folders, along with dependent frameworks. UnityFramework
folder includes privacy manifest file (PrivacyInfo.xcprivacy), a consolidated privacy manifest file for Unity runtime, Unity plug-insA set of code created outside of Unity that creates functionality in Unity. There are two kinds of plug-ins you can use in Unity: Managed plug-ins (managed .NET assemblies created with tools like Visual Studio) and Native plug-ins (platform-specific native code libraries). More infolibGameAssembly.a
: A static library that contains all the project’s managed code, cross-compiled to C++, and built for iOS.il2cpp.a
: A static library that contains the IL2CPPA Unity-developed scripting back-end which you can use as an alternative to Mono when building projects for some platforms. More infoNote: Use PBXProject.GetUnityFrameworkTargetGuid() to get the UnityFramework target GUID and PBXProject.GetUnityMainTargetGuid() to get the Unity-iPhone target GUID.
The Classes
folder contains code that integrates the Unity runtime and Objective-C. Unity stores the entry points of the application in the main.mm
and UnityAppController.mm/h
files inside this folder. You can create your own AppDelegate
derived from UnityAppController
, or, if any of your plug-ins include AppController.h
, you can include UnityAppController.h
instead. If your Plugins/iOS
folder includes AppController.mm/h
, you can merge and rename them.
The InternalProfiler.h
file defines a compiler conditional to enable the internal profilerA window that helps you to optimize your game. It shows how much time is spent in the various areas of your game. For example, it can report the percentage of time spent rendering, animating, or in your game logic. More info
See in Glossary. The code in this folder doesn’t change often, and you can place custom classes here. If you select the Append mode, Xcode preserves changes to this folder between builds. However, this function doesn’t support multiple build targets and requires a fixed structure of the Libraries
folder.
Unity’s internal profiler is fast and unobtrusive, and feeds basic information about:
This folder contains your application’s serialized assets and .NET assemblies (.dll
or .dat
files) as either full code or metadata, depending on code stripping settings. The machine.config
file sets up various .NET services such as security and WebRequest. Xcode refreshes the contents of this folder with every build. You shouldn’t make any changes to it.
By default, the Data
folder’s Target Membership is the Unity-iPhone target, and Unity runtime searches for it in the mainBundle
. To change the default bundle where Unity runtime looks for the Data
folder, call setDataBundleId: "com.my.product"
on the UnityFramework instance before you call one of the run functions. For example, if you want to have Data
together with the UnityFramework call, use setDataBundleId: "com.unity3d.framework"
and set the Target Membership to UnityFramework.
Note: On-Demand Resources are only supported when the Data
folder is a part of the Application target and not a part of the UnityFramework
target.
The Libraries
folder contains libil2cpp.a
for IL2CPP. The libiPhone-lib.a
file is the Unity runtime static library, and RegisterMonoModules.cpp
binds Unity native code with .NET. Xcode refreshes the contents of this folder with every build. You shouldn’t make any changes to it.
Icons and splash screens (.png
files) are located in asset catalogs in the Unity-iPhone
folder. Unity automatically manages these files. Launch screens, their XML Interface Builders (.xib
files), and Storyboard files are stored in the project’s root folder. You can configure these files in the Player Settings window (menu: Edit > Project Settings > Player Settings). Make sure the custom launch images that you create adhere to Apple’s Human Interface Guidelines.
You can manage the Info.plist
file within the Unity-iPhone target (accessed via mainBundle
) from Unity’s Player Settings window (menu: Edit > Project Settings > Player Settings > Other Settings > Identification). Unity updates this file rather than replacing it while building the Player. Don’t make changes to it unless you need to.
The /UnityFramework/Info.plist
file, accessed via bundleWithIdentifier:@"com.unity3d.framework"
, is a part of UnityFramework
. You can keep values in this file instead of the Info.plist
file of the mainBundle
. This makes sure that you can still get these values if UnityFramework
is moved into another application, for example, when using Unity as a Library.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.
When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and change our default settings. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer.
More information
These cookies enable the website to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly.
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and therefore anonymous. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance.
These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising. Some 3rd party video providers do not allow video views without targeting cookies. If you are experiencing difficulty viewing a video, you will need to set your cookie preferences for targeting to yes if you wish to view videos from these providers. Unity does not control this.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information.