Release Notes AIR SDK 50.0.1.1
Release Notes AIR SDK 50.0.1.1
Version 50.0.1.1
Date 11 September 2022
Document ID HCS19-000287
Owner Andrew Frost
Table of contents
1 AIR 50.0 Major update ....................................................................... 3
1.1 Why AIR 50.0 ...................................................................................... 3
1.2 Component-based releases ................................................................ 3
1.3 Release numbering and update strategy ............................................ 4
1.4 Documentation .................................................................................... 4
2 Release Overview.............................................................................. 5
2.1 Key changes ....................................................................................... 5
2.2 Limitations ........................................................................................... 5
2.3 Feedback ............................................................................................ 5
2.4 Notes ................................................................................................... 5
8 iOS support...................................................................................... 21
After the “50.0.0.1” pre-release/beta version, this (50.0.1.1) is the first ‘proper’ release version of the
AIR SDK under the 50.0 branch. As such the below information has been retained for convenience,
but will be dropped going forwards.
With a major set of changes, the normal pattern may be to move to version 34 next – however, there
has been some confusion and conflict with the Flash Player releases. Flash Player is still being
supported in China and this was released as version 33 and then version 34; the SWF versions have
also been incremented. To avoid any conflicts, Adobe and HARMAN had agreed that HARMAN’s
version of the Flash Player (supported for enterprise customers only) would be pushed to version 50
so that it was easily recognized as coming from HARMAN and not from Adobe or Microsoft.
So the move of AIR to version 50 is intended to match this version. The SWF version code is also
being updated to 50 to match this. The initial intention was to keep these the same, as it is often
confusing to have to refer back to tables of which SWF versions were associated with which AIR
runtime versions, however we are hoping to continue adding new APIs to the ActionScript APIs and it
is likely that the SWF version will increase faster than the major version number.
To address this, we are splitting the SDK into a number of smaller, platform-specific components. The
“core” tools include the common (typically Java-based) tools plus the templates and other files that
are present in all of the SDK variants. There are also some AIR-specific tools that are not
needed/wanted if the SDK is for overlaying with a Flex SDK. Then each operating system would
require a further package, so you would need one (desktop OS-specific) package for the local build
tools and runtimes, and then Android and iOS support if building for those platforms.
If, for example, there is a minor bugfix needed in the ADT tool, this means that only that component
will need to be updated. Developers therefore get a smaller fix and the effort and time involved to
create this fix is greatly reduced.
To help developers manage this process, an “AIR SDK Manager” tool is being developed that will be
able to download the components and collate them into the required SDK folder structure. The
monolithic SDK zip files will also be available until the tool is available and widely adopted – we have
been using this approach for the last few releases already.
- Any change to the application descriptor format and supported tags will mean that the
namespace will need to update. For example the namespace version would move from 50.0
to 50.1 if we add in a new build setting; the templates and XSD files will also be correctly
updated.
- Any change to the ActionScript APIs will require an update to the SWF version; this also
implies an update is required to the major/minor version number e.g. 50.1 to 50.2, since the
runtimes check the SWF versions against the namespace versions for compatibility purposes.
- Any other functional update – i.e. adding/changing code at a feature level but where no
change is needed in the ActionScript APIs or the XML descriptor file – will mean the third digit
of the release code is changed, for example 50.0.0.1 to 50.0.1.1
- Any pure bug fix would just change the final revision number e.g. 50.0.0.1 to 50.0.0.2. These
updates should always be applied and should have minimal risk of any new bugs; the AIR
SDK Manager will find and offer to apply such updates to an existing AIR SDK installation.
1.4 Documentation
The release notes had previously included an ever-increasing historical list of changes, as well as a
set of documentation around applying some of the settings and workarounds for building 64-ARM
Android platforms within some of the IDEs. This information will be moved to the https://airsdk.dev
portal so that it can be more easily referred to and found in searches.
The final part of the release notes had been a list of ActionScript 3 API changes. We have recently
published the AIR 33.1 AS3 documentation online at https://airsdk.dev/reference/actionscript/3.0/ and
so will be removing this final part of the release notes. A summary of changes will still be present in
the release notes document but then the actual reference for new APIs should be found online.
2 Release Overview
Release 50.0.1.1 of the AIR SDK is a full release that contains a number of fixes and minor updates
made on top of the 50.0.0.1 pre-release. The below information provides the differences between the
33.1.1.929 release and this one; in future only the changes between each component will be listed.
- New ActionScript “TimeZone” class and ability to set this as the ‘default’ timezone used in
local time calculations
- Screen class updates for working out cut-out and ‘safe’ areas
2.2 Limitations
For macOS users on 10.15+, the SDK may not work properly unless the quarantine setting is
removed from the SDK: $ xattr -d -r com.apple.quarantine /path/to/SDK
Please note that there is no longer support for 32-bit IPA files, all IPAs will use just 64-bit binaries now
so older iPhones/iPads may not be supported.
Android development should now be performed with an installation of Android Studio and the SDK
and build tools, so that the new build mechanism (using Gradle and the Android Gradle Plug-in) can
use the same set-up as Android Studio.
2.3 Feedback
Any issues found with the SDK should be reported to [email protected] or preferably
raised on https://github.com/airsdk/Adobe-Runtime-Support/issues.
The website for AIR SDK is available at: https://airsdk.harman.com with the developer portal available
under https://airsdk.dev
2.4 Notes
Contributors to the https://airsdk.dev website would be very welcomed: this portal is being built up as
the repository of knowledge for AIR and will be taking over from Adobe’s developer websites. At some
point the AS3 documentation will be migrated to this location and this can then be maintained directly
by HARMAN (and/or the community) rather than having AS3 API updates listed within these release
notes.
For developers who are packaging applications for desktop AIR, there is now a shared AIR runtime
that is available for end users to download at https://airsdk.harman.com/runtime. However, we
continue to recommend that applications are packaged up with the captive bundle mechanism to
include the runtime and remove the dependency upon this shared package.
On MacOS in particular, the use of the shared AIR runtime to ‘install’ a .air file will not create a signed
application, hence new MacOS versions may block these from running. To ensure a properly signed
MacOS application is created, the “bundle” option should be used with native code-signing options
(i.e. those appearing after the “-target bundle” option) having a KeychainStore type with the alias
being the full certificate name.
3 Release Information
3.1 Delivery Method
This release shall be delivered via the AIR SDK website: https://airsdk.harman.com/download
Name Version
Adobe AIR SDK – for Windows 50.0.1.1
Adobe AIR SDK – for Mac 50.0.1.1
Adobe AIR SDK – for Linux 50.0.1.1
Adobe AIR SDK for Flex Developers – for Windows 50.0.1.1
Adobe AIR SDK for Flex Developers – for Mac 50.0.1.1
Adobe AIR SDK for Flex Developers – for Linux 50.0.1.1
NOTE when copying an AIR SDK over a previous version, there may be errors relating to
“MainWindow.nib” and “MainWindow-iPad.nib”. These were originally files, and then had been turned
into folders by a version of Xcode. However these should now be files again hence there may well be
problems with overwriting of file types. If you see this error, the best approach is to delete these
files/folders from the target location and then perform the copy/extraction again.
4 Summary of changes
4.1 Deltas for 50.0.1.1
The changes between the 50.0.0.1 pre-release and this 50.0.1.1 release are added in green font.
Namespace: 50.0
SWF version: 50
The namespace and SWF version updates are made across all platforms and may be used to access
the updated ActionScript APIs that have been introduced with AIR version 50.0. The namespace update
is required for opening any SWF file that’s got a SWF version of 50, or when using any of the new XML
application descriptor flags.
No other changes have yet been made although updates to support the new Xcode and iOS versions
will be made soon.
The Android build tools and platform used to create the AIR runtime files has been updated to
Android-31 with the default target SDK now set to this level in the generated Android manifest files.
Xcode 13 and the latest macOS and iphoneOS SDKs are now being used to build the AIR SDK.
The build system for this is on a version of macOS that doesn’t support 32-bit processes hence we
cannot generate the 32-bit versions of the stub files. This means that we can no longer support older
32-bit iPhone/iPad devices.
AIR-5818 New built-in ActionScript class (at the top level) called TimeZone
New accessory methods on the Date class to set/retrieve the current time zone:
public native static function get localTimeZone() : TimeZone;
public native static function set localTimeZone(tz : TimeZone) :
void;
github-2143 New property on Context3D objects to allow developers to ignore the built-in
resource limits imposed by AIR:
public native function get ignoreResourceLimits():Boolean;
public native function set ignoreResourceLimits(value:Boolean):void;
AIR-6168 New methods on the ExtensionContext class to get information about known ANEs,
and a new class definition that contains the extension information:
public native static function getExtensionInfo(extensionID:String) :
ExtensionInfo;
public native static function get knownExtensions():Vector.<String>;
public function get functions():Vector.<String>;
New class: flash.external.ExtensionInfo;
github-1995 New methods on the StorageVolumeInfo class to allow asynchronous retrieval of
the device’s volume information:
public native function getStorageVolumesAsync():void;
public native function get currentVolumes():Vector.<StorageVolume>;
4.5 Features
AIR Multimedia APIs
A number of new ActionScript classes have been created to form a framework for a new multimedia
pipeline. Currently this feature is still work in progress so we do not recommend any of these are
used; this will be more fully documented as the implementations are developed across the various
platforms.
AIR-5060: Add support for macOS 'function' key modifier
In order to support the “Fn” key on macOS, used in some menu keyboard accelerators (for example
Fn-D for dictation), a new property “Function” has been added to the Keyboard class, and a
corresponding constructor argument and property “functionKey” has been added to the
KeyboardEvent class. Function key modifiers will then work properly with the recent macOS updates.
AIR-5077: Switching .nib folders back to individual files per xcode changes
This change switches the iOS files “MainWindow.nib” and “MainWindow-iPad.nib” back to just being
the individual files, rather than the folders that an earlier version of Xcode had been creating. This is
only relevant when copying and overlaying the AIR SDK on top of previous SDKs; the ADT tool will
now cope with these regardless of whether they are files or folders.
AIR-5796: AIR API for providing cutout information or visible screen areas
To provide built-in support for the “safe” area of a screen – i.e. an area that isn’t obscured by camera
cut-outs or rounded corners – a new Screen.safeArea property has been added that is similar to the
visibleBounds value, but provides the area with this that is considered ‘safe’ by the operating system.
See also https://github.com/airsdk/Adobe-Runtime-Support/issues/933
AIR-5802: AIR runtime: DefineBinaryData support for encrypted data
The AIR AS3 compiler has been updated so that it can encrypt “BinaryData” SWF tags. These can be
created via the “[Embed(…)]” directive, with a MIME type of “application/octet-stream”. To encrypt the
data, a new parameter “encrypt="true"” should be used; then at runtime, the data can be retrieved
using a new function “System.decryptBlob(data:Class):ByteArray” where the class definition (i.e. the
name of the class that followed the Embed directive) is passed in and the decrypted data is returned
as a byte array.
AIR-5818: AIR AS3 Timezone support
This change supports the concept of time zones that can be set manually onto a Date object and can
be used to convert between UTC and specific timezones (rather than just between UTC and whatever
the device local timezone is). A new top level TimeZone class has been added to AS3, and a
localTimeZone property added to the Date class so that the “local” (non-UTC) times can be queried
for this time zone rather than just the local time.
Note that the list of supported time zones is retrieved dynamically on each platform and will vary
between different operating systems.
See also https://github.com/airsdk/Adobe-Runtime-Support/discussions/1396
AIR-5960: Adding delayed-load capability for ANEs
To avoid having to load and initialise everything within the first frame of execution, ANEs can now be
loaded in a delayed fashion. To set this up, add a “delayLoad="true"” attribute into the
“extensionID” tag, and then – prior to accessing any of the AS3 definitions from the ANE’s library –
use the new ExtensionContext.loadExtension() method. This method can also be used to load an
ANE that’s not listed in the application descriptor file – for this, the path to the ANE folder needs to be
given. The AIR runtime then uses this folder to look for an extension descriptor file under a relative
path of “META-INF/ANE/extension.xml”.
AIR-5991: Compiler and configuration files switching to 50.0 release with default as air-config
This updates the default SWF version to 50 when building a SWF using the compiler provided within
the full AIR SDK; it also means that the configuration file “air-config.xml” will be picked up by default,
rather than the “flex-config.xml” file. This can be adjusted via the “-load-config” command if a different
file is required.
AIR-6013: Adding support for postMessage with Edge WebView2 on Windows
Experimental/initial support has been added so that communication between ActionScript and
JavaScript can happen, to start with this is restricted to the Edge “WebView2” component (used by
StageWebView when this is requested using the “<UseWebView2>” flag in the app descriptor file). An
AS3 API will be created for this in the future but currently to send a message to the JavaScript
content, the “StageWebView.loadString()” method can be used, by setting a MIME type of
“javascript:postMessage”). If the JavaScript posts a message, this will be dispatched by the
StageWebView object as a TextEvent with type “webMessage” and the message available in the ‘text’
property of the event.
AIR-6015: Moving standard configuration settings into user folder
The “adt.cfg” file had been created initially to work around restrictions in the IDEs where new features
available in the ADT command line were not reflected in the IDEs such as Animate, Flash Builder etc.
The file was located in the “lib” folder for the AIR SDK (i.e. alongside the “adt.jar” file) but this needed
setting up each time a new SDK was installed. The settings have now been moved to a user-specific
folder (“~/.airsdk/adt.cfg”) so that a single file covers all SDK installations. Note that if a particular
setting is not found in this user file, the ADT software still looks for a setting in the SDK’s “lib” folder,
so this can be used for customisations/exceptions that may be SDK-specific.
AIR-6018: AIR security - digest capability
A utility method has been added to the ActionScript APIs in order to generate a digest/checksum of
some data. A new package “air.security” defines a class “Digest” that can be passed data via the
IDataInput interface, and then returns a digest (SHA-1, SHA-256 or MD5) as a ByteArray. There is
also a utility method to perform a digest in a single function call that takes the algorithm plus an input
ByteArray.
AIR-6057: App descriptor additions for Android gradle build settings
To allow developers to tweak the settings used in the Android gradle build mechanism, new
application descriptor values are available under the “<android>” section. These are
“<multidexVersion>”, “<gradleVersion>” and “<androidGradlePluginVersion>”; version codes should
be provided as the standard x.y.z notation. This is likely to be required only when customising the
application and build process with ANEs that have particular requirements, or perhaps where build
systems need to be maintained with different defaults and tools than the AIR SDK is expecting.
AIR-6106: App descriptor files to include more Android build settings
In a similar vein, some of the configuration settings that had been present in the “adt.cfg” file are now
available within the application descriptor file. These values have the highest priority and will override
any setting in an adt.cfg file, and can be used for application-specific overrides to any default values.
The available options – that should be contained within the “<android>” section of the application
descriptor – are: “<addAirToAppID>” (true/false), “<buildArchitectures>” (comma-separated list of
architectures armv7/armv8/x86/x64), “<createAppBundle>” (true/false), “<buildLegacyAPK>” (just a
capitalisation change), and “<uncompressedExtensions>” (comma-separated list of extensions). The
“buildArchitectures” are used in two instances: (a) when generating an Android App Bundle in order to
limit which AIR runtime libraries are included; (b) when generating an APK file, if only one option is
listed here, this will be used as an override to any command-line request provided by the IDE.
AIR-6116: Adding stage.preloadComplete() method to load a new root display object
This method is intended to help with the use of preloaders to ensure that ActionScript definitions
loaded in via secondary SWF files (or in later frames in a moveiclip-based SWF) can be appropriately
instantiated and added to the stage. If the preloader calls “preloadComplete” on its stage object,
passing in the fully qualified name of the ActionScript class for the main application, then AIR will
reset itself as if it was being started up again and the new class will be created with an initial display
object already on the stage. The original preloader object will be removed completely from the display
list and will be cleaned up via standard garbage collection rules.
AIR-6168: Adding ANE extension information object to query loaded status etc
In order to support the “delayed load” and dynamic loading of AIR Native Extensions, some additional
APIs have been added to the ExtensionContext class/object in order to find out the loaded status and
to check whether the ANEs were specified in the application descriptor file and whether there were
requested to be delay-loaded, or whether they were dynamically loaded at a later point. Once an
Extension Context is created, the list of functions that were specified by the ANE is also available.
There is an ExtensionInfo class that can provide generic information about an ANE, including
information from the extension descriptor XML file such as the version and description details.
github-13: Adding NativeApplication.isActive property
This property has been added so that applications can check whether they have the operating system
‘focus’; it is updated immediately prior to dispatching the “activate” and “deactivate” events.
github-175: Adding new 'FRENewByteArray' ANE method for creating ByteArray AS3 objects
This method is a short-cut/utility to simplify the creation of ByteArray objects from native C/C++ code
in an ANE. An FREByteArray object can be passed in and an FREObject handle to the new
ActionScript object is returned. Note that this function will copy the input data so the user remains
responsible for cleaning up the original data that is passed in.
github-236: Adding FREAcquire/ReleaseNativeWindowHandle methods for ANEs
In order to support advanced functionality, it is now possible to get the native window handle from the
operating system, that is the equivalent of the NativeWindow object. Note that this is currently only
supported on Windows but will be expanded to other desktop platforms. This capability has been
added to MacOS and Linux platforms in 50.0.1.1.
This is an application descriptor update where a new tag, “<clipboardFullHTML>” (true/false) can be
set under the “<windows>” section, that will change the behaviour of the clipboard operations when
retrieving HTML text on Windows. Previously (and the default still, or if the flag is false) the “fragment”
of HTML had been provided to the AIR app rather than the full data that was present on the clipboard.
Setting this to true will result in the full Windows clipboard HTML information being provided, including
all style settings, per the Windows clipboard documentation.
github-2065: Adding TextField.htmlParagraphBehavior property to fix newline behaviour in htmlText
This setting can be used to change the behaviour of paragraph marks (<p> … </p>) within the
htmlText property of a TextField. If this is set to true, the behaviour is updated so that it becomes
more like that of normal HTML – where both the start and end of a paragraph are marked with newline
characters. To ensure the behaviour seems sensible, any newline at the start or end of the text field
will be ignored – hence this setting can be used to avoid the behavioural differences if a text field just
has a single line that has <p> .. </p> formatting, where in ‘input’ mode there will be a newline at the
end but in ‘dynamic’ mode this is removed.
github-2143: Adding a flag to Context3D to prevent it from limiting GPU resources
Following a request to update the Stage3D contexts that are available, a short term fix has been
provided so that the AIR runtime will ignore the resource limits (in terms of number of resources
available and the memory used by such resources, plus the size of an individual texture) for vertex
buffers, index buffers, and textures. This new property, Context3D.ignoreResourceLimits,
should only be set if the developer is confident that their application has sufficient error handling in
place should the GPU memory be exhausted.
github-2183: Updating openssl to 1.1.1q for Android builds
Google have started notifying applications that were built with older openssl versions, before 1.1.1i.
The AIR runtime had been including 1.1.1d for the openssl capabilities; this has been updated to the
latest stable build under the 1.1.1 branch (“q”) and these changes have been so far incorporated into
the Android runtime; other platforms will be updated later.
github-1873: Ensuring ANE stub libraries have the new APIs in for linking against
An error in the original 50.0.0.1 code meant that the new APIs could not be used on platforms that
required stub/library information. The exports have now been updated so that the new methods
should be available to the ANE libraries.
github-1881: Ensuring HTMLLoader.isSupported returns false on Linux
The “HTMLLoader” property “isSupported” currently still returns true on the Windows and macOS
platforms even though the older-style WebKit-based HTMLLoader implementation has been removed.
For Linux, there is no current native StageWebView implementation available which means that any
use of HTMLLoader will also fail, hence the change to this property.
github-1882: Removing unnnecessary WebKit libraries from captive runtimes
The WebKit and Flash stub libraries have been removed from the SDK so that they are no longer
copied into desktop application bundles.
github-1894: Removing unnecessary Camera.setCursor function
This method was no longer used/supported so the definition has been removed to avoid confusion.
github-2025: Ensuring AOT compilation copes with switch statement optimisations
Previously, an empty case option within a switch statement could cause problems with the AOT
compiler due to an optimisation that condensed cases that were the same.
github-2140: Ensuring sdkVersion is correctly parsed for ANE platform option files
A bug was found with the “sdkVersion” parsing when this was not a simple string such as “11.0”,
“12.0” for the iOS SDK version. Three sections (“11.0.0” etc) would have resulted in a parse error
which would make the ADT tool think that “sdkVersion” was missing/zero. This has been fixed but the
version string is only used to check whether an iOS ANE needs to have a universal binary (i.e. armv7
and arm64 sections) which is just looking at the major version being 11 or greater.
github-2147: Updating descriptor sample so that Animate can use namespace 50.0
As well as the template files, the ‘sample’ AIR application descriptor file has been updated to
namespace 50.0 so that Animate correctly uses this rather than updating always to 33.1.
github-2151: Fixing prototype pointer for ScreenMode so toString() works
The ScreenMode objects were not being created correctly internally which meant the prototype chain
failed and “toString()” was not defined. These now correctly derive from Object.
5 Android builds
5.1 AAB Target
Google introduced a new format for packaging up the necessary files and resources for an application
intended for uploading to the Play Store, called the Android App Bundle. Information on this can be
found at https://developer.android.com/guide/app-bundle
AIR now supports the App Bundle by creating an Android Studio project folder structure and using
Gradle to build this. It requires an Android SDK to be present and for the path to this to be passed in
to ADT via the “-platformsdk” option (or set via a config file – it also checks in the default SDK
download location). It also needs to have a JDK present and available, and will attempt to find this
either from configuration files or via the JAVA_HOME environment variable (or if there is an Android
Studio installation present in the default location, using the JDK provided by that).
To generate an Android App Bundle file, the ADT syntax is similar to the “apk” usage:
adt -package -target aab <signing options> output.aab <app descriptor and files> [-extdir
<folder>] -platformsdk <path_to_android_sdk>
No “-arch” option can be provided, as the tool will automatically include all of the architecture types.
Signing options are optional for an App Bundle.
Note that the creation of an Android App Bundle involves a few steps and can take significantly longer
than creating an APK file. We recommend that APK generation is still used during development and
testing, and the AAB output can be used when packaging up an application for upload to the Play
Store.
ADT allows an AAB file to be installed onto a handset using the “-installApp” command, which
wraps up the necessary bundletool commands that generate an APKS file (that contains a set of APK
files suitable for a particular device) and then installs it. If developers want to do this manually,
instructions for this are available at https://developer.android.com/studio/command-
line/bundletool#deploy_with_bundletool, essentially the below lines can be used:
Note that the APK generation here will use a default/debug keystore; additional command-line
parameters can be used if the output APK needs to be signed with a particular certificate.
6 Windows builds
The SDK now includes support for Windows platforms, 32-bit and 64-bit. We recommend that
developers use the “bundle” option to create an output folder that contains the target application. This
needs to be packaged up using a third party installer mechanism, in order to provide something that
can be easily distributed to and installed by end users. HARMAN are looking at adapting the previous
AIR installer so that it would be possible for the AIR Developer Tool to perform this step, i.e. allowing
developers to create installation MSI files for Windows apps in a single step.
https://help.adobe.com/en_US/air/build/WSfffb011ac560372f709e16db131e43659b9-8000.html
Note that 64-bit applications can be created using the “-arch x64” command-line option, to be added
following the “-target bundle” option.
7 MacOS builds
MacOS builds are provided only as 64-bit versions. A limited shared runtime option is being prepared
so that existing AIR applications can be used on Catalina, but the expectation for new/updated
applications is to also use the “bundle” option to distribute the runtime along with the application, as
per the above Windows section.
Note that Adobe’s AIR 32 SDK can be used on Catalina if the SDK is taken out of ‘quarantine’ status.
For instructions please see an online guide such as:
https://www.soccertutor.com/tacticsmanager/Resolve-Adobe-AIR-Error-on-MacOS-Catalina.pdf
AIR SDK now supports MacOS Big Sur including on the new ARM-based M1 hardware: applications
will be generated with ‘universal binaries’ and most of the SDK tools are now likewise built as
universal apps.
8 iOS support
For deployment of AIR apps on iOS devices, the AIR Developer Tool will use the provided tools to
extract the ActionScript Byte Code from the SWF files, and compile this into machine code that is then
linked with the AIR runtime and embedded into the IPA file. The process of ahead-of-time compilation
depends upon a utility that has to run with the same processor address size as the target architecture:
hence to generate a 32-bit output file, it needs to run a 32-bit compilation process. This causes a
problem on MacOS Catalina where 32-bit binaries will not run.
Additionally, due to the generation of stub files from the iPhone SDK that are used in the linking
process – which are created in a similar, platform-specific way – it is not possible to create armv7-
based stub files when using Catalina or later. From release 33.1.1.620, the stub files are based on
iOS15 and are purely 64-bit. This means that no 32-bit IPAs can be generated, even when running on
older macOS versions or on Windows.
9 Splash Screens
For our ‘free tier’ users, a splash screen is injected into the start-up of the AIR process, displaying the
HARMAN and AIR logos for around 2 seconds whilst the start-up continues in the background. There
are different mechanisms used for this on different platforms, the current systems are described
below.
9.2 Android
The splash screen is displayed during start-up and happens immediately the runtime library has been
loaded. After a slight delay the initial SWF file is loaded in and when processing for this starts, the
splash screen is removed.
9.3 iOS
The splash screen is implemented as a launch storyboard with the binary storyboard and related
assets included in the SDK. This has implications for those who are providing their own storyboards or
images in an Assets.car file:
- If you are on the ‘free tier’ then the AIR developer tool will ignore any launch storyboard you
have specified within your application descriptor file, or provided within the file set for
packaging into the IPA file.
- If you are creating an Assets.car file, then you need to add in the AIR splash images from the
SDK which are in the “lib/aot/res” folder. These should be copied and pasted into your
“.xcassets” folder in the Xcode project that you are using for creation of your assets.
Troubleshooting:
Message from ADT: “Warning: free tier version of AIR SDK will use the HARMAN launch
storyboard” – this will be displayed if a <UILaunchStoryboardName> tag has been added via the
AIR application descriptor file. The tag will be ignored and the Storyboard from the SDK will be used
instead.
Message from ADT: “Warning: removing user-included storyboard "[name]"” will be displayed
if there was a Storyboardc file that had been included in the list of files to package: this will be
removed.
Message from ADT: "Warning: free tier version of AIR SDK must use the HARMAN launch
storyboard" – this will be displayed if the Storyboardc file in the SDK has been replaced by a user-
generated one.
If a white screen is shown during start-up: check that the HARMAN splash images are included in
your assets.car file. Note that the runtime may shut down if it doesn’t detect the appropriate splash
images.
The runtime may also shut down for customers with a commercial license if a storyboard has been
specified within the AIR descriptor file but not added via the list of files to package into the IPA file.