glimmer-dsl-swt 4.20.15.5 → 4.21.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/README.md +15 -10
- data/RUBY_VERSION +1 -1
- data/VERSION +1 -1
- data/docs/reference/GLIMMER_COMMAND.md +1 -1
- data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +0 -2
- data/docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md +87 -91
- data/glimmer-dsl-swt.gemspec +0 -0
- data/lib/glimmer/data_binding/widget_binding.rb +3 -3
- data/lib/glimmer/rake_task/package.rb +20 -22
- data/lib/glimmer/rake_task/scaffold.rb +45 -28
- data/lib/glimmer/swt/image_proxy.rb +3 -3
- data/lib/glimmer/swt/shell_proxy.rb +6 -4
- data/lib/glimmer/swt/widget_proxy.rb +4 -0
- data/samples/elaborate/battleship/view/grid.rb +3 -3
- data/samples/elaborate/battleship/view/ship.rb +1 -1
- data/samples/elaborate/meta_sample.rb +12 -5
- data/samples/elaborate/tetris/view/tetris_menu_bar.rb +2 -2
- data/samples/elaborate/tetris.rb +12 -14
- data/samples/elaborate/tic_tac_toe.rb +6 -3
- data/samples/elaborate/timer.rb +0 -1
- data/samples/elaborate/weather.rb +3 -0
- data/samples/hello/hello_canvas.rb +1 -1
- data/samples/hello/hello_canvas_transform.rb +1 -1
- data/samples/hello/hello_cool_bar.rb +5 -60
- data/samples/hello/hello_scale.rb +1 -4
- data/samples/hello/hello_slider.rb +1 -4
- data/samples/hello/hello_tool_bar.rb +7 -53
- data/samples/hello/images/copy.png +0 -0
- data/samples/hello/images/cut.png +0 -0
- data/samples/hello/images/paste.png +0 -0
- data/vendor/swt/linux/swt.jar +0 -0
- data/vendor/swt/linux_aarch64/swt.jar +0 -0
- data/vendor/swt/mac/swt.jar +0 -0
- data/vendor/swt/mac_aarch64/swt.jar +0 -0
- data/vendor/swt/windows/swt.jar +0 -0
- metadata +23 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bf8841cfbf5434aa97cc021720d0198f54b2aa8579ca21086d0edd94c36f896
|
4
|
+
data.tar.gz: c2a683b52ec35a36036db500ad8af9b1571387bf89fc2ed5ceeaccd2012a9753
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4af7fca643eace69c2d323bb8ec0c9610af59e554d490fbac62bb79ac53ebc24fb25f1bd87bc25bf3471475d1a033db957825c2770787a3ffd1decae1a1b812
|
7
|
+
data.tar.gz: a16a96f5239163c25742b5728c7e10fdd31a12c5d4153ea4a47a3a8795025554701422b74ae3fdfa3c4e7cc0e75beb4353b2f91902d0c2bab543436b4208d0d3
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,32 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
### 4.21.1.1
|
4
|
+
|
5
|
+
- Fix samples for Windows, espcially Hello, Cool Bar!, Hello, Tool Bar!, and Weather
|
6
|
+
- Fix down button for Tetris on Windows/Linux
|
7
|
+
- Fix pause menu item for Tetris
|
8
|
+
|
9
|
+
### 4.21.1.0
|
10
|
+
|
11
|
+
- Upgrade to jruby 9.3.1.0
|
12
|
+
- Upgrade to glimmer 2.4.0 (with better observing of array of arrays nested changes)
|
13
|
+
- Minor sample fixes for Linux: Tetris (down button now works), Hello, Scale! (now fits horizontally), and Hello, Slider! (now fits horizontally)
|
14
|
+
- Adjusted minimum size of Meta-Sample to allow more shrinking (`minimum_size 640, 384`)
|
15
|
+
- Do not clean observers when disposing of a widget while closing the last shell (e.g. when closing an app, it is not needed to clean observers, so it is better to exit faster)
|
16
|
+
|
17
|
+
### 4.21.0.1
|
18
|
+
|
19
|
+
- Updated default width for `shell` to `190` (was `130` before)
|
20
|
+
|
21
|
+
### 4.21.0.0
|
22
|
+
|
23
|
+
- Upgrade to SWT 4.21
|
24
|
+
- Upgrade to JDK 16.0.2
|
25
|
+
- Upgrade to JRuby 9.3.0.0
|
26
|
+
- Update packaging to rely on JDK 16 `jpackage` (instead of older JDK 8 `javapackager`)
|
27
|
+
- Renamed `Glimmer::RakeTask::Package.javapackager_extra_args` to `Glimmer::RakeTask::Package.jpackage_extra_args` to match the name of `jpackage` in JDK 16
|
28
|
+
- Change `package/[os]` scaffolding placement for packaging icons into `icons/[os]` to accomodate Java 9 Module security for icon retrieval from within a JAR
|
29
|
+
|
3
30
|
### 4.20.15.5
|
4
31
|
|
5
32
|
- Upgrade to glimmer 2.1.5
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 4.21.1.1
|
2
2
|
## JRuby Desktop Development GUI Framework
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/glimmer-dsl-swt.svg)](http://badge.fury.io/rb/glimmer-dsl-swt)
|
4
4
|
[![Travis CI](https://travis-ci.com/AndyObtiva/glimmer-dsl-swt.svg?branch=master)](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
|
@@ -15,7 +15,7 @@
|
|
15
15
|
[<img src="https://covers.oreillystatic.com/images/9780596519650/lrg.jpg" width=105 /><br />
|
16
16
|
Featured in JRuby Cookbook](http://shop.oreilly.com/product/9780596519650.do) and [Chalmers/Gothenburg University Software Engineering Master's Lecture Material](http://www.cse.chalmers.se/~bergert/slides/guest_lecture_DSLs.pdf)
|
17
17
|
|
18
|
-
[Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.
|
18
|
+
[Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) 4.21.1.1 includes [SWT 4.21](https://download.eclipse.org/eclipse/downloads/drops4/R-4.21-202109060500/), which was released on September 6, 2021. Gem version numbers are in sync with the SWT library versions. The first two digits represent the SWT version number. The last two digits represent the minor and patch versions of Glimmer DSL for SWT. Note that SWT now supports AARCH64 on Mac and Linux, but it is not fully tested in Glimmer DSL for SWT yet, so deem its support experimental for the time being without guarantees for functionality until declared otherwise (please report any issues you may encounter).
|
19
19
|
|
20
20
|
**Starting in version 4.20.0.0, [Glimmer DSL for SWT](https://rubygems.org/gems/glimmer-dsl-swt) comes with the new [***Shine***](/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md#shine) syntax** for highly intuitive and visually expressive View/Model Attribute Mapping, relying on `<=>` for bidirectional (two-way) data-binding and `<=` for unidirectional (one-way) data-binding, providing an alternative to the `bind` keyword (keep in mind that it is still a beta, so default back to `bind` whenever needed).
|
21
21
|
|
@@ -290,10 +290,10 @@ https://www.eclipse.org/swt/faq.php
|
|
290
290
|
|
291
291
|
## Pre-requisites
|
292
292
|
|
293
|
-
- JDK
|
293
|
+
- JDK 16 (16.0.2) (find at https://www.oracle.com/java/technologies/javase/jdk16-archive-downloads.html / Ensure PATH includes Java bin directory for `jpackage` command to work when packaging Glimmer applications)
|
294
294
|
- [RVM](http://rvm.io) on Mac & Linux (not available on Windows)
|
295
|
-
- JRuby 9.
|
296
|
-
- SWT 4.
|
295
|
+
- JRuby 9.3.0.0 (supporting Ruby 2.6.x syntax) (get via [RVM](http://rvm.io) on Mac and Linux by running `rvm install jruby-9.3.0.0`; On Windows, find at [https://www.jruby.org/download](https://www.jruby.org/download) [you might have to dual-install JDK8 temporarily as it might be required by jruby installer and then switch JAVA_HOME to JDK16 once done installing and restart command prompt/git bash])
|
296
|
+
- SWT 4.21 (already included in the [glimmer-dsl-swt](https://rubygems.org/gems/glimmer-dsl-swt) gem). Note that SWT now supports AARCH64 on Mac and Linux, but it is not fully tested with Glimmer DSL for SWT yet, so it is considered experimental until declared otherwise.
|
297
297
|
- Git (comes with Mac and Linux. Install on Windows: https://git-scm.com/download/win )
|
298
298
|
|
299
299
|
Glimmer might still work on other versions of Java, JRuby and SWT, but there are no guarantees, so it is best to stick to the pre-requisites outlined above.
|
@@ -322,7 +322,7 @@ jgem install glimmer-dsl-swt
|
|
322
322
|
|
323
323
|
Or this command if you want a specific version:
|
324
324
|
```
|
325
|
-
jgem install glimmer-dsl-swt -v 4.
|
325
|
+
jgem install glimmer-dsl-swt -v 4.21.1.1
|
326
326
|
```
|
327
327
|
|
328
328
|
`jgem` is JRuby's version of `gem` command.
|
@@ -337,7 +337,7 @@ On the Mac, you also have to run:
|
|
337
337
|
glimmer-setup
|
338
338
|
```
|
339
339
|
|
340
|
-
This ensures configuring
|
340
|
+
This ensures configuring required Mac jruby options before using `glimmer` and `girb` commands (adding `export JRUBY_OPTS="$JRUBY_OPTS -J-XstartOnFirstThread"` to `~/.zprofile` and `~/.bash_profile`).
|
341
341
|
|
342
342
|
If you are new to Glimmer and would like to continue learning the basics, you may continue to the [Glimmer Command](#glimmer-command) section.
|
343
343
|
|
@@ -350,7 +350,7 @@ Note: if you're using activerecord or activesupport, keep in mind that Glimmer u
|
|
350
350
|
|
351
351
|
Add the following to `Gemfile`:
|
352
352
|
```
|
353
|
-
gem 'glimmer-dsl-swt', '~> 4.
|
353
|
+
gem 'glimmer-dsl-swt', '~> 4.21.1.1'
|
354
354
|
```
|
355
355
|
|
356
356
|
And, then run:
|
@@ -371,7 +371,7 @@ glimmer
|
|
371
371
|
```
|
372
372
|
|
373
373
|
```
|
374
|
-
Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.
|
374
|
+
Glimmer (JRuby Desktop Development GUI Framework) - JRuby Gem: glimmer-dsl-swt v4.21.1.1
|
375
375
|
|
376
376
|
Usage: glimmer [--bundler] [--pd] [--quiet] [--debug] [--log-level=VALUE] [[ENV_VAR=VALUE]...] [[-jruby-option]...] (application.rb or task[task_args]) [[application2.rb]...]
|
377
377
|
|
@@ -535,6 +535,10 @@ If you have a Glimmer app you would like referenced here, please mention in a Pu
|
|
535
535
|
|
536
536
|
[<img alt="Connector Logo" src="https://raw.githubusercontent.com/AndyObtiva/dcr/f31cd45a8503051e899ed8e831fd03654d38e418/package/linux/Draw%20Color%20Repeat.png" height=40 /> Draw Color Repeat](https://github.com/AndyObtiva/dcr): A young boy programming language for Drawing and Coloring with Repetition
|
537
537
|
|
538
|
+
### Befunge 98 Programming Language
|
539
|
+
|
540
|
+
[Befunge 98 GUI](https://github.com/AndyObtiva/befunge98/tree/gui)
|
541
|
+
|
538
542
|
## Packaging & Distribution
|
539
543
|
|
540
544
|
Glimmer simplifies the process of native-executable packaging and distribution on Mac and Windows via a single command:
|
@@ -672,7 +676,8 @@ You may apply for contributing to any of these Glimmer DSL gems whether you pref
|
|
672
676
|
## Contributors
|
673
677
|
|
674
678
|
* [Andy Maleh](https://github.com/AndyObtiva) (Founder)
|
675
|
-
* [Dennis Theisen](https://github.com/Soleone) (Contributor, originally in [Glimmer](https://github.com/AndyObtiva/glimmer/graphs/contributors) before splitting glimmer-dsl-swt)
|
679
|
+
* [Dennis Theisen](https://github.com/Soleone) (Contributor, originally in [Glimmer](https://github.com/AndyObtiva/glimmer/graphs/contributors) before splitting [glimmer-dsl-swt](https://rubygems.org/gems/glimmer))
|
680
|
+
* [Wayne Vucenic](https://github.com/rubycoder)
|
676
681
|
|
677
682
|
[Click here to view contributor commits.](https://github.com/AndyObtiva/glimmer-dsl-swt/graphs/contributors)
|
678
683
|
|
data/RUBY_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
jruby-9.
|
1
|
+
jruby-9.3.1.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.21.1.1
|
@@ -213,7 +213,7 @@ In order to run the app after making changes, you must run the `glimmer run`. It
|
|
213
213
|
glimmer run
|
214
214
|
```
|
215
215
|
|
216
|
-
Alternatively, to
|
216
|
+
Alternatively, to manually run the app, you may type:
|
217
217
|
|
218
218
|
```
|
219
219
|
glimmer run[bin/greeter]
|
@@ -2383,8 +2383,6 @@ Example from [samples/hello/hello_combo.rb](samples/hello_combo.rb) sample (you
|
|
2383
2383
|
|
2384
2384
|
#### Shine
|
2385
2385
|
|
2386
|
-
**(BETA FEATURE)**
|
2387
|
-
|
2388
2386
|
The new Shine syntax for View/Model Attribute Mapping allows data-binding visually with simple arrow operators in Ruby.
|
2389
2387
|
|
2390
2388
|
Use `<=> [model, attribute, options]` for bidirectional (two-way) data-binding instead of `bind(model, attribute, options)`.
|
@@ -1,8 +1,10 @@
|
|
1
1
|
## Glimmer Packaging and Distribution
|
2
2
|
|
3
|
-
Note: this section mostly applies to Mac and Windows. On Linux, you can just run `glimmer package:gem` and after installing the gem, you get an executable matching the name of the app/custom-shell-gem you are building (e.g. `calculator` command becomes available after installing the [glimmer-cs-calculator](https://github.com/AndyObtiva/glimmer-cs-calculator) gem).
|
3
|
+
Note: this section mostly applies to Mac and Windows. On Linux, you can just run `glimmer package:gem` and after installing the gem, you get an executable matching the name of the app/custom-shell-gem you are building (e.g. `calculator` command becomes available after installing the [glimmer-cs-calculator](https://github.com/AndyObtiva/glimmer-cs-calculator) gem).
|
4
4
|
|
5
|
-
Note 2:
|
5
|
+
Note 2: On Windows, ensure system environment PATH includes Java bin directory `"C:\Program Files\Java\jdk-16.0.2\bin"` at the top for `jpackage` command to work during packaging Glimmer applications (the default Oracle setup path for Java after installing the JDK is usually not sufficient).
|
6
|
+
|
7
|
+
Note 3: Glimmer packaging has a strong dependency on JDK16 since it includes the packaging tool `jpackage`. On the Mac, it seems there is a new gotcha in the latest JDK 16 DMG/PKG installable that is resulting in `jpackage` to be missing from `PATH`. To include, you might need to add `export PATH="/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home/bin:$PATH"` to `~/.zprofile` or `~/.bashrc`
|
6
8
|
|
7
9
|
Glimmer simplifies the process of native-executable packaging and distribution on Mac and Windows via a single `glimmer package` command:
|
8
10
|
|
@@ -10,9 +12,7 @@ Glimmer simplifies the process of native-executable packaging and distribution o
|
|
10
12
|
glimmer package
|
11
13
|
```
|
12
14
|
|
13
|
-
It works out of the box for any application scaffolded by [Glimmer Scaffolding](#scaffolding), generating
|
14
|
-
|
15
|
-
(note: if you see this error on the Mac 'Error: Bundler "DMG Installer" (dmg) failed to produce a bundle.', ignore it as it should have produced a bundle anyways. It is a harmless issue in 3rd party dependency: javapackager.)
|
15
|
+
It works out of the box for any application scaffolded by [Glimmer Scaffolding](#scaffolding), generating default packaging type on the current platform if not specified (i.e. `app-image`) and displaying a message indicating what pre-requisite setup tools are needed if not installed already (e.g. [Wix Toolset](https://wixtoolset.org/) to generate MSI files on Windows). If you install Wix, make sure it is on the system PATH by adding for example "C:\Program Files (x86)\WiX Toolset v3.11\bin" to the Windows Environment Variables.
|
16
16
|
|
17
17
|
You may choose to generate a specific type of packaging instead by addionally passing in the `[type]` option. For example, this generates an MSI setup file on Windows:
|
18
18
|
|
@@ -20,16 +20,23 @@ You may choose to generate a specific type of packaging instead by addionally pa
|
|
20
20
|
glimmer package[msi]
|
21
21
|
```
|
22
22
|
|
23
|
+
This generates a DMG file on the Mac:
|
24
|
+
|
25
|
+
```
|
26
|
+
glimmer package[dmg]
|
27
|
+
```
|
28
|
+
|
23
29
|
Make sure to surround with double-quotes when running from ZShell (zsh):
|
24
30
|
|
25
31
|
```
|
26
|
-
glimmer "package[
|
32
|
+
glimmer "package[dmg]"
|
27
33
|
```
|
28
34
|
|
29
|
-
- Available Mac packaging types are `dmg`, `pkg`, and `image` (image means a pure Mac `app` without a setup program). Keep in mind that the packages you produce are compatible with the same MacOS you are on or older.
|
30
|
-
- Available Windows packaging types are `msi`, `exe`, and `image` (image means a Windows application directory without a setup program). Learn more about Windows packaging are [over here](#windows-application-packaging).
|
35
|
+
- Available Mac packaging types are `dmg`, `pkg`, and `app-image` (image means a pure Mac `app` without a setup program). Keep in mind that the packages you produce are compatible with the same MacOS you are on or older.
|
36
|
+
- Available Windows packaging types are `msi`, `exe`, and `app-image` (image means a Windows application directory without a setup program). Learn more about Windows packaging are [over here](#windows-application-packaging).
|
37
|
+
- Available Linux packaging types are `deb`, `rpm`, and `app-image` (Note: Linux native packaging has not been tested successfully, which is why `glimmer package:gem` is recommended on Linux instead. If you get it working, please contribute to this doc file with a Pull Request).
|
31
38
|
|
32
|
-
Note: if you are using Glimmer manually, to make the `glimmer package` command available, you must add the following line to your application `Rakefile` (automatically done for you if you scaffold an app or gem with `glimmer scaffold[AppName]` or `glimmer scaffold:gem:customshell[GemName]`):
|
39
|
+
Note: if you are using Glimmer manually without scaffolding, in order to make the `glimmer package` command available, you must add the following line to your application `Rakefile` (automatically done for you if you scaffold an app or gem with `glimmer scaffold[AppName]` or `glimmer scaffold:gem:customshell[GemName]`):
|
33
40
|
|
34
41
|
```ruby
|
35
42
|
require 'glimmer/rake_task'
|
@@ -40,20 +47,20 @@ The Glimmer packaging process done in the `glimmer package` command consists of
|
|
40
47
|
1. Lock JAR versions (`glimmer package:lock_jars`): This locks versions of JAR dependencies leveraged by the `jar-dependencies` JRuby gem, downloading them into the `./vendor` directory so they would get inside the top-level Glimmer app/gem JAR file.
|
41
48
|
1. Generate [Warbler](https://github.com/jruby/warbler) config (`glimmer package:config`): Generates initial Warbler config file (under `./config/warble.rb`) to use for generating JAR file.
|
42
49
|
1. Generate JAR file using [Warbler](https://github.com/jruby/warbler) (`glimmer package:jar`): Enables bundling a Glimmer app into a JAR file under the `./dist` directory
|
43
|
-
1. Generate native executable using [
|
50
|
+
1. Generate native executable using [jpackage](https://docs.oracle.com/en/java/javase/14/jpackage/packaging-tool-user-guide.pdf) (`glimmer package:native`): Enables packaging a JAR file as a DMG/PKG/APP file on Mac, MSI/EXE/APP on Windows, and DEB/RPM/APP on Linux (Glimmer does not officially support Linux with the `glimmer package` command yet, but it generates the JAR file successfully, and you could use `jpackage` manually afterwards if needed).
|
44
51
|
|
45
|
-
Those steps automatically ensure generating a JAR file under the `./dist` directory using [Warbler](https://github.com/jruby/warbler), which is then used to automatically generate a DMG/MSI file (and other executables) under the `./packages/bundles` directory using `
|
52
|
+
Those steps automatically ensure generating a JAR file under the `./dist` directory using [Warbler](https://github.com/jruby/warbler), which is then used to automatically generate a DMG/MSI file (and other executables) under the `./packages/bundles` directory using `jpackage`.
|
46
53
|
The JAR file name will match your application local directory name (e.g. `MathBowling.jar` for `~/code/MathBowling`)
|
47
54
|
The DMG file name will match the humanized local directory name + dash + application version (e.g. `Math Bowling-1.0.dmg` for `~/code/MathBowling` with version 1.0 or unspecified)
|
48
55
|
|
49
56
|
The `glimmer package` command will automatically set "mac.CFBundleIdentifier" to ="org.#{project_name}.application.#{project_name}".
|
50
|
-
You may override by configuring as an extra argument for javapackger (e.g. Glimmer::RakeTask::Package.
|
57
|
+
You may override by configuring as an extra argument for javapackger (e.g. Glimmer::RakeTask::Package.jpackage_extra_args = " --mac-package-identifier org.andymaleh.application.MathBowling")
|
51
58
|
|
52
59
|
### Packaging Defaults
|
53
60
|
|
54
61
|
Glimmer employs smart defaults in packaging.
|
55
62
|
|
56
|
-
The package application name (shows up in top menu bar on the Mac) will be a human form of the app root directory name (e.g. "Math Bowling" for "MathBowling" or "math_bowling" app root directory name). However, application name and version may be specified explicitly via "-
|
63
|
+
The package application name (shows up in top menu bar on the Mac) will be a human form of the app root directory name (e.g. "Math Bowling" for "MathBowling" or "math_bowling" app root directory name). However, application name and version may be specified explicitly via "--name", "--mac-package-name" and "--version" options.
|
57
64
|
|
58
65
|
Also, the package will only include these directories: app, config, db, lib, script, bin, docs, fonts, images, sounds, videos
|
59
66
|
|
@@ -74,47 +81,41 @@ require_relative '../app/my_application.rb'
|
|
74
81
|
- Include Icon (Optional): If you'd like to include an icon for your app (.icns format on the Mac), place it under `package/macosx` matching the humanized application local directory name (e.g. 'Math Bowling.icns' [containing space] for MathBowling or math_bowling). You may generate your Mac icon easily using tools like Image2Icon (http://www.img2icnsapp.com/) or manually using the Mac terminal command `iconutil` (iconutil guide: https://applehelpwriter.com/tag/iconutil/)
|
75
82
|
- Include DMG Background Icon (Optional): Simply place a .png file under `package/macosx/{HumanAppName}-background.png`
|
76
83
|
- Include Version (Optional): Create a `VERSION` file in your application and fill it your app version on one line (e.g. `1.1.0`)
|
77
|
-
- Include License (Optional): Create a `LICENSE.txt` file in your application and fill it up with your license (e.g. MIT). It will show up to people when installing your app. Note that, you may optionally also specify license type, but you'd have to do so manually via
|
78
|
-
- Extra args (Optional): You may optionally add the following to `Rakefile` to configure extra arguments for
|
84
|
+
- Include License (Optional): Create a `LICENSE.txt` file in your application and fill it up with your license (e.g. MIT). It will show up to people when installing your app. Note that, you may optionally also specify license type, but you'd have to do so manually via `--license-file LICENSE.txt` shown in an [example below](#jpackage-extra-arguments).
|
85
|
+
- Extra args (Optional): You may optionally add the following to `Rakefile` to configure extra arguments for jpackage: `Glimmer::RakeTask::Package.jpackage_extra_args = "..."` (Useful to avoid re-entering extra arguments on every run of rake task.). Read about them in [their section below](#jpackage-extra-arguments).
|
79
86
|
|
80
|
-
###
|
87
|
+
### jpackage Extra Arguments
|
81
88
|
|
82
|
-
(note: currently `Glimmer::RakeTask::Package.
|
89
|
+
(note: currently `Glimmer::RakeTask::Package.jpackage_extra_args` is only honored when packaging from bash, not zsh)
|
83
90
|
|
84
|
-
In order to explicitly configure
|
85
|
-
-
|
86
|
-
- https://docs.oracle.com/
|
87
|
-
- https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGICFDB
|
88
|
-
- https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html
|
91
|
+
In order to explicitly configure jpackage, Mac package attributes, or sign your Mac app to distribute on the App Store, you can follow more advanced instructions for `jpackage` here:
|
92
|
+
- Run `jpackage --help` for more info
|
93
|
+
- https://docs.oracle.com/en/java/javase/14/jpackage/packaging-tool-user-guide.pdf
|
89
94
|
- https://developer.apple.com/library/archive/releasenotes/General/SubmittingToMacAppStore/index.html#//apple_ref/doc/uid/TP40010572-CH16-SW8
|
90
95
|
|
91
|
-
The Glimmer rake task allows passing extra options to
|
92
|
-
- `Glimmer::RakeTask::Package.
|
93
|
-
- Environment variable: `
|
96
|
+
The Glimmer rake task allows passing extra options to jpackage via:
|
97
|
+
- `Glimmer::RakeTask::Package.jpackage_extra_args="..."` in your application Rakefile
|
98
|
+
- Environment variable: `JPACKAGE_EXTRA_ARGS`
|
94
99
|
|
95
100
|
Example (Rakefile):
|
96
101
|
|
97
102
|
```ruby
|
98
103
|
require 'glimmer/rake_task'
|
99
104
|
|
100
|
-
Glimmer::RakeTask::Package.
|
105
|
+
Glimmer::RakeTask::Package.jpackage_extra_args = '--license-file LICENSE.txt --mac-sign --mac-signing-key-user-name "Andy Maleh"'
|
101
106
|
```
|
102
107
|
|
103
|
-
Note that `mac.category` defaults to "public.app-category.business", but can be overridden with one of the category UTI values mentioned here:
|
104
|
-
|
105
|
-
https://developer.apple.com/library/archive/releasenotes/General/SubmittingToMacAppStore/index.html#//apple_ref/doc/uid/TP40010572-CH16-SW8
|
106
|
-
|
107
108
|
Example (env var):
|
108
109
|
|
109
110
|
```
|
110
|
-
|
111
|
+
JPACKAGE_EXTRA_ARGS='--mac-package-name "Math Bowling Game"' glimmer package
|
111
112
|
```
|
112
113
|
|
113
114
|
That overrides the default application display name.
|
114
115
|
|
115
116
|
### Verbose Mode
|
116
117
|
|
117
|
-
Pass `-v` to
|
118
|
+
Pass `-v` to jpackage in `Glimmer::RakeTask::Package.jpackage_extra_args` or by running `glimmer package:native[type] -v` to learn more about further available customizations for the installer you are requesting to generate.
|
118
119
|
|
119
120
|
### Windows Application Packaging
|
120
121
|
|
@@ -122,89 +123,84 @@ Windows s two options for setup packaging:
|
|
122
123
|
- `msi` (recommended): simpler packaging option. Requires [WiX Toolset](https://wixtoolset.org/) and [.NET Framework](https://dotnet.microsoft.com/download/dotnet-framework). Simply run `glimmer package[msi]` (or `glimmer package:native[msi]` if it's not your first time) and it will give you more details on the pre-requisites you need to install (e.g. [WiX Toolset](https://wixtoolset.org/) and [.NET Framework 3.5 SP1](https://dotnet.microsoft.com/download/dotnet-framework/net35-sp1)).
|
123
124
|
- `exe`: more advanced packaging option. Requires [Inno Setup](https://jrsoftware.org/isinfo.php). Simply run `glimmer package[exe]` (or `glimmer package:native[exe]` if it's not your first time) and it will tell you what you need to install.
|
124
125
|
|
125
|
-
If you just want to test out packaging into a native Windows app that is not packaged for Windows setup, just pass `image` to generate a native Windows app only.
|
126
|
+
If you just want to test out packaging into a native Windows app that is not packaged for Windows setup, just pass `app-image` (default) to generate a native Windows app only.
|
126
127
|
|
127
128
|
### Mac Application Distribution
|
128
129
|
|
129
130
|
Recent macOS versions (starting with Catalina) have very stringent security requirements requiring all applications to be signed before running (unless the user goes to System Preferences -> Privacy -> General tab and clicks "Open Anyway" after failing to open application the first time they run it). So, to release a desktop application on the Mac, it is recommended to enroll in the [Apple Developer Program](https://developer.apple.com/programs/) to distribute on the [Mac App Store](https://developer.apple.com/distribute/) or otherwise request [app notarization from Apple](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution) to distribute independently.
|
130
131
|
|
131
|
-
Afterwards, you may add
|
132
|
-
|
133
|
-
DMG signing key argument:
|
134
|
-
```
|
135
|
-
-Bmac.signing-key-developer-id-app="..."
|
136
|
-
```
|
137
|
-
|
138
|
-
PKG signing key argument:
|
139
|
-
```
|
140
|
-
-Bmac.signing-key-developer-id-installer="..."
|
141
|
-
```
|
132
|
+
Afterwards, you may add signing arguments to `jpackage` via `Glimmer::RakeTask::Package.jpackage_extra_args` or `JPACKAGE_EXTRA_ARGS` according to this webpage: https://docs.oracle.com/en/java/javase/14/jpackage/packaging-tool-user-guide.pdf
|
142
133
|
|
143
|
-
Mac App Store signing key arguments:
|
144
134
|
```
|
145
|
-
-
|
146
|
-
|
135
|
+
--mac-package-signing-prefix <prefix string>
|
136
|
+
When signing the application package, this value is prefixed
|
137
|
+
to all components that need to be signed that don't have
|
138
|
+
an existing package identifier.
|
139
|
+
--mac-sign
|
140
|
+
Request that the package be signed
|
141
|
+
--mac-signing-keychain <file path>
|
142
|
+
Path of the keychain to search for the signing identity
|
143
|
+
(absolute path or relative to the current directory).
|
144
|
+
If not specified, the standard keychains are used.
|
145
|
+
--mac-signing-key-user-name <team name>
|
146
|
+
Team name portion in Apple signing identities' names.
|
147
|
+
For example "Developer ID Application: "
|
147
148
|
```
|
148
149
|
|
149
|
-
### Self Signed Certificate
|
150
|
-
|
151
|
-
You may still release a signed DMG file without enrolling into the Apple Developer Program with the caveat that users will always fail in opening the app the first time, and have to go to System Preferences -> Privacy -> General tab to "Open Anyway".
|
152
|
-
|
153
|
-
To do so, you may follow these steps (abbreviated version from https://developer.apple.com/library/archive/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html#//apple_ref/doc/uid/TP40005929-CH4-SW2):
|
154
|
-
- Open Keychain Access
|
155
|
-
- Choose Keychain Access > Certificate Assistant > Create Certificate ...
|
156
|
-
- Enter Name (referred to below as "CertificateName")
|
157
|
-
- Set 'Certificate Type' to 'Code Signing'
|
158
|
-
- Create (if you alternatively override defaults, make sure to enable all capabilities)
|
159
|
-
- Add the following option to javapackager: `-Bmac.signing-key-developer-id-app="CertificateName"` via `Glimmer::RakeTask::Package.javapackager_extra_args` or `JAVAPACKAGER_EXTRA_ARGS`
|
160
|
-
|
161
|
-
Example:
|
162
|
-
|
163
|
-
```ruby
|
164
|
-
Glimmer::RakeTask::Package.javapackager_extra_args = '-Bmac.signing-key-developer-id-app="Andy Maleh"'
|
165
|
-
```
|
166
|
-
|
167
|
-
Now, when you run `glimmer package`, it builds a self-signed DMG file. When you make available online, and users download, upon launching application, they are presented with your certificate, which they have to sign if they trust you in order to use the application.
|
168
|
-
|
169
150
|
### Packaging Gotchas
|
170
151
|
|
171
|
-
1.
|
152
|
+
1. Zsh (Z Shell)
|
172
153
|
|
173
|
-
|
174
|
-
Keep that in mind if you are not going to rely on the default `LICENSE.txt` support.
|
154
|
+
Currently, `Glimmer::RakeTask::Package.jpackage_extra_args` is only honored when packaging from bash, not zsh.
|
175
155
|
|
176
|
-
|
156
|
+
You can get around that in zsh by running glimmer package commands with `bash -c` prefix:
|
177
157
|
|
178
|
-
```
|
179
|
-
|
158
|
+
```
|
159
|
+
bash -c 'source ~/.glimmer_source; glimmer package'
|
180
160
|
```
|
181
161
|
|
182
|
-
2.
|
183
|
-
|
184
|
-
If you run `glimmer package` multiple times, sometimes it leaves a mounted DMG project in your finder. Unmount before you run the command again or it might fail with an error saying: "Error: Bundler "DMG Installer" (dmg) failed to produce a bundle."
|
162
|
+
2. unsupported Java version "16", defaulting to 1.7
|
185
163
|
|
186
|
-
|
164
|
+
If you get this error while packaging:
|
187
165
|
|
188
166
|
```
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
167
|
+
unsupported Java version "16", defaulting to 1.7
|
168
|
+
[ERROR] Internal error: org.jruby.exceptions.RaiseException: (LoadError) library `java' could not be loaded: java.lang.reflect.InaccessibleObjectException: Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not "opens java.lang" to unnamed module @138caeca -> [Help 1]
|
169
|
+
org.apache.maven.InternalErrorException: Internal error: org.jruby.exceptions.RaiseException: (LoadError) library `java' could not be loaded: java.lang.reflect.InaccessibleObjectException: Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not "opens java.lang" to unnamed module @138caeca
|
170
|
+
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:121)
|
171
|
+
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
|
172
|
+
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
|
173
|
+
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
|
174
|
+
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
175
|
+
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
|
176
|
+
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
177
|
+
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
|
178
|
+
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
|
179
|
+
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
|
180
|
+
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
|
181
|
+
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
|
182
|
+
Caused by: org.jruby.exceptions.RaiseException: (LoadError) library `java' could not be loaded: java.lang.reflect.InaccessibleObjectException: Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not "opens java.lang" to unnamed module @138caeca
|
183
|
+
[ERROR]
|
184
|
+
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
|
193
185
|
|
194
|
-
|
195
|
-
|
196
|
-
You can get around that in zsh by running glimmer package commands with `bash -c` prefix:
|
186
|
+
3. jpackage missing from PATH on the Mac
|
197
187
|
|
198
|
-
|
199
|
-
|
188
|
+
On the Mac, the latest JDK 16 installable DMG/PKG is resulting in `jpackage` to be missing from `PATH`. To include, you might need to add `export PATH="/Library/Java/JavaVirtualMachines/jdk-16.0.2.jdk/Contents/Home/bin:$PATH"` to `~/.zprofile` or `~/.bashrc`
|
189
|
+
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
|
190
|
+
[ERROR]
|
191
|
+
[ERROR] For more information about the errors and possible solutions, please read the following articles:
|
192
|
+
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/InternalErrorException
|
200
193
|
```
|
201
194
|
|
202
|
-
|
195
|
+
Please ignore. It should be harmless. If you get blocked by it for any reason, please open an Issue about it.
|
203
196
|
|
204
|
-
|
205
|
-
|
197
|
+
3. Java on Windows System PATH
|
198
|
+
|
199
|
+
If you get any errors running Java on Windows, keep in mind that you need to have the Java binaries "C:\Program Files\Java\jdk-16.0.2\bin" on the Windows System PATH environment variable.
|
206
200
|
|
207
201
|
The problem is Oracle seems to be adding an indirect Java path junction in later versions of their installer:
|
208
|
-
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
|
202
|
+
`C:\Program Files (x86)\Common Files\Oracle\Java\javapath`
|
203
|
+
|
204
|
+
Simply replace it with the simple path mentioned above (`"C:\Program Files\Java\jdk-16.0.2\bin"` matching your correct version number)
|
209
205
|
|
210
|
-
|
206
|
+
Lastly, reinstall JRuby to ensure it is using Java from the right path.
|
data/glimmer-dsl-swt.gemspec
CHANGED
Binary file
|
@@ -40,7 +40,7 @@ module Glimmer
|
|
40
40
|
SWT::DisplayProxy.instance.auto_exec(override_sync_exec: @sync_exec, override_async_exec: @async_exec) do
|
41
41
|
if @widget.respond_to?(:on_widget_disposed)
|
42
42
|
@widget.on_widget_disposed do |dispose_event|
|
43
|
-
|
43
|
+
deregister_all_observables unless @widget.shell_proxy.last_shell_closing?
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -49,7 +49,7 @@ module Glimmer
|
|
49
49
|
def call(value)
|
50
50
|
SWT::DisplayProxy.instance.auto_exec(override_sync_exec: @sync_exec, override_async_exec: @async_exec) do
|
51
51
|
if @widget.respond_to?(:disposed?) && @widget.disposed?
|
52
|
-
|
52
|
+
deregister_all_observables
|
53
53
|
return
|
54
54
|
end
|
55
55
|
# need the rescue false for a scenario with tree items not being equal to model objects raising an exception
|
@@ -61,7 +61,7 @@ module Glimmer
|
|
61
61
|
|
62
62
|
def evaluate_property
|
63
63
|
if @widget.respond_to?(:disposed?) && @widget.disposed?
|
64
|
-
|
64
|
+
deregister_all_observables
|
65
65
|
return
|
66
66
|
end
|
67
67
|
@widget.get_attribute(@property)
|
@@ -26,8 +26,7 @@ module Glimmer
|
|
26
26
|
module RakeTask
|
27
27
|
module Package
|
28
28
|
class << self
|
29
|
-
attr_accessor :
|
30
|
-
alias jpackage_extra_args javapackager_extra_args
|
29
|
+
attr_accessor :jpackage_extra_args
|
31
30
|
|
32
31
|
def clean
|
33
32
|
require 'fileutils'
|
@@ -89,12 +88,12 @@ module Glimmer
|
|
89
88
|
end
|
90
89
|
|
91
90
|
def native(native_type=nil, native_extra_args)
|
92
|
-
puts "Generating native executable with
|
91
|
+
puts "Generating native executable with jpackage..."
|
93
92
|
java_version = `jruby -v`
|
94
|
-
if java_version.include?('
|
95
|
-
puts "Java Version
|
93
|
+
if java_version.include?('16.0.2')
|
94
|
+
puts "Java Version 16.0.2 Detected!"
|
96
95
|
else
|
97
|
-
puts "WARNING! Glimmer Packaging Pre-Requisite Java Version
|
96
|
+
puts "WARNING! Glimmer Packaging Pre-Requisite Java Version 16.0.2 Is Not Found!"
|
98
97
|
end
|
99
98
|
require 'facets/string/titlecase'
|
100
99
|
require 'facets/string/underscore'
|
@@ -106,28 +105,27 @@ module Glimmer
|
|
106
105
|
license = (File.read(license_file).strip if File.exists?(license_file) && File.file?(license_file)) rescue nil
|
107
106
|
copyright = license.split("\n").first
|
108
107
|
human_name = project_name.underscore.titlecase
|
109
|
-
icon = "
|
110
|
-
if
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
command
|
115
|
-
command += "
|
116
|
-
command += " -
|
117
|
-
|
118
|
-
command
|
119
|
-
command += " --win-per-user-install --win-dir-chooser --win-menu --win-menu-group '#{human_name}' " if OS.windows?
|
108
|
+
icon = "icons/#{OS.mac? ? 'macosx' : (OS.linux? ? 'linux' : 'windows')}/#{human_name}.#{OS.mac? ? 'icns' : (OS.linux? ? 'png' : 'ico')}"
|
109
|
+
native_type = 'app-image' if native_type.to_s.strip.empty?
|
110
|
+
if (`jpackage`.to_s.include?('Usage: jpackage') rescue nil)
|
111
|
+
FileUtils.rm_rf("packages/bundles")
|
112
|
+
FileUtils.mkdir_p('packages/bundles')
|
113
|
+
command = "jpackage"
|
114
|
+
command += " --type #{native_type}"
|
115
|
+
command += " --dest 'packages/bundles' --input 'dist' --main-class JarMain --main-jar '#{project_name}.jar' --java-options '-Dproject_name=#{project_name}' --name '#{human_name}' --vendor '#{human_name}' --icon '#{icon}' "
|
116
|
+
command += " --win-per-user-install --win-dir-chooser --win-menu --win-menu-group '#{human_name}' " if OS.windows? && native_type != 'app-image'
|
117
|
+
command += " --linux-menu-group '#{human_name}' " if OS.linux? && native_type != 'app-image'
|
120
118
|
command += " --java-options '-XstartOnFirstThread' --mac-package-name '#{human_name}' --mac-package-identifier 'org.#{project_name}.application.#{project_name}' " if OS.mac?
|
121
119
|
command += " --app-version \"#{version}\" " if version
|
122
|
-
command += " --license-file LICENSE.txt " if license
|
120
|
+
command += " --license-file LICENSE.txt " if license && native_type != 'app-image'
|
123
121
|
command += " --copyright \"#{copyright}\" " if copyright
|
124
122
|
else
|
125
|
-
puts "
|
123
|
+
puts "jpackage does not exist in your Java installation. Please ensure jpackage is available in PATH environment variable."
|
126
124
|
return
|
127
125
|
end
|
128
|
-
Rake.application.load_rakefile # make sure to load potential
|
129
|
-
command += " #{
|
130
|
-
command += " #{ENV['
|
126
|
+
Rake.application.load_rakefile # make sure to load potential jpackage_extra_args config in app Rakefile
|
127
|
+
command += " #{jpackage_extra_args} " if jpackage_extra_args
|
128
|
+
command += " #{ENV['JPACKAGE_EXTRA_ARGS']} " if ENV['JPACKAGE_EXTRA_ARGS']
|
131
129
|
command += " #{native_extra_args} " if native_extra_args
|
132
130
|
puts command
|
133
131
|
system command
|