[AIR] ApplicationUpdaterUIを使ったアップデートの流れ(ハマリ編)

2010/04/5

こんにちは。きんくまです。

先日、きんくま家に第二子が生まれたことはブログに書きました。
それで上の子が少し気持ちが不安定になりまして、ちょっとグズグズ気味になってたんです。
これはよくある話でして、下の子が生まれると、上の子は親をとられたと思い、「赤ちゃん返り」
とよばれる状態になることがあるんです。個人差ありますけど。

うちも、そこまですごい状態ではなかったんですが、私が3月中に仕事でほとんどかまってあげられなくて、
それで嫁の方も上の子を気遣ってはいたんですが、どうしてもグズグズ気味だったんですね。
それで、先週は1週間ほど風邪で熱を出してしまい、保育園をお休みしてまして、
そしたらその間に私の方も仕事が落ち着いたので、またかまってあげられるようになり、
熱も下がり、気持ちも大分落ち着いて、今日から登園しております。
たぶん、環境が変わって少し疲れてしまったんだと思います。
保育園の方でも学年がちょうど変わったところだったので。

やー、この気持ちのケアばっかりは、なんともいえんもので難しいですね。
上の子にとっては、自分の兄弟ができるっていうことが一大イベントだったってことなんでしょうね。

ふと、人が死ぬことは葬式やったりして、大ごとだっていう認識があるけど、人が生まれるって
ことは特に何の式なんかもやらないから感じないだけで、結構なことなんだなあと思いました。

さて、今回は前回の続きで、ApplicationUpdaterUIを使ったアップデートのときにおきて
困ってしまった例を2例紹介します。

NativeApplication.nativeApplication.openedWindowsでひろったウインドウは隠れていたものまでアクセスできてしまう

まず、はじめに困ったのが、ApplicationUpaterUI.isCheckForUpdateVisible = false;
などとして、[アップデートの有無をチェック]のダイアログを出さないようにしたのに、
「なんか見えトル!」状態になってしまったこと。

以下のスクリプトは、アプリケーション内の全てのウインドウをアクティブにするものです。

			for each(var win:NativeWindow in NativeApplication.nativeApplication.openedWindows) {
				win.activate();
			}

それで、これをしてしまうと、ApplicationUpdaterUIの方で開かれているウインドウも全てアクセス
できてしまうため、よくわからんウインドウが表示されてしまいます。
上のスクリプトをしたときの意図は、「自分で開いたウインドウ全て」をアクティブにするものだったので、
解決策として、横着せずに、自分で開いたウインドウを配列につっこんでキープしておいて、
アクティブにしたいときに、下のようにして解決しました。

			var i:int;
			var len:int = _currentOpenedWindows.length;
			var win:NativeWindow;
			for (i = 0; i < len; i++) {
				win = _currentOpenedWindows[i];
				win.activate();
			}

アップデート直後の起動時のパスの表記が違うため、File.canonicalizeがうまくいかない

以前のエントリで、
>> [AIR] インストール時に一緒にいれたswfへのパスを開発環境でも共通で使えるようにする!
こんな感じのを書きました。それで、この中で、
File.canonicalize();
をするといいよ!と書いたんですが、どうやら間違ってたみたいです。
特にやる必要がなくて、むしろやってしまうとパスがうまく取得できなくなることがあったんです。

アップデートでは、インストールが終わったあとに自動でアプリの再起動をおこなって立ち上がるのですが、
そのときのパスと、そこから一度自分でアプリを終了して、また起動したときのパスの表記が違っていたんですね。

例)
インストール直後のアプリ再起動
c:\program files (x86)\アプリ名

そこから終了して、手動で立ち上げなおしたとき
C:\Program Files (x86)\アプリ名

よく見ないと違いがわからないと思うんですが、インストール直後はファイルのパスが全て小文字なのに
対して、手動で立ち上げたときは大文字も混じったキャメルタイプ(でしたっけ?)の表記になっています。
このため、canonicalizeをやってるとうまくパスが取得できなくて、エラーが起きて
困ってしまいました。

結局のところ、canonicalizeを全くやらなくても問題なくパスが取得できることがわかったので、
やらないことにして解決しました。
それにしても、canonicalizeって何のためにあるんでしょうね???

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る