OK. I’ll remove that comment. I’m pretty sure it used to work like that, but things have definitely improved over the years.
> On Dec 14, 2021, at 7:05 PM, Josh Tynjala <joshtynj...@bowlerhat.dev> wrote: > >> Creating SWCs requires the full Royale SDK to be installed. The js-only > version is not enough because the SWC contains a SWF file which can only be > generated by the full SDK. > > This doesn't seem right to me. You should be able to create a JS-only .swc > file without the full SDK. The JS-only SDK still includes the SWF compiler. > It's just the .swc libraries for SWF that are excluded from the full SDK. > The compiler binaries should be exactly the same between both SDKs. > > -- > Josh Tynjala > Bowler Hat LLC <https://bowlerhat.dev> > > > On Tue, Dec 14, 2021 at 4:39 AM <ha...@apache.org> wrote: > >> This is an automated email from the ASF dual-hosted git repository. >> >> harbs pushed a commit to branch master >> in repository https://gitbox.apache.org/repos/asf/royale-docs.git >> >> >> The following commit(s) were added to refs/heads/master by this push: >> new 929977d SWC creation instructions >> 929977d is described below >> >> commit 929977d5aa680602a99bd4fa1447379170ba9d13 >> Author: Harbs <ha...@in-tools.com> >> AuthorDate: Tue Dec 14 14:38:48 2021 +0200 >> >> SWC creation instructions >> --- >> libraries/compiled-code-libraries.md | 295 >> +++++++++++++++++++++++++++++++++++ >> libraries/library-basics.md | 2 +- >> 2 files changed, 296 insertions(+), 1 deletion(-) >> >> diff --git a/libraries/compiled-code-libraries.md >> b/libraries/compiled-code-libraries.md >> new file mode 100644 >> index 0000000..5fc5943 >> --- /dev/null >> +++ b/libraries/compiled-code-libraries.md >> @@ -0,0 +1,295 @@ >> +--- >> +# Licensed to the Apache Software Foundation (ASF) under one or more >> +# contributor license agreements. See the NOTICE file distributed with >> +# this work for additional information regarding copyright ownership. >> +# The ASF licenses this file to You under the Apache License, Version 2.0 >> +# (the "License"); you may not use this file except in compliance with >> +# the License. You may obtain a copy of the License at >> +# >> +# http://www.apache.org/licenses/LICENSE-2.0 >> +# >> +# Unless required by applicable law or agreed to in writing, software >> +# distributed under the License is distributed on an "AS IS" BASIS, >> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >> +# See the License for the specific language governing permissions and >> +# limitations under the License. >> + >> +layout: docpage >> +title: Compiled Code Libraries >> +description: What are libraries in Royale >> +permalink: /libraries/compiled-code-libraries >> +--- >> + >> +# Compiled Code Libraries >> + >> +Instructions on creating your own SWC libraries >> + >> +## Prerequisites >> +Creating SWCs requires the full Royale SDK to be installed. The js-only >> version is not enough because the SWC contains a SWF file which can only be >> generated by the full SDK. >> + >> +## Concepts >> + >> +On the most basic level, SWC libraries are just compiled ActionScript >> classes. You need to include the necessary classes and the code will be >> included in your compiled SWC. >> + >> +Libraries can also declare components that can be used in MXML files by >> referencing a namespace. >> + >> +In this example, we're going to assume that you have both code and >> components to include. >> + >> +We're also going to use [asconfigc]( >> https://github.com/BowlerHatLLC/vscode-as3mxml/wiki/asconfig.json) to >> build the library. >> + >> +## Building blocks >> +There are several files you will likely use for creating libraries. >> + >> +1. manifest.xml >> +2. MyLibrary.as >> +3. defaults.css >> +4. compile-config.xml >> +5. js-compile-config.xml >> +6. asconfig.json >> + >> +## The Manifest >> +The manifest file (in our example named `manifest.xml`) is the file where >> you declare the components you want to make available to MXML using your >> namespace. >> + >> +A manifest file is a very simple xml file with the following structure: >> + >> +``` >> +<?xml version="1.0"?> >> +<componentPackage> >> + <component id="MyComponent1" class="com.somesite.MyComponent1"/> >> + <component id="MyComponent2" class="com.somesite.MyComponent2"/> >> +</componentPackage> >> + >> +``` >> +Where the `id` of each component is the qualified name you declare in >> MXML and the `class` is the fully qualified class path of your class. >> + >> +The namespace for your manifest is declared in `compile-config.xml` and >> `js-compile-config.xml` below. >> + >> +## The main class file >> +In order for classes to be included in your SWC, you need to actually use >> them somewhere. Any classes which are declared in your manifest are >> considered "used", and they along with all their dependencies will be >> included. However, there will likely be other classes and utility functions >> which are not in the manifest that you want to include. The simplest >> solution for this is to have a Class which references all the classes you >> want included. To do this, you include `MyLibrary.as` at the [...] >> + >> +``` >> +package { >> + >> + internal class MyLibrary { >> + import com.somesite.ClassA;ClassA; >> + import com.somesite.ClassB;ClassB; >> + import com.somesite.ClassC;ClassC; >> + import com.somesite.ClassD;ClassD; >> + } >> +} >> + >> +``` >> +Just referencing the classes like that is enough to have them included. >> + >> +## The CSS file >> +`defaults.css` is where you declare any HTML or Royale CSS that's needed >> for your library. This is where you declare default beads and the like. >> Make sure you declare your namespace that's used for the MXML declarations >> of you components. >> + >> +``` >> +@namespace "library://ns.somesite.com/kapow"; >> +@namespace js "library://ns.apache.org/royale/basic"; >> + >> +MyComponent1 >> +{ >> + IBeadModel: ClassReference("com.somesite.ComponentModel"); >> + IBeadView: ClassReference("com.somesite.ComponentView"); >> >> + IBeadController: >> ClassReference("com.somesite.ComponentController"); >> +} >> + >> +``` >> +## Config XML file >> +The config file is a convenience file for loading compiler options. It's >> very helpful for libraries where you need to declare quite a bit of >> information. You need one config for the SWF build and another one for the >> JS build. The two files are quite similar. >> + >> +The notable difference between the two files: >> +1. `compile-config.xml` has `playerglobal.swc` referenced in the >> `external-library-path`. >> +2. `compile-config.xml` has `COMPILE::SWF` as `true` while >> `js-compile-config.xml` has `COMPILE::JS` as `true`. >> +3. If you have a `lib/Foo.swc` JS typedef dependency that you want to >> include, you should add the following to the `js-compile-config.xml`: >> +``` >> + <js-external-library-path append="true"> >> + <path-element>lib/Foo.swc</path-element> >> + </js-external-library-path> >> + >> +``` >> + >> + >> +`compile-config.xml`: >> +``` >> +<royale-config> >> + <compiler> >> + <accessible>false</accessible> >> + >> + <external-library-path> >> + <path-element>playerglobal.swc</path-element> >> + </external-library-path> >> + <allow-subclass-overrides>true</allow-subclass-overrides> >> + >> + <mxml> >> + <children-as-data>true</children-as-data> >> + </mxml> >> + >> <binding-value-change-event>org.apache.royale.events.ValueChangeEvent</binding-value-change-event> >> + >> <binding-value-change-event-kind>org.apache.royale.events.ValueChangeEvent</binding-value-change-event-kind> >> + >> <binding-value-change-event-type>valueChange</binding-value-change-event-type> >> + >> + <define> >> + <name>COMPILE::SWF</name> >> + <value>true</value> >> + </define> >> + <define> >> + <name>COMPILE::JS</name> >> + <value>false</value> >> + </define> >> + >> + <keep-as3-metadata> >> + <name>Bindable</name> >> + <name>Managed</name> >> + <name>ChangeEvent</name> >> + <name>NonCommittingChangeEvent</name> >> + <name>Transient</name> >> + </keep-as3-metadata> >> + >> + <locale/> >> + >> + <library-path/> >> + >> + <namespaces> >> + <namespace> >> + <uri>library://ns.somesite.com/kapow</uri> >> + <manifest>manifest.xml</manifest> >> + </namespace> >> + </namespaces> >> + >> + <source-path> >> + <path-element>src</path-element> >> + </source-path> >> + >> + <warn-no-constructor>false</warn-no-constructor> >> + </compiler> >> + <include-file> >> + <name>defaults.css</name> >> + <path>defaults.css</path> >> + </include-file> >> + >> + <include-classes> >> + <class>MyLibrary</class> >> + </include-classes> >> + >> + <include-namespaces> >> + <uri>library://ns.somesite.com/kapow</uri> >> + </include-namespaces> >> + >> +</royale-config> >> + >> +``` >> + >> +`js-compile-config.xml`: >> +``` >> +<royale-config> >> + >> + <compiler> >> + <accessible>false</accessible> >> + >> + <js-external-library-path append="true"> >> + <path-element>lib/Foo.swc</path-element> >> + </js-external-library-path> >> + <allow-subclass-overrides>true</allow-subclass-overrides> >> + >> + <mxml> >> + <children-as-data>true</children-as-data> >> + </mxml> >> + >> <binding-value-change-event>org.apache.royale.events.ValueChangeEvent</binding-value-change-event> >> + >> <binding-value-change-event-kind>org.apache.royale.events.ValueChangeEvent</binding-value-change-event-kind> >> + >> <binding-value-change-event-type>valueChange</binding-value-change-event-type> >> + >> + <define> >> + <name>COMPILE::SWF</name> >> + <value>false</value> >> + </define> >> + <define> >> + <name>COMPILE::JS</name> >> + <value>true</value> >> + </define> >> + >> + <keep-as3-metadata> >> + <name>Bindable</name> >> + <name>Managed</name> >> + <name>ChangeEvent</name> >> + <name>NonCommittingChangeEvent</name> >> + <name>Transient</name> >> + </keep-as3-metadata> >> + >> + <locale/> >> + >> + <library-path/> >> + >> + <namespaces> >> + <namespace> >> + <uri>library://ns.somesite.com/kapow</uri> >> + <manifest>manifest.xml</manifest> >> + </namespace> >> + </namespaces> >> + >> + <source-path> >> + <path-element>src</path-element> >> + </source-path> >> + >> + <warn-no-constructor>false</warn-no-constructor> >> + </compiler> >> + <include-file> >> + <name>defaults.css</name> >> + <path>defaults.css</path> >> + </include-file> >> + >> + <include-classes> >> + <class>MyLibrary</class> >> + </include-classes> >> + >> + <include-namespaces> >> + <uri>library://ns.somesite.com/kapow</uri> >> + </include-namespaces> >> + >> +</royale-config> >> + >> +``` >> + >> +## Building the library >> +You asconfig.json file should look like this: >> + >> +``` >> +{ >> + "config": "royale", >> + "type": "lib", >> + "compilerOptions": { >> + "targets": [ >> + "JSRoyale" >> + ], >> + "external-library-path": [ >> + "${royalelib}/libs", >> + "${royalelib}/../js/libs", >> + "libs" >> + ], >> + "js-external-library-path": [ >> + "${royalelib}/js/libs", >> + "${royalelib}/../js/libs", >> + "libs" >> + ], >> + "load-config": [ >> + "compile-config.xml" >> + ], >> + "js-load-config": [ >> + "js-compile-config.xml" >> + ], >> + "include-classes": [ >> + "MyLibrary" >> + ], >> + "include-sources": [ >> + "src" >> + ], >> + "source-path": [ >> + "src" >> + ], >> + "output": "target/MyLibrary.swc" >> + }, >> + "additionalOptions":[ >> + //include any options you want here >> + ] >> +} >> +``` >> \ No newline at end of file >> diff --git a/libraries/library-basics.md b/libraries/library-basics.md >> index fc3c3ab..0b655e9 100644 >> --- a/libraries/library-basics.md >> +++ b/libraries/library-basics.md >> @@ -39,7 +39,7 @@ There is no obvious way to tell the difference. Both >> have a `.swc` extension, al >> ### Compiled Code Libraries >> Compiled code libraries are libraries which contain code that will end up >> in your compiled application (assuming you use that code). These can be >> code that you might use internally across multiple projects, or it can be a >> library that was compiled by someone else. Much of the Royale framework is >> compiled into `swc` files that are used in applications. >> >> -Compiled code libraries are created using the `compc` compiler. (TODO add >> sample configs for doing this) >> +Compiled code libraries are created using the `compc` compiler. [See here >> for detailed instructions on how to create one.](compiled-code-libraries) >> >> ### Typedef libraries >> Typedef libraries are libraries which define the types of different >> classes, but contain no code that would be added to an application. Typedef >> libraries are used for core Web APIs and third party javascript libraries >> which could be included in applications as separate javascript files (such >> as jQuery). Typedef libraries are similar to Typescript `d.ts` files. >>