title: Defold development for the iOS platform
::: sidenote Bundling a game for iOS is available only on Mac version of the Defold Editor. :::
iOS requires that any app that you build and want to run on your phone or tablet must be signed with an Apple-issued certificate and provisioning profile. This manual explains the steps involved in bundling your game for iOS. During development, running your game through the development app is often preferred since it allows you to hot reload content and code directly to your device.
The security associated with iOS apps consists of several components. You can get access to the required tools by singing up to the Apple's iOS Developer Program. When you have enrolled, go to the Apple's Developer Member Center.
The section Certificates, Identifiers & Profiles contains all the tools that you need. From here you can create, delete and edit:
Certificates : Apple-issued cryptographic certificates that identify you as a developer. You can create development or production certificates. Developer certificates allow you to test certain features such as the in-app purchase mechanism in a sandbox test environment. Production certificates are used to sign the final app for upload to the App Store. You need a certificate to sign apps before you can put them on your device for testing.
Identifiers
: Identifiers for various uses. It is possible to register wildcard identifiers (i.e. some.prefix.*
) which can be used with several apps. App IDs can contain Application Service information, like if the app enables Passbook integration, the Game Center, etc. Such App IDs cannot be wildcard identifiers. For Application Services to function, your application's bundle identifier must match the App ID identifier.
Devices : Each development device needs to be registered with their UDID (Unique Device IDentifier, see below).
Provisioning Profiles : Provisioning profiles associate certificates with App IDs and a list of devices. They tell which app by what developer is allowed to be on what devices.
When signing your games and apps in Defold, you need a valid certificate and a valid provisioning profile.
::: sidenote Some of the things you can do on the Member Center homepage you can also perform from inside the Xcode development environment---if you have that installed. :::
Device identifier (UDID) : The UDID for an iOS device can be found by connecting the device to a computer via wifi or cable. Open Xcode and select Window ▸ Devices and Simulators. The serial number and identifier are displayed when you select your device.
If you don't have Xcode installed you can find the identifier in iTunes. Click on the devices symbol and select your device.
Since Xcode 7, anyone can install Xcode and do on-device development for free. You don't have to sign up for the iOS Developer Program. Instead, Xcode will automatically issue a certificate for you as a developer (valid for 1 year) and a provisioning profile for your app (valid for one week) on your specific device.
::: important Make a note of the bundle identifier as you must use the same bundle identifier in your Defold project. :::
This provision file can be used together with your code signing identity to sign apps in Defold for one week.
When the provision expires, you need to build the app again in Xcode and get a new temporary provision file as described above.
When you have the code signing identity and provisioning profile, you are ready to create a stand alone application bundle for your game from the editor. Simply select Project ▸ Bundle... ▸ iOS Application... from the menu.
Select your code signing identity and browse for your mobile provisioning file. Select which architectures (32 bit, 64 bit and the iOS simulator) to bundle for as well as the variant (Debug or Release). You can optionally uncheck the Sign application
checkbox to skip the signing process and then manually sign at a later stage.
::: important
You must uncheck the Sign application
checkbox when testing your game on the iOS simulator. You will be able to install the application but it will not boot.
:::
Press Create Bundle and you will then be prompted to specify where on your computer the bundle will be created.
You specify what icon to use for the app, the launch screen storyboard and so forth in the game.project project settings file in the iOS section.
You can install and launch the built bundle using editor's "Install on connected device" and "Launch installed app" check-boxes in the Bundle dialog:
You need ios-deploy command lint tool installed for this feature to work. The simplest way to install it is using Homebrew:
$ brew install ios-deploy
If the editor can't detect the install location of the ios-deploy tool, you will need to specify it in Preferences.
You create a storyboard file using Xcode. Start Xcode and create a new project. Select iOS and Single View App:
Click Next and proceed to configure your project. Enter a Product Name:
Click Create to finish the process. Your project is now created and we can proceed to create the storyboard:
Drag and drop an image to import it to the project. Next select Assets.xcassets
and drop the image to Assets.xcassets
:
Open LaunchScreen.storyboard
and click on the plus button (+). Type "imageview" in the dialog to find the ImageView component.
Drag the Image View component onto the storyboard:
Select the image you previously added to Assets.xcassets
from the Image dropdown:
Position the image and make any other adjustments you need, perhaps adding a Label or some other UI element. When you are done set the active scheme to "Build -> Any iOS Device (arm64
, armv7
)"(or "Generic iOS Device") and select Product -> Build. Wait for the build process to finish.
::: sidenote
If you have only arm64
option in "Any iOS Device (arm64)" change iOS Deployment target
to 10.3 in "Project -> Basic -> Deployment" settings. It will make your storyboard compatible with armv7
devices (for example iPhone5c)
:::
If you use images in the storyboard they will not be included in your LaunchScreen.storyboardc
automatically. Use Bundle Resources
field in game.project to include resources.
For example, create folder LaunchScreen
in Defold project and folder ios
inside (ios
folder needed to include these files only for ios bundles), then put your files in LaunchScreen/ios/
. Add this path in Bundle Resources
.
The last step is to copy the compiled LaunchScreen.storyboardc
file to your Defold project. Open Finder at the following location and copy the LaunchScreen.storyboardc
file to your Defold project:
/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Intermediates.noindex/YOUR-PRODUCT-NAME.build/Debug-iphonesimulator/YOUR-PRODUCT-NAME.build/Base.lproj/LaunchScreen.storyboardc
::: sidenote Forum user Sergey Lerg has put together a video tutorial showing the process. :::
Once you have the storyboard file you can reference it from game.project.
::: sidenote This is required from Defold 1.2.175. :::
Using an asset catalog is Apple's preferred way to manage your application's icons. In fact it is the only way to provide the icon used in the App Store listing. You create an asset catalog in the same way as a storyboard, using Xcode. Start Xcode and create a new project. Select iOS and Single View App:
Click Next and proceed to configure your project. Enter a Product Name:
Click Create to finish the process. Your project is now created and we can proceed to create the asset catalog:
Drag and drop images to the empty boxes representing the different supported icon sizes:
::: sidenote Do not add any icons for Notifications, Settings or Spotlight. :::
When you are done, set the active scheme to "Build -> Any iOS Device (arm64)"(or "Generic iOS Device") and select Product -> Build. Wait for the build process to finish.
::: sidenote
Make sure that you build for "Any iOS Device (arm64)" or "Generic iOS Device" otherwise you will get ERROR ITMS-90704
error when uploading your build.
:::
The last step is to copy the compiled Assets.car
file to your Defold project. Open Finder at the following location and copy the Assets.car
file to your Defold project:
/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Products/Debug-iphoneos/Icons.app/Assets.car
Once you have the asset catalog file you can reference it and the icons from game.project:
::: sidenote
The App Store icon does not have to be referenced from game.project. It is automatically extracted from the Assets.car
file when uploading to iTunes Connect.
:::
The editor writes an .ipa file which is an iOS application bundle. To install the file on your device, you can use one of the following tools:
ios-deploy
command line toolApple Configurator 2
from the macOS App StoreYou can also use the xcrun simctl
command line tool to work with the iOS simulators available via Xcode:
# show a list of available devices
xcrun simctl list
# boot an iPhone X simulator
xcrun simctl boot "iPhone X"
# install your.app to a booted simulator
xcrun simctl install booted your.app
# launch the simulator
open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
When you submit your game to the App Store you will be asked to provide Export Compliance information with regard to the use of encryption in your game. Apple explains why this is required:
"When you submit your app to TestFlight or the App Store, you upload your app to a server in the United States. If you distribute your app outside the U.S. or Canada, your app is subject to U.S. export laws, regardless of where your legal entity is based. If your app uses, accesses, contains, implements, or incorporates encryption, this is considered an export of encryption software, which means your app is subject to U.S. export compliance requirements, as well as the import compliance requirements of the countries where you distribute your app."
The Defold game engine uses encryption for the following purposes:
These uses of encryption in the Defold engine are exempt from export compliance document requirements under United States and European Union law. Most Defold projects will remain exempt, but the addition of other cryptographic methods may change this status. It is your responsibility to ensure that your project meets the requirements of these laws and the App Store's rules. See Apple's Export Compliance Overview for more information.
If you believe your project is exempt, set the ITSAppUsesNonExemptEncryption
key to False
in the project's Info.plist
see Application Manifests for more details.