Tag Archives: Flex

AIR2.6 + Native Mouse Cursor

If you are trying to use the new native cursors in your AIR application and happen to see the following error you might want to try how I solved this problem:

VerifyError: Error #1014: Class flash.ui::MouseCursorData could not be found.

First things first: if you got until this point you probably have already the AIR 2.6 SDK hooked up with your FlashBuilder (if not, do so! ;) ). Also you need to update your applications compiler settings and target the new SDK. You need to update the the -app.xml, too. Because they seemed to changed a lot with the schema of that file, it's best to create a new project and copy the contents to your -app.xml. You should see the new namespace at the very top http://ns.adobe.com/air/application/2.6.

If you did all this and try to use MouseCursorData (which is needed for native cursors to be working) or another class from the new SDK you might run into that VerifyError during runtime. The solution I came up after some trying is an additional compiler argument: -swf-version=11 . Add this in the project settings and you should be good. Then you have smooth custom cursors. Yeah! :)

Kurz: Parsleys MessageHandler

  • Damit Events dort ankommen, wo sie ankommen sollen, müssen einige Bedingungen erfüllt sein:
    1. Die Event-Dispatcher Klasse muss Parsley bekannt sein
      • also muss diese entweder im Context deklariert sein oder mit dem Configure-Tag, wenn möglich, bekannt gemacht werden
    2. Die Event-Dispatcher Klasse muss die Events, die von Parsley verwaltet werden sollen, mit Meta-Tags deklarieren, sofern das nicht schon die Oberklasse macht und das unabhängig davon ob die Oberklasse das bereits gemacht hat (das Configure-Aufruf muss auch in der Klasse passieren!)
    3. ... außerdem muss mit dem Parsley Meta-Tag [ManagedEvents("event1,event2")] deklariert werden um welche Events sich Parsley kümmern soll
    4. Die Event-Dispatcher Klasse muss an ensprechender Stelle mit [Inject] von Parsley instantiiert werden
    5. Die Event-Handler Klasse muss Parsley ebenfalls bekannt sein (siehe 1.)
    6. ... und auch diese muss mit [Inject] eingeführt werden (vgl. 4.)

Parsley: ManagedEvents und MessageHandler

Es scheint so als wenn Parsley ein Problem mit meinen Event Klassen hat. Wenn ich die events einer Klasse von Parsley verwalten lasse und in einer anderen Klasse entsprechende Handler-Methoden deklariere, so kommen die Events nur an wenn ich den Typ im Handler als com.flash.Event setze. Nutze ich an dieser Stelle meine eigene Klasse als Typ, so wie es wohl richtig wäre und wie es auch in der Parsley doku steht, passiert nichts. Gar nichts. Meine Klassen sind dabei natürlich spezialisierte Events, die von den flash Event Klassen ableiten.

Flex SDK 4.1 (FP 10.1 + AIR 2)

Bereits seit April 2010 gibt es das Flex SDK in der Version 4.1. Darin enthalten sind der FlashPlayer 10.1 und AIR 2. Die Pakete stehen bei Adobe zum Download zur Verfügung: Flex 4 Downloads .

Mit dem kompletten Paket ("Adobe Flex SDK") kann man in FlashBuilder (aka FlexBuilder) die neuen Funktionen des FlashPlayers und AIR nutzen. Und man muss auch nicht mehr unschön Dateien überschreiben oder nachträglich hinzufügen. Einfach einen neuen SDK Eintrag bei FlashBuilder machen.


Update:

Seit dem 01.07.2010 gibt es auch ein Update-Paket für FlashBuilder und auch ein finales SDK-Update. Den FlashBuilder 4.0.1 gibt es hier und das Flex SDK 4.1 Update hier.

Cairngorm 3 & Maven

Was für ein Krampf - dieses Maven!

Eigentlich wollte ich ja das open-source Framework Cairngorm, von Adobe, nutzen. Cairngorm soll, so wie eigentlich fast jedes Framwork, ein Fundament für ein hoch qualitatives Flex-App bilden. Nach einigem Lesen, macht es echt einen sehr viel versprechenden Eindruck auf mich.

