{"id":45107,"date":"2021-06-25T09:04:04","date_gmt":"2021-06-25T09:04:04","guid":{"rendered":"https:\/\/foojay.io\/?p=45107"},"modified":"2022-02-11T09:20:44","modified_gmt":"2022-02-11T09:20:44","slug":"creating-mobile-apps-with-javafx-part-3","status":"publish","type":"post","link":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/","title":{"rendered":"How to Create Mobile Apps with JavaFX (Part 3)"},"content":{"rendered":"\n    <div class=\"article__table\">\n        <div class=\"article__table-header\">\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path d=\"M8 6H21\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \/>\n                <path d=\"M8 12H21\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \/>\n                <path d=\"M8 18H21\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \/>\n                <path d=\"M3 6H3.01\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \/>\n                <path d=\"M3 12H3.01\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \/>\n                <path d=\"M3 18H3.01\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" \/>\n            <\/svg>\n            Table of Contents\n            <svg class=\"chevron\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                <path d=\"M18 15L12 9L6 15\" stroke=\"#3562E5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n            <\/svg>\n        <\/div>\n        <div class=\"article__table-body\"><ul><li><a href=\"#h3-0--pplying-to-the-pp-tores\">Applying to the App Stores<\/a><\/li><\/ul><span><a href=\"#h2-1--pple-pp-tore\">Apple App Store<\/a><\/span><ul><li><a href=\"#h3-2--ndroid-oogle-lay\">Android Google Play<\/a><\/li><li><a href=\"#h3-3--ummary-and-urther-nformation\">Summary and Further Information<\/a><\/li><\/ul><\/div><\/div><!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\">\n<?xml encoding=\"utf-8\" ?><html><body><p>In <a href=\"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx---part-1\/\">Part 1<\/a>, we introduced a mobile app game, TiltMaze, written completely in JavaFX, which you can download from either the <a href=\"https:\/\/apps.apple.com\/app\/id1566464439\" target=\"_blank\" rel=\"noreferrer noopener\">Apple App Store<\/a> or <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.asgteach.accelerometer.TiltMaze\" target=\"_blank\" rel=\"noreferrer noopener\">Google Play<\/a> and install it on your mobile device or tablet. In <a href=\"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx---part-1\/\">P<\/a><a href=\"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx---part-2\/\">art 2<\/a>, we showed you how to work with Gluon and GraalVM to build native images that execute on either Apple or Android mobile devices and tablets. <\/p>\n\n\n\n<p>In this article, we'll discuss how to upload your application to the respective mobile app stores so the world can install your application on their devices.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h3-0--pplying-to-the-pp-tores\">Applying to the App Stores<\/h3>\n\n\n\n<p>OK, you&rsquo;ve tested your JavaFX mobile application on both iOS and Android devices. Now it&rsquo;s time to upload these applications to the respective app stores. This last step is fraught with tricky details and frustrations, especially for first time submitters. <\/p>\n\n\n\n<p>The challenges have to do with each app store&rsquo;s rules for user safety, application transparency, data privacy, software compliance, and specifying age-appropriate users. So, let&rsquo;s jump in and examine the process that will hopefully result in acceptance for your application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h2-1--pple-pp-tore\"><strong>Apple App Store<\/strong><\/h2>\n\n\n\n<p>Here&rsquo;s a summary of the steps required to submit a mobile app to the App Store. Gluon has very detailed, helpful instructions for each target platform. Read them carefully! Here you can find the instructions for ios targets. <a target=\"_blank\" href=\"https:\/\/docs.gluonhq.com\/#platforms_ios\">https:\/\/docs.gluonhq.com\/#platforms_ios<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>You should have already signed up for the Apple Developer Program. Among other things, this gives you the ability to create a provisioning profile, which you need to sign your app.<\/li><li>Create a bundle ID for your app through the Apple Developer website under <strong>Certificates, Identifiers &amp; Profiles<\/strong>.<\/li><li>You will configure the provisioning profile and signing identity names in the <code>pom.xml<\/code> file.<\/li><li>You&rsquo;ve already tested the app yourself, but perhaps you&rsquo;d like some beta testers. The best way to do this is to upload your app to <strong>TestFlight<\/strong>, the Apple store beta test application.<\/li><li>Create and download a signing certificate for your bundle identifier and provisioning profile.<\/li><li>Specify your own bundle identifiers and provisioning profiles in the <code>pom.xml <\/code>file.  The GluonFX Plugin uses these settings for signing.<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">      &lt;releaseConfiguration&gt;\n        &lt;bundleVersion&gt;1.0.1&lt;\/bundleVersion&gt;\n        &lt;bundleShortVersion&gt;1.0.1&lt;\/bundleShortVersion&gt;\n        &lt;providedSigningIdentity&gt;\n         iPhone Distribution: --put your own signing identity here--\n        &lt;\/providedSigningIdentity&gt;\n        &lt;providedProvisioningProfile&gt;\n           --put your own provisioning profile here--\n        &lt;\/providedProvisioningProfile&gt;\n      &lt;\/releaseConfiguration&gt;<\/pre>\n\n\n\n<p>If there are issues with either your bundle ID, provisioning profile, or signing certificate, you will need to fix these and rerun the link step (you don&rsquo;t need to rerun the compile step).&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Create an IPA file to submit to <strong>TestFlight<\/strong>.<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ mvn -Pios gluonfx:package<\/pre>\n\n\n\n<p>This creates file TiltMaze.ipa.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Sign in with your Apple ID to App Store Connect:&nbsp; <a target=\"_blank\" href=\"https:\/\/appstoreconnect.apple.com\/\">https:\/\/appstoreconnect.apple.com\/<\/a><\/li><li>Select MyApps and select the plus sign to add an app to your account.<\/li><\/ul>\n\n\n\n<p>To create a new app, you&rsquo;ll need to provide:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Platforms (one or more of iOS, macOS, tvOS)&nbsp;<\/li><li>Name of your app as it will appear in the app store<\/li><li>Primary language<\/li><li>Previously created Bundle ID (or create a new one with link provided)<\/li><li>SKU (an identifier internal to your organization)<\/li><\/ul>\n\n\n\n<p>There are several ways to upload your app to App Store Connect. I used <strong>Transporter<\/strong>, which is an app that can be installed on your Mac. Transporter verifies your application before uploading and makes sure the signing and provisioning information is correct.<\/p>\n\n\n\n<p>If you need to upload a new version, you must change the version number in file <strong>Default-Info.plist<\/strong> as well as the <code>pom.xml<\/code> file. The <code>CFBundleVersion<\/code> must be increased for every upload. The <code>CFBundleShortVersionString<\/code> must be increased for every public release.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;key&gt;CFBundleVersion&lt;\/key&gt;\n&lt;string&gt;1.0.1&lt;\/string&gt;\n&lt;key&gt;CFBundleShortVersionString&lt;\/key&gt;\n&lt;string&gt;1.0.1&lt;\/string&gt;<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>TestFlight<\/strong><\/h4>\n\n\n\n<p>Once in <strong>TestFlight<\/strong>, submit your app for review. After it passes review, you can invite testers by email or through a public link.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>App Store<\/strong><\/h4>\n\n\n\n<p>To prepare your app for submission, you provide screenshots, app descriptions, and additional information, including copyrights, license agreements, privacy policies, and company URLs. The various screenshot sizes are described here: <a target=\"_blank\" href=\"https:\/\/help.apple.com\/app-store-connect\/#\/devd274dd925\">https:\/\/help.apple.com\/app-store-connect\/#\/devd274dd925<\/a><\/p>\n\n\n\n<p>After you provide all the required information, submit your app for the app store review. After it passes, your app will appear in the App Store! Congratulations!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h3-2--ndroid-oogle-lay\"><strong>Android Google Play<\/strong><\/h3>\n\n\n\n<p>Here are the steps to upload your app to the Google Play Store.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Create and upload a <strong>keystore<\/strong> using these directions: <a target=\"_blank\" href=\"https:\/\/developer.android.com\/studio\/publish\/app-signing\">https:\/\/developer.android.com\/studio\/publish\/app-signing<\/a><\/li><li>Specify release configuration in the <code>pom.xml<\/code> file, as follows. You provide your own values for the keystore path, keystore password, and android key alias.<\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"false\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;releaseConfiguration&gt;\n            &lt;versionCode&gt;1&lt;\/versionCode&gt;\n            &lt;providedKeyStorePath&gt;\n                ${android-keystore-path}\n            &lt;\/providedKeyStorePath&gt;\n            &lt;providedKeyStorePassword&gt;\n                ${android-keystore-password}\n            &lt;\/providedKeyStorePassword&gt;\n            &lt;providedKeyAlias&gt;\n                ${android-key-alias}\n            &lt;\/providedKeyAlias&gt;\n            &lt;providedKeyAliasPassword&gt;\n                ${android-key-password}\n            &lt;\/providedKeyAliasPassword&gt;\n&lt;\/releaseConfiguration&gt;\n<\/pre>\n\n\n\n<p>Create an Internal Testing release. Google recommends you use Play App Signing, which means Google signs the app for you, but uses your <strong>.keystore<\/strong> file to verify your upload. The Internal Testing lets you supply a list of emails of your testers.<\/p>\n\n\n\n<p>You provide screenshots, descriptions of your application, a privacy policy, and a primary function of your application. <\/p>\n\n\n\n<p>Once your testing is complete, it&rsquo;s time to release your app into production. In this case, select <strong>Move to Production<\/strong> from the dropdown associated with your release. (You don&rsquo;t create a new release, unless you make changes from one of the Testing Releases.) When you move your app to production, the Google Play Console lets you create and manage production releases to make your app available to all users in your chosen countries.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h3-3--ummary-and-urther-nformation\">Summary and Further Information<\/h3>\n\n\n\n<p>Together, JavaFX, Gluon, and GraalVM provide a viable technology stack for creating Mobile Applications targeting both iPhone\/iPad iOS and Android phone and tablet devices. Create your UI with JavaFX and use the same JavaFX source code for all targets. <\/p>\n\n\n\n<p>Learn more about <a href=\"https:\/\/gluonhq.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gluon<\/a>, <a href=\"https:\/\/www.graalvm.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">GraalVM<\/a>, <a href=\"https:\/\/gluonhq.com\/services\/javafx-support\/\" target=\"_blank\" rel=\"noreferrer noopener\">JavaFX<\/a>, and <a href=\"https:\/\/docs.gluonhq.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gluon Substrate<\/a> for creating your own mobile offerings. See our Mobile Applications available in the app stores at <a href=\"https:\/\/asgteach.com\/home-page\/mobile-apps\/\" target=\"_blank\" rel=\"noreferrer noopener\">Anderson Software Group<\/a>.<\/p>\n<\/body><\/html>\n","protected":false},"excerpt":{"rendered":"<p>In Part 1, we introduced a mobile app game, TiltMaze, written completely in JavaFX, which you can download from either the Apple App Store or Google Play and install it on your mobile device or tablet. <\/p>\n<p>In Part 2, we showed you how to work with Gluon and GraalVM to build native images that execute on either Apple or Android mobile devices and tablets.<\/p>\n<p>In this article, we&#8217;ll discuss how to upload your application to the respective mobile app stores so the world can install your application on their devices.<\/p>\n","protected":false},"author":185,"featured_media":45321,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[381,193],"tags":[33,190,425],"class_list":["post-45107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-game","category-javafx","tag-java","tag-javafx","tag-mobile-apps"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creating Mobile Apps with JavaFX - Part 3 | foojay<\/title>\n<meta name=\"description\" content=\"Learn how to upload your application to the respective mobile app stores so the world can install your application on their devices!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating Mobile Apps with JavaFX - Part 3 | foojay\" \/>\n<meta property=\"og:description\" content=\"Learn how to upload your application to the respective mobile app stores so the world can install your application on their devices!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/\" \/>\n<meta property=\"og:site_name\" content=\"foojay\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-25T09:04:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-11T09:20:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/foojay.io\/wp-content\/uploads\/2020\/10\/TiltMaze-android-small.png\" \/>\n\t<meta property=\"og:image:width\" content=\"216\" \/>\n\t<meta property=\"og:image:height\" content=\"384\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Gail Anderson\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gail Anderson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/\"},\"author\":{\"name\":\"Gail Anderson\",\"@id\":\"https:\\\/\\\/foojay.io\\\/#\\\/schema\\\/person\\\/8591e0904fb52e209e4e054fef14f62f\"},\"headline\":\"How to Create Mobile Apps with JavaFX (Part 3)\",\"datePublished\":\"2021-06-25T09:04:04+00:00\",\"dateModified\":\"2022-02-11T09:20:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/\"},\"wordCount\":922,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/foojay.io\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/TiltMaze-android-small.png\",\"keywords\":[\"Java\",\"JavaFX\",\"mobile apps\"],\"articleSection\":[\"Game Development\",\"JavaFX\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/\",\"url\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/\",\"name\":\"Creating Mobile Apps with JavaFX - Part 3 | foojay\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/foojay.io\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/TiltMaze-android-small.png\",\"datePublished\":\"2021-06-25T09:04:04+00:00\",\"dateModified\":\"2022-02-11T09:20:44+00:00\",\"description\":\"Learn how to upload your application to the respective mobile app stores so the world can install your application on their devices!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#primaryimage\",\"url\":\"https:\\\/\\\/foojay.io\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/TiltMaze-android-small.png\",\"contentUrl\":\"https:\\\/\\\/foojay.io\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/TiltMaze-android-small.png\",\"width\":216,\"height\":384},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/foojay.io\\\/today\\\/creating-mobile-apps-with-javafx-part-3\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/foojay.io\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Create Mobile Apps with JavaFX (Part 3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/foojay.io\\\/#website\",\"url\":\"https:\\\/\\\/foojay.io\\\/\",\"name\":\"foojay\",\"description\":\"a place for friends of OpenJDK\",\"publisher\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/foojay.io\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/foojay.io\\\/#organization\",\"name\":\"foojay\",\"url\":\"https:\\\/\\\/foojay.io\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/foojay.io\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/foojay.io\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/cropped-Favicon.png\",\"contentUrl\":\"https:\\\/\\\/foojay.io\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/cropped-Favicon.png\",\"width\":512,\"height\":512,\"caption\":\"foojay\"},\"image\":{\"@id\":\"https:\\\/\\\/foojay.io\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/foojay2020\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/foojay.io\\\/#\\\/schema\\\/person\\\/8591e0904fb52e209e4e054fef14f62f\",\"name\":\"Gail Anderson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40623f418590666d23e1559628072f84d24515e323c2f4a6c09f6814f348e16a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40623f418590666d23e1559628072f84d24515e323c2f4a6c09f6814f348e16a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40623f418590666d23e1559628072f84d24515e323c2f4a6c09f6814f348e16a?s=96&d=mm&r=g\",\"caption\":\"Gail Anderson\"},\"description\":\"Gail is a Java Champion and Oracle Groundbreaker Ambassador. She is Director of Research and founding member of the Anderson Software Group, a leading provider of training courses in Java, JavaFX, Python, Go, Modern C++, and other programming languages.\",\"sameAs\":[\"http:\\\/\\\/asgteach.com\",\"https:\\\/\\\/x.com\\\/gail_asgteach\"],\"url\":\"https:\\\/\\\/foojay.io\\\/today\\\/author\\\/gail-anderson\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creating Mobile Apps with JavaFX - Part 3 | foojay","description":"Learn how to upload your application to the respective mobile app stores so the world can install your application on their devices!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/","og_locale":"en_US","og_type":"article","og_title":"Creating Mobile Apps with JavaFX - Part 3 | foojay","og_description":"Learn how to upload your application to the respective mobile app stores so the world can install your application on their devices!","og_url":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/","og_site_name":"foojay","article_published_time":"2021-06-25T09:04:04+00:00","article_modified_time":"2022-02-11T09:20:44+00:00","og_image":[{"width":216,"height":384,"url":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/10\/TiltMaze-android-small.png","type":"image\/png"}],"author":"Gail Anderson","twitter_misc":{"Written by":"Gail Anderson","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#article","isPartOf":{"@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/"},"author":{"name":"Gail Anderson","@id":"https:\/\/foojay.io\/#\/schema\/person\/8591e0904fb52e209e4e054fef14f62f"},"headline":"How to Create Mobile Apps with JavaFX (Part 3)","datePublished":"2021-06-25T09:04:04+00:00","dateModified":"2022-02-11T09:20:44+00:00","mainEntityOfPage":{"@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/"},"wordCount":922,"commentCount":1,"publisher":{"@id":"https:\/\/foojay.io\/#organization"},"image":{"@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/10\/TiltMaze-android-small.png","keywords":["Java","JavaFX","mobile apps"],"articleSection":["Game Development","JavaFX"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/","url":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/","name":"Creating Mobile Apps with JavaFX - Part 3 | foojay","isPartOf":{"@id":"https:\/\/foojay.io\/#website"},"primaryImageOfPage":{"@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#primaryimage"},"image":{"@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#primaryimage"},"thumbnailUrl":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/10\/TiltMaze-android-small.png","datePublished":"2021-06-25T09:04:04+00:00","dateModified":"2022-02-11T09:20:44+00:00","description":"Learn how to upload your application to the respective mobile app stores so the world can install your application on their devices!","breadcrumb":{"@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#primaryimage","url":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/10\/TiltMaze-android-small.png","contentUrl":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/10\/TiltMaze-android-small.png","width":216,"height":384},{"@type":"BreadcrumbList","@id":"https:\/\/foojay.io\/today\/creating-mobile-apps-with-javafx-part-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/foojay.io\/"},{"@type":"ListItem","position":2,"name":"How to Create Mobile Apps with JavaFX (Part 3)"}]},{"@type":"WebSite","@id":"https:\/\/foojay.io\/#website","url":"https:\/\/foojay.io\/","name":"foojay","description":"a place for friends of OpenJDK","publisher":{"@id":"https:\/\/foojay.io\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/foojay.io\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/foojay.io\/#organization","name":"foojay","url":"https:\/\/foojay.io\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/foojay.io\/#\/schema\/logo\/image\/","url":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/04\/cropped-Favicon.png","contentUrl":"https:\/\/foojay.io\/wp-content\/uploads\/2020\/04\/cropped-Favicon.png","width":512,"height":512,"caption":"foojay"},"image":{"@id":"https:\/\/foojay.io\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/foojay2020"]},{"@type":"Person","@id":"https:\/\/foojay.io\/#\/schema\/person\/8591e0904fb52e209e4e054fef14f62f","name":"Gail Anderson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/40623f418590666d23e1559628072f84d24515e323c2f4a6c09f6814f348e16a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/40623f418590666d23e1559628072f84d24515e323c2f4a6c09f6814f348e16a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/40623f418590666d23e1559628072f84d24515e323c2f4a6c09f6814f348e16a?s=96&d=mm&r=g","caption":"Gail Anderson"},"description":"Gail is a Java Champion and Oracle Groundbreaker Ambassador. She is Director of Research and founding member of the Anderson Software Group, a leading provider of training courses in Java, JavaFX, Python, Go, Modern C++, and other programming languages.","sameAs":["http:\/\/asgteach.com","https:\/\/x.com\/gail_asgteach"],"url":"https:\/\/foojay.io\/today\/author\/gail-anderson\/"}]}},"_links":{"self":[{"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/posts\/45107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/users\/185"}],"replies":[{"embeddable":true,"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/comments?post=45107"}],"version-history":[{"count":0,"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/posts\/45107\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/media\/45321"}],"wp:attachment":[{"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/media?parent=45107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/categories?post=45107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/foojay.io\/wp-json\/wp\/v2\/tags?post=45107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}