直接catwhiskerには関係ないのだが、最近Adobe Airを使ってスマートフォンアプリを作っていて久々に原因不明な現象に出くわした。
その原因不明な現象を説明する前に今回のAdobe Airを使ったスマートフォンアプリ制作について簡単に説明

  1. 普通にブラウザで動くFlashアプリを作る
  2. ターゲットデバイスをスマートフォン用に変更
  3. Flash上でプレビューを行ってデバッグ
  4. 3が出来たら実機に転送して実機デバッグ
  5. ストアに登録して完了

と言うのが主な流れになる。
で、今回はまったのが3の部分で前ふりとしては元々は別の人が作成してストア登録まで完了しているアプリのバージョンアップを当方が行った作業と言う事。
で、具体的な現象は以下の通り。

  • Flash上でプレビューを行おうとすると「ムービープレビューの起動に失敗しました。」のエラーが出て表示されない。
  • エラーダイアログを消すと出力パネルに下記のエラーが表示される
    ムービープレビューが終了しました。
    Adobe (R) AIR (R) Debug Launcher (ADL)
    Version 3.4.0.2540
    Copyright (c) 2008-2012 Adobe Systems Incorporated. All Rights Reserved.
    The -extdir argument must specify an existing directory.

他の環境ではちゃんとプレビュー出来ていたのでコードがおかしいと言う事はまずあり得ない。
当初は同時にデバッガで使われるAdobe Airのアップデートが表示されるのでそれが原因かと思ったが、いろいろ調べてゆくと「開発環境がWindowsの場合Adobe Airのファイルとフォルダには2バイト文字が含まれるとデプロイ(書き出し)に失敗する」と言う記述が見つかった。ところが、今回の場合はソースファイルは「D:\test\flash_app.fla」と言う感じで2バイト文字を含んでいない。

とここまで引っ張ってきていい加減飽きてきたのでそろそろ種明かし。

結論から言うと問題はFlashやAriではなくWindowsの方に有った。
Vista以降のWindowsは「C:\Users」以下にユーザーごとにフォルダを切ってそこにアプリケーションの個人用設定とか一時ファイル置場が作られる仕組みになっている。
またユーザーフォルダの名前はログイン時に登録したアカウント名がそのまま使われる。今回の場合ここに2バイト文字が使われており「C:\Users\とんg\AppData\Roaming\Adobe・・・」と言う感じにフォルダが作られていた。

実はこの手の問題は開発者ではよく知られており、当方も10年位前に2バイト文字を含んだアカウント名を使っている同僚がデスクトップに置いたソースコードからVisual Studioでインストーラーの作成に失敗するという現象に出くわしており、それ以来ユーザー名に2バイト文字を使う事を意識的に避けていた。
にも拘わらず今回の現象に出くわしてしまったのには理由がある。

と言う事でここでタイトルにもあるWindows8がようやく登場する。
Windows8からはクラウド連携と言う事でMicrosoftのLiveアカウントを使ってのユーザー設定が推奨されている。当方もWindows8には期待していたのでLiveアカウントを使ってユーザーを作成した。
が、ここに罠が待ち構えていたのだ。
Liveアカウントを使ってユーザー作成を行うとユーザーのフォルダ名に「Liveアカウントのユーザー名」が使われるのだ。
当方の場合実名を使っていたので思い切り漢字が使われている。と言うかユーザー名に2バイト文字を使っている人は結構居るのではないだろうか。

と言う事で複数のメーカーの合わせ技に引っかかってしまった格好になったのだが、ついでに回避方法も書いておく。

  1. Windows8でユーザーを作る時にまずシングルバイト文字だけでローカルアカウントのユーザーを作成する。
  2. その後でローカルアカウントをLiveアカウントに変更する

上記の手順を踏めばシングルバイトのユーザーフォルダ名を使いつつLiveアカウントも利用可能になる。
やはりWindows8はクラウド連携が肝だし素晴らしいOSなのでこれからも積極的に使って行きたいと考えている次第である。

[2013/07/29 追記]
その後のテストでFlaファイルを別のPCのFlash CSで開いたら同様の現象が再発するようになったので、その対策も追記しておく。
どうやら、前回開いたユーザーフォルダがFlaファイルに記録されているようで、パブリッシュ設定とスクリプトの設定を開いて「OK」ボタンで保存しなおさないと正常にプレビューできなかった。
Adobeはファイルの共有機能を強化したCreative Cloudに移行しているんだけどCCだとちゃんと出来るんだろうかね。