Archive for the ‘ Tips ’ Category

How to enable iTunes FileSharing on AIR for iOS Devices

I was searching the net to find a way to enable FileSharing with itunes on my AIR for IOS app.

After some research, this is the simple way it can be done:

  • Edit your application descriptor xml file
  • In the InfoAdditions section add the next two lines of code
  • Recompile you project and update the app via iTunes
  • After sync with iTunes, your app now can share files within the app Documents directory
1
2
<key>UIFileSharingEnabled</key>
<true/>

Enjoy!!

Injecting inline formated xml in javascript

Sometimes is good tho have some code like this:

1
2
3
4
var html =
<form>
    <input type="text">
</form>;

But for now is not posible to do until E4X is adopted by all the browsers…

A tricky way to do it is to use the javascript /*! comments */ inside a function definition, to store the real formated xml.

How to define a variable in comments:

1
2
3
4
5
6
7
    /*!
    {"embed":{ "id":"form" } }
    <form>
        <input type="text" name="user"/>
        <input type="text" name="password"/>
    </form>
    */

First line begins with a normal multiline comment /* and the ! simbol, ATTENTION, that way, starting width /*! we tell some javascripts mimimizers that this is a special comment and they must left the comments as is in the source code.
Second line tells the parser the variable asignation name of the content.
The declaration must end width the close comment tag */ in a new line.

Full example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var data = function()
{
    /*!
    {"embed":{ "id":"form" } }
    <form>
        <input type="text" name="user"/>
        <input type="text" name="password"/>
    </form>
    */


    /*!
    {"embed":{ "id":"button"} }
        <button value="Send">
    */
                 
}
var parsedData = window.parseEmbeds(data);
alert( parsedData.form )
alert( parsedData.button );

The main parseEmbeds function:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(function(window)
{
    window.parseEmbeds = function( fn, opt )
    {  
        var dataObj = {}
        var regex_comments = /\*(.|[\r\n])*?\*/gi;
        var code = fn.toString().match( regex_comments );
        var comment;
        var lines;
        var outputString;
        var trim11 =function(str){str = str.replace(/^\s+/, '');for (var i = str.length - 1; i >= 0; i--) {if (/\S/.test(str.charAt(i))) {str = str.substring(0, i + 1);break;}}return str;};
        for( var i=0; i<code.length; i++ )
        {  
            comment = code[ i ];
            if( comment.indexOf('{"embed":')!=-1 )
            {
                lines = comment.split('\n');
                outputString = "";
                for( var e=2; e
    <lines.length-1; e++ )
                {
                   outputString+=trim11(lines[e]);
                }
                dataObj[ JSON.parse( lines[ 1 ] ).embed.id ] = outputString;
            }
        }
        return dataObj;
    }
})(window);

OSX 5005:Unknown error optimizing byte code

Working in a large AIR project, the flash compiler give me this strange error:

1
5005:Unknown error optimizing byte code

To avoid it , we must increase the memory of the compilator by creating a file in:

1
~/.MacOSX/environment.plist

and put this text in it:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>JAVA_TOOL_OPTIONS</key>
<string>-Xmx512m</string>
</dict>
</plist>

If you use flash CS5 also edit this file:

1
~/Library/Application Support/Adobe/Flash CS5/en_US/Configuration/ActionScript3.0/jvm.ini

Then change -Xmx128m to -Xmx512m