Doki, one of the biggest Adobe Air for iOS projects, released yesterday

I am proud to present one of the biggest Adobe Air for iOS projects, that was released yesterday. Amazingly, the project completed in less that a year. Doki is a unique modern method of learning the basics of a foreign foreign language without the use of grammar and writing.  Through colourful animated scenarios and characters, Doki brings to life a number of languages through real life situations, humour and interactive exercises. Exclusively designed for the iPad 2, New iPad, and iPhone 4S, Doki teaches five different languages: English, French, German, Iberian Spanish and Latin American Spanish. Each language has two levels: Doki and Doki Further.  Both levels have been designed to teach the basics of these languages so that you can communicate with confidence.  In Doki, a beginner’s level, the learner navigates through 14 chapters or ‘places’ in Doki City, listens and repeats the phrases and then solves simple interactive exercises.  Each chapter is divided into lessons (a total of 51) that present key words and phrases in English and the other languages Doki covers. Doki Further, a more advanced beginner’s level, consists of 9 chapters with 28 lessons that take place in Doki City.
The development of Doki is based entirely on Adobe Air . The result is spectacular. With a development team that consisted of 5 programmers, 2 designers, 3 language specialists, one assistant programmer, plus a team of 4 testers, the gigantic project of 14 apps was completed in less than a year, resulting in very low development costs!
Please visit http://www.dokispeak.com for further details.

Pretty cool.