Nun habe ich schon die alte Version zwei aus dem Jahr 1997 gesehen (also die Webseiten dazu, nicht den Code) und irgendwie habe ich erwartet dass es auch bei der Version drei aus diesem Jahr so sein wird, dass man einfach die Bibliotheksdatei (.swc) runterladen kann. Denkste! Nun wird alles in einem Maven Repository "bereit gestellt". Maven ist ein Projektmanagement-Tool. An sich eine tolle Sache - nur entweder verstehe ich das ganze nicht richtig und es funktioniert einfach nicht.

Maven ist dazu da um sicher zu stellen, dass ein Projekt alle nötigen Abhängigkeiten zur Verfügung hat. Man definiert Konfigurationsdateien und Maven besorgt sich dann benötigte Bibliotheken und der gleichen von Repositories. Weiterhin kann sich Maven darum kümmern Unittests durchzuführen, Code zu komplilieren und zu packen.

Mein Ziel war es also an die Bibliotheksdatei der letzten Cairngorm Version zu kommen. Dazu muss man als erstes einen check-out vom Adobe SVN-Repository machen: http://opensource.adobe.com/svn/opensource/cairngorm3/ . Dann hat man eine Menge Zeug auf seiner Platte, den man nicht direkt nutzen kann. Jetzt kommt Maven ins Spiel (das an dieser Stelle natürlich bereits lokal installiert sein muss). Wenn ich das mit Maven richtig verstanden haben, muss man nur mvn install aufrufen. Das klappt beim ersten Versuch nicht, weil Adobe nicht alle nötigen Bibliotheken richtig verlinkt hat (warum noch mal nutzen wir Maven!?). Man muss diese zwei fehlenden Teile manuell in sein lokales Maven-Repository installieren (das witzige, die Dateien sind nach dem SVN-check-out lokal vorhanden!):

Nummer 1:
mvn install:install-file -DgroupId=com.adobe.lcds -DartifactId=fds_rb -Dversion=2.6.1 -Dclassifier=en_US -Dpackaging=rb.swc -Dfile="{Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.11\libraries\Integration\libs\fds_rb-2.6.1.rb.swc"

Ausgabe:

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] org.apache.maven.plugins: checking for updates from local
[INFO] org.apache.maven.plugins: checking for updates from central
[INFO] org.codehaus.mojo: checking for updates from local
[INFO] org.codehaus.mojo: checking for updates from central
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file {execution: default-cli}]
[INFO] Installing {Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.1\libraries
\Integration\libs\fds_rb-2.6.1.rb.swc to {user}\.m2\repositor\com\adobe\lcds
\fds_rb\2.6.1\fds_rb-2.6.1-en_US.rb.swc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Jun 01 15:55:38 CEST 2010
[INFO] Final Memory: 5M/59M
[INFO] ------------------------------------------------------------------------

Nummer 2:
mvn install:install-file -DgroupId=com.adobe.lcds -DartifactId=fds -Dversion=2.6.1 -Dpackaging=swc -Dfile="{Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.11\libraries\Integration\libs\fds-2.6.1.swc"

Ausgabe:

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [install:install-file] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [install:install-file {execution: default-cli}]
[INFO] Installing {Cairngorm3-SVN-checkout}\tags\cairngorm3-3.0.11
\libraries\Integration\libs\fds-2.6.1.swc to {user}\.m2\repository\com\a
dobe\lcds\fds\2.6.1\fds-2.6.1.swc
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Tue Jun 01 15:56:18 CEST 2010
[INFO] Final Memory: 6M/74M
[INFO] ------------------------------------------------------------------------

So und nun kann man theoretisch mvn install ausführen. Das Ergebnis sollte sein, dass alle Bibliotheken kompiliert und gepackt werden. Nur leider werden ausschließlich die Cairngorm-Zusatz-Bibliotheken gebaut, aber nicht Cairngorm selbst. Ich habe das in so gut wie jedem Ordner ausprobiert: "\tags\cairngorm3-3.0.11", "\build-parent\", "\trunk" und noch viele andere. Es ist immer das Selbe, ich bekomme nicht meine erhoffte cairngorm-3.0.11.swc .

Und nun?!


Update

Enterprise Development with Flex: Best Practices for RIA Developers

Sämtliche Aufregung war umsonst! Das was bei Cairngorm 2 in einer Bibliothek organisiert war, ist bei Cairngorm 3 in mehrere Teil-Bibliotheken organisiert. Wäre schon nett gewesen, wenn das irgendwo bei Adobe stehen würde!

Also das oben genannte Vorgehen führt zum Erfolg! :)