AIR: 2009年11月アーカイブ
Touch Viewer リリース後に作った副産物ですが、Win/Mac 両対応するように強化したので晒しておきます。
下記画像のような Flex プロジェクトのフォルダ構造を保っていれば、build.xml を実行するだけで、各 OS に対応した .exe や .dmg を書き出すことができます。

<?xml version="1.0" encoding="utf-8"?>
<!--
build.xml
-->
<project name="≪ プロジェクト名 ≫" basedir="." default="init">
<condition property="os" value="≪ Flex SDK のフルパス (Windows) ≫">
<os family="windows" />
</condition>
<condition property="os" value="≪ Flex SDK のフルパス (Mac) ≫">
<os family="mac" />
</condition>
<condition property="suffix" value=".exe">
<os family="windows" />
</condition>
<condition property="suffix" value=".dmg">
<os family="mac" />
</condition>
<property name="FLEX_HOME" value="${os}" />
<property name="ADT.JAR" value="${FLEX_HOME}/lib/adt.jar" />
<property name="AIR_CONFIG" value="${FLEX_HOME}/frameworks/air-config.xml" />
<property name="FLEX_TASKS_JAR" value="${FLEX_HOME}/ant/lib/flexTasks.jar" />
<property name="APP_ROOT_DIR" value="src" />
<property name="ASSET_DIR" value="asset" />
<property name="ICON_DIR" value="${ASSET_DIR}/icon" />
<property name="APP_NAME" value="${ant.project.name}" />
<property name="AIRI_NAME" value="${APP_NAME}.airi" />
<property name="DESCRIPTOR_NAME" value="${APP_NAME}-app.xml" />
<property name="NATIVE_APP_NAME" value="${APP_NAME}${suffix}" />
<property name="SWF_NAME" value="${APP_NAME}.swf" />
<property name="APP_ROOT_FILE" value="${APP_ROOT_DIR}/${APP_NAME}.mxml" />
<property name="APP_ROOT_DESCRIPTOR" value="${APP_ROOT_DIR}/${APP_NAME}-app.xml" />
<property name="KEYSTORE" value="≪デジタル証明書ファイル名≫.p12" />
<property name="STORETYPE" value="pkcs12" />
<property name="STOREPASS" value="≪デジタル証明書のパスワード≫" />
<taskdef resource="flexTasks.tasks" classpath="${FLEX_TASKS_JAR}" />
<target name="resources">
<copy
file = "${APP_ROOT_DESCRIPTOR}"
tofile = "${APP_NAME}-app.xml"
/>
<replaceregexp
file = "${APP_NAME}-app.xml"
match = "<content>.+?</content>"
replace = "<content>${APP_NAME}.swf</content>"
/>
<copy toDir="${ICON_DIR}">
<fileset dir="${APP_ROOT_DIR}/${ICON_DIR}" />
</copy>
</target>
<target name="amxmlc" depends="resources">
<mxmlc
file = "${APP_ROOT_FILE}"
output = "${SWF_NAME}"
configname = "air"
actionscript-file-encoding = "UTF-8"
incremental = "true"
debug = "false"
optimize = "true"
target-player = "10"
>
<load-config filename="${AIR_CONFIG}" />
</mxmlc>
</target>
<target name="prepare" depends="amxmlc">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value = "-prepare" />
<arg value = "${AIRI_NAME}" />
<arg value = "${DESCRIPTOR_NAME}" />
<arg value = "${SWF_NAME}" />
<arg value = "${ICON_DIR}" />
</java>
</target>
<target name="package" depends="prepare">
<java jar="${ADT.JAR}" fork="true" failonerror="true">
<arg value = "-package" />
<arg value = "-storetype" />
<arg value = "${STORETYPE}" />
<arg value = "-keystore" />
<arg value = "${KEYSTORE}" />
<arg value = "-storepass" />
<arg value = "${STOREPASS}" />
<arg value = "-target" />
<arg value = "native" />
<arg value = "${NATIVE_APP_NAME}" />
<arg value = "${AIRI_NAME}" />
</java>
</target>
<target name="clean" depends="package">
<delete dir = "${ASSET_DIR}" />
<delete file = "${AIRI_NAME}" />
<delete file = "${SWF_NAME}" />
<delete file = "${SWF_NAME}.cache" />
<delete file = "${DESCRIPTOR_NAME}" />
</target>
<target name="init" depends="clean" />
</project>
昨日、Adobe Labs にて Flash Player 10.1 と AIR 2.0 のパブリック beta 版が公開されましたが、このリリースに併せて、日本のアドビのサイトより、AIR 2.0 beta のサンプルアプリケーションと解説記事が公開されました。
http://www.adobe.com/jp/joc/air2/samples/
私も、サンプルアプリケーション開発と記事執筆に携わっています。
http://www.adobe.com/jp/devnet/air/articles/touchviewer.html
元々、先月 (10/31) と今月 (11/5) に行われた FxUG 勉強会 ( 熊本、東京 ) のために用意していたサンプルアプリだったのですが、アドビさんのご厚意により、今回の公開に至りました。
また、来週 (11/26) に Adobe AIR Day という AIR 2.0 beta のお披露目イベントがありますが、その場で開発 Tips やデモを行います。平日のお昼から開催されるイベントですが、興味のある方は是非お越しください。
Adobe AIR Day
http://www.info-event.jp/adobe/air/
ちなみに、Mac 版のサンプルアプリケーション (Touch Viewer) には、『タイルのリストを選択したとき、2 回目以降に開いたネイティブウィンドウからジェスチャーイベントを取得できない』という既知のバグがあります。ランタイムの問題か SDK の問題か定かではありませんが、現在問合わせ中です。

