0 Replies Latest reply on Oct 28, 2016 11:02 AM by Milind.Jha

    10/28/2016 - Beta - AIR 24.0.0.148

    Milind.Jha Adobe Employee (Admin)

      Welcome to the latest AIR Runtime and SDK version 24 beta!  We've been hard at work adding new features to AIR and we're looking forward to receiving feedback from our development community.

      This beta release includes new features as well as enhancements and bug fixes related to security, stability, performance, and device compatibility for AIR Runtime and SDK 24.  For full details, please see our release notes

      New and Updated Features

      Apple TV support

      We have added tvOS (v9.2 or later) as a new platform in AIR Beta Channel beginning with AIR SDK 24. With the following modifications, most of the existing content in your AIR application should work seamlessly on tvOS (Apple TV 4th generation and later):

      1. To create a package for tvOS, the developers need to provide a valid provisioning profile for tvOS. This provisioning profile is different from the one that is used for iOS. The packaging command and the targets to be used for packaging tvOS applications remain the same as that for iOS. Refer to these resources for more details: Exporting Your App for Testing (iOS, tvOS, watchOS), Maintaining Identifiers, Devices, and Profiles, and App Programming Guide for tvOS.
      2. Developers must provide UIDeviceFamily value of 3 in the application descriptor for tvOS platform. However, if this value is not provided and tvOS provisioning is given, then the UIDeviceFamily value equal to 3 is added automatically in the final IPA that is generated.

      <iPhone>

          <InfoAdditions><![CDATA[

              <key>UIDeviceFamily</key>

              <array>

                  <string>3</string>

              </array>

          ]]></InfoAdditions>

      </iPhone>

       

      Following warnings appear if there is a mismatch between the provisioning profile and the UIDeviceFamily value:

      Warning: Provisioning profile specified for tvOS, ignoring iOS UIDeviceFamily value(s).

      Warning: Provisioning profile specified for iOS, ignoring tvOS UIDeviceFamily value(s).

      Apple TV Siri Remote support

      1. TransformGestureEvent.GESTURE_DIRECTIONAL_TAP - A new UIDeviceFamily gesture has been introduced to support directional tap from the Siri Remote. This helps in navigating through a collection of items one-by-one. Direction of the tap can be judged by referring to the offsetX and offsetY values of the event object similar to a SwipeEvent.
      2. TransformGestureEvent.GESTURE_SWIPE - Swipe Events are now supported on Apple TV similar to other platforms. However, the values of stageX and stageY properties remain fixed as received from the native operating system, which is the center of the screen. AIR developers can read a new velocity property in Swipe Events to manage the fast movements based on the strength of swipe.
      3. Mouse Events and Touch Events - Mouse Events on Apple TV are generated only on Siri Remote Click, and are thus limited to CLICK, MOUSE_UP, and MOUSE_DOWN. Touch Events are generated on Siri Remote Touch when Multitouch.inputMode is set to TOUCH_POINT.
      4. Menu and Play/Pause Buttons - In addition to Siri Remote Touch surface support, we have also added support for the Menu and Play/Pause buttons. AIR developers can subscribe to KeyboardEvents.KEY_DOWN and KEY_UP events to listen to these button presses.

         

        keycodekeyname
        Menu0x01000012KEYNAME_MENU="Menu"
        Play/Pause0x01000020KEYNAME_PLAYPAUSE="PlayPause"

         

        Follow Apple's Guidelines for using Siri Remote Buttons and Gestures in your applications.

      Creating icons and images for Apple TV applications

      Follow the steps below to create Assets.car using Xcode for generating application icons, launch images, and TopShelf Images for your Apple TV application.

       

      Step 1. On your Mac, open Xcode and choose File > New > Project > tvOS Application > Single View Application. Provide a name to the app and click create. In the general tab of your project, select Deployment Target as 9.2.

       

      AppleTVProject.png

       

      Step 2. Click Assets.xcassets in the left column and drag your images to different sections App Icon - Large, App Icon - Small, Top Shelf Image, and Launch Image.

      For icon sizes and specifications, follow Apple's guidelines for tvOS icons and images.

       

      AssetsWindow.png

       

      Step 3. Run this native app on your tvOS device (tvOS 9.2+) and check if your icons and images appear correctly.

      Go to the .app file created in your file system where you created the project — right click on .app file and show package contents.

      Copy the Assets.car file from the package. You can package the app with the extracted Assets.car as shown in the following ADT command.

       

      <path to adt> -package -target ipa-app-store -provisioning-profile <.mobileprovision> -keystore <.p12> -storetype pkcs12 -storepass <password> <.ipa> <.xml> <.swf> Assets.car

       

      Add the tags mentioned below in the application descriptor file before packaging for your images:

       

      <key>UILaunchImages</key>

      <array>

        <dict>

          <key>UILaunchImageSize</key>

          <string>{1920, 1080}</string>

          <key>UILaunchImageName</key>

          <string>LaunchImage</string>

          <key>UILaunchImageMinimumOSVersion</key>

          <string>9.0</string>

          <key>UILaunchImageOrientation</key>

          <string>Landscape</string>

          </dict>

      </array>

      <key>TVTopShelfImage</key>

      <dict>

      <key>TVTopShelfPrimaryImage</key>

      <string>Top Shelf Image</string>

      </dict>

      <key>CFBundleIcons</key>

      <dict>

      <key>CFBundlePrimaryIcon</key>

      <string>App Icon - Small</string>

      </dict>

      Points to note

      1. The maximum size for a tvOS app bundle is 200 MB.
      2. Accessing File system, except Cache Directory, throws error 3001: File or directory access denied. The applications on tvOS have write access only in the cache Directory. This is purge-able by the operating system when space is low.
      3. Creating a cursor-like implementation in your app on tvOS can lead to app rejection by Apple, as it does not comply with the Human Interface Guidelines for Apple TV.
      4. Apple TV applications are 64-bit only.
      5. The AIR property SoundMixer.audioPlaybackMode defaults to VOICE on Apple TV. Changing its value to MEDIA does not have any effect.
      6. Apple TV does not support Clipboard.

      Known Issues

      1. StageText takes complete focus in the application and therefore nothing else can be clicked.
      2. tvOS applications do not upload to the Apple App Store.
      3. Local Shared Object .sol file does not get created on tvOS because of filesystem issues.
      4. GameInput APIs may work on Apple TV AIR applications but can be unstable.
      5. The AIR property Microphone.isSupported returns true instead of false.
      6. Apple TV simulator does not launch using the launchApp command.
      7. ANE workflows for tvOS do not work.

      Android SDK Upgrade

      Beginning with AIR 24, Android SDK (API Level 24) has been upgraded in the AIR Runtime.

       

      Important: If you upload an app on Google Play using AIR SDK 24 and default targetSdkVersion value as 24 in the application descriptor, Google Play does not allow uploading the next version of your app with AIR SDK 23 or earlier (see the error message below). Using targetSdkVersion value as 21 allows you to switch between AIR SDK 24 and AIR SDK 23 for your app updates.

       

      Error thrown by Google Play on uploading the next version of your app with AIR SDK 23 or earlier:
      ErrorMessage.png

       

      Here is the list of version numbers of the tools upgraded in AIR 24.

      Tool

      Version
      SDK Tool25.1.7
      SDK Platform24
      Platform Tool24.0.2
      Android Support Repository36
      Android Google Repository32
      Android Build Tool24.0.1

       

      Permissions on Android and iOS

      Beginning with Android 6.0 (API level 23), the users now need to grant permissions to apps while it is running, not when they install the application. To handle the permissions requests and status, we have introduced Permissions API for Android and iOS. The developers can request permissions for classes like Camera, Microphone, Geolocation, CameraRoll, CameraUI, File, and FileReference. The applications must be packaged with AIRSDK 24 or greater and must have SWF version 35 or later. Apps built using these APIs throw a dialog only on Android 6.0 and later. For Android 5.0 or earlier, you can continue to mention permissions in the application descriptor file.

       

      For iOS, the APIs listed below are optional if you do not want to handle permissions explicitly in ActionScript. On Android, If you do not want to handle permissions in your application, use targetSdkVersion less than 23 in your application descriptor file.

      1. permissionStatus: This property informs whether the application has been granted the required permission or not. This property always returns the status as GRANTED on AIR desktop and Android apps that have targetSDKVersion less than 23. The list of properties for PermissionStatus class includes UNKNOWN,GRANTED, and DENIED. The property UNKNOWN specifies that the permission hasn’t been requested yet or the permission has been denied by user with check box option 'Don’t ask again.'.
      2. requestPermission(): The method requestPermission requests for the permission to be granted to the application. A PermissionEvent is dispatched when the user grants or denies a permission.
      3. PermissionError: Accessing properties and methods of such ActionScript classes without requesting for permission throws Error #3800 PermissionError.

      Sample Snippet

       

       

      package

      {

          import flash.display.Sprite;

          import flash.display.StageAlign;

          import flash.display.StageScaleMode;

          import flash.events.PermissionEvent;

          import flash.media.Camera;

          import flash.media.Video;

          import flash.permissions.PermissionStatus;

         

          public class codeSnippet extends Sprite

          {

              private var video:Video;

              private var cam:Camera;

              public function codeSnippet()

              {

                  super();

                 

                  stage.align = StageAlign.TOP_LEFT;

                  stage.scaleMode = StageScaleMode.NO_SCALE;

                 

                  if (Camera.isSupported)

                  {

                      cam = Camera.getCamera();

                     

                      if (Camera.permissionStatus != PermissionStatus.GRANTED)

                      {

                          cam.addEventListener(PermissionEvent.PERMISSION_STATUS, function(e:PermissionEvent):void {

                              if (e.status == PermissionStatus.GRANTED)

                              {

                                  connectCamera();

                              }

                              else

                              {

                                  // permission denied

                              }

                          });

                         

                          try {

                              cam.requestPermission();

                          } catch(e:Error)

                          {

                              // another request is in progress

                          }

                      }

                      else

                      {

                          connectCamera();

                      }

                  }

              }

             

              private function connectCamera():void

              {

                  video = new Video(640, 480);

                  video.attachCamera(cam);

                  addChild(video);

              }

          }

      }

       

      For training resource on Android permissions, see https://developer.android.com/training/permissions/index.html.For information about iOS permissions, see Apple's documentation https://developer.apple.com/ios/human-interface-guidelines/interaction/requesting-permissi on/.

      Points to note

      • A new feature for iOS 10 submissions requires you to add the 'purpose string' to your app when accessing a user's private data such as Camera or Photos. For information about providing keys in your app descriptor file, see Information Property List Key Reference | Cocoa Keys.
      • While requesting for multiple permissions simultaneously, runtime throws the error below:
        Error #3801: Another permission request is in progress.
      • Accessing the File class without requesting for permissions throws Error #3012, which is the old behavior of File API.

      Known issues

      • On Android, the application crashes while accessing some of the properties or methods of File and FileReference class before requesting permissions.
      • On Android, excluding permission from the application descriptor file returns PermissionStatus as UNKNOWN.
      • On Android, CameaUI does not work for targetSdkVersion as 24.
      • On iOS, CameraRoll does not work when the user taps 'Allow' on requesting permission.
      • On iOS, the application crashes while requesting geo.setUpdateHandler.

      Custom fonts support for StageText on iOS and Android

      Beginning with AIR 24, we have introduced support for Custom fonts on StageText for iOS and Android. Earlier, StageText was created with specific system fonts. With the introduction of this feature, the AS developers now have more flexibility in using fonts apart from the ones present in system. The developers can use ttf and otf font files. The changes required to use custom fonts are listed below.

       

      1. Changes required in the application descriptor xml.

       

      Note: To access this functionality, the Namespace value in the app descriptor must be 24.0 or greater.

       

      <application>

      ...

      ...

      <embedFonts>

           <font>

                <fontName>FontID1</fontName>

                <fontPath>path_to_custom_font_fileName1.ttf</fontPath>

           </font>

           <font>

                <fontName>FontID2</fontName>

                <fontPath>path_to_custom_font_fileName2.ttf</fontPath>

           </font>

      </embedFonts>

      ...

      ...

      <application>

       

      2. Changes required in the ActionScript code

       

      The developers can provide any value under fontName tag, for example FontID1 here.

       

      public function CustomFonts()

      {

           label = new StageText();

           label.fontFamily = "FontID1";

           label.textAlign = "right";

           label.stage = stage;

           label.viewPort = new Rectangle(20, 20, 90, 90);

      }

       

      Known Issues

      • For packaging the .apk file using Flash Builder, the developer needs to provide absolute fontPath.
      • With Java 1.6 on Windows, otf files are not rendered for IPAs.

      Asynchronous texture upload for mobile

       

      Till AIR 23, the texture upload was synchronous. Therefore, the developers had to wait till the new texture was uploaded successfully.With AIR 24, you can now upload textures asynchronously while the current texture is being rendered. This ensures a better UI performance for AIR applications and a smoother user experience.On successful completion of asynchronous texture upload, a TEXTURE_READY event will be generated. Asynchronous upload of texture data for all the texture formats is done using the following two new APIs:

      1. uploadFromBitmapDataAsync( source:BitmapData, miplevel:uint = 0)
      2. uploadFromByteArrayAsync( data:ByteArray, byteArrayOffset:uint, miplevel:uint = 0 )

       

      This feature supports Normal and Rectangular texture for miplevel 0 only.

      Anti-Aliasing using configureBackBuffer() on iOS

       

      Anti-Aliasing is useful in improving the perceived image quality in applications. Hardware base Multisampling Anti-Aliasing (MSAA) is now available for iOS using Contex3D.configureBackBuffer.This feature was previously available for Desktop and Flash Player. To enable MSAA, set the level from 0 to 2 using the configureBackBuffer. The following are the effect of levels of antialiasing values:

       

      0=1 subsample, No antialiasing

      1=2 subsamples, medium antialiasing

      2=4 subsamples, high antialiasing.

       

      If you provide higher level of antialiasing (more than 2), the level will be clipped to either the maximum level of anti-aliasing supported by GPU or the value of 2.

       

      Note: This feature is currently not available on Android using configureBackbuffer.

       

      API assumptions and dependencies

      1. Anti-Aliasing is not available in software mode rendering.
      2. The application use extra GPU memory when using anti-aliasing and hence can cause slight performance degradation.

      Known Issues

      • Exponential Increase in GDI object handler due to which application quits unexpectedly (4194045).
      • [Windows 7]Memory leak is observed when using Cairo and HTML5 canvas in AIR Desktop Runtime(4192545).
      • Starling.display.Image mask is not rendering on mobile when rendered with starling.textures.RenderTexture (4196946).
      • [iOS] Failed to find class DTiPhoneSimulatorSystemRoot at runtime error on trying to install App on iPhone Simulator (4186457).
      • [iOS] Capabilities.cpuArchitecture returning wrong value for iOS Simulator.

      Fixed Issues

      • [Mac] Application quits unexpectedly on Mac with OS X exception (SIGSEGV) KERN_INVALID_ADDRESS(4195975).
      • [Mac] FLEX AIR application (digi.me) quits unexpectedly (4152837).
      • [Mac] AIR application quits unexpectedly on network changes or screen invalidation(4011481).
      • [iOS] UIDeviceFamily values are now integers.
      • [Android] While using Android Video, video will hang for a second when other operations occur such ad addChild (4161877).
      • [Android]Video blacks out and only audio plays when user stops and restarts the video ( 4194916)
      • [Android] HLS video using video texture is not playing.
      • [iOS] Background sound stuttering when going idle (4184841).
      • [iOS] GameInput API now supports iOS8 devices.
      • [Android] StageWebView plays video without sound in full screen for URL(ok.ru).
      • [Android] While using immersive mode on devices having soft navigational keys, pink bar appears under that navigational area (4100625).

      Authoring for Flash Player 24 and AIR 24

      • Update application descriptor namespace to 24
      • SWF version should be 35

      System Requirements

      For system requirements of the current release of AIR in production, visithttp://www.adobe.com/products/air/systemreqs/

      About the Beta Channel

      To get the latest Beta build of AIR Runtime and SDK visit Adobe labs

      If you would like real-time notification for announcements related to the AIR Beta Channel please follow the Flash Runtime Announcements forums by choosing "Follow this forum" from the right-hand menu on the Forums page.