This affects projects that make use of FLAs and runtime shared assets, commonly sharing things like fonts or components amongst several SWFs to prevent embedding them several times in the various files that might make up a project.

The first thing to note is the “Load Order” in the settings panel in Flash. It defaults to “bottom up”, and this means it streams in the contents of the bottom-most layer first, before loading and executing code that lives on any layers above it.

This is key when using runtime shared assets because if an asset is not available immediately the Flash Player will not give you a warning, it will just cease executing ActionScript contained within symbols/classes that are on layers above and may leave you scratching your head for a while. The confusing thing is that runtime shared assets *are* loaded before code on frame 1 is allowed to execute, so if anyone has extra insights here that would be appreciated.

A typical scenario for an AS2 site/app:

Frame 1 – Layer 1: Contains a runtime shared symbol that has textfields used to embed fonts
Frame 1 – Layer 2: Contains code: “com.domain.proj.Application.main(this);”

Another scenario from the same project perhaps:
Frame 1 – Layer 1: Contains a runtime shared symbol that has textfields used to embed fonts
Frame 1 – Layer 2: Contains a symbol that uses a shared asset in code or on stage

The scenarios might work, but you may find that it does not in cases where the symbol on layer 2 makes use of any shared assets during the first frame, either by using them on stage, or in code.

The simple solution is to either remove the shared asset from stage, it will still get pulled in in the library, or switch the layers around so that the shared assets are on the bottom layer.