Adobe AIR の署名に日本国内で唯一対応している証明機関は GMO グローバルサイン株式会社なのですが、残念なことに個人/個人事業主からの申し込みは受け付けられないようです。 ( 2010 年 3 月 3 日追記 : この記事を書いた時点での内容です。現在、GMO グローバルサイン株式会社でも、個人向けの証明書の発行が可能になっています。 )
なので、私のような個人事業主がコード署名証明書を取得するためには、海外の証明機関に申請する必要があります。
証明機関に関する情報は Adobe AIR のヘルプに記載されていますが、Ryan Stewart 氏のブログを読む限りでは、 Chosen Security 社がおすすめらしいので申し込んでみました。以下手順になります。
-
Chosen Security 社の AIR コード署名証明書購入ページを開きます。
http://www.chosensecurity.com/tc-publisher-id-for-adobe-air -
[Buy TC Publisher ID for Adobe Air for Individual Developers] をクリックして購入手続きへ移動します。
-
必要な情報を入力して決済手続きを終えると、入力メールアドレス宛に 2 通メールが届きます。 ( 1 通は個人識別番号 (PIN) が記載されたメール、もう 1 通は証明書発行申請 PDF ファイルが添付されたメール )
-
証明書発行申請 PDF ファイル内記述箇所に必要な情報を入力して、メール本文に記載されている ChosenSecurity Support のメールアドレス宛に送付します。 ( 添付 PDF が送られてくるメールアドレスとは異なるので、注意が必要です )
証明書発行申請 PDF ファイルの記述例をアップしておきます。( 記述例はこちら )
メールの本文に悩む方は、下記文章を参考にしてください。
Dear Sir/Madam
I request a TC Publisher ID for Adobe AIR.
Please confirm an attached PDF file.
Sincerely,
-
Chosen Security 社の担当者から、証明書発行申請の受理通知メールが届きます。
-
2 営業日くらいで、証明書ダウンロードサイトの URL が記述されたメールが届きます。
-
個人識別番号 (PIN) を入力すると、証明書をダウンロードすることができます。
この個人識別番号 (PIN) は、AIR ファイルを書き出すためのパスワードにもなります。
以上で、怪しい「オレオレ証明書」付きの AIR アプリケーションともサヨナラです。
自分の作った AIR アプリで、以下のような画面を晒すこともなくなります。

参考
-
ClockMaker Blog
個人向けのコードサイニング証明書
http://clockmaker.jp/blog/2009/01/certificates-for-indivisuals/ -
Ryan Stewart – Rich Internet Application Mountaineer
Adobe AIR Certificates for Individuals Now Available
http://blog.digitalbackcountry.com/2009/01/adobe-air-certificates-for-individuals-now-available/ -
Adobe AIR 1.5
AIR ファイルへの電子署名
http://help.adobe.com/ja_JP/AIR/1.5/devappsflash/WS5b3ccc516d4fbf351e63e3d118666ade46-7ff0.html