Similar Messages

  • How to record a time-limited video with Adobe AIR for iOS

    I am trying to record a time-limited video with Adobe AIR for iOS.
    For example, I want to implement the following function. Start a one-minute timer before launching CameraUI to record video. When the timeout event happens after one minute, stop recording video, close the CameraUI view and obtain the video data so far.
      I have several questions related to that.
      1. How to stop recording video from outside the CameraUI view(in this case, from the timeout event handler) and then close the CemeraUI view? As far as I know, to close the CameraUI view, the only way is to press the [Use Video] button or the [Cancel] button from inside the CameraUI view. Is it possible to close it from outside?
      2. Even if the first problem mentioned above is solved, then how can I get the video data so far(in this case, the video data before the timeout). I know that normally we can get a MediaPromise object from MediaEvent parameter of the  complete handler, and read the video data from the MediaPromise object. But obviously in this case, we can not access the MediaPromise object just because the complete handler itself will not be executed since the [Use Video] button is not pressed.
      3. Is it possible to add a stopwatch to show possible remaining recording time when CameraUI view is open? It seems that the CameraUI automatically uses the full screen of iOS device(in my case, iPad) and there is no extra space to show the stopwatch.
      Are there any solutions or workarounds about the three problem above? I really appreciate it if anyone has any idea about this. Thanks in advance.

    You'd have more control by using the Camera object, showing the camera on a video object inside a Sprite, and capturing that. Then you could put whatever graphics alongside it on the stage.. I've used FlashyWrappers in a test to capture the video to the library.  It took some work, but the test worked well...
    Flash/AIR record videos of your apps and games: Rainbow Creatures

  • Does Adobe AIR for iOS support APNs?

    Does Adobe AIR for iOS support the Apple Push Notification Service (APNs)?
    for more information on APNs see:
    http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/Remote NotificationsPG/ApplePushService/ApplePushService.html

    It is exactly the same.
    Do I need to add the mobileprovision in any step of the resigning process?
    Inside the unpacjed ipa, i've fund a Info.plist.
    This seems to be the plist file generated from adt.
    Do I need to integrate my entitlement with the original one?
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
        <dict>
            <key>CFBundleAllowMixedLocalizations</key>
            <true/>
            <key>CFBundleVersion</key>
            <string>0.0.0</string>
            <key>CFBundleShortVersionString</key>
            <string>0.0.0</string>
            <key>CFBundleIdentifier</key>
            <string>XXXXXXXX</string>
            <key>CFBundleInfoDictionaryVersion</key>
            <string>6.0</string>
            <key>CFBundleExecutable</key>
            <string>iBatteryExample</string>
            <key>CFBundleDisplayName</key>
            <string>iBatteryExample</string>
            <key>CFBundlePackageType</key>
            <string>APPL</string>
            <key>DTCompiler</key>
            <string>4.2</string>
            <key>DTPlatformBuild</key>
            <string>8C134</string>
            <key>DTPlatformName</key>
            <string>iphoneos</string>
            <key>DTPlatformVersion</key>
            <string>4.2 Seed 2</string>
            <key>DTSDKName</key>
            <string>iphoneos4.2</string>
            <key>DTXcode</key>
            <string>0325</string>
            <key>DTXcodeBuild</key>
            <string>10M2423</string>
            <key>LSRequiresIPhoneOS</key>
            <true/>
            <key>MinimumOSVersion</key>
            <string>4.0</string>
            <key>NSMainNibFile</key>
            <string>MainWindow</string>
            <key>NSMainNibFile~ipad</key>
            <string>MainWindow-iPad</string>
            <key>CFBundleResourceSpecification</key>
            <string>ResourceRules.plist</string>
            <key>UIStatusBarHidden</key>
            <false/>
            <key>renderMode</key>
            <string>auto</string>
            <key>CTRequestedDisplayResolution</key>
            <string>high</string>
            <key>DebugMode</key>
            <false/>
            <key>CTSoftKeyboardBehavior</key>
            <string>none</string>
            <key>CTNamespaceURI</key>
            <string>http://ns.adobe.com/air/application/3.0</string>
            <key>CTAutoOrients</key>
            <true/>
            <key>CTInitialWindowTitle</key>
            <string>iBatteryExample</string>
            <key>CTInitialWindowContent</key>
            <string>xxxxx.app/xxxxxxxx.swf</string>
            <key>CTMaxSWFMajorVersion</key>
            <string>13</string>
            <key>CFBundleSupportedPlatforms</key>
            <array>
                <string>iPhoneOS</string>
            </array>
            <key>UIDeviceFamily</key>
            <array>
                <string>1</string>
                <string>2</string>
            </array>
            <key>aps-environment</key>
            <string>development</string>
            <key>com.apple.developer.aps-environment</key>
            <string>development</string>
            <key>get-task-allow</key>
            <true/>
            <key>UIRequiredDeviceCapabilities</key>
            <array>
                <string>armv7</string>
                <string>opengles-2</string>
            </array>
            <key>UISupportedInterfaceOrientations</key>
            <array>
                <string>UIInterfaceOrientationPortrait</string>
                <string>UIInterfaceOrientationPortraitUpsideDown</string>
                <string>UIInterfaceOrientationLandscapeRight</string>
                <string>UIInterfaceOrientationLandscapeLeft</string>
            </array>
            <key>Extensions</key>
            <array>
                <string>myExtension</string>
            </array>
        </dict>
    </plist>
    as you can see it already contains the aps-environment value because I've added it in my appdescriptor file.
    Any idea?
    Thanks

  • WEB PAGE'S LOADING INTO AN AIR FOR iOS PROJECT

    Hi!
    I have a complicated problem. I try to find a solution everywhere but I didn’t find anything.
    I’m creating a project Air for iOS with Flash CS5 and Flash CS6. I need to find somebody that know how to upload a web page inside an app.
    I try to explain better. There is yet a task for upload an html link, but it just work in a new browser window. In this way, every time I want to see a web page, the app will be close. Is it possible to import all the web page inside the Air for ios project, and not in an external window?
    I'd like the result is like this:
    Thanks a lot.

    hi....
    i used StageWebView class and i wrote this code:
    var webView:StageWebView = new StageWebView();
    webView.viewPort = new Rectangle( 0, 0, this.stage.stageWidth, this .stage.stageHeight);
    webView.stage = this.stage;
    webView.loadURL( "http://www.adobe.com" );
    The web page opens correctly without using the browser but it opens into all project's frames.
    Is it possible to open the web page only in the frame one (for example) ????
    Thanks a lot!!!!!!!!!!!!!!!!!

  • Why did Adobe stop the support in Air for iOS?

    Today Adobe said that he stop with the developing for iOS,
    It`s mean that he will NOT update the AIR for iOS for newer iOS (like iOS 5).
    I paid many money for a Flash`s license and AppStore`s member!
    What sould I do now?

    What was talked about today is the development of the Flash Player for mobile browsers, that will end after the next version is released. iOS is not affected by that, because Flash didn't work in Safari on iOS anyway.
    Adobe did talk about how they were going to do more with AIR mobile apps, so if anything today's announcements is good news for AIR for iOS.

  • Multi Touch not supported in Adobe Air for IOS?

    Hi, I've just started developing my first app for my iPhone which is an iPhone 3GS. I'm using CS5 to make these apps.
    I did a simple test game where there are two arrows on the screen and a fire button. The screen also has a ground and the player standing on it which can be controlled with left/right and fire. Now, if I press right, he moves right, if I press left, he moves left, if I press fire, he jumps... BUT no matter what I do I can't make dual touch work, ie: I press right AND fire, it only recognize just ONE touch point. So I did alot of researching and didn't find much.  I thought maybe adding a TouchEvent.TOUCH_TAP which I found a guide on on this page: http://openexhibits.org/support/gestures/1/one-finger-tap , but couldn't make it work, so I found this: http://www.adobe.com/devnet/flash/articles/multitouch_gestures.html and it seems Adobe Air for iPhone only allows four different gestures, no TouchEvents. I found a code somewhere that when run it checks to see if the device it's running on supports TOUCH_TAP stuff and in CS5 I got the message that it is not supported, in Adobe Device Central I get it's supported, on the actual phone (yes, got dev license from Apple and all that and can run my apps from CS5 on my iphone) I get it IS supported, but it doesn't work when I try it for real.
    So, my question is: how can I make Adobe Air using CS5 to detect 2 finger presses at the same time in iPhone apps?  Like pressing right+fire at the same time, so it doesn't just detect ONE of them being pressed.
    Thanks a million for any reply.

    Before listening for TouchEvents like TOUCH_BEGIN, TOUCH_MOVE, TOUCH_END etc... you need to set the input mode of your device to TOUCH_POINT. By default it is set to GESTURE.
    This works fine on the iPAD:
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;
    Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
    stage.addEventListener(TouchEvent.TOUCH_BEGIN, touchBegin);
    stage.addEventListener(TouchEvent.TOUCH_MOVE, touchMove);
    stage.addEventListener(TouchEvent.TOUCH_END, touchEnd);
    private function touchBegin(te:TouchEvent):void {
        // your code here
    private function touchMove(te:TouchEvent):void {
        // your code here
    private function touchEnd(te:TouchEvent):void {
        // your code here
    Hope that helps.

  • USER_IDLE or USER_PRESENT event in adobe air for ios

    Hi All,
    Does anybody is having any idea that how can we detect the user Idle time in Adobe air based ios mobile application.
    For a desktop based air project this can eaisly be defined by the below two events:-
    1) flash.events.Event.USER_IDLE
    2) flash.events.Event.USER_PRESENT
    But its very painfull to know that these events are not going to work with the mobile applications.
    If anybody is having any idea,please let me know.
    Any help will be appriciated.
    with Regards,
    Shardul

    This is possible a possible workaround on mobile. I am currently testing this on iOS.
    Use:
    import mx.core.FlexGlobals;
    import mx.core.mx_internal;
    import mx.events.FlexEvent;
    import mx.managers.ISystemManager;
    systemManager = Application(FlexGlobals.topLevelApplication).systemManager;
    systemManager.addEventListener(FlexEvent.IDLE, userIdleHandler);
    and then the handler looks something like this:
    private function userIdleHandler(e:FlexEvent):void
         if(e.currentTarget.mx_internal::idleCounter == 300){ //300 = 30 seconds
           trace("idle timeout");
           //do stuff
    The only real problem Im having with it is that if the user hits the home button and the app suspends, upon resuming the idleCounter is > the threshold number and never gets reset when the user is making touches/presses/clicks.
    If you guys refine this post your updates.
    Thanks,
    Jason

  • Adobe Air for iOS - SQLError: 'Error #3115' no such table

    I am developing Adobe Air application for iOS with sqlite on it. When running on my local machine, it worked like charm (add, edit & delete). Unfortunately, when tried running on iPAD, it gives me the following error:
    SQLError: 'Error #3115', details:'no such table: 'tblEmploye'', operation:'execute', detailID:'2013'
    Here's my code when opening the sqlite database: ** data file is saved on the current application directory where all the files are stored:
            exampleDBFile = File.documentsDirectory.resolvePath("mydb.db");
            if (exampleDBFile==null || !exampleDBFile.exists) {
                MovieClip(root).mcSong.visible = false;
                MovieClip(root).mcAlert.visible = true;
                MovieClip(root).mcAlert.enabled = true;
                MovieClip(root).mcAlert.txtErrorMessage.text = "Database not found";
            exampleDB = new SQLConnection();
            exampleDB.addEventListener(SQLEvent.OPEN, onExampleDBOpened);
            exampleDB.addEventListener(SQLErrorEvent.ERROR, onExampleDBError);
            //exampleDB.openAsync(exampleDBFile);
            exampleDB.open(exampleDBFile);
    I also tried using the following but still no luck
    exampleDBFile = File.applicationDirectory.resolvePath("mydb.db");           
    when using this, i receive a different error : Error:Error #3104
    And heres the code for adding new entries
            sqlInsert = "insert into tblLyrics (empName, empDesc) values
                        ('"+ strReplace(txtSearchMe.text, "'", "") + "','"+ strReplace(txtContent.text,"'","") +"')";
            dbStatement.text = sqlInsert;       
            dbStatement.addEventListener(SQLEvent.RESULT, onDBStatementInsertResult);       
            dbStatement.execute();
    Hoping for your advice....

    Hi,
    I am sorry you are facing this issue. Is the code that you posted all that you are doing? It is missing a few things:
    1) You are not creating the dbFile and the table tblEmployee. Do they already exist on your desktop? On device, you would need to create them.
    2) dbStatement.SQLConnection property is not set anywhere.
    The following sample code is from http://help.adobe.com/en_US/air/reference/html/flash/data/SQLConnection.html. Could you try and see if it works for you?
    package
         import flash.data.SQLConnection;
         import flash.data.SQLResult;
         import flash.data.SQLStatement;
         import flash.display.Sprite;
         import flash.events.SQLErrorEvent;
         import flash.events.SQLEvent;
         import flash.filesystem.File;
         public class MultipleInsertTransactionExample extends Sprite
              private var conn:SQLConnection;
              private var insertEmployee:SQLStatement;
              private var insertPhoneNumber:SQLStatement;
              private var dbFile:File
              public function MultipleInsertTransactionExample():void
                   // define where to find the database file
                   //var appStorage:File = File.applicationDirectory;
              dbFile = new File(File.documentsDirectory.nativePath + File.separator + "ExampleDatabase.db");
                   // open the database connection
                   conn = new SQLConnection();
                   conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
                   conn.addEventListener(SQLEvent.OPEN, openHandler);
                   conn.openAsync(dbFile);
              // Called when the database is connected
              private function openHandler(event:SQLEvent):void
                   conn.removeEventListener(SQLEvent.OPEN, openHandler);
                   // start a transaction
                   conn.addEventListener(SQLEvent.BEGIN, beginHandler);
                   conn.begin();
              // Called when the transaction begins
              private function beginHandler(event:SQLEvent):void
                   conn.removeEventListener(SQLEvent.BEGIN, beginHandler);
                   // create and execute the first SQL statement:
                   // insert an employee record
                   var createEmployees:SQLStatement = new SQLStatement();
                   createEmployees.sqlConnection = conn;
                   createEmployees.text =
                        "CREATE TABLE IF NOT EXISTS employees(lastName, firstName, email, birthday) ";
                   createEmployees.execute();
                   insertEmployee = new SQLStatement();
                   insertEmployee.sqlConnection = conn;
                   insertEmployee.text =
                        "INSERT INTO employees (lastName, firstName, email, birthday) " +
                        "VALUES (:lastName, :firstName, :email, :birthday)";
                   insertEmployee.parameters[":lastName"] = "Smith";
                   insertEmployee.parameters[":firstName"] = "Bob";
                   insertEmployee.parameters[":email"] = "[email protected]";
                   insertEmployee.parameters[":birthday"] = new Date(1971, 8, 12);
                   insertEmployee.addEventListener(SQLEvent.RESULT, insertEmployeeHandler);
                   insertEmployee.addEventListener(SQLErrorEvent.ERROR, errorHandler);
                   insertEmployee.execute();
              // Called after the employee record is inserted
              private function insertEmployeeHandler(event:SQLEvent):void
                   insertEmployee.removeEventListener(SQLEvent.RESULT, insertEmployeeHandler);
                   insertEmployee.removeEventListener(SQLErrorEvent.ERROR, errorHandler);
                   // Get the employee id of the newly created employee row
                   var result:SQLResult = insertEmployee.getResult();
                   var employeeId:Number = result.lastInsertRowID;
                   // Add a phone number to the related phoneNumbers table
                   var createTab:SQLStatement = new SQLStatement();
                   createTab.sqlConnection = conn;
                   createTab.text =
                        "CREATE TABLE IF NOT EXISTS phoneNumbers(employeeId, type, number)";
                   createTab.execute();
                   insertPhoneNumber = new SQLStatement();
                   insertPhoneNumber.sqlConnection = conn;
                   insertPhoneNumber.text =
                        "INSERT INTO phoneNumbers (employeeId, type, number) " +
                        "VALUES (:employeeId, :type, :number)";
                   insertPhoneNumber.parameters[":employeeId"] = employeeId;
                   insertPhoneNumber.parameters[":type"] = "Home";
                   insertPhoneNumber.parameters[":number"] = "(555) 555-1234";
                   insertPhoneNumber.addEventListener(SQLEvent.RESULT, insertPhoneNumberHandler);
                   insertPhoneNumber.addEventListener(SQLErrorEvent.ERROR, errorHandler);
                   insertPhoneNumber.execute();
              // Called after the phone number record is inserted
              private function insertPhoneNumberHandler(event:SQLEvent):void
                   insertPhoneNumber.removeEventListener(SQLEvent.RESULT, insertPhoneNumberHandler);
                   insertPhoneNumber.removeEventListener(SQLErrorEvent.ERROR, errorHandler);
                   // No errors so far, so commit the transaction
                   conn.addEventListener(SQLEvent.COMMIT, commitHandler);
                   conn.commit();
              // Called after the transaction is committed
              private function commitHandler(event:SQLEvent):void
                   conn.removeEventListener(SQLEvent.COMMIT, commitHandler);
                   trace("Transaction complete");
              // Called whenever an error occurs
              private function errorHandler(event:SQLErrorEvent):void
                   // If a transaction is happening, roll it back
                   if (conn.inTransaction)
                        conn.addEventListener(SQLEvent.ROLLBACK, rollbackHandler);
                        conn.rollback();
                   trace(event.error.message);
                   trace(event.error.details);
              // Called when the transaction is rolled back
              private function rollbackHandler(event:SQLEvent):void
                   conn.removeEventListener(SQLEvent.ROLLBACK, rollbackHandler);
                   // add additional error handling, close the database, etc.
    Thanks,
    Sanika

  • Adobe Air for iOS - How to access or read current playing music

    Hi guys, is there a way in AS3 how to detect the current song playing, for example I want to get the title of the music that is currently playing?

    Hi,
    This doesn't seem possible in AIR at present. However, in the future version, you should be able to achieve this. No AIR API will be added, but you should be able to write some native code to get this information. I believe this can be done using the iPod Library.
    Thanks,
    Sanika

  • Can one change the built-in dictionary for IoS Adobe Reader?

    I'd like to change it to another language. Are there built-in dictionaries in languages other than English? Or can you link it to another offline dictionary on your device so you can use the 'Define' feature directly?
    Thanks.

    [topic moved to iOS subforum]

  • Adobe Air for iOS and Android: FlasCC or Native Extension?

    Hi all,
    Who know - what provide better perfomance. FlasCC or Native Extension? For example for Math calculations, bitmapdata modification and etc.

    Well nothing prevent you from mixing flascc with native extension.
    Also, I think that you can also use domain memory in AS3 with the Bytearray class (not sure about that).
    Flascc vs normal as3 is mostly a question of language (portability) Do you want to write as3 or c++?
    Native extension give you speed and native platform access(platform specific feature).
    So, you should think about it this way:
    AS3, run in flash and air. Is sandboxed. Can use domain memory, but it's a bit harder to leverage than flascc.
    Flascc, run in flash and air. Is sandboxed, Can use domain memory. Give you the potential of leveraging the hundreds of opensources lib already out there.
    Native extension, run ONLY in air. Is not sandboxed. Native memory management. Also let you leverage the c++ lib. 
    The best (in my opinion) is to write native code for mobile and desktop (no air or flascc involve) and use flascc for the flash/web platform. It's harder, because you have write portable native code (lots of abstraction), but you mostly have the same problem with native extension.

  • Adobe Air for iOS compiling error

    I have a dilemma I hope someone can help me understand. I have a sports app that is currently live in the appstore and I am trying to revamp it. The app has a section for all 30 teams of that sport. The way I'm making the app is by adding code for 5 teams data at a time then testing. After getting to the point where there is code for 15 teams I can no longer compile the IPA file, I can remove some teams code then compile. I compile through the command line on a PC with Air 3.9. My project is created using Flash Pro CS6 and I dont use any ANE.
    There error I'm getting is:
    ld: symbol(s) not found for architecture armv7
    Compilation failed while executing : ld64
    I've tried compiling on a Mac with a terminal window but same error. I've searched this error and people suggested using the -platformsdk command in the commandline pointing to iOSSDK 7.0 but that didnt work either. I need to know if someone else has experienced this and got past it.

    Good News. Hope this helps others. Try using AIRSDK 4.0 beta, released today, Dec 3. It is improved for heavy coded project and the compile time is way faster. In the command line just add
    -useLegacyAOT no
    to use that feature, it will not by defeault. Check out the Air release notes.
    Downside is just working on mac for now but can't wait for it work on PC because that is my preferred choice.

  • Possibly one of the biggest iPhone 5 or iOS 6 bugs - Misuse of Data

    My iPhone 5 keeps sending and receiving data when an iCloud account is configured on the device. It never stops to receive and send data; therefore, this is causing Verizon data overages. The cellular data counter in settings just keeps going up. This occurs when no apps are active. I am averaging about 2 to 3 kb of data a second being used, which adds up. Is this an iOS 6 bug?
    Resetting the phone to factory defaults or uninstalling third party apps does not resolve the issue.

    Just do the Verizon update - Settings > General > About then accept the update & reboot your phone. It should fix your problem

  • Maximum file size for Adobe air for Androind and iOS compiled apps

    Hi All
    I am working on a project which has a few videos which I need to bundle into my mobile app for an Ipad app I am creating using Adobe Air for iOS. My question is simple is there a maximum file size limit on apps compiled using Adobe air for iOS? And if so what is it? Any help would be great.
    regards Mike

    Hi.  Im not a 100% sure this is correct.  I am able to make a large .IPA file (200+Mb) and it will go onto my iPad 1, but it does not work - Just quicts after a few secs.  If I run the same IPA on my iPad 2 it works.
    When I take out some of the assets so its a smalelr size then it does run on the iPad.

  • Adobe Air for windows

    Hi,
    Does anybody know when is the final version of Adobe AIR for Window is releasing
    Thanks

    You can get the AIR SDK here:
    http://www.adobe.com/products/air/tools/sdk/
    The runtime (to run AIR apps) is here:
    http://get.adobe.com/air/
    Like most software products, it is only as "final" as the latest release.
    If this post answered your question or helped, please mark it as such.

Maybe you are looking for