{"id":62,"date":"2007-08-08T07:01:43","date_gmt":"2007-08-08T14:01:43","guid":{"rendered":"http:\/\/wahlers.com.br\/claus\/blog\/automating-remote-software-updates-in-adobe-air-applications\/"},"modified":"2007-08-08T07:01:43","modified_gmt":"2007-08-08T14:01:43","slug":"automating-remote-software-updates-in-adobe-air-applications","status":"publish","type":"post","link":"http:\/\/wahlers.com.br\/claus\/blog\/automating-remote-software-updates-in-adobe-air-applications\/","title":{"rendered":"Automating remote software updates in Adobe AIR applications"},"content":{"rendered":"<p>I just released the first version of <a href=\"http:\/\/codeazur.com.br\/lab\/airremoteupdater\/\">AIR Remote Updater<\/a>, an AS3 class to  automate remote software updates in Adobe AIR applications.<\/p>\n<p>It transparently checks version numbers, downloads the .AIR installer  file if needed and triggers the AIR-native update process.<\/p>\n<p>It grabs the version number directly from the remote .AIR file without  having to download the entire file, eliminating the potential error  prone need of having to put a separate descriptor file online along with  the .AIR installer file.<\/p>\n<p>Background:<\/p>\n<p>An .AIR installer file is a PKZIP archive containing metadata files  along with the packaged application files. The files contained in a .AIR  installer file are, in this order:<\/p>\n<ol>\n<li>\/mimetype<\/li>\n<li>\/META-INF\/AIR\/application.xml (contains version info)<\/li>\n<li>\/META-INF\/AIR\/hash<\/li>\n<li>\/META-INF\/signatures.xml<\/li>\n<li>packaged application files<\/li>\n<\/ol>\n<p>The file we are interested in, \/META-INF\/AIR\/application.xml (the  &#8220;application descriptor file&#8221; that contains the version number), is  always the second file in the archive. AIR Remote Updater uses FZip to  stream in the remote .AIR until (and only until) the application  descriptor file has loaded. We can then close the stream, uncompress  that file and extract the version number.<\/p>\n<p>More info and download here:<br \/>\n<a href=\"http:\/\/codeazur.com.br\/lab\/airremoteupdater\/\" class=\"moz-txt-link-freetext\">http:\/\/codeazur.com.br\/lab\/airremoteupdater\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I just released the first version of AIR Remote Updater, an AS3 class to automate remote software updates in Adobe AIR applications. It transparently checks version numbers, downloads the .AIR installer file if needed and triggers the AIR-native update process. &hellip; <a href=\"http:\/\/wahlers.com.br\/claus\/blog\/automating-remote-software-updates-in-adobe-air-applications\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,8,4,9,3],"tags":[],"class_list":["post-62","post","type-post","status-publish","format-standard","hentry","category-air","category-as3","category-flash","category-flex-2","category-webdev"],"_links":{"self":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/comments?post=62"}],"version-history":[{"count":0,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/posts\/62\/revisions"}],"wp:attachment":[{"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/media?parent=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/categories?post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wahlers.com.br\/claus\/blog\/wp-json\/wp\/v2\/tags?post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}