blob: 6a72813d09ff91a0bfe61d8e25fc7031f7fa62e6 [file] [log] [blame]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE html>
<html xml:lang="EN" xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>Run on a device - Flex Test Drive for Mobile | Adobe Developer Connection</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="robots" content="noodp" />
<meta name="keywords" content="mobile" />
<meta name="description" content="See how quickly you can code interactions in a simple Flex mobile application using Flash Builder." /><meta name="creationDate" content="2011-09-16 @ 15:58:59" />
<meta name="lastModifiedDate" content="2011-09-16 @ 15:58:59" />
<meta name="viewport" content="width=device-width" />
<meta name="page" content="main" />
<meta name="shortTitle" content="Test Drive for Mobile: Build an application in an hour"/>
<meta name="blurb" content="See how quickly you can code interactions in a simple Flex mobile application using Flash Builder." />
<meta name="author" content="Adobe" />
<meta name="area" content="devnet" />
<link rel="icon" href="http://wwwimages.adobe.com/www.adobe.com/include/img/favicon.ico" type="image/x-icon"/>
<link rel="shortcut icon" href="http://wwwimages.adobe.com/www.adobe.com/include/img/favicon.ico" type="image/x-icon"/>
<link rel="canonical" href="http://www.adobe.com/devnet/flex/testdrivemobile/articles/mtd_1_4.html"/>
<link rel="stylesheet" media="screen" href="http://wwwimages.adobe.com/www.adobe.com/include/style/adobe-light-compressed.css"/>
<!--[if !IE]><!-->
<link rel="stylesheet" media="screen,print" href="http://wwwimages.adobe.com/www.adobe.com/include/style/compressed.css"/>
<!--<![endif]-->
<!--[if IE]>
<link rel="stylesheet" media="screen,print" href="/include/style/dotcom-css-compressed.css" />
<link rel="stylesheet" media="screen,print" href="/include/style/default/SearchBuddy.css" />
<link rel="stylesheet" media="screen,print" href="/include/style/dotcom-css-modes.css" />
<![endif]-->
<link rel="stylesheet" media="screen" href="http://wwwimages.adobe.com/www.adobe.com/include/jmvc/adobe-configurator-compressed.css"/>
<link rel="stylesheet" media="screen" href="http://wwwimages.adobe.com/www.adobe.com/include/bach/bach-1.0.1.min.css"/>
<!--[if lt IE 10]>
<link rel="stylesheet" media="screen" href="/include/style/modes/MirrorIE.css" />
<![endif]-->
<script>
function createNs ( ns )
{
var o, a;
a = ns.split(".");
o = window[a[0]] = window[a[0]] || {};
for(i=1; i < a.length; i++)
{
o = o[a[i]] = o[a[i]] || {};
}
return o;
}
createNs("Adobe.PageInfo");
createNs("Adobe.Tokens");
createNs("Adobe.UserInfo");
Adobe.PageInfo.AuthenticatedState = false;
Adobe.PageInfo.localeCode = "en";
Adobe.PageInfo.accountPageName = "";
Adobe.PageInfo.productKey = "";
Adobe.PageInfo.catalogName = "";
Adobe.PageInfo.countryCode = "US";
Adobe.PageInfo.localeString = "en_us";
Adobe.PageInfo.marketSegment = "COM";
Adobe.PageInfo.sitecatalystMarketSegment = "COM";
Adobe.PageInfo.akamaiURLPrefix = "http://wwwimages.adobe.com/www.adobe.com";
Adobe.PageInfo.pageLevel = "8";
</script>
<script src="http://wwwimages.adobe.com/www.adobe.com/include/script/compressed.js"></script>
<script src="http://wwwimages.adobe.com/www.adobe.com/include/jmvc/adobe-store-compressed.js"></script>
<script src="http://wwwimages.adobe.com/www.adobe.com/include/bach/bach-1.0.1.min.js"></script>
<script src="http://wwwimages.adobe.com/www.adobe.com/uber/js/VisitorAPI.js"></script>
<script src="http://wwwimages.adobe.com/www.adobe.com/uber/js/omniture/mbox.js"></script>
<!--[if IE 6]>
<script>
try{void(document.execCommand("BackgroundImageCache",false,true));} catch(e) {}
</script>
<![endif]-->
<script>
//<![CDATA[
$(window).bind("hashchange load", adobe.fn.focusHashElement);
cart = new adobe.ui.CartFacade("cart-dialog", "cart-dialog-flash");
cart.setRequiredFlashVersion("9.0.115");
cart.setDefaultCountry("");
cart.setDomain(".adobe.com"); // set this to ".adobe.com"
cart.setContextPath(""); // set this to empty when web context is '/'
// Possibly add the .edu selector or override market segment
Adobe.Product.Controller.CPod.EduController.processLocation(true);
if(cart.isOverlaySupported()) {
var PromoIDReport = new Array();
var prmid = window.location.search.match(/\bpromoid\=([^&#$]+)/);
if(prmid) {
prmid[1]=prmid[1].toUpperCase();
cart.setEmailTrackingId(prmid[1]);
}
// if a promo code is pass thru the URL, set the promo in the cart and the cookie
prmid = window.location.search.match(/\bpromocode\=([^&#$]+)/) || null;
if(prmid) {
if (Adobe && Adobe.Cart && Adobe.Cart.Models && Adobe.Cart.Models.Cart) {
var cart = Adobe.Cart.Models.Cart;
var marketSegment = cart.getMarketSegment() || Adobe.Product.Controller.CPod.EduController.COM;
cart.addPromotion({code:prmid[1], marketSegment:marketSegment});
cart.savePromoCode(prmid[1]);
}
}
}
//]]>
</script>
<script>
$(document).ready(function()
{
adobe.dom.param("wcmmode=disabled");
adobe.dom.param("compress=false");
});
</script>
<script>
var locales = {"cn":true,"us":true,"en_xx":true,"mena_fr":true,"tw":true};
var tokens = document.location.pathname.split('/');
var locale = ((tokens.length < 2) || ((locales[tokens[1]] == undefined) && tokens[1]!='content')) ? 'us' : tokens[1];
var geoCook = 'international=';
var cookies = document.cookie.split(';');
for(var i=0;i < cookies.length;i++) {
var c = cookies[i];
if ((c.indexOf(geoCook) >= 0) && !(locale=='content') ){
var preferredLocale = c.substring(c.indexOf(geoCook) + geoCook.length,c.length);
if ((preferredLocale != locale)&&(locales[preferredLocale])){
var url = document.location.pathname + document.location.search;
if (locale == 'us'){
url = '/' + preferredLocale + url;
} else {
var suffix = url.substring(locale.length + 1);
if ((suffix == null) || (suffix == ""))
{
suffix = "/";
}
if (preferredLocale != 'us'){
url = '/' + preferredLocale + suffix;
} else {
url = suffix;
}
}
window.location.replace(url);
}
}
}
</script>
<!--[if (gte IE 9)|(IEMobile)]><!-->
<link rel="stylesheet" media="only screen" href="/etc/pagetables/reflowtypes/adobe_adc_article.css"/>
<script src="/etc/pagetables/reflowtypes/adobe_adc_article.js"></script>
<!--<![endif]-->
<script>
//<![CDATA[
if(typeof jQuery != 'undefined'){
(function($) {
var dispatcher = (adobe.vrbl("reflowDispatcher") || adobe.vrbl("reflowDispatcher", adobe.reflow.createDispatcher("width", window.document))),
viewport = $(window),
viewportWidth = NaN,
meta = window.document.getElementsByName("viewport")[0],
metaContent;
$(window).bind("resize orientationchange", setRenderMode);
if(meta) {
$(window.document).bind("adobe.reflow.LayoutChange", snapViewportToMaxWidth);
}
setRenderMode();
function snapViewportToMaxWidth(event, layout_event) {
if (layout_event.snapView && layout_event.active) {
var widthSetter = "width=",
width = widthSetter+layout_event.maxRange,
content = meta.getAttribute("content");
if(content.indexOf(widthSetter) > -1) {
content = content.replace(/width=[^,$]+/, width);
} else {
content = width;
}
meta.setAttribute("content", content);
}
}
function setRenderMode() {
var currentViewportWidth = viewport.width();
if (viewportWidth == currentViewportWidth) {
return;
} //trottle noisy event
viewportWidth = currentViewportWidth;
dispatcher.updateLayout(viewportWidth);
}
})(jQuery);
}
//]]>
</script>
<link rel="stylesheet" media="screen" href="http://wwwimages.adobe.com/www.adobe.com/include/style/article-compressed.css"/>
<script src="http://community.adobe.com/help/badge/v4/ionLoader.js"></script>
<script src="http://community.adobe.com/help/badge/v4/ionSupport.js"></script>
<script src="http://community.adobe.com/help/badge/v4/ionBadge.js"></script>
<script type="text/javascript" src="/etc/clientlibs/granite/jquery.js"></script>
<script type="text/javascript" src="/etc/clientlibs/granite/utils.js"></script>
<script type="text/javascript" src="/etc/clientlibs/granite/jquery/granite.js"></script>
<script type="text/javascript" src="/etc/clientlibs/foundation/jquery.js"></script>
<script type="text/javascript" src="/etc/clientlibs/foundation/shared.js"></script>
<script type="text/javascript" src="/etc/clientlibs/foundation/personalization/kernel.js"></script>
<link rel="stylesheet" href="/apps/dotcom/ag-widgets.css" type="text/css">
<script type="text/javascript">
$CQ(function() {
CQ_Analytics.SegmentMgr.loadSegments("/etc/segmentation");
CQ_Analytics.ClientContextUtils.init("/etc/clientcontext/default","/content/dotcom/en/devnet/flex/testdrivemobile/articles/mtd_1_4");
});
</script><script type="text/javascript" src="/etc/clientlibs/granite/jquery-ui.js"></script>
<script type="text/javascript" src="/etc/clientlibs/foundation/jquery-ui.js"></script>
<script type="text/javascript" src="/etc/designs/dotcom/clientlib/stores.js"></script>
<link rel="stylesheet" href="/etc/clientlibs/granite/jquery-ui.css" type="text/css">
<link rel="stylesheet" href="/etc/clientlibs/foundation/jquery-ui/themes/default.css" type="text/css">
<script src="http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/typekit/yoe7ink.js"></script>
<script>try{Typekit.load();}catch(e){}</script>
</head>
<body class="Text TextMedium Link">
<div class="ArticleGrid ArticleWideGrid LayoutSlimGrid LayoutCenter PanelDiffuseShadow PanelFillExtraLight LayoutP">
<div class="PrintLayoutHide">
<!--googleoff: all--><div class="sitenav"><script>
//<![CDATA[
if (navigator.userAgent.match(/iPad/i) != null){
adobe.dom.createStyleSheet($('head').get(0), "/include/style/default/SiteHeader-iPad.css");
}
$(document).ready(adobe.fn.initGlobalNav);
//]]>
</script>
<!--googleoff: index-->
<!-- $Id: //depot/projects/dylan/releases/rc_13_11/ubi/globalnav/en_us/globalnav_ssi.html#1 $ -->
<form id="globalnav-search" class="searchbuddy LayoutSlimHidden" name="globalnav-search" method="get" action="/go/gnav_search" accept-charset="utf-8">
<div id="SiteHeader" class="SiteHeader Text TextSmall">
<span id="globalnav"></span>
<a href="/" id="shHome" class="SiteHeaderHome">Adobe</a>
<div class="SiteHeaderBar" id="shBar">
<div class="SiteHeaderDropdownLink SiteHeaderBarItem SiteHeaderBarItemFirst" id="shProducts">
<a href="/products/catalog.html?promoid=KAWQI" id="shProductsLink" class="SiteHeaderBarLink">Products</a>
<div class="SiteHeaderDropPanel SiteHeaderDropdown-Full" id="ProductsPanel">
<div class="SiteHeaderColumnSingle">
<div class="SiteHeaderRow">
<p class="SiteHeaderPanelHeader">Top destinations</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud.html?promoid=JQPEQ" id="Products_Topdestinations_AdobeCreativeCloud">Adobe Creative Cloud</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/teams.html?promoid=KFKQF" id="Products_Topdestinations_CreativeCloudforteams">Creative Cloud for teams</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/cs6.html?promoid=JOLIS" id="Product_Topdestinationss_CreativeSuite6">Creative Suite 6</a></li>
<li class="SiteHeaderPanelLink"><a href="/marketing?promoid=JOLIT" id="Products_Topdestinations_AdobeMarketingCloud">Adobe Marketing Cloud</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/acrobat.html?promoid=JOLIR" id="Products_Topdestinations_Acrobat">Acrobat</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/photoshop.html?promoid=JOLIW" id="Products_Topdestinations_Photoshop">Photoshop</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/sitecatalyst.html?promoid=KAWQH" id="Product_Topdestinationss_SiteCatalyst">SiteCatalyst</a></li>
<li class="SiteHeaderPanelLink"><a href="/education/students.html?marketSegment=EDU&promoid=KFKQD" id="Product_Topdestinationss_Students">Students</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/elements-family.html?promoid=JOLIV" id="Product_Topdestinationss_Elementsfamily">Elements family</a></li>
</ul>
</div>
</div>
<div class="SiteHeaderColumnDouble SiteHeaderShadowLeft">
<div class="SiteHeaderRow">
<p class="SiteHeaderPanelHeader">Adobe Creative Cloud</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud.html?promoid=KAUBZ" id="Products_AdobeCreativeCloud_WhatisAdobeCreativeCloud">What is Adobe Creative Cloud?</a></li>
</ul>
<div class="SiteHeaderColumn-1">
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/design.html?promoid=KFKPZ" id="Products_AdobeCreativeCloud_Design">Design</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/web.html?promoid=KFKQC" id="Products_AdobeCreativeCloud_Web">Web</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/photography.html?promoid=KFKQA" id="Products_AdobeCreativeCloud_Photography">Photography</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/video.html?promoid=KFKQB" id="Products_AdobeCreativeCloud_Video">Video</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/students.html?marketSegment=EDU&promoid=JUTMG" id="Products_AdobeCreativeCloud_Students">Students</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-2">
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/teams.html?promoid=JZVVU" id="Products_AdobeCreativeCloud_Teams">Teams</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/enterprise.html?promoid=KFKPX" id="Products_AdobeCreativeCloud_Enterprise">Enterprise</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/enterprise/education.html?promoid=KFKQE" id="Products_AdobeCreativeCloud_Educationalinstitutions">Educational institutions</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/enterprise.html?promoid=KFKPY" id="Products_AdobeCreativeCloud_Government">Government</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-1">
<p class="SiteHeaderPanelHeaderSmall">Design and photography</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/photoshop.html?promoid=KAUCA" id="Products_DesignandPhotography_Photoshop">Photoshop</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/illustrator.html?promoid=KAUCB" id="Products_DesignandPhotography_Illustrator">Illustrator</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/indesign.html?promoid=KAUCC" id="Products_DesignandPhotography_InDesign">InDesign</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/muse.html?promoid=KAUCE" id="Products_DesignandPhotography_AdobeMuse">Adobe Muse</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/photoshop-lightroom.html?promoid=KAUCD" id="Products_DesignandPhotography_Lightroom">Lightroom</a></li>
</ul>
<p class="SiteHeaderPanelHeaderSmall">Video</p>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/products/premiere.html?promoid=KAUCJ" id="Products_Video_AdobePremiere">Adobe Premiere</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/aftereffects.html?promoid=KAUCK" id="Products_Video_AfterEffects">After Effects</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-2">
<p class="SiteHeaderPanelHeaderSmall">Web development and HTML5</p>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="http://html.adobe.com/edge/?promoid=KAGMS" target="_blank" id="Products_WebdevelopmentHTML5_EdgeToolsServices">Edge Tools &amp; <span class="SiteHeaderIconNewWindowNoWrap">Services<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="/products/dreamweaver.html?promoid=KAUCF" id="Products_WebdevelopmentHTML5_Dreamweaver">Dreamweaver</a></li>
<li class="SiteHeaderPanelLink"><a href="http://gaming.adobe.com/?promoid=KAUCG" target="_blank" id="Products_WebdevelopmentHTML5_Gaming"><span class="SiteHeaderIconNewWindowNoWrap">Gaming<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
</ul>
</div>
</div>
</div>
<div class="SiteHeaderColumnDouble SiteHeaderShadowLeft">
<div class="SiteHeaderRow">
<p class="SiteHeaderPanelHeader">Adobe Marketing Cloud</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/solutions/digital-marketing.html?promoid=KAUCL" id="Products_AdobeMarketingCloud_WhatisAdobeMarketingCloud">What is Adobe Marketing Cloud?</a></li>
</ul>
<div class="SiteHeaderColumn-1">
<ul>
<li class="SiteHeaderPanelLink"><a href="/solutions/digital-analytics.html?promoid=KAVVU" id="Products_AdobeMarketingCloud_Digitalanalytics">Digital analytics</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/social-marketing.html?promoid=KAVVV" id="Products_AdobeMarketingCloud_Socialmarketing">Social marketing</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/web-experience-management.html?promoid=KAVVX" id="Products_AdobeMarketingCloud_Webexperiencemanagement">Web experience management</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-2">
<ul>
<li class="SiteHeaderPanelLink"><a href="/solutions/testing-targeting.html?promoid=KAVVW" id="Products_AdobeMarketingCloud_Testingandtargeting">Testing and targeting</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/media-optimization.html?promoid=KAVVY" id="Products_AdobeMarketingCloud_Mediaoptimization">Media optimization</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/campaign-management.html?promoid=KFKQH" id="Products_AdobeMarketingCloud_Campaignmanagement">Campaign management</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-1">
<p class="SiteHeaderPanelHeaderSmall">Analytics</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/sitecatalyst.html?promoid=KAUCM" id="Products_Analytics_SiteCatalyst">SiteCatalyst</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/discover.html?promoid=KAUCN" id="Products_Analytics_AdobeDiscover">Adobe Discover</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/insight.html?promoid=KAUCO" id="Products_Analytics_Insight">Insight</a></li>
</ul>
<p class="SiteHeaderPanelHeaderSmall">Social</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/solutions/social-marketing.html?promoid=KAUCP" id="Products_Social_AdobeSocial">Adobe Social</a></li>
</ul>
<p class="SiteHeaderPanelHeaderSmall">Experience Manager</p>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/products/cq.html?promoid=KAUCQ" id="Products_ExperienceManager_CQ">CQ</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/scene7.html?promoid=KAUCR" id="Products_ExperienceManager_Scene7">Scene7</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-2">
<p class="SiteHeaderPanelHeaderSmall">Target</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/testandtarget.html?promoid=KAUCS" id="Products_Target_TestTarget">Test&amp;Target</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/recommendations.html?promoid=KAUCT" id="Products_Target_Recommendations">Recommendations</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/searchandpromote.html?promoid=KAUCU" id="Products_Target_SearchPromote">Search&amp;Promote</a></li>
</ul>
<p class="SiteHeaderPanelHeaderSmall">Media Optimizer</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/adlens.html?promoid=KAUCV" id="Products_MediaOptimizer_AdLens">AdLens</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/audiencemanager.html?promoid=KAUCW" id="Products_MediaOptimizer_AudienceManager">AudienceManager</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/audienceresearch.html?promoid=KAUCX" id="Products_MediaOptimizer_AudienceResearch">AudienceResearch</a></li>
</ul>
<p class="SiteHeaderPanelHeaderSmall">Campaign management</p>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/solutions/campaign-management.html?promoid=KFKQI" id="Products_Campaignmanagement_AdobeCampaign">Adobe Campaign</a></li>
</ul>
</div>
</div>
</div>
<div class="SiteHeaderColumnSingle SiteHeaderShadowLeft">
<div class="SiteHeaderRow">
<p class="SiteHeaderPanelHeader">Document services</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/products/acrobat.html?promoid=KAUCY" id="Products_DocumentServices_Acrobat">Acrobat</a></li>
<li class="SiteHeaderPanelLink"><a href="https://www.echosign.adobe.com/en/home.html?promoid=KAUDB" target="_blank" class="SiteHeaderLinkNewWindow" id="Products_DocumentServices_EchoSign"><span class="SiteHeaderIconNewWindowNoWrap">EchoSign<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="https://www.acrobat.com/formscentral/en/home.html?promoid=KAUCZ" target="_blank" id="Products_DocumentServices_FormsCentral"><span class="SiteHeaderIconNewWindowNoWrap">FormsCentral<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="https://www.acrobat.com/sendnow/en/home.html?promoid=KAUDA" target="_blank" id="Products_DocumentServices_SendNow"><span class="SiteHeaderIconNewWindowNoWrap">SendNow<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="https://www.acrobat.com/welcome/en/home.html?promoid=KAUDC" target="_blank" id="Products_DocumentServices_Acrobatcom"><span class="SiteHeaderIconNewWindowNoWrap">Acrobat.com<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
</ul>
<p class="SiteHeaderPanelHeader">Publishing</p>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/products/digital-publishing-suite-family.html?promoid=JOLIU" id="Products_Publishing_DigitalPublishingSuite">Digital Publishing Suite</a></li>
</ul>
</div>
</div>
<br style="clear: both" />
<div class="SiteHeaderRow">
<ul class="SiteHeaderRightLink">
<li class="SiteHeaderPanelLink"><a href="/products/catalog.html?promoid=JOOTH" id="Products_Seeallproducts">See all products</a></li>
</ul>
</div>
</div>
</div>
<div class="SiteHeaderDropdownLink SiteHeaderBarItem" id="shBusinessSolutions">
<a href="/solutions.html?promoid=KAWQJ" id="shBusinessSolutionsLink" class="SiteHeaderBarLink">Business solutions</a>
<div class="SiteHeaderDropPanel SiteHeaderDropdown-Double" id="BusinessSolutionsPanel">
<div class="SiteHeaderRow">
<div class="SiteHeaderColumn-1">
<p class="SiteHeaderPanelHeaderSmall">By business need</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/solutions/digital-analytics.html?promoid=JOLJB" id="BusinessSolutions_Bybusinessneed_Digitalanalytics">Digital analytics</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/digital-publishing.html?promoid=JOLJA" id="BusinessSolutions_Bybusinessneed_Digitalpublishing">Digital publishing</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/acrobat.html?promoid=KAWSC" id="BusinessSolutions_Bybusinessneed_Documentmanagement">Document management</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/media-optimization.html?promoid=JOLIX" id="BusinessSolutions_Bybusinessneed_Mediaoptimization">Media optimization</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/social-marketing.html?promoid=JZPNO" id="BusinessSolutions_Bybusinessneed_Socialmarketing">Social marketing</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/testing-targeting.html?promoid=KAXLU" id="BusinessSolutions_Bybusinessneed_Testingandtargeting">Testing and targeting</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/creativecloud/video.html?promoid=KAUDD" id="BusinessSolutions_Bybusinessneed_Videoeditingandserving">Video editing and serving</a></li>
<li class="SiteHeaderPanelLink"><a href="http://html.adobe.com?promoid=JZEFF" target="_blank" class="SiteHeaderLinkNewWindow" id="BusinessSolutions_Bybusinessneed_Webdevelopment">Web <span class="SiteHeaderIconNewWindowNoWrap">development<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/web-experience-management.html?promoid=JOOYM" id="BusinessSolutions_Bybusinessneed_Webexperiencemanagement">Web experience management</a></li>
</ul>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/solutions.html?promoid=JOOTI" id="BusinessSolutions_Seeallbusinessneeds">See all business needs</a></li>
</ul>
</div>
<div class="SiteHeaderColumn-2">
<p class="SiteHeaderPanelHeaderSmall">By industry</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="/solutions/broadcasting.html?promoid=JOLIY" id="BusinessSolutions_Byindustry_Broadcast">Broadcast</a></li>
<li class="SiteHeaderPanelLink"><a href="/education.html?marketSegment=EDU&promoid=JOLIZ" id="BusinessSolutions_Byindustry_Education">Education</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/financial-services.html?promoid=KAUDE" id="BusinessSolutions_Byindustry_Financialservices">Financial services</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/government.html?promoid=KAUDF" id="BusinessSolutions_Byindustry_Government">Government</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/digital-publishing.html?promoid=KAUDG" id="BusinessSolutions_Byindustry_Publishing">Publishing</a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/retail.html?promoid=KAWSD" id="BusinessSolutions_Byindustry_Retail">Retail</a></li>
</ul>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/solutions.html?promoid=KAUDH" id="BusinessSolutions_Seeallindustries">See all industries</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="SiteHeaderDropdownLink SiteHeaderBarItem" id="shSupportLearning">
<a href="http://helpx.adobe.com/support/?promoid=KAWQK" id="shSupportLearningLink" class="SiteHeaderBarLink">Support &amp; Learning</a>
<div class="SiteHeaderDropPanel SiteHeaderDropdown-Single" id="SupportLearningPanel">
<div class="SiteHeaderRow">
<p class="SiteHeaderPanelHeaderSmall">I need help</p>
<ul>
<li class="SiteHeaderPanelLink"><a href="http://helpx.adobe.com/support/?promoid=JZEFP" id="SupportLearning_Ineedhelp_Products">Products</a></li>
<li class="SiteHeaderPanelLink"><a href="http://helpx.adobe.com/creative-cloud/topics/getting-started.html?promoid=JZEFO" id="SupportLearning_Ineedhelp_AdobeCreativeCloud">Adobe Creative Cloud</a></li>
<li class="SiteHeaderPanelLink"><a href="http://helpx.adobe.com/marketing-cloud.html?promoid=KAWSE" id="SupportLearning_Ineedhelp_AdobeMarketingCloud">Adobe Marketing Cloud</a></li>
<li class="SiteHeaderPanelLink"><a href="http://forums.adobe.com/index.jspa?promoid=JZEFM" target="_blank" id="SupportLearning_Ineedhelp_Forums"><span class="SiteHeaderIconNewWindowNoWrap">Forums<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
</ul>
<p class="SiteHeaderPanelHeaderSmall">I want to learn</p>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="http://helpx.adobe.com/learning.html?promoid=KAUDK" id="SupportLearning_Iwanttolearn_Trainingandtutorials">Training and tutorials</a></li>
<li class="SiteHeaderPanelLink"><a href="http://training.adobe.com/certification.html?promoid=KAUDM" target="_blank" id="SupportLearning_Iwanttolearn_Certification"><span class="SiteHeaderIconNewWindowNoWrap">Certification<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="/devnet.html?promoid=KAUDN" id="SupportLearning_Iwanttolearn_AdobeDeveloperConnection">Adobe Developer Connection</a></li>
<li class="SiteHeaderPanelLink"><a href="/designcenter.html?promoid=KAUDO" id="SupportLearning_Iwanttolearn_AdobeDesignCenter">Adobe Design Center</a></li>
<li class="SiteHeaderPanelLink"><a href="http://tv.adobe.com?promoid=KFELF" target="_blank" id="SupportLearning_Iwanttolearn_AdobeTV">Adobe <span class="SiteHeaderIconNewWindowNoWrap">TV<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
<li class="SiteHeaderPanelLink"><a href="/solutions/digital-marketing/guides.html?promoid=KAWSF" id="SupportLearning_Iwanttolearn_AdobeMarketingCenter">Adobe Marketing Center</a></li>
<li class="SiteHeaderPanelLink"><a href="http://labs.adobe.com/?promoid=JZEFQ" target="_blank" id="SupportLearning_Iwanttolearn_AdobeLabs">Adobe <span class="SiteHeaderIconNewWindowNoWrap">Labs<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
</ul>
</div>
</div>
</div>
<div class="SiteHeaderDropdownLink SiteHeaderBarItem" id="shDownload">
<a href="/downloads/?promoid=KAWQL" id="shDownloadLink" class="SiteHeaderBarLink">Download</a>
<div class="SiteHeaderDropPanel SiteHeaderDropdown-Single" id="DownloadPanel">
<div class="SiteHeaderRow">
<ul>
<li class="SiteHeaderPanelLink"><a href="/downloads/?promoid=JZEFS" id="Download_Producttrials">Product trials</a></li>
<li class="SiteHeaderPanelLink"><a href="http://get.adobe.com/flashplayer/?promoid=JZEFT" id="Download_AdobeFlashPlayer">Adobe Flash Player</a></li>
<li class="SiteHeaderPanelLink"><a href="http://get.adobe.com/reader/?promoid=JZEFU" id="Download_AdobeReader">Adobe Reader</a></li>
<li class="SiteHeaderPanelLink"><a href="http://get.adobe.com/air/?promoid=JZEFV" id="Download_AdobeAIR">Adobe AIR</a></li>
</ul>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/downloads/?promoid=JZEFW" id="Download_Seealldownloads">See all downloads</a></li>
</ul>
</div>
</div>
</div>
<div class="SiteHeaderDropdownLink SiteHeaderBarItem" id="shCompany">
<a href="/company.html?promoid=KAWQM" id="shCompanyLink" class="SiteHeaderBarLink">Company</a>
<div class="SiteHeaderDropPanel SiteHeaderDropdown-Single" id="CompanyPanel">
<div class="SiteHeaderRow">
<ul>
<li class="SiteHeaderPanelLink"><a href="/careers.html?promoid=JZEFX" id="Company_CareersatAdobe">Careers at Adobe</a></li>
<li class="SiteHeaderPanelLink"><a href="/aboutadobe/invrelations/?promoid=JZEFZ" id="Company_InvestorRelations">Investor Relations</a></li>
<li class="SiteHeaderPanelLink"><a href="/aboutadobe/pressroom/?promoid=JZEGA" id="Company_Newsroom">Newsroom</a></li>
<li class="SiteHeaderPanelLink"><a href="/privacy.html?promoid=JZEGB" id="Company_Privacy">Privacy</a></li>
<li class="SiteHeaderPanelLink"><a href="/corporate-responsibility.html?promoid=JZEFY" id="Company_CorporateResponsibility">Corporate Responsibility</a></li>
<li class="SiteHeaderPanelLink"><a href="/customershowcase.html?promoid=KEWBG" id="Company_CustomerShowcase">Customer Showcase</a></li>
<li class="SiteHeaderPanelLink"><a href="/company/contact.html?promoid=JZEGC" id="Company_Contactus">Contact us</a></li>
</ul>
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/company.html?promoid=JZPLK" id="Company_Morecompanyinfo">More company info</a></li>
</ul>
</div>
</div>
</div>
<div class="SiteHeaderDropdownLink SiteHeaderBarItem" id="shBuy">
<a href="/products/catalog/software._sl_id-contentfilter_sl_catalog_sl_software_sl_mostpopular.html?promoid=KAWQN" id="shBuyLink" class="SiteHeaderBarLink">Buy</a>
<div class="SiteHeaderDropPanel SiteHeaderDropdown-Single" id="BuyPanel">
<div class="SiteHeaderRow">
<ul class="SiteHeaderPanelLinkNoBottom">
<li class="SiteHeaderPanelLink"><a href="/products/catalog/software.html?marketSegment=COM&promoid=KAWQO" id="Buy_Forpersonalandprofessionaluse">For personal and professional use</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/catalog/software._sl_id-contentfilter_sl_catalog_sl_education_sl_alledu.html?marketSegment=EDU&promoid=KAWQP" id="Buy_Forstudentseducatorsandstaff">For students, educators, and staff</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/small-business-pricing/software-catalog._sl_id-contentfilter_sl_catalog_sl_software_sl_creativecloudmembership.html?marketSegment=COM&promoid=JOLJE" id="Buy_Forsmallandmediumbusinesses">For small and medium businesses</a></li>
<li class="SiteHeaderPanelLink"><a href="/volume-licensing.html?promoid=KAWQQ" id="Buy_VolumeLicensing">Volume Licensing</a></li>
<li class="SiteHeaderPanelLink"><a href="/products/discount-software-coupons.html?promoid=KAWQR" id="Buy_Specialoffers">Special offers</a></li>
<li class="SiteHeaderPanelLink"><a href="http://success.adobe.com/en/na/programs/rfi/dm_sales_inquiries.html?promoid=KAWSG" target="_blank" id="Buy_AdobeMarketingCloudsales">Adobe Marketing Cloud <span class="SiteHeaderIconNewWindowNoWrap">sales<span class="SiteHeaderIconNewWindow"> [opens in a new window]</span></span></a></li>
</ul>
</div>
</div>
</div>
<!--
<div id="tooltipStrings" class="SiteHeaderTooltipStrings LayoutHidden">
<span id="tooltipStringExpandMenu">Expand menu</span>
<span id="tooltipStringOpenLink">Open link</span>
</div>
-->
<a href="/go/gnav_search" id="shSearchButton" class="SiteHeaderBarItem SiteHeaderSearchButton" style="display: none;">Search</a>
<div class="SiteHeaderBarItem SiteHeaderBarItemLast">&nbsp;</div>
<div id="site-search" class="SiteHeaderSearch">
<input title="Search" type="text" id="search-input" name="term" maxlength="1000" />
<input type="hidden" id="searchbuddy-loc" name="loc" value="en_us" />
<button type="submit" id="search-submit" class="icon-replace search">Search</button>
</div>
</div>
<div class="SiteHeaderUser">
<div id="shSignInBlock">
<a id="shInfo" class="SiteHeaderUserItem SiteHeaderInfo">Info</a>
<a href="/account/sign-in.adobedotcom.html" id="shSignIn" class="SiteHeaderUserItem LinkStrong">Sign in</a>
<div class="SiteHeaderPopPanelShadow width-250" id="InfoPanelShadow" style="display: none;"></div>
<div class="SiteHeaderPopPanel width-250" id="InfoPanel" style="display: none;">
<div class="SiteHeaderPanelRow">
<span class="SiteHeaderPanelHeader">Why sign in?</span>
Sign in to manage your account and access trial downloads, product extensions, community areas, and more.
</div>
</div>
</div>
<a href="/account.html" id="shWelcome" class="SiteHeaderUserItem SiteHeaderArrow LinkStrong" style="display: none;">Welcome, <span id="screenName"></span></a>
<div class="SiteHeaderPopPanelShadow" id="WelcomePanelShadow" style="display: none;"></div>
<div class="SiteHeaderPopPanel" id="WelcomePanel" style="display: none;">
<div class="SiteHeaderPanelRow SiteHeaderPanelLink" id="shMyAccount">
<a class="SiteHeaderPanelHeader" href="/go/gnavtray_myadobe_en_us">My Adobe</a>
</div>
<div class="SiteHeaderPanelRow SiteHeaderPanelLink" id="shMyOrders">
<a class="SiteHeaderPanelHeader" href="/go/gnavtray_myadobe_myorders_en_us">My orders</a>
</div>
<div class="SiteHeaderPanelRow SiteHeaderPanelLink" id="shMyInformation">
<a class="SiteHeaderPanelHeader" href="/go/gnavtray_myadobe_myinformation_en_us">My information</a>
</div>
<div class="SiteHeaderPanelRow SiteHeaderPanelLink" id="shMyPreferences">
<a class="SiteHeaderPanelHeader" href="/go/gnavtray_myadobe_mypreferences_en_us">My preferences</a>
</div>
<div class="SiteHeaderPanelRow SiteHeaderPanelLink" id="shMyProductsServices">
<a class="SiteHeaderPanelHeader" href="/go/gnavtray_myadobe_myproducts_services_en_us">My products and services</a>
</div>
<div class="SiteHeaderPanelRow SiteHeaderPanelLink" id="shSignOut">
<a class="SiteHeaderPanelHeader" id="shSignOutLink" href="/cfusion/membership/logout.cfm">Sign out</a>
</div>
</div>
<div id="MyCartLinkContainer">
<a href="/go/gnav_mycart_en_us" id="shMyCart" class="SiteHeaderUserItem SiteHeaderCart">My cart<span id="cartQuantity"></span></a>
</div>
<a href="/privacy.html" id="shPrivacy" class="SiteHeaderUserItem">Privacy</a>
<a href="/go/gnav_myadobe_en_us" id="shMyAdobe" class="SiteHeaderUserItem">My Adobe</a>
</div>
</div>
</form>
<div id="SiteHeaderMobile" class="SiteHeaderMobile LayoutHidden LayoutSlim Text TextSmall">
<a href="/go/gnav_adobe_logo_en_us" id="shHomeMobile" class="SiteHeaderHome SiteHeaderHomeMobile">Adobe</a>
<div class="SiteHeaderBar SiteHeaderBarMobile" id="shBarMobile">
<span class="SiteHeaderBarItemMobile SiteHeaderBarItemMobileNoLeftBorder" id="shProductsMobileSpan"><a href="/go/gnav_products_en_us" id="shProductsMobile" class="SiteHeaderBarLink">Products</a></span>
<span class="SiteHeaderBarItemMobile" id="shSectionsMobileSpan"><a href="#" id="shSectionsMobile" class="SiteHeaderArrowMobile SiteHeaderBarLink">Sections</a></span>
<span class="SiteHeaderBarItemMobile" id="shSectionsMobileBuy"><a href="/go/gnav_store_en_us" id="shBuyMobile" class="SiteHeaderBarLink">Buy</a></span>
<span class="SiteHeaderBarItemMobile SiteHeaderBarItemMobileNoRightBorder SiteHeaderBarItemMobileNoPadding">&nbsp;</span>
<span class="SiteHeaderBarItemMobile SiteHeaderBarItemMobileNoRightBorder SiteHeaderBarItemFloatRight" id="shSearchMobileSpan"><a href="/go/gnav_search" id="shSearchMobile" class="SiteHeaderSearchButtonMobile">Search</a></span>
<span class="SiteHeaderBarItemMobile SiteHeaderBarItemMobileNoLeftBorder SiteHeaderBarItemFloatRight SiteHeaderBarItemMobileNoPadding">&nbsp;</span>
</div>
<div class="SiteHeaderBarMobileExtend" id="shBarExtend">
<div id="shBarExtendSections" style="display: none;">
<div id="shBarExtendSections1" class="SiteHeaderBarMobileExtendSections">
<a href="/go/gnav_solutions_en_us" id="shSectionsSolutionsMobile" class="SiteHeaderBarExtendSectionsItem SiteHeaderBarLink">Solutions</a>
<a href="/go/gnav_company_en_us" id="shSectionsCompanyMobile" class="SiteHeaderBarExtendSectionsItem SiteHeaderBarLink">Company</a>
</div>
<div id="shBarExtendSections2" class="SiteHeaderBarMobileExtendSections">
<a href="/go/gnav_help_en_us" id="shSectionsHelpMobile" class="SiteHeaderBarExtendSectionsItem SiteHeaderBarLink">Help</a>
<a href="/go/gnav_learning_en_us" id="shSectionsLearningMobile" class="SiteHeaderBarExtendSectionsItem SiteHeaderBarLink">Learning</a>
</div>
</div>
<div id="shBarExtendSearch" style="display: none;">
<form id="globalnav-search-mobile" class="SiteHeaderSearchMobileForm" name="globalnav-search-mobile" method="get" action="/go/gnav_search" accept-charset="utf-8">
<input title="Search" type="text" id="search-input-mobile" name="term" maxlength="1000" />
<button type="submit" id="search-submit-mobile">Search</button>
</form>
</div>
</div>
<div class="SiteHeaderUser">
<a href="/cfusion/membership/index.cfm?loc=en_us&amp;nl=1" id="shSignInMobile" class="SiteHeaderUserItem SiteHeaderUserItemMobile LinkStrong">Sign in</a>
<a href="/cfusion/membership/logout.cfm" id="shSignOutMobile" class="SiteHeaderUserItem SiteHeaderUserItemMobile LinkStrong" style="display: none;">Sign out</a>
<a href="/privacy.html" id="shPrivacyMobile" class="SiteHeaderUserItem SiteHeaderUserItemMobile">Privacy</a>
<a href="/go/gnav_myadobe_en_us" id="shMyAdobeMobile" class="SiteHeaderUserItem SiteHeaderUserItemMobile">My Adobe</a>
</div>
</div>
<!--googleon: index--><div class="hovercart"><div id="HoverCartModal">
<div class="CartHeaderPopPanelShadow HoverCartwidth" id="CartPanelShadow" style="display: none;">
<div class="CartHeaderPopPanel HoverCart" id="CartPanel">
<div id="HoverCartItem" class="RuleHBottom HoverCart-1-3 LayoutBigRowTop" style="display: none">
<div class="LayoutBreakAfter">
<div class="HoverCart-1 LayoutHItem">
<div style="padding-left:60px;" class=" LayoutBreakAfter LayoutPullout">
<div id="HoverCartBoxShotxyz" class="HoverCartBoxShot">
<a href="">
<img src="" class="LayoutImage" alt=""/>
</a>
</div>
<div style="float:left;width:100%" class="CPodCostCell">
<span class="TextStrong ProductName" id="HoverCartHeaderxyz">
<a href="#">
</a>
</span>
<div class="LayoutBigRowBottom" id="HoverCartDescriptionxyz">
</div>
<span id="HoverCartPreOrderHardGoodMsgxyz" style="display:none;" class="TextWarning TextPostScript">Preorder Estimated Availability <span id="HoverCartPreOrderHardGoodMsgDatexyz">Date</span>. Your credit card will not be charged until the product is shipped. Estimated availability date is subject to change.</span>
<span id="HoverCartPreOrderSoftGoodMsgxyz" style="display:none;" class="TextWarning TextPostScript">Preorder Estimated Availability <span id="HoverCartPreOrderSoftGoodMsgDatexyz">Date</span>. Your credit card will not be charged until the product is ready to download. Estimated availability date is subject to change.</span>
</div>
</div>
</div>
<div class="LayoutHItem HoverCart-2">
<div class="HoverCartQty">
Qty:
<span id="HoverCartQtyxyz">
</span>
</div>
</div>
<div class="LayoutRight">
<div class="CheckoutCostDark LayoutRight TextRight">
<span id="HoverCartPricexyz">
</span>
<span id="HoverCartSubscriptionxyz" class="CheckoutSubscription">
</span>
<div id="HoverCartVatPercentageLabelxyz" class="TextEm TextSmall" style="display:none; max-width: 100px;"><span id="HoverCartVatPercentagePreTextxyz"></span>
<span id="HoverCartVatPercentagexyz"></span></div>
</div>
</div>
</div>
<div class="HoverCartEDUMessage LayoutBigCellBottom" style="display:none">Purchase requires verification of academic eligibility</div>
</div>
<div id="HoverCartContainer" class="LayoutBreakAfter" style=""></div>
<a id="HoverCartMoreItems" class="LayoutBreakAfter" style="text-align: center;" href="/cart.html"></a>
<div id="HoverCartButtons" class="HoverCart-1-3">
<table border="0" align="right" width="70%">
<tr>
<td>
<div class="TextRight HoverCartSubTotal">Subtotal</div>
<div id="ExVatLabel" style="display:none" class="TextEm TextSmall TextRight"></div>
</td>
<td>
<div class="LayoutRight TextRight">
<div class="CheckoutCostDark">
<span id="HoverCartSubTotal">
</span>
</div>
</div>
</td>
</tr>
<tr id="HoverCartPromotionsRow">
<td>
<div class="TextRight HoverCartPromotionsLabel HoverCartSubTotal">Promotions</div>
</td>
<td>
<div class="LayoutRight TextRight">
<div class="CheckoutCostDark">
<span id="HoverCartPromotions">
</span>
</div>
</div>
</td>
</tr>
<tr id="HoverCartShippingRow">
<td>
<div class="TextRight HoverCartShippingLabel HoverCartSubTotal">Estimated shipping</div>
</td>
<td>
<div class="LayoutRight TextRight">
<div class="CheckoutCostDark">
<span id="HoverCartShipping">
</span>
</div>
</div>
</td>
</tr>
<tr id="HoverCartVATRow">
<td>
<div class="TextRight HoverCartVATLabel HoverCartSubTotal">Tax</div>
</td>
<td>
<div class="LayoutRight TextRight">
<div class="CheckoutCostDark">
<span id="HoverCartVat">
</span>
</div>
<div id="CartTaxHeader">
Calculated at checkout</div>
</div>
</td>
</tr>
<tr>
<td><div class="RuleH"></div></td>
<td><div class="RuleH"></div></td>
</tr>
<tr>
<td>
<div class="TextRight HoverCartTotalLabel HoverCartSubTotal">Total</div>
</td>
<td>
<div class="LayoutRight TextRight">
<div class="CheckoutCostDark">
<span id="HoverCartTotal">
</span>
</div>
</div>
</td>
</tr>
</table>
<div class="LayoutBreak"></div>
<div class="HoverCart-1-3 LayoutRight LayoutCellTop LayoutBreakAfter">
<a href="/cart.html" id="HoverCartCheckOut" class="CartButtonYellow CartShopCheckOut LayoutRight"><span class="CartBuyIconText">Review and Checkout</span></a>
</div>
</div>
</div>
</div>
</div>
<script>
/*global jQuery,adobe*/
jQuery.createNs("Adobe.Cart.ShoppingCart");
Adobe.Cart.ShoppingCart.HoverCart = {
MaxItems: "4",
DisplayTime: "5000",
MoreItemsTextSingular: "() more item in your cart",
MoreItemsTextPlural: "() more items in your cart",
MonthToMonthText: "per month",
YearlyText: "per year"
};
Adobe.Cart.TaxLabels = {
TaxInclusiveText : "",
TaxNotApplicable : "Tax not applicable"
};
Adobe.Cart.ShoppingCart.GlobalVars = {
CountryCode: "US",
MarketSegment: "COM",
AkamaiURLPrefix: "http://wwwimages.adobe.com/www.adobe.com",
PriceMonthText: "per month",
PriceYearText: "per year",
FullSubMonthText: "Month-to-month",
FullSubYearText: "One-year",
SubMonthText: "Monthly",
SubYearText: "Annual",
SubscriptionItemText: "NONE",
TermTypeMonth: "MONTH",
TermTypeYear: "YEAR",
BackupDVDParent: "_PARENT",
/*
params: {
cart,
price,
categoryPath,
originalPrice,
storeName,
locale,
usePrecision,
type,
taxCode,
delimiter,
showCentDelim,
distributionMethod
}
*/
getPriceLabel: function(params) {
var currency = params.cart.currency;
var params = {
storeName: params.storeName,
locale: params.locale,
productKey: params.categoryPath,
priceObject: {
price: {
orginalPriceWithoutTax: params.originalPrice,
priceWithoutTax: params.price,
taxCode: params.taxCode || ""
},
priceTypeKey: params.distributionMethod
},
currencyObject: {
delimiter: params.delimiter || ",",
formatString: currency.FORMATSTRING,
iso3Code: currency.CODE,
symbol: currency.SYMBOL,
usePrecision: params.usePrecision
},
showCentDelim : params.showCentDelim || false,
type: params.type
};
return params;
},
isSubscription: function(serviceCommitment, termType) {
return (serviceCommitment == this.SubscriptionItemText &&
(termType == this.TermTypeMonth || termType == this.TermTypeYear));
},
subscriptionItem: function(serviceCommitment, termType) {
return (termType == this.TermTypeMonth &&
(serviceCommitment == this.TermTypeMonth || serviceCommitment == this.TermTypeYear));
},
getSubscriptionText: function(serviceCommitment, termType) {
if (this.isSubscription(serviceCommitment, termType)) {
if (termType === this.TermTypeMonth) {
return this.SubMonthText;
} else if (termType === this.TermTypeYear) {
return this.SubYearText;
}
} else if (this.subscriptionItem(serviceCommitment, termType)) {
if (serviceCommitment === this.TermTypeMonth) {
return this.FullSubMonthText;
} else if (serviceCommitment === this.TermTypeYear) {
return this.FullSubYearText;
}
}
return "";
},
getSubscriptionPriceText: function(serviceCommitment, termType) {
if (this.isSubscription(serviceCommitment, termType)) {
if (termType === this.TermTypeMonth) {
return this.PriceMonthText;
} else if (termType === this.TermTypeYear) {
return this.PriceYearText;
}
} else if (this.subscriptionItem(serviceCommitment, termType)) {
return this.PriceMonthText;
}
return "";
}
};
</script>
</div>
<div id="modalContent" style="display:none;"></div>
</div>
<!--googleon: all--></div>
<div class="Link" id="top">
<div class="Link LayoutBreakAfter">
<div class="parbase compbase breadcrumb"><div class="LayoutHeader LayoutBreakAfter Link">
<div class="LayoutHeaderPath">
<div class="LayoutCellSides LinkStrong LayoutH IconAlign">
<span class="LayoutHItem LayoutSmallGutterRight">
<a href="/devnet.html">
Adobe Developer Connection</a>
</span>
<span class="LayoutSmallGutterRight LayoutHItem">/</span>
<span class="LayoutHItem LayoutSmallGutterRight">
<a href="/devnet/flex.html">
Flex Developer Center</a>
</span>
<span class="LayoutSmallGutterRight LayoutHItem">/</span>
<span class="LayoutHItem LayoutSmallGutterRight">
<a href="/devnet/flex/testdrivemobile.html">
Flex Test Drive for Mobile</a>
</span>
<span class="LayoutSmallGutterRight LayoutHItem">/</span>
</div>
</div>
</div>
</div>
<div class="LayoutGrid-1-3 LayoutSlimGrid-1-2">
<h1 class="LayoutCellSides LayoutSmallRow TextH1">
Flex Test Drive for Mobile: Build a mobile application in an hour</h1>
</div>
</div>
</div>
<div class="LayoutRow Link RuleH">
<div class="LayoutBreakAfter">
<!-- Article Leaf -->
<div class="ArticleGrid-1 LayoutSlimGrid-1-2 ArticleWideGrid-1 TextSmall">
<div class="LayoutCellSides LayoutRow">
<div class="articleAuthorDisplay authordisplay"><h2 class="TextH5 LayoutRow">
by&nbsp;<a href="/devnet/author_bios/adobe_logo.html">Adobe</a></h2>
<div class="LayoutRow">
<img title="adobe_logo_bio" alt="Adobe logo" class="ImageShadow LayoutImage" src="devnet/authors/bio/a/adobe_logo_bio.jpg.adimg.mw.160.png"/></div>
</div>
</div>
<div class="LayoutCellSides LayoutRow">
<div class="parbase compbase articleTOC singlepagetoc"></div>
</div>
<div class="LayoutCellSides LayoutRow">
<div class="articleTools articletools"><div class="LayoutRow LayoutCellVSides">
<h2 class="TextH5 LayoutSmallRow">Modified</h2>
<p>19 June 2011</p>
</div>
<ul class="LayoutRow">
</ul>
</div>
</div>
<div class="LayoutRow">
<div class="articleCommentSummary commentsummary"><div class="LayoutRow LayoutCellSides">
<div id="articleRankAndCommentSummary"></div>
</div>
</div>
</div>
<div class="LayoutRow">
<!-- Page Tools -->
<div class="pagetools pageTools"><div class="LayoutBreakAfter">
<div class="LayoutRow LayoutBreakAfter TextH5">
<table class="LayoutMaxH">
<tbody>
<tr>
<td class="PanelFillDark">
<h2 class="TextH5 LayoutCellSides LayoutSmallCellVSides">
Page tools</h2>
</td>
</tr>
</tbody>
</table>
</div>
<div class="LayoutCellSides">
<div class="LayoutRow">
<div id="PageTools" style="padding-left:23px;" class=" LayoutBreakAfter LayoutPullout">
<div class="LayoutSmallRowBottom LayoutBreakAfter">
<div style="width:16px;float:left;clear:left;position:relative;left:-23px;margin-right:-23px">
<a class="Facebook-button Icon IconFacebook" href="http://www.facebook.com/sharer.php"></a>
</div>
<div style="float:left;width:100%">
<a href="http://www.facebook.com/sharer.php" class="Facebook-button" title="Share on Facebook" target="_blank">Share on Facebook</a></div>
</div>
<div class="LayoutSmallRowBottom LayoutBreakAfter">
<div style="width:16px;float:left;clear:left;position:relative;left:-23px;margin-right:-23px">
<a class="Twitter-button Icon IconTwitter" href="http://twitter.com/"></a>
</div>
<div style="float:left;width:100%">
<a href="http://twitter.com/" class="Twitter-button" title="Share on Twitter" target="_blank">Share on Twitter</a></div>
</div>
<div class="LayoutSmallRowBottom LayoutBreakAfter">
<div style="width:16px;float:left;clear:left;position:relative;left:-23px;margin-right:-23px">
<a class="LinkedIn-button Icon IconLinkedIn" href="http://www.linkedin.com/"></a>
</div>
<div style="float:left;width:100%">
<a href="http://www.linkedin.com/" class="LinkedIn-button" title="Share on LinkedIn" target="_blank">Share on LinkedIn</a></div>
</div>
<div class="LayoutSmallRowBottom LayoutBreakAfter">
<div style="width:16px;float:left;clear:left;position:relative;left:-23px;margin-right:-23px">
<a class="Bookmark-button Icon IconBookmark" href="#"></a>
</div>
<div style="float:left;width:100%">
<a class="Bookmark-button" href="#">Bookmark</a>
</div>
</div>
<div class="LayoutSmallRowBottom LayoutBreakAfter">
<div style="width:16px;float:left;clear:left;position:relative;left:-23px;margin-right:-23px">
<a class="Print-button Icon IconPrint" href="#"></a>
</div>
<div style="float:left;width:100%">
<a class="Print-button" href="#">Print</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="LayoutCellSides LayoutRow">
<!-- Article Community -->
<div class="articletags articleTags"><div class="LayoutRow">
<div class="LayoutH LinkWeak TextTag">
<a href="/devnet/tagsearch.tsb.prod-_sl_flash_builder_v_.tse.html" class="LayoutHItem LayoutHItem PanelFillMedium LayoutSmallGutterRight LayoutSmallRow LayoutSmallCellSides" title="Flash&nbsp;Builder">Flash&nbsp;Builder</a><a href="/devnet/tagsearch.tsb.prod-_sl_flex_v_.tse.html" class="LayoutHItem LayoutHItem PanelFillMedium LayoutSmallGutterRight LayoutSmallRow LayoutSmallCellSides" title="Flex">Flex</a><a href="/devnet/tagsearch.tsb.tag-ADC%2BKeywords_c_mobile.tse.html" class="LayoutHItem LayoutHItem PanelFillMedium LayoutSmallGutterRight LayoutSmallRow LayoutSmallCellSides" title="mobile">mobile</a></div>
</div>
</div>
</div>
<div class="LayoutCellSides LayoutRow">
<div class="parbase adcFeedBack compbase adcfeedback"><script type="javascript">
//<![CDATA[
s_tagEnv = 'dev';
//]]>
</script>
<script src="http://wwwimages.adobe.com/www.adobe.com/include/script/article-compressed.js"></script>
<div id="helpful-pod">
<div id="helpful" class="collapsed">
<div id="helpfulspan">Was this helpful?</div>
<input type="radio" name="feedback" id="radioyes" onClick="showForm();"/><span id="yesspan" class="radio-option">Yes</span> &#160;
<input type="radio" name="feedback" id="radiono" onClick="showForm();"/><span id="nospan" class="radio-option">No</span>
<textarea title="(Optional) Please let us know how we can improve this page. " id="feedbacktext" placeholder="" rows="5" cols="25" style="font-family:sans-serif;display:none"></textarea>
<button id="submitButton" onClick="submitForm();" style="display:none">Submit</button>
<button id="noCommentButton" onClick="hideForm();" style="display:none">No comment</button>
<br clear="both">
<div id="termsofuse"><p>By clicking Submit, you accept the <a href="/misc/terms.html">Adobe Terms of Use</a>.</p>
</div>
</div>
<div id="fold">&nbsp;</div>
</div>
<div id="helpful-thankyou" class="thankyou">Thanks for your feedback.</div>
<script>
//<![CDATA[
// Send CHL-specific data to SiteCatalyst
var s_chl = s_gi("mxchlprod");
var urlMatch = /(https?:\/\/)([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*))(index.html)?(\?\S+)?(#\S+)?/;
var adobeMatch = /(https?:\/\/)([-\w\.]+)+(\.adobe\.com)/;
var adobeLocaleMatch = /^\/(ae|bg|cz|dk|de|gr|es|ee|fi|fr|il|hr|hu|it|jp|kr|lt|lv|no|nl|pl|br|ro|ru|sk|si|se|tr|ua|cn|tw)\/.+/;
var cqLocaleMatch = /^\/content\/help\/(ae|bg|cz|dk|de|gr|es|ee|fi|fr|il|hr|hu|it|jp|kr|lt|lv|no|nl|pl|br|ro|ru|sk|si|se|tr|ua|cn|tw)\/.+/;
var ua = navigator.userAgent.toLowerCase();
s_chl.channel = "helpx";
s_chl.eVar3 = window.location.toString().replace(/[\?,#](.*)/, "");
s_chl.pageName = s_chl.eVar11 = document.title;
if ( typeof(omtrPageName) != 'undefined' && omtrPageName.length > 0 ) {
s_chl.pageName = s_chl.eVar11 = omtrPageName;
}
// s_chl.list1 = omtrProductList.replace(/,/g,":");
var omtrLocale = "en";
if (adobeLocaleMatch.test(location.pathname)) {
var matchArray = adobeLocaleMatch.exec(location.pathname).slice();
omtrLocale = matchArray[1];
if ( typeof(matchArray[1]) != 'undefined') {
omtrLocale = matchArray[1];
}
}
else if (cqLocaleMatch.test(location.pathname)) {
var matchArray = cqLocaleMatch.exec(location.pathname).slice();
omtrLocale = matchArray[1];
if ( typeof(matchArray[1]) != 'undefined') {
omtrLocale = matchArray[1];
}
}
s_chl.eVar8 = omtrLocale;
if (omtrLocale != "en") {
s_chl.eVar9 = document.title;
}
// Transmit
// The s_gs() call in compressed.js causes problems with any .t() call in any report suite
function s_gs(){}
s_chl.t();
function showForm(){
if (ua.indexOf('msie 6') == -1 ){
$('#helpfulspan').hide();
$('#radioyes').hide();
$('#radiono').hide();
$('#yesspan').hide();
$('#nospan').hide();
$('#feedbacktext').autofill();
$('#helpful').animate({width:'420px', height: '185px'});
$('#helpful').removeClass('collapsed');
$('#helpful').addClass('expanded');
$('#fold').css('background-position', '-12px 0');
displayTextField();
}else{
submitForm();
}
}
$(document).ready(function() {
var feedbackLocales = "en, jp, fr, de, it, se, es, nl , dk, br, no, fi";
if ( feedbackLocales.indexOf( omtrLocale ) > -1 ){
$('#helpful-pod').fadeIn();
$('#helpful-pod').animate({
opacity: 1,
top: '+=20'},
1500);
}
});
// ]]>
</script>
</div>
</div>
<div class="LayoutBreak"></div>
</div>
<!-- Main Content -->
<div class="LayoutSlimGrid-1-2 ArticleGrid-2-4 ArticleWideGrid-2-6">
<div class="ArticleWideGrid-2-4">
<div class="LayoutGrid-1-4 LayoutSlimGrid-1-2 LayoutBreakAfter">
<div class="parsys articlecontentAdobe"><div id="articlecontentAdobe">
<a name="articlecontentAdobe_text" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p><a href="#video">Video</a> | <a href="#code">Code</a> | <a href="#tutorial">Tutorial</a>&nbsp;| <a href="#links">Links</a><a href="#links"></a></p>
<h2><a name="video"></a>Run on a device<br>
</h2>
<h3>&nbsp;</h3>
</div>
</div>
<a name="articlecontentAdobe_neroliplayer" style="visibility:hidden"></a><div class="flash parbase compbase neroliplayer section"><div class="LayoutRow">
<script>
if(deepLinkMap != null) {
deepLinkMap['#articlecontentAdobe_neroliplayer_split_articlecontentAdobe_neroliplayer'] = 'articlecontentAdobe_neroliplayer_split_articlecontentAdobe_neroliplayer';
}
</script>
<a name="articlecontentAdobe_neroliplayer_split_articlecontentAdobe_neroliplayer"></a>
<div id="articlecontentAdobe_neroliplayer" class="LayoutImage">
<span style="width:650px;height:366px;" class="FlashAltCanvas">
<span class="FlashAltLayoutOverlay FlashAltLayoutBody FlashAltText">
<span class="FlashAltLayoutRow FlashAltTextLarge">
This content requires Flash</span>
<span class="FlashAltLayoutRow FlashAltRequires">
To view this content, JavaScript must be enabled, and you need the latest version of the Adobe Flash Player.</span>
<span class="FlashAltLayoutRow FlashAltButton">
<a href="/go/getflashplayer/" class="FlashAltButton">To view this content, JavaScript must be enabled, and you need the latest version of the Adobe Flash Player.</a></span>
</span>
</span>
</div>
<script>
//<![CDATA[
var attributes = {
'id':'articlecontentAdobe_neroliplayer','name':'articlecontentAdobe_neroliplayer','class':'LayoutImage'
};
var params = {play: "true",
loop: "true",
menu: "true",
scale: "noscale",
salign: "tl",
wmode: "opaque",
swliveconnect: "false",
devicefont: "false",
allowscriptaccess: "always",
seamlesstabbing: "true",
allowfullscreen: "true",
allownetworking: "all"
};
var flashvars = {
locale: "",expandFunction: "",account: "",debug: "false",live: "",configPath: "/content/dotcom/en/devnet/flex/testdrivemobile/articles/mtd_1_4/_jcr_content/articlecontentAdobe/neroliplayer.config.__autoinvalidate.xml"
};
if (swfobject.getQueryParamValue( 'autoPlay').length) flashvars.autoPlay = swfobject.getQueryParamValue( 'autoPlay' );
if (swfobject.getQueryParamValue( 'allowFullScreen').length) flashvars.allowFullScreen = swfobject.getQueryParamValue( 'allowFullScreen' );
var hash = location.hash;
var chapterIdDeepLink = '';
if(hash != null && hash != '') {
var hashArray = hash.split("_split_");
if(hashArray != null && hashArray.length >= 2) {
if(hashArray[0] == '#articlecontentAdobe_neroliplayer') {
chapterIdDeepLink = hashArray[hashArray.length-1];
flashvars.chapterID = chapterIdDeepLink;
}
}
}
swfobject.embedSWF("/include/flash/neroli/neroli.swf",
"articlecontentAdobe_neroliplayer",
"650",
"366",
"10",
"/include/flash/expressInstall.swf",
flashvars, params, attributes);
//]]>
</script>
</div>
</div>
<a name="articlecontentAdobe_text_0" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ul>
<li><a target="_blank" href="http://www.adobe.com/go/try_flashbuilder/">Download Flash Builder 4.5 Trial</a></li>
<li><a href="testdrivemobile/testdrivemobile_run_device.zip" class="icon download">Download the completed tutorial project</a> <span class="stamp-fileinfo">(ZIP, 19.6 MB)</span></li>
</ul>
<h2><a name="code"></a>Code</h2>
<p>DetailView.mxml</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_17" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;?xml version=&#034;1.0&#034; encoding=&#034;utf-8&#034;?&gt;
&lt;s:View gestureSwipe=&#034;view1_gestureSwipeHandler(event)&#034; ...&gt;
&lt;fx:Script&gt;
&lt;![CDATA[
(...)
protected function view1_gestureSwipeHandler(event:TransformGestureEvent):void
{
if(event.offsetX == 1)navigator.popView();
}
]]&gt;
&lt;/fx:Script&gt;
(...)
&lt;/s:View&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_15" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<h2><a name="tutorial"></a>Tutorial</h2>
<p>In this tutorial, you make your server-side files available to the mobile device and then run the application on it.</p>
<h3>Step 1: Make the server files available to the mobile device.</h3>
<p><i>If the mobile device is on the same network as the computer, for testing purposes, you may be able to modify the project and code to simply reference the development server by its IP address. Otherwise, you need to place the server-side files on a publicly available web server. To deploy the server-side file to a publicly available server, follow the instructions in one of the sections below.</i></p>
<p><b>PHP setup</b></p>
<p>Follow the setup instructions in <a href="testdrive/testdrive_setup.zip" target="_blank">testdrive_setup.zip</a> that you already used to deploy the server-side files to your local server to now deploy them to your public server.</p>
<p><i>Make sure the server has PHP 5.2.4 or later and that the PHP MySQLi Extension is enabled</i>. If you are using a shared server, you may not be able to enable the MySQLi extension. In this case, you can either rewrite EmployeeService.php to use the older MySQL driver or you can instead move to another server or hosting company that does have it enabled.</p>
<p>Next, you need to set up the server so your application can call methods of server-side PHP classes. You need to:</p>
<ul>
<li>Install the Zend Framework on the server.</li>
<li>Modify and upload the generated amf_config.ini and gateway.php files to your server.</li>
</ul>
<p>The data service created with Flash Builder to make calls to your EmployeeService.php file uses Flash Remoting, a combination of client and server-side functionality that allows you to easily invoke methods of server-side classes. It uses Action Message Format (AMF) to exchange data between Flash Player or the AIR runtime and the remote service. AMF is a binary format used to serialize ActionScript objects and results in smaller data packets being sent over HTTP (than XML or web services) and hence, faster data exchange. Remoting capabilities are built in to Flash Player and the AIR runtime and work in conjunction with server-side classes that must be installed on the server. For PHP, these server-side classes are included as part of the Zend Framework.</p>
<p><span class="note"><b>Note: </b>You can use the Zend Framework with any PHP server.</span></p>
<p>The Zend Framework is an open source, object-oriented web application framework that provides individual components for many common requirements in web application development, including Flash Remoting capabililties (Zend AMF). To install the Zend Framework on your server, either copy the Zend Framework folder added to your local server when you created the Flex data service (see Figure 1) and upload it to your server's webroot or download the latest version of the <a target="_blank" href="http://framework.zend.com/download/latest">Zend Framework</a> and install it instead.</p>
</div>
</div>
<a name="articlecontentAdobe_image" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Install the Zend Framework." alt="Install the Zend Framework." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig01.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 1. Install the Zend Framework.</div>
</div>
<a name="articlecontentAdobe_text_16" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Next, you need to modify and upload the additional server files needed to make Flash Remoting calls from your application. To see what files you need, return to Flash Builder and open the generated data service file, services.employeeservice._Super_EmployeeService.as. Locate the <code>source</code> , <code>endpoint</code> , and <code>destination</code> assignment statements (see Figure 2).</p>
</div>
</div>
<a name="articlecontentAdobe_image_0" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View the code specifying the location of the Flash Remoting endpoint." alt="View the code specifying the location of the Flash Remoting endpoint." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_02.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 2. View the code specifying the location of the Flash Remoting endpoint.</div>
</div>
<a name="articlecontentAdobe_text_17" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>When you create a data service in Flash Builder, you specify the location of the PHP class to call. The name of this class is hard-coded in this generated service file but its location is not. If the PHP class ever changes, you can refresh the data service from the Data/Services view and the generated files will be updated. If you rename the PHP class, though, you will need to recreate the data service.</p>
<p>Note the <code>endpoint</code> , the URL to call, is set equal to gateway.php. When you created the data service, Flash Builder created this file. If you are using Flash Builder 4.5 for PHP Premium, it was created in the public folder of the PHP TestDrive project (see Figure 3). If you are using Flash Builder 4.5 Premium, it was created in the output folder specifed for the project. the bin-debug folder for the project. Locate the gateway.php and amf_config.ini files and open them. To open them in Flash Builder, right-click and select Open With &gt; Text Editor.</p>
</div>
</div>
<a name="articlecontentAdobe_image_1" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Locate and open the gateway.php and amf_config.ini files." alt="Locate and open the gateway.php and amf_config.ini files." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_03.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 3. Locate and open the gateway.php and amf_config.ini files.</div>
</div>
<a name="articlecontentAdobe_text_1" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>gateway.php is the endpoint for all Flash Remoting requests from your application. It (along with the Zend Framework) handles the service request, invoking the correct class method and handling all data translation and packaging. It references a configuration file, amf_config.ini, which sets the location of the webroot, the location of Zend Framework, a production flag (to suppress debug messages), and the directories to look in for classes specified in service calls:</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_0" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">[zend]
;set the absolute location path of webroot directory, example:
;Windows: C:\apache\www
;MAC/UNIX: /user/apache/www
webroot =/usr/local/zend/apache2/htdocs/
;set the absolute location path of zend installation directory, example:
;Windows: C:\apache\PHPFrameworks\ZendFramework\library
;MAC/UNIX: /user/apache/PHPFrameworks/ZendFramework/library
;zend_path =
[zendamf]
amf.production = false
amf.directories[]=TestDrive/services</code>
</div>
</div>
<a name="articlecontentAdobe_text_2" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Copy and paste these two files&nbsp;into a different folder called <b>public</b> on your computer so you can modify them and upload them to your production server. Open amf_config.ini and change the webroot and the zend_path variables to the appropriate paths on your server. Example settings on Windows and Linux servers may resemble the following:</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_1" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">webroot = D:\inetpub\domainname
zend_path = D:\inetpub\domainname\ZendFramework\library
webroot = /home/user/www
zend_path = /home/user/www/ZendFramework/library</code>
</div>
</div>
<a name="articlecontentAdobe_text_18" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Make sure you do not have ending slashes or the remoting calls will fail. Locate the <code>amf.directories[]</code> setting.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">amf.directories[]=TestDrive/services</code>
</div>
</div>
<a name="articlecontentAdobe_text_19" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>It contains a list of the directories that contain classes used in Flash Remoting service calls. If you place the server-side classes somehere else on the server, you need to modify this value. Lastly, when no longer debugging the application, set <code>amf.production</code> to true.</p>
<p>If you are using Flash Builder 4.5 for PHP, upload the public folder with the modified files to the TestDrive folder on your PHP server. If you are using Flash Builder 4.5, place the gateway.php and amf_config.ini files in a folder called public and upload this folder to&nbsp;the TestDrive folder on your server (see Figure 4). Note, you can also upload these files directly to your webroot (or any other location); in that case, you would need to modify the endpoint used in the Flex data service class to match this location.</p>
</div>
</div>
<a name="articlecontentAdobe_image_2" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Upload the gateway.php and amf_config.ini files to your server." alt="Upload the gateway.php and amf_config.ini files to your server." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_04.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 4. Upload the gateway.php and amf_config.ini files to your server.</div>
</div>
<a name="articlecontentAdobe_text_20" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Test the gateway by browsing to http://<i>yourserver</i>/TestDrive/public/gateway.php. You should see the text Zend Amf Endpoint displayed. Your public server is now set up and you are ready to change your Flash Builder project to use the files on this server.</p>
<p><b>ColdFusion setup</b></p>
<p>Follow the setup instructions in <a href="testdrive/testdrive_setup.zip">testdrive_setup.zip</a> that you already used to deploy the server-side files to your local server to deploy now them to your public server. If you are using a shared server, you usually cannot deploy CAR files so follow the instructions for setting up ColdFusion Standard using testdrive.zip. You should end up with a data source called testdrive_db and folder called TestDrive in your webroot (see Figure 5).</p>
</div>
</div>
<a name="articlecontentAdobe_image_3" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Install the server-side ColdFusion files." alt="Install the server-side ColdFusion files." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_05.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 5. Install the server-side ColdFusion files.</div>
</div>
<a name="articlecontentAdobe_text_21" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>If you are using a shared server, you may need to make appropriate modifications. Solutions for several examples are listed below.</p>
<ul>
<li><i>No Apache Derby Embedded data sources allowed</i>. In this case, create a MySQL database using one of the scripts contained in the testdrive_setup_PHP.zip in the testdrive_setup.zip and then create a data source called testdrive_db for that MySQL database.</li>
<li><i>You cannot create a datasource called testdrive_db.</i> On some shared servers, data source names cannot contain underscores or they must include your domain name (like <i>domainname</i>_testdrive). In this case, create a data source with an allowed name (like testdrive or <i>domainname</i>_testdrive) and then open EmployeeService.cfc, /ColdFusion/wwwroot/TestDrive/services/EmployeeService.cfc, and change all the testdrive_db references to your new data source name.</li>
<li><i>No access to the services-config.xml file. </i>In this case, you cannot change the values of the <code>force-cfc-lowercase</code> , <code>force-query-lowercase</code> , and <code>force-struct-lowercase</code> values to true so you will probably need to make some changes to your code. These code changes and how to determine if you need to make them or not are covered in step 5.</li>
</ul>
<p>That's it, your server is set-up and is ready to be used in your application. Before proceeding though, let's take a look at how this all works.</p>
<p>The data service created with Flash Builder to make calls to your EmployeeService.cfc file uses Flash Remoting, a combination of client and server-side functionality that allows you to easily invoke methods of server-side classes. It uses Action Message Format (AMF) to exchange data between Flash Player or the AIR runtime and the remote service. AMF is a binary format used to serialize ActionScript objects and results in smaller data packets being sent over HTTP (than XML or web services) and hence, faster data exchange. Remoting capabilities are built in to Flash Player and the AIR runtime and work in conjunction with server-side classes that must be installed on the server. For ColdFusion, these server-side classes are already included as part of the ColdFusion server.</p>
<p>Next, return to Flash Builder and open the generated data service file: services.employeeservice._Super_EmployeeService.as. Locate the <code>source</code> , <code>endpoint</code> , and <code>destination</code> assignment statements (see Figure 6).</p>
</div>
</div>
<a name="articlecontentAdobe_image_4" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View the code specifying the location of the Flash Remoting endpoint and the CFC." alt="View the code specifying the location of the Flash Remoting endpoint and the CFC." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_06.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 6. View the code specifying the location of the Flash Remoting endpoint and the CFC.</div>
</div>
<a name="articlecontentAdobe_text_22" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Because the path to the CFC is specified in this file, it needs to be located in the same relative location on the public server as it was on the local server. If it isn't, you can also change the value of <code>source</code> in this _Super<i>_</i>EmployeeService.as file to reflect the path of the CFC on the server before compiling the application.</p>
<p><span class="note"><b>Note: </b>If the CFC ever changes, you can refresh the data service from the Data/Services view and the generated files will be updated. If you move or rename the CFC, though, you will need to recreate the data service.</span></p>
<p>The <code>endpoint</code> is the URL used for all Flash Remoting requests from your application. It (along with other server-side classes) handles the service request, invoking the correct CFC method and handling all data translation and packaging. If you browse to this endpoint (make sure you include the final slash), you should get a blank page.</p>
<p>To understand the <code>destination</code> property, we need to take a look at several server-side configuration files. In Flash Builder, select Project &gt; Properties and select Flex Compiler. You will see the following compiler argument (with the appropriate path for you server):</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_13" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">-services &#034;/Applications/ColdFusion9/wwwroot/WEB-INF/flex/services-config.xml&#034;</code>
</div>
</div>
<a name="articlecontentAdobe_text_3" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>This compiler argument was added when you created the project (as a ColdFusion project using Flash Remoting). It specifies the location of the <kbd>services-config.xml</kbd> file that contains the details for how the communication between the application and the server should occur and what server-side classes handle the requests and translation and packaging of data.</p>
<p>If you locate and open this services-config.xml file, you will see settings for whether ColdFusion uses mappings to find CFCs, whether public as well as remote methods will be accessible, and how to handle the case of property values when converting between ColdFusion and ActionScript (since ColdFusion is case-insensitive and ActionScript is case-sensitive).</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_2" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;coldfusion&gt;
&lt;access&gt;
&lt;use-mappings&gt;true&lt;/use-mappings&gt;
&lt;method-access-level&gt;remote&lt;/method-access-level&gt;
&lt;/access&gt;
&lt;use-accessors&gt;true&lt;/use-accessors&gt;
&lt;use-structs&gt;false&lt;/use-structs&gt;
&lt;property-case&gt;
&lt;force-cfc-lowercase&gt;true&lt;/force-cfc-lowercase&gt;
&lt;force-query-lowercase&gt;true&lt;/force-query-lowercase&gt;
&lt;force-struct-lowercase&gt;true&lt;/force-struct-lowercase&gt;
&lt;/property-case&gt;
&lt;/coldfusion&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_23" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p><b>Note:</b><span class="note"> If you are not using ColdFusion 9, your configuration files will look slightly different. Refer to your ColdFusion documentation for details.</span></p>
<p>Near the top of the file, you will also see an <code>include</code> statement for a remoting-config.xml file.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_14" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;service-include file-path=&#034;remoting-config.xml&#034; /&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_4" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Locate and open the remoting-config.xml file, <kbd>/ColdFusion9/wwwroot/WEB-INF/flex/remoting-config.xml</kbd>. It contains a <code>destination</code> called ColdFusion that is used for calls to any ColdFusion component from a Flex application; the wildcard (*) character for the source means a CFC in any location can be called.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_3" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;destination id=&#034;ColdFusion&#034;&gt;
&lt;channels&gt;
&lt;channel ref=&#034;my-cfamf&#034;/&gt;
&lt;/channels&gt;
&lt;properties&gt;
&lt;source&gt;*&lt;/source&gt;
&lt;/properties&gt;
&lt;/destination&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_24" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p><span class="note"><b>Note:</b> You can also specify named destinations that are associated with a particular CFC endpoint.</span></p>
<p>The generated service file in your project—services.employeeservice._Super_EmployeeService.as—has its <code>destination</code> property set to this destination, ColdFusion and the <code>source</code> property is set to the location of the CFC from the webroot (see Figure 6).</p>
<p>Your public server is now set up and you are ready to change your Flash Builder project to use the files on this server.</p>
<p><b>Java setup</b></p>
<p>Follow the setup instructions in <a href="testdrive/testdrive_setup.zip">testdrive_setup.zip</a> that you already used to deploy the services to your local server to deploy to your public server (see Figure 7). Open the <kbd>/publicserver/testdrive/WEB-INF/web.xml</kbd> file and remove the servlet and servlet-mapping tags for the RDSDispatchServlet.</p>
</div>
</div>
<a name="articlecontentAdobe_image_5" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Install the server-side Java files." alt="Install the server-side Java files." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_07.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 7. Install the server-side Java files.</div>
</div>
<a name="articlecontentAdobe_text_25" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>If you are using a shared server, you usually cannot deploy WAR files so you will need to manually set up the application. The steps below are for a shared server that allows a single web application.</p>
<ol>
<li>Copy the <kbd>/localserver/testdrive/photos/</kbd> folder and place it on your public server so you have <kbd>http://publicserver/testdrive/photos/</kbd>.</li>
<li>Copy the <kbd>/localserver/testdrive/test/</kbd> folder and place it on your public server so you have <kbd>http://publicserver/testdrive/test/</kbd>.</li>
<li>Copy the <kbd>/localserver/testdrive/WEB-INF/database/</kbd> folder and place it in your public server's WEB-INF folder so you have <kbd>http://publicserver/WEB-INF/database/</kbd>.</li>
<li>Copy the <kbd>/localserver/testdrive/WEB-INF/flex/</kbd> folder and place it in your public server's WEB-INF folder so you have <kbd>http://publicserver/WEB-INF/flex/</kbd>. If your public server already has a flex folder, just open both the local and remote remoting-config.xml files and copy the employeeService destination in the local file and paste it in the remote file.</li>
<li>Copy the services folder, <kbd>/localserver/testdrive/WEB-INF/classes/services/</kbd>, and place it in your public server's <kbd>/WEB-INF/classes/ </kbd>folder.</li>
<li>Copy the files in the <kbd>/localserver/testdrive/WEB-INF/lib/ </kbd>folder <i>except the flex-rds-server.jar</i> and place them in your public server's <kbd>/WEB-INF/lib/</kbd> folder.</li>
<li>Make a copy of <kbd>/localserver/testdrive/WEB-INF/web.xml</kbd> and open it and remove the servlet and servlet-mapping tags for the RDSDispatchServlet.</li>
<li>If a web.xml file is used for your shared server application, upload this file to your public server's WEB-INF folder. If it is not, which is more likely the case, you need to contact the hosting company and send them this XML file and have them create the MessageBroker servlet mapping for you.</li>
<li>Browse to <kbd>http://yourserver/messagebroker/amf</kbd>. If you get a blank page, the servlet mapping was successfully created.</li>
</ol>
<p>That's it, your server is set-up and is ready to be used in your application. Before proceeding though, let's take a look at how this all works.</p>
<p>The data service created with Flash Builder to make calls to your EmployeeService.class file uses Flash Remoting, a combination of client and server-side functionality that allows you to easily invoke methods of server-side classes. It uses Action Message Format (AMF) to exchange data between Flash Player or the AIR runtime and the remote service. AMF is a binary format used to serialize ActionScript objects and results in smaller data packets being sent over HTTP (than XML or web services) and hence, faster data exchange. Remoting capabilities are built in to Flash Player and the AIR runtime and work in conjunction with server-side classes that must be installed on the server. For Java, these server-side classes are included as part of BlazeDS (and Adobe LiveCycle Data Services).</p>
<p><a target="_blank" href="http://opensource.adobe.com/blazeds/">BlazeDS</a> is an open source, server-based remoting and web messaging technology for J2EE servers. It includes Flash Remoting capabililties for calling methods of server-side Java classes, a proxy service, and a messaging service for pushing data to clients for real-time data applications. LiveCycle Data Services includes these and additional features. See <a href="http://www.adobe.com/products/livecycle/dataservices/compare.html">this chart</a> for a comparison between BlazeDS and LiveCycle Data Services.</p>
<p>Next, return to Flash Builder and open the generated data service file, services.employeeservice._Super_EmployeeService.as. Locate the <code>endpoint</code> and <code>destination</code> assignment statements (see Figure 8).</p>
</div>
</div>
<a name="articlecontentAdobe_image_6" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View the code specifying data for Flash Remoting calls." alt="View the code specifying data for Flash Remoting calls." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_08.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 8. View the code specifying data for Flash Remoting calls.</div>
</div>
<a name="articlecontentAdobe_text_26" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p><span class="note"><b>Note: </b>If the service class ever changes, you can refresh the data service from the Data/Services view and the generated files will be updated. If you move or rename the service class, though, you will need to modify the destination mapping (which we'll take a look at next) and recreate the data service.</span></p>
<p>The <code>endpoint</code> is the URL used for all Flash Remoting requests from your application. It (along with other server-side classes) handles the service request, invoking the correct class method and handling all data translation and packaging. This URL is mapped to a MessageBroker servlet in the web.xml file. If you browse to this endpoint, you should get a blank page.</p>
<p>To understand the <code>destination</code> property, we need to take a look at several server-side configuration files. In Flash Builder, select Project &gt; Properties and select Flex Compiler. You will see the following compiler argument (with the appropriate path for you server):</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_15" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">-services &#034;/Applications/tomcat/webapps/testdrive/WEB-INF/flex/services-config.xml&#034;</code>
</div>
</div>
<a name="articlecontentAdobe_text_27" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>This compiler argument was added when you created the project (as a J2EE project using Flash Remoting). It specifies the location of the services-config.xml file that contains the details for how the communication between the application and the server should occur and what server-side classes handle the requests and translation and packaging of data.</p>
<p>Navigate to the flex folder in the<b> </b><kbd>/WEB-INF/flex</kbd> folder. It contains all the BlazeDS configuration files. Open the services-config.xml file. It contains an <code>include</code> statement for a remoting-config.xml file.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_16" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;service-include file-path=&#034;remoting-config.xml&#034; /&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_5" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Locate and open the remoting-config.xml file<b>, </b><kbd>/WEB-INF/flex/remoting-config.xml</kbd>. It contains a <code>destination</code> called employeeService that is a mapping to the services.EmployeeService class. If you place your service file in a different location on the server, you need to modify this destination.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_4" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;destination id=&#034;employeeService&#034;&gt;
&lt;properties&gt;
&lt;source&gt;services.EmployeeService&lt;/source&gt;
&lt;scope&gt;application&lt;/scope&gt;
&lt;/properties&gt;
&lt;/destination&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_6" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>When you created the data service in Flash Builder, you selected a destination from a list of the destinations; this list was created from the destinations defined in the remoting-config.xml file. The destination you selected, employeeService, was set to be the destination in the generated service file in your project: services.employeeservice._Super_EmployeeService.as (see Figure 8).</p>
<p>Return to the server files (on the local or remote server) and look in the <kbd>/WEB-INF/lib</kbd> folder (see Figure 7). Most of these JAR files include classes for handling communication between Flash Player or the AIR runtime and the server except flex-rds-server.jar and derby.jar. The flex-rds-server.jar is new to BlazeDS 4 and is used by Flash Builder at development time to create a data service by introspecting the server-side classes. You do not need this file on your production server and can remove it. The derby.jar is, of course, for the Apache Derby embedded database that this application uses.</p>
<p>Lastly, open the <kbd>/WEB-INF/web.xml</kbd> file. (If using a shared server, you may not have or need this file on your public server. Open the version for the local server). You need to copy this file to the production WEB-INF folder as well. If the production web application already has a web.xml configured, you can just copy the servlet mapping for <code>MessageBrokerServlet</code> and listener for <code>HttpFlexSession</code> . Here is the code:</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_5" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;!-- Http Flex Session attribute and binding listener support --&gt;
&lt;listener&gt;
&lt;listener-class&gt;flex.messaging.HttpFlexSession&lt;/listener-class&gt;
&lt;/listener&gt;
&lt;!-- MessageBroker Servlet --&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;MessageBrokerServlet&lt;/servlet-name&gt;
&lt;display-name&gt;MessageBrokerServlet&lt;/display-name&gt;
&lt;servlet-class&gt;flex.messaging.MessageBrokerServlet&lt;/servlet-class&gt;
&lt;init-param&gt;
&lt;param-name&gt;services.configuration.file&lt;/param-name&gt;
&lt;param-value&gt;/WEB-INF/flex/services-config.xml&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;MessageBrokerServlet&lt;/servlet-name&gt;
&lt;url-pattern&gt;/messagebroker/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_28" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>The other servlet mapping you see in the web.xml file is for the <code>RDSDispatchServlet</code> which is used by Flash Builder to create a data service by introspecting server-side classes at development time. If you did not already, remove it from the web.xml file on the public server (if it has a web.xml file).</p>
<p>Your public server is now set up and you are ready to change your Flash Builder project to use the files on this server.</p>
<h3>Step 2: Change the application server for the project.</h3>
<p><i>If you are using Flash Builder, select Project &gt; Properties &gt; Flex Server and change the root URL to the webroot for your application (see Figure 9). For Java, also set the context root. Click the Validate Configuration button. If you are using Flash Builder 4.5 for PHP, do not complete this step (there is currently a bug and you cannot successfully change the root URL to a different server).<br>
</i></p>
<p>You may get a warning message at the top of the window that the web server cannot be accessed, but that's OK. Do not modify the web root or the root folder.</p>
<p>If you are using Java on a shared server, your context root may be blank.</p>
</div>
</div>
<a name="articlecontentAdobe_image_7" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Change the root URL for the project." alt="Change the root URL for the project." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_09.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 9. Change the root URL for the project.</div>
</div>
<a name="articlecontentAdobe_text_29" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<h3>Step 3: Locate and if necessary set the new remoting gateway.</h3>
<p><i>Open services.employeeservice._Super_EmployeeService.as and look at the new value for the endpoint (see Figure 10). If necessary, modify it. If you are using Flash Builder 4.5 for PHP,&nbsp; be sure to modify this endpoint to point to the gateway.php file on your public server.<br>
</i></p>
</div>
</div>
<a name="articlecontentAdobe_image_8" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Locate the new endpoint." alt="Locate the new endpoint." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_10.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 10. Locate the new endpoint.</div>
</div>
<a name="articlecontentAdobe_text_30" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>For PHP, if you placed your gateway.php and amf-config.ini files somewhere else on the server, modify this path appropriately (see Figure 11).</p>
</div>
</div>
<a name="articlecontentAdobe_image_28" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="fig_11" alt="fig_11" class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_11.jpg"/></div>
</div>
<a name="articlecontentAdobe_text_7" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>For ColdFusion, the endpoint URL should look like this:</p>
<div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"><code class="CodeBlock">_serviceControl.endpoint = &quot;http://<i>yourserver</i>/flex2gateway/&quot;;</code></div>
<p>...and for Java, like this:</p>
<div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow"><code class="CodeBlock">_serviceControl.endpoint=&quot;http://<i>yourserver</i>/testdrive/messagebroker/amf&quot;;</code></div>
<p>If you have no context root, the URL will not contain /testdrive/.</p>
<h3>Step 4: Change the URLs for the photos.</h3>
<p><i>In FlexMobileTestDriveHomeView.mxml, change the return string for the </i><code>getPhotoURL()</code><i> function in the IconItemRenderer to use the appropriate URL for the photos directory on the public server. In DetailView, change the value of the </i><code>source</code><i> property for the Image control.</i></p>
<p>Change the URL for the photos in FlexMobileTestDriveHomeView.mxml:</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_6" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">private function getPhotoURL(item:Object):String{
return &#034;http://yourserver.com/TestDrive/photos/&#034;+ item.photofile;
}</code>
</div>
</div>
<a name="articlecontentAdobe_text_8" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Change the URL for the photos in DetailView.mxml:</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_7" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;s:Image x=&#034;10&#034; y=&#034;10&#034; width=&#034;100&#034; height=&#034;100&#034;
source=&#034;http://yourserver.com/TestDrive/photos/{getEmployeesByIDResult.lastResult.photofile}&#034;/&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_31" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<h3>Step 5: Enable the Network Monitor and run the application.</h3>
<p><i>In the Network Monitor view, click the Enable Monitor button (see Figure 12) and then run the application using the device emulator.</i></p>
</div>
</div>
<a name="articlecontentAdobe_image_10" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Enable the Network Monitor." alt="Enable the Network Monitor." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_12.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 12. Enable the Network Monitor.</div>
</div>
<a name="articlecontentAdobe_text_32" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>You should see the data and images displayed in the application exactly as before, except now the service file and photos are being accessed on your public server instead of locally. Select an employee and make sure you see the employee details. If you are using ColdFusion and do not see employee details, you probably did not or could not set the <code>force-struct-lowercase</code> property to true in the services-config.xml file on the public server.</p>
<p>Return to Flash Builder and look at the Network Monitor view. You may want to double-click the tab to make it full screen so you can see all the data better. You should see that the remoting calls are now being made to the gateway on your public server (see Figure 13). Note, Flash Player pings the endpoint first to see if it is available before making the actual call and sending any data.</p>
</div>
</div>
<a name="articlecontentAdobe_image_11" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View the network calls made by the application." alt="View the network calls made by the application." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig_13.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 13. View the network calls made by the application.</div>
</div>
<a name="articlecontentAdobe_text_33" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Select the getEmployeeSummary operation and in the Tree view, click the Response tab and then expand the response body (see Figure 14).</p>
</div>
</div>
<a name="articlecontentAdobe_image_12" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View data returned for the getEmployeeSummary operation." alt="View data returned for the getEmployeeSummary operation." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig14.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 14. View data returned for the getEmployeeSummary operation.</div>
</div>
<a name="articlecontentAdobe_text_34" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
Select the getEmployeesByID operation and expand the response body. If you are using a shared ColdFusion server and could not change the services-config.xml file to force structures to be returned in lowercase, the properties will be in uppercase (see Figure 15).</div>
</div>
<a name="articlecontentAdobe_image_13" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View data returned for the getEmployeeByID operation on a shared ColdFusion server." alt="View data returned for the getEmployeeByID operation on a shared ColdFusion server." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4/fig15.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 15. View data returned for the getEmployeeByID operation on a shared ColdFusion server.</div>
</div>
<a name="articlecontentAdobe_text_9" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>ActionScript is case-sensitive so when Flash Player creates an Employee instance with the return data, all the lowercase properties ( <code>state</code> , <code>officephone</code> , and so on) have no matching values and so remain null. That's why you didn't see any detail data. The objects created from ColdFusion query obects automatically get lowercase properties; those for structures do not unless <code>force-struct-lowercase</code> is set to true in the services-config.xml file.</p>
<p>If you are using a shared server and cannot modify services-config.xml, you need to modify your code in DetailView.mxml.</p>
<p>First, In the Data/Services panel, change the return type of <code>getEmployeeByID()</code> back to an Object. Next, in the Script block, define a bindable, private variable called <code>employee</code> of type Employee and instantiate it. Be sure to select Employee from Content Assist so the import statement is written for you.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_8" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">import valueObjects.Employee;
[Bindable]private var employee:Employee=new Employee(); </code>
</div>
</div>
<a name="articlecontentAdobe_text_10" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Locate the <code>getEmployeeByIDResult</code> CallResponder in the Declarations block and generate a <code>result</code> handler for it.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_9" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;s:CallResponder id=&#034;getEmployeesByIDResult&#034; result=&#034;getEmployeesByIDResult_resultHandler(event)&#034;/&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_11" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Inside the generated handler, set the properties of the <code>employee</code> object to those returned from the operation call. You can reference the data as <code>getEmployeesByIDResult.lastResult</code> or as <code>event.result</code> .</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_10" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">protected function getEmployeesByIDResult_resultHandler(event:ResultEvent):void
{
employee.firstname=getEmployeesByIDResult.lastResult.FIRSTNAME;
employee.lastname=event.result.LASTNAME;
//set other properties
}</code>
</div>
</div>
<a name="articlecontentAdobe_text_12" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>Now you need to bind your component properties to the <code>employee</code> variable instead of <code>getEmployeesByIDResult</code> . <code>lastResult</code> . Be sure to also change the view's <code>title</code> property and the image's <code>source</code> property. For example:</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_11" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;s:Label text=&#034;{employee.title}&#034;/&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_13" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>After changing all the bindings, run the application and select an employee. You will initially see null null for the title and a broken image link which get replaced after the data is retrieved from the server and the <code>employee</code> variable is populated. To keep this from occuring, remove the <code>title</code> property from the View tag and the <code>source</code> property from the Image tag and set these values in the <code>result</code> handler instead.</p>
</div>
</div>
<a name="articlecontentAdobe_codeblock_12" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">protected function getEmployeesByIDResult_resultHandler(event:ResultEvent):void
{
// more code
title=employee.firstname +&#034; &#034;+employee.lastname;
image.source=&#034;http://yourserver/TestDrive/photos/&#034;+employee.photofile;
}</code>
</div>
</div>
<a name="articlecontentAdobe_text_35" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<h3>Step 6: Run the application on a device.</h3>
<p><i>Follow the steps in one or more of the sections below.</i></p>
<ul>
<li><a href="#runandroid">Run on a Google Android device</a></li>
<li><a href="#runios">Run on an Apple iOS device</a></li>
<li><a href="#runblackberry"> Run on a BlackBerry Tablet OS device</a></li>
</ul>
<h4><a name="runandroid"></a>Run on a Google Android device</h4>
<p>It's easiest to run and test your application on a Google Android device because you can deploy the application without having to sign the application package—which is required for Apple iOS and Blackberry Tablet OS devices. All you need to do is enable USB debugging on the device, connect it via USB to the computer, create a Flash Builder run configuration for it, and then run the application.</p>
<ol>
<li>On your Google Android device, navigate to Settings &gt; Applications &gt; Development and make sure USB debugging is enabled (see Figure 16). This setting must be selected so Flash Builder can install applications on your device without notification.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_14" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Enable USB debugging on your device." alt="Enable USB debugging on your device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_16.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 16. Enable USB debugging on your device.</div>
</div>
<a name="articlecontentAdobe_text_36" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="2">
<li> Connect your Google Android device to your computer's USB port and if using Windows, follow the prompts to install a device driver.</li>
<li>In Flash Builder, select Run Configurations from the Run menu or from the dropdown list for the Run button and click the duplicate button.</li>
<li>Change the name of the new configuration to FlexMobileTestDrive (android), set the target platform to Google Android, set the launch method to On device, and click Run (see Figure 17).</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_15" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Create a run configuration for running on a Google Android device." alt="Create a run configuration for running on a Google Android device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_17.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 17. Create a run configuration for running on a Google Android device.</div>
</div>
<a name="articlecontentAdobe_text_37" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>The application should be installed and launched on the device (see Figure 18). If the AIR runtime is not installed on the device, it will be installed first. </p>
</div>
</div>
<a name="articlecontentAdobe_image_16" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Run the application on a Google Android device." alt="Run the application on a Google Android device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_18.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 18. Run the application on a Google Android device.</div>
</div>
<a name="articlecontentAdobe_text_38" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="5">
<li>Rotate the device and see the application resize. Select an employee and see the employee details (see Figure 19). Click the back button to return to the employee list.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_17" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="View employee details on a rotated Google Android device." alt="View employee details on a rotated Google Android device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_19.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 19. View employee details on a rotated Google Android device.</div>
</div>
<a name="articlecontentAdobe_text_39" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="6">
<li> Look at the list of applications on the device. You will see your application listed using a default name and icon (see Figure 20). You will learn to customize the name and icon in a later tutorial.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_18" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Locate the installed application on the Google Android device." alt="Locate the installed application on the Google Android device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_20.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 20. Locate the installed application on the Google Android device.</div>
</div>
<a name="articlecontentAdobe_text_40" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="7">
<li>Return to Flash Builder and locate the APK file in the bin-debug folder (see Figure 21). This is the Android package file. This is a debug version of the application that was installed on the Android device. You learn to create a release version of the APK for distribution in a <a href="/devnet/flex/testdrivemobile/articles/mtd_3_2.html">later tutorial</a>.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_19" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Locate the debug Android package created." alt="Locate the debug Android package created." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_21.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 21. Locate the debug Android package created.</div>
</div>
<a name="articlecontentAdobe_text_41" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<h4><a name="runios"></a>Run on an Apple iOS device</h4>
<p>To run and test your application on an Apple iOS device, you must first create an Apple developer certificate and a provisioning profile for this application and the iOS device(s) you want to run it on. To create these files, follow the steps in the <a href="/devnet/air/articles/packaging-air-apps-ios.html">Using Flash Builder 4.5 to package applications for Apple iOS devices</a> tutorial. After you've created these files, you use Flash Builder to convert your application into a native iOS application; you specify these files in the project's packaging info and then create a run configuration for iOS devices. Flash Builder creates an IPA application package that you add to iTunes and then sync to your device.</p>
<p>Because iOS devices do not have back buttons, you need to add a way to return to the main view of the application from the detail view. You could add a back button to the navigator area of the action bar or create a listener for a gesture event, which is what you will do here.</p>
<ol>
<li>In Flash Builder, return to DetailView.mxml and register to listen for the view's <code>gestureSwipe</code> event and create a handler.</li>
<p>Your View tag should appear as shown here:</p>
</ol>
</div>
</div>
<a name="articlecontentAdobe_codeblock_18" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">&lt;s:View viewActivate=&#034;view1_viewActivateHandler(event)&#034; gestureSwipe=&#034;view1_gestureSwipeHandler(event)&#034; ...&gt;</code>
</div>
</div>
<a name="articlecontentAdobe_text_42" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol>
<p>The <code>gestureSwipe</code> event broadcasts a TransformGestureEvent object:</p>
</ol>
</div>
</div>
<a name="articlecontentAdobe_codeblock_19" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">protected function view1_gestureSwipeHandler(event:TransformGestureEvent):void
{
}
</code>
</div>
</div>
<a name="articlecontentAdobe_text_43" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="2">
<li>Inside the handler, return to the previous view if the user swipes left. To check the direction of a swipe, check the event object's <code>offsetX</code> and <code>offsetY</code> properties that specify the translation since the previous gesture event. For a left swipe, check to see the <code>offsetX</code> is 1.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_codeblock_20" style="visibility:hidden"></a><div class="parbase codeblock compbase section"><div class="PanelFillLight PanelBevelTop LayoutCell LayoutRow">
<code class="CodeBlock">protected function view1_gestureSwipeHandler(event:TransformGestureEvent):void
{
if(event.offsetX == 1)navigator.popView();
}
</code>
</div>
</div>
<a name="articlecontentAdobe_text_44" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="3">
<li> In Flash Builder, select Run Configurations from the Run menu or from the dropdown list for the Run button and click the duplicate button.</li>
<li>Change the name of the new configuration to FlexMobileTestDrive (iOS), set the target platform to Apple iOS, set the launch method to On device, and select either standard or fast packaging (see Figure 22).</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_20" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 22. Create a run configuration for running on an Apple iOS device." alt="Figure 22. Create a run configuration for running on an Apple iOS device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_22.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 22. Create a run configuration for running on an Apple iOS device.</div>
</div>
<a name="articlecontentAdobe_text_45" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="5">
<li> In the Run Configuration dialog box, click the Configure link next to Packaging settings have not yet been configured (see Figure 22).</li>
<li>Specify your P12 certifcate and provisioning file (see Figure 23). To create these files, follow the steps in the <a href="/devnet/air/articles/packaging-air-apps-ios.html">Using Flash Builder 4.5 to package applications for Apple iOS devices</a> tutorial.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_21" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 23. Specify Apple iOS packaging info." alt="Figure 23. Specify Apple iOS packaging info." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_23.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 23. Specify Apple iOS packaging info.</div>
</div>
<a name="articlecontentAdobe_text_46" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="7">
<li>In the Run configuration dialog box, click the Run button and then enter your certificate password in the Certificate Password dialog box. Flash Builder will convert your application to a native iOS application. You will get a Packaging Completed dialog box when the process is finished.</li>
<li>Locate the application IPA file in your Flash Builder bin-debug folder (see Figure 24). This is a debug version of the application. You learn to create a release version of the IPA for distribution in a <a href="/devnet/flex/testdrivemobile/articles/mtd_3_2.html">later tutorial</a>.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_22" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 24. Locate the debug Apple iOS package created." alt="Figure 24. Locate the debug Apple iOS package created." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_24.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 24. Locate the debug Apple iOS package created.</div>
</div>
<a name="articlecontentAdobe_text_47" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="9">
<li> Connect your iOS device to your computer's USB port and open iTunes.</li>
<li>Add the provisioning profile and IPA file to iTunes. You can add the files on a Mac by dragging the files and dropping them on the iTunes icon in the dock. Optionally on any platform, in iTunes, select File &gt; Add to Library and add each file.</li>
<li>Locate your new application in apps (see Figure 25). Currently, a default name and icon are used for the application. You will learn to customize these in a later tutorial.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_23" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 25. Locate the application in iTunes. " alt="Figure 25. Locate the application in iTunes. " class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_25.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 25. Locate the application in iTunes. </div>
</div>
<a name="articlecontentAdobe_text_48" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="12">
<li> Add the application to the iOS device. In iTunes, select the attached device and make sure your application is selected to be synced on the device and then sync the device (see Figure 26).</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_24" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 26. Add the application to the Apple iOS device." alt="Figure 26. Add the application to the Apple iOS device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_26.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 26. Add the application to the Apple iOS device.</div>
</div>
<a name="articlecontentAdobe_text_49" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="13">
<li>Locate the application on the device (see Figure 27) and run it (see Figure 28).</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_25" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 27. Locate the installed application on the Apple iOS device." alt="Figure 27. Locate the installed application on the Apple iOS device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_27.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 27. Locate the installed application on the Apple iOS device.</div>
</div>
<a name="articlecontentAdobe_image_26" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 28. Run the application on the Apple iOS device." alt="Figure 28. Run the application on the Apple iOS device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_28.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 28. Run the application on the Apple iOS device.</div>
</div>
<a name="articlecontentAdobe_text_50" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<ol start="14">
<li>Rotate the device and see the application resize. Select an employee and see the employee details (see Figure 29). Swipe left to return to the main view.</li>
</ol>
</div>
</div>
<a name="articlecontentAdobe_image_27" style="visibility:hidden"></a><div class="parbase image section"><div class="LayoutRow LayoutCellSides">
<img title="Figure 29. View employee details on a rotated Apple iOS device." alt="Figure 29. View employee details on a rotated Apple iOS device." class="cq-dd-image LayoutImage LayoutRow " src="devnet/flex/testdrivemobile/articles/mtd_1_4_new/fig_29.jpg"/></div>
<div class="TextSmall LayoutCellSides LayoutRowTop LayoutBigRowBottom">
Figure 29. View employee details on a rotated Apple iOS device.</div>
</div>
<a name="articlecontentAdobe_text_51" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<h4><a name="runblackberry"></a>Run on a BlackBerry Tablet OS device</h4>
<p>For details on how to run on a BlackBerry Tablet OS device, see the <a href="/devnet/air/articles/packaging-air-apps-blackberry.html">Using Flash Builder 4.5 to package applications for BlackBerry Tablet OS devices</a> tutorial.</p>
</div>
</div>
<a name="articlecontentAdobe_text_14" style="visibility:hidden"></a><div class="text parbase section"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p>In this module, you created a Flex mobile application that retrieves and displays database records. You tested the application in the Flash Builder ADL device emulator and on an actual physical device. In the <a href="/devnet/flex/testdrivemobile/articles/mtd_2_1.html">next module</a>, you enhance the application, adding the ability to&nbsp;make phone calls, send emails and text messages, and to add, update, and delete database records.</p>
<h3><a name="links"></a>Learn more</h3>
<p>Refer to the following resources to learn more about this topic:</p>
<h4>Documentation: <b><a target="_blank" href="http://help.adobe.com/en_US/flex/mobileapps/index.html">Developing mobile applications with Flash Builder and Flex</a></b><br>
</h4>
<ul class="link-list">
<li><a target="_blank" href="http://help.adobe.com/en_US/flex/mobileapps/WSa8161994b114d624-33657d5912b7ab2d73b-7fe5.html">Run and debug a mobile application on a device</a></li>
</ul>
<h4>Documentation: <a target="_blank" href="http://help.adobe.com/en_US/flex/using/index.html"><b>Using Flex 4.5</b></a></h4>
<ul class="link-list">
<li><a target="_blank" href="http://help.adobe.com/en_US/flashbuilder/using/WSe4e4b720da9dedb5-1a92eab212e75b9d8b2-7f7a.html">Monitoring applications that access data services</a></li>
</ul>
<h4>Documentation: <a target="_blank" href="http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/index.html"><b>Using LiveCycle Data Services 3.1 (includes BlazeDS content)</b></a><br>
</h4>
<ul class="link-list">
<li><a href="http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f6e70f-8000Update.html" target="_blank">System architecture</a></li>
<li><a href="http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f7045b-7fa2Update.html#WSc3ff6d0ea77859461172e0811f00f7045b-7fa4Update" target="_blank">Using destinations</a></li>
</ul>
<h4>Documentation: <a href="http://help.adobe.com/en_US/ColdFusion/9.0/Developing/index.html" target="_blank"><b>Using Adobe ColdFusion 9</b></a><br>
</h4>
<ul class="link-list">
<li><a href="http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSB1189F46-5419-49c3-9E8C-ABCEFA6BE4B8.html" target="_blank">Flex and AIR integration in ColdFusion</a></li>
</ul>
<h4>Flex Developer Center<br>
</h4>
<ul class="link-list">
<li><a href="/devnet/flex/articles/flashbuilder4_http_traffic.html">Extracting maximum value from the Flash Builder 4 Network</a></li>
</ul>
<h4>Adobe AIR Developer Center</h4>
<ul>
<li><a href="/devnet/air/articles/packaging-air-apps-android.html" target="_blank">Packaging mobile applications for Google Android device</a></li>
<li><a href="/devnet/air/articles/packaging-air-apps-ios.html">Packaging mobile applications for Apple iOS devices</a></li>
<li><a href="/devnet/air/articles/packaging-air-apps-blackberry.html">Packaging mobile applications for Blackberry Tablet OS devices</a></li>
</ul>
<h4><a href="/devnet/flex.html"><b>Mobile and Devices Developer Center</b></a></h4>
<h4>&nbsp;</h4>
</div>
</div>
<a name="articlecontentAdobe_reference" style="visibility:hidden"></a><div class="parbase section reference"><div style="display:inline;" class="cq-dd-paragraph"><div class="text parbase"><div class="Semantic LayoutCellSides LayoutBreakAfter TextMedium TextBreak">
<p><a target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img src="http://cookbooks.adobe.com/resources/images/license_creative_commons.png" alt="Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License"></a>+<a target="_blank" href="/communities/guidelines/ccplus/commercialcode_plus_permission.html"><img src="http://cookbooks.adobe.com/resources/images/license_adobe.jpg" alt="Adobe Commercial Rights"></a></p>
<p>This work is licensed under a <a target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License</a>. Permissions beyond the scope of this license, pertaining to the examples of code included within this work are available at <a target="_blank" href="/communities/guidelines/ccplus/commercialcode_plus_permission.html">Adobe</a>.</p>
</div>
</div>
</div>
</div>
</div></div>
<div class="LayoutRow">
<div class="articlePaging paging"></div>
</div>
</div>
</div>
<div class="ArticleWideGrid-5-6 ArticleWideRight">
<div class="LayoutBreakAfter RuleH ArticleWideRuleHide TextSmall LayoutBreak">
<div class="ArticleGrid-2-3 LayoutSlimGrid-1-2 ArticleWideGridColReset">
<div class="morelikethis"><div class="LayoutCellSides">
<h2 class="TextH5 LayoutRow">More Like This</h2>
<ul class="LayoutRow">
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/mtd_1_1.html" title="Flex Test Drive for Mobile: Build a mobile application in an hour">Flex Test Drive for Mobile: Build a mobile application in an hour</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/newcontent/mtd_2_2.html" title="Flex Test Drive for Mobile: Add application functionality">Flex Test Drive for Mobile: Add application functionality</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/newcontent/mtd_3_2.html" title="Flex Test Drive for Mobile: Deploy the application">Flex Test Drive for Mobile: Deploy the application</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/mtd_2_3.html" title="Flex Test Drive for Mobile: Add application functionality">Flex Test Drive for Mobile: Add application functionality</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/mtd_2_2.html" title="Flex Test Drive for Mobile: Add application functionality">Flex Test Drive for Mobile: Add application functionality</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/mtd_3_1.html" title="Flex Test Drive for Mobile: Debug and package the application">Flex Test Drive for Mobile: Debug and package the application</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/mtd_1_3.html" title="Flex Test Drive for Mobile: Build a mobile application in an hour">Flex Test Drive for Mobile: Build a mobile application in an hour</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/mtd_3_2.html" title="Flex Test Drive for Mobile: Debug and package the application">Flex Test Drive for Mobile: Debug and package the application</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/newcontent/mtd_3_1.html" title="Flex Test Drive for Mobile: Test and deploy your code">Flex Test Drive for Mobile: Test and deploy your code</a></li>
<li class="LayoutSmallRowBottom">
<a href="/devnet/flex/testdrivemobile/articles/newcontent/mtd_2_1.html" title="Flex Test Drive for Mobile: Add application functionality">Flex Test Drive for Mobile: Add application functionality</a></li>
</ul>
</div>
</div>
</div>
<div class="LayoutGrid-1-4 LayoutSlimGrid-1-2 LayoutBreakAfter">
<div class="LayoutRow">
<div class="parbase compbase inheritedpromo"></div>
</div>
</div>
</div>
<div class="LayoutBreakAfter TextSmall">
<div class="ArticleGrid-2 LayoutSlimGrid-1-2 ArticleWideGridColReset">
<div class="parsys inheritedresources inheritedResources"><div class="parsys"><div id="inheritedResources">
<div class="parbase xdheading compbase section"><div pathToMoreText="" class="LayoutRow LayoutBreakAfter TextH5" linkboxcolor="RouterMore">
<table class="LayoutMaxH">
<tbody>
<tr>
<td class="PanelFillDark">
<h2 class="TextH5 LayoutCellSides LayoutSmallCellVSides">
Tutorials and samples</h2>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="whatsnew section"><div>
<div class="LayoutCell">
<h3 class="HeadingSmaller">
Tutorials</h3>
<ul>
<li>
<a href="/devnet/flex/articles/flex-mobile-performance-checklist.html" title="Flex mobile performance checklist">Flex mobile performance checklist</a></li>
<li>
<a href="/devnet/flex/articles/flex-maven-flexmojos-pt3.html" title="Flex and Maven with Flexmojos – Part 3: Journeyman">Flex and Maven with Flexmojos – Part 3: Journeyman</a></li>
<li>
<a href="/devnet/flex/articles/migrating-flex-apps-part4.html" title="Migrating Flex 3 applications to Flex 4.5 – Part 4">Migrating Flex 3 applications to Flex 4.5 – Part 4</a></li>
</ul>
</div>
</div>
</div>
<div class="whatsnew section"><div>
<div class="LayoutCell">
<h3 class="HeadingSmaller">
Samples</h3>
<ul>
<li>
<a href="/devnet/flex/articles/twitter-trends.html" title="Twitter Trends">Twitter Trends</a></li>
<li>
<a href="/devnet/flex/samples.html" title="Flex 4.5 reference applications">Flex 4.5 reference applications</a></li>
<li>
<a href="http://coenraets.org/blog/2011/04/flex-based-ipad-trader-app-now-on-android-market/" title="Mobile Trader Flex app on Android Market">Mobile Trader Flex app on Android Market</a></li>
</ul>
</div>
</div>
</div>
</div></div>
</div>
</div>
<div class="ArticleGrid-3 LayoutSlimGrid-1-2 ArticleWideGridColReset">
<div class="parsys inheritedresources inheritedResources2"><div class="parsys"><div id="inheritedResources2">
<div class="rss section"><div id="rss-feed-1283313561183" class="RSSFeed ">
<div pathToMoreText="moreText" class="LayoutRow LayoutBreakAfter TextH5">
<table class="LayoutMaxH">
<tbody>
<tr>
<td class="PanelFillDark">
<a href="http://forums.adobe.com/community/flex" class="RouterBarLink"><h2 class="TextH5 LayoutCellSides LayoutSmallCellVSides">
Flex user forum</h2>
</a></td>
<td class="LayoutCellSides LayoutSmallCellVSides RouterButton RouterMore" style="width: 40px">
<a href="http://forums.adobe.com/community/flex" class="RouterLink" title="More" target="_self">More</a></td>
</tr>
</tbody>
</table>
</div>
<div class="LayoutRowBottom LayoutCellSides TextSmall">
<table>
<tr>
<th class="TableCell TableNumber shortDateFormat">
11/11/2013</th>
<td>
<a class="" href="http://forums.adobe.com/thread/1332613" target="_self">Re: TLF2.0 underline applied with ListElement bullet symbol</a>
</td>
</tr>
<tr>
<th class="TableCell TableNumber shortDateFormat">
03/27/2012</th>
<td>
<a class="" href="http://forums.adobe.com/thread/981440" target="_self">Adobe air mobile - softKeyboardType is not working when using skinClass to allow scrolling?</a>
</td>
</tr>
<tr>
<th class="TableCell TableNumber shortDateFormat">
11/30/2011</th>
<td>
<a class="" href="http://forums.adobe.com/thread/931250" target="_self">Flex 4.6 mobile broke TextInput</a>
</td>
</tr>
<tr>
<th class="TableCell TableNumber shortDateFormat">
11/23/2011</th>
<td>
<a class="" href="http://forums.adobe.com/thread/928486" target="_self">Scrolling-problem with Textinput (mobile project)</a>
</td>
</tr>
</table>
</div>
</div>
</div>
</div></div>
</div>
</div>
<div class="ArticleGrid-4 LayoutSlimGrid-1-2 ArticleWideGridColReset">
<div class="parsys inheritedResources3 inheritedresources"><div class="parsys"><div id="inheritedResources3">
<div class="rss section"><div id="rss-feed-1283284018001" class="RSSFeed ">
</div>
</div>
</div></div>
</div>
</div>
</div>
</div>
<!-- Main Content Comments -->
<div class="LayoutRow LayoutGridBreak LayoutBreakAfter">
<div class="parbase compbase jivecomments jiveComments"></div>
</div>
</div>
</div>
</div>
<div class="PrintLayoutHide">
<!--googleoff: all--><script>
//<![CDATA[
var hideEvidon = false;
$(document).ready(function() {
adobe.fn.initGlobalFooter();
adobe.fn.evidon('_bapw-link');
adobe.fn.initGeorouting();
});
changeRegion = adobe.fn.changeRegionFooter;
//]]>
</script>
<!--googleoff: index-->
<!-- $Id: //depot/projects/dylan/releases/rc_13_11/ubi/footer/en_us/globalfooter_ssi.html#1 $ -->
<div id="SiteFooter" class="SiteFooter Text TextSmall TextInvert Link LayoutBreak">
<span id="Georouting"></span>
<div class="LayoutBreakAfter">
<div class="LayoutGrid-1 LayoutSlimGrid-1 LinkInvert">
<div class="LayoutCellSides LayoutCellTop">
<h4><a href="/products/catalog.html?promoid=JOPBT">Products</a></h4>
<ul class="SiteFooterLinkList">
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconCloud" href="/products/creativecloud.html?promoid=JQPER">Adobe Creative Cloud</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconCS" href="/products/cs6.html?promoid=KFHNH">Creative Suite 6</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconOMS" href="/solutions/digital-marketing.html?promoid=JOPBY">Adobe Marketing Cloud</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconAcrobat" href="/products/acrobat.html?promoid=JOPBV">Acrobat</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconPS" href="/products/photoshop.html?promoid=JOPCB">Photoshop</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconDPS" href="/products/digital-publishing-suite-family.html?promoid=JOPBZ">Digital Publishing Suite</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconElements" href="/products/elements-family.html?promoid=JOPBX">Elements family</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts SiteFooterMenuItemIconSC" href="/products/sitecatalyst.html?promoid=KFGCH">SiteCatalyst</a></li>
<li><a class="icon Icon SiteFooterMenuItemIconProducts" href="/education.html?marketSegment=EDU&promoid=JUTMH">For education</a></li>
</ul>
</div>
</div>
<div class="LayoutGrid-2 LayoutSlimGrid-2 LinkInvert">
<div class="LayoutCellSides LayoutCellTop">
<h4><a href="/downloads/?promoid=JOPDB">Download</a></h4>
<ul class="SiteFooterLinkList SiteFooterLinkListBottom">
<li><a href="/downloads/?promoid=KEWBH">Product trials</a></li>
<li><a href="/go/gffooter_adobe_reader">Adobe Reader</a></li>
<li><a href="http://get2.adobe.com/flashplayer/?promoid=KFHNI">Adobe Flash Player</a></li>
<li><a href="/go/gffooter_adobe_air">Adobe AIR</a></li>
</ul>
</div>
</div>
<div class="LayoutGrid-3 LayoutSlimGrid-1 LinkInvert">
<div class="LayoutCellSides LayoutCellTop">
<h4><a href="/go/gffooter_help">Support &amp; Learning</a></h4>
<ul class="SiteFooterLinkList">
<li><a href="http://helpx.adobe.com/support.html?promoid=KFKQG">Product help</a></li>
<li><a href="http://forums.adobe.com/index.jspa?promoid=JOPCT" target="_blank">Forums</a></li>
</ul>
</div>
</div>
<div class="LayoutGrid-4 LayoutSlimGrid-2 LinkInvert">
<div class="LayoutCellSides LayoutCellTop">
<h4><a href="/buy.html?promoid=JOPCV">Buy</a></h4>
<ul class="SiteFooterLinkList">
<li><a href="/go/gffooter_homeuse">For personal and professional use</a></li>
<li><a href="/go/gffooter_students_store">For students, educators, and staff</a></li>
<li><a href="/products/small-business-pricing/software-catalog._sl_id-contentfilter_sl_catalog_sl_software_sl_creativecloudmembership.html?marketSegment=COM&promoid=JOPCY">For small and medium businesses</a></li>
<li><a href="/go/gffooter_licensingprograms">Volume Licensing</a></li>
<li><a href="/go/gffooter_special_offers">Special offers</a></li>
</ul>
</div>
</div>
<div class="LayoutGrid-5 LayoutSlimGrid-1-2 LinkInvert">
<div class="LayoutCellSides LayoutCellTop">
<h4><a href="/company.html?promoid=JOPDG">Company</a></h4>
<ul class="SiteFooterLinkList">
<li><a href="/go/gffooter_news_room">News room</a></li>
<li><a href="/go/gffooter_partner_programs">Partner programs</a></li>
<li><a href="/go/gffooter_corporate_social_responsibility">Corporate responsibility</a></li>
<li><a href="/go/gffooter_career_opportunities">Career opportunities</a></li>
<li><a href="/go/gffooter_investor_relation">Investor Relations</a></li>
<li><a href="/go/gffooter_events">Events</a></li>
<li><a href="/go/gffooter_legal">Legal</a></li>
<li><a href="/go/gffooter_security">Security</a></li>
<li><a href="/company/contact.html?promoid=JOPDO">Contact Adobe</a></li>
</ul>
</div>
</div>
<div class="LayoutGridBreak">
<div class="LayoutCellSides LayoutCellBottom">
<div class="SiteFooterRegionSelector TextInvert LinkInvert LinkStrong">
<a href="/go/gffooter_choose_region" id="sfRegion" class="SiteFooterMenuItemIcon SiteFooterMenuItemIconRegionBlue">Choose your region</a>
<span id="sfRegionSet" class="SiteFooterMenuItemIcon SiteFooterMenuItemIconRegionBlack" style="display: none;">United States <a href="/go/gffooter_choose_region" id="sfRegionChange">(Change)</a></span>
</div>
<div class="SiteFooterRegionPanel SiteFooterRegionPanelEvidon" id="RegionPanel" style="display: none;">
<div class="SiteFooterRegionPanelHeader">
<span class="SiteFooterMenuItemIcon SiteFooterMenuItemIconRegionBlack">Choose your region</span>
<a id="sfRegionClose" class="SiteFooterRegionPanelHeaderClose">Close</a>
</div>
<div class="Column">
<div class="Column-1">
<p class="SiteFooterRegionPanelRegionHeader">North America</p>
</div>
<div class="Column-2-3">
<p class="SiteFooterRegionPanelRegionHeader">Europe, Middle East and Africa</p>
</div>
<div class="Column-4">
<p class="SiteFooterRegionPanelRegionHeader">Asia Pacific</p>
</div>
<div class="Column-1">
<ul>
<li lang="en"><a onClick="changeRegion('ca');">Canada - English</a></li>
<li lang="fr"><a onClick="changeRegion('ca_fr');">Canada - Fran&ccedil;ais</a></li>
<li lang="es"><a onClick="changeRegion('la');">Latinoam&eacute;rica</a></li>
<li lang="es"><a onClick="changeRegion('mx');">M&eacute;xico</a></li>
<li lang="en"><a onClick="changeRegion('us');">United States</a></li>
</ul>
<p class="SiteFooterRegionPanelRegionHeader">South America</p>
<ul>
<li lang="pt"><a onClick="changeRegion('br');">Brasil</a></li>
</ul>
</div>
<div class="Column-2">
<ul>
<li lang="en"><a onClick="changeRegion('africa');">Africa - English</a></li>
<li lang="de"><a onClick="changeRegion('at');">&Ouml;sterreich - Deutsch</a></li>
<li lang="en"><a onClick="changeRegion('be_en');">Belgium - English</a></li>
<li lang="fr"><a onClick="changeRegion('be_fr');">Belgique - Fran&ccedil;ais</a></li>
<li lang="nl"><a onClick="changeRegion('be_nl');">Belgi&euml; - Nederlands</a></li>
<li lang="bg"><a onClick="changeRegion('bg');">България</a></li>
<li lang="hr"><a onClick="changeRegion('hr');">Hrvatska</a></li>
<li lang="en"><a onClick="changeRegion('eeurope');">Cyprus - English</a></li>
<li lang="cs"><a onClick="changeRegion('cz');">Česk&aacute; republika</a></li>
<li lang="da"><a onClick="changeRegion('dk');">Danmark</a></li>
<li lang="en"><a onClick="changeRegion('eeurope');">Eastern Europe - English</a></li>
<li lang="et"><a onClick="changeRegion('ee');">Eesti</a></li>
<li lang="fi"><a onClick="changeRegion('fi');">Suomi</a></li>
<li lang="fr"><a onClick="changeRegion('fr');">France</a></li>
<li lang="de"><a onClick="changeRegion('de');">Deutschland</a></li>
<li lang="en"><a onClick="changeRegion('eeurope');">Greece - English</a></li>
<li lang="hu"><a onClick="changeRegion('hu');">Magyarorsz&aacute;g</a></li>
<li lang="en"><a onClick="changeRegion('ie');">Ireland</a></li>
<li lang="en"><a onClick="changeRegion('il_en');">Israel - English</a></li>
<li lang="he"><a onClick="changeRegion('il_he');">&#1497;&#1513;&#1512;&#1488;&#1500; - &#1506;&#1489;&#1512;&#1497;&#1514;</a></li>
<li lang="it"><a onClick="changeRegion('it');">Italia</a></li>
<li lang="lv"><a onClick="changeRegion('lv');">Latvija</a></li>
<li lang="lt"><a onClick="changeRegion('lt');">Lietuva</a></li>
<li lang="de"><a onClick="changeRegion('lu_de');">Luxembourg - Deutsch</a></li>
<li lang="en"><a onClick="changeRegion('lu_en');">Luxembourg - English</a></li>
<li lang="fr"><a onClick="changeRegion('lu_fr');">Luxembourg - Fran&ccedil;ais</a></li>
</ul>
</div>
<div class="Column-3">
<ul>
<li lang="en"><a onClick="changeRegion('eeurope');">Malta - English</a></li>
<li lang="ar"><a onClick="changeRegion('mena_ar');">&#1575;&#1604;&#1588;&#1585;&#1602; &#1575;&#1604;&#1571;&#1608;&#1587;&#1591; &#1608;&#1588;&#1605;&#1575;&#1604; &#1571;&#1601;&#1585;&#1610;&#1602;&#1610;&#1575; - &#1575;&#1604;&#1604;&#1594;&#1577; &#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;</a></li> <li lang="en"><a onClick="changeRegion('mena_en');">Middle East and North Africa - English</a></li>
<li lang="fr"><a onClick="changeRegion('mena_fr');">Moyen-Orient et Afrique du Nord - Fran&ccedil;ais</a></li>
<li lang="nl"><a onClick="changeRegion('nl');">Nederland</a></li>
<li lang="no"><a onClick="changeRegion('no');">Norge</a></li>
<li lang="pl"><a onClick="changeRegion('pl');">Polska</a></li>
<li lang="pt"><a onClick="changeRegion('pt');">Portugal</a></li>
<li lang="ro"><a onClick="changeRegion('ro');">Rom&acirc;nia</a></li>
<li lang="ru"><a onClick="changeRegion('ru');">Россия</a></li>
<li lang="sr"><a onClick="changeRegion('rs');">Srbija</a></li>
<li lang="sk"><a onClick="changeRegion('sk');">Slovensko</a></li>
<li lang="sl"><a onClick="changeRegion('si');">Slovenija</a></li>
<li lang="es"><a onClick="changeRegion('es');">Espa&ntilde;a</a></li>
<li lang="sv"><a onClick="changeRegion('se');">Sverige</a></li>
<li lang="de"><a onClick="changeRegion('ch_de');">Schweiz - Deutsch</a></li>
<li lang="fr"><a onClick="changeRegion('ch_fr');">Suisse - Fran&ccedil;ais</a></li>
<li lang="it"><a onClick="changeRegion('ch_it');">Svizzera - Italiano</a></li>
<li lang="tr"><a onClick="changeRegion('tr');">T&uuml;rkiye</a></li>
<li lang="uk"><a onClick="changeRegion('ua');">Україна</a></li>
<li lang="en"><a onClick="changeRegion('uk');">United Kingdom</a></li>
</ul>
</div>
<div class="Column-4">
<ul>
<li lang="en"><a onClick="changeRegion('au');">Australia</a></li>
<li lang="zh"><a onClick="changeRegion('cn');">中国</a></li>
<li lang="zh"><a onClick="changeRegion('hk_zh');">中國香港特別行政區</a></li>
<li lang="en"><a onClick="changeRegion('hk_en');">Hong Kong S.A.R. of China</a></li>
<li lang="en"><a onClick="changeRegion('in');">India - English</a></li>
<li lang="ja"><a onClick="changeRegion('jp');">日本</a></li>
<li lang="ko"><a onClick="changeRegion('kr');">한국</a></li>
<li lang="en"><a onClick="changeRegion('nz');">New Zealand</a></li>
<li lang="zh"><a onClick="changeRegion('tw');">台灣</a></li>
</ul>
<p class="SiteFooterRegionPanelRegionHeader">Southeast Asia</p>
<ul>
<li lang="en"><a onClick="changeRegion('sea');">Includes Indonesia, Malaysia, Philippines, Singapore, Thailand, and Vietnam - English</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="LayoutGridBreak">
<div class="LayoutCellSides">
<hr />
</div>
</div>
<div class="LayoutGrid-1-5 LayoutSlimGrid-1-2 LinkInvert LinkStrong">
<div class="LayoutCellSides LayoutCellBottom LinkInvert">
<p class="SiteFooterRow TextSmall">Copyright &copy; 2013 Adobe Systems Incorporated. All rights reserved.</p>
<p class="SiteFooterRow TextSmall"><a href="/go/gffooter_terms_of_use">Terms of Use</a> | <a href="/privacy.html">Privacy</a> | <a href="/privacy/cookies.html">Cookies</a></p>
<p class="SiteFooterRow SiteFooterRowTop"><a href="#" id="_bapw-link" class="TextSmall icon Icon SiteFooterMenuItemIconEvidon" style="display:none;">Ad Choices</a></p>
</div>
</div>
</div>
</div>
<!--googleon: index--><!--googleon: all--></div>
<div class="parsys templatembox bottomofbodymbox"><div class="mboxDefault">
</div>
<script>
mboxCreate('defaultmboxname');
</script>
</div>
<div class="parsys doubleclickfloodlight"><!-- Fetch either EDU or COM snippet based on the Mode selection-->
</div>
<!-- Invoking faas form engine tracking Script !! --->
</div>
</body>
</html>