Studio/Application Distribution - Installer
Lab: Application Distribution - Installer
Overview
This lab describes one way of packaging an application for distribution.
An app distributed this way is called an installer app (iapp).
An iapp is packaged the same way as J (exe for Windows, sh shell script for Linux, and dmg for Mac).
An iapp is complete and self-contained. It contains all of the J system (except for things like examples, labs, demos, and help) and application specific files.
An iapp installation has a folder similar to the J development environment.
Creating an iapp is done in three steps:
1. develop and test app
2. define intaller.ijs to set app contents
3. build iapp installer file from installer.ijs
We recommended you develop your app in Project Manager.
The best way to learn about iapp is to experiment with one.
The next step creates a Project Manager iapp project.
Run Project Manager and open the new apps\example project.
Open and study the 3 files.
example.ijs is the main application file.
require 'plot' ABC=: 0 : 0 pc abc; xywh 5 41 96 24;cc exit button;cn "Exit"; xywh 6 7 96 24;cc plot button;cn "plot 100?100"; pas 6 6;pcenter; rem form end; ) abc_run=: 3 : 0 wd ABC wd 'pshow;' ) abc_close=: 3 : 0 if. IFJIJX_j_ do. 2!:55'' else. wd'pclose' end. ) abc_exit_button=: 3 : 0 abc_close'' ) abc_plot_button=: 3 : 0 plot 100?100 )
app.ijs loads the main app script and starts the app.
load jpath'~user\projects\apps\example\example.ijs' abc_run''
installer.ijs provides information for the install program and describes the files needed by the app.
Study installer.ijs with the next few steps.
NB. see lab "Application Distribution - Installer" NB. build installer for this application NB. run this installer file NB. build'' - builds installer load appdist=: jpath '~system\examples\appdist\appdist.ijs' APP_COMPANY=: 'XYZ Corp' APP_PRODUCT=: 'Plot 0.0' NB. script that runs the application APP_IJS=: '~user\projects\apps\example\app.ijs' NB. path to app.ico app.png app.icns file(s) APP_ICON=: '~user\projects\apps\example' NB. files (wildcards allowed) - must be in ~user APP_COMMON=: 0 : 0 ~user\projects\apps\example\example.ijs ) NB. 1 to lock all user ijs files APP_LOCK=: 0 NB. ~addons\.... - addons to include APP_ADDONS=: 0 : 0 ) NB. windows specific APP_WIN=: 0 : 0 ) NB. linux specific APP_LINUX=: 0 : 0 ) NB. mac specific APP_MAC=: 0 : 0 )
First appdist.ijs is loaded to define utilities for building an iapp file.
APP_COMPANY author APP_PRODUCT product - used as install folder APP_IJS script that runs the app APP_ICON path to icons
APP_COMMON files to include in the distribution APP_LOCK 1 to lock all user ijs files APP_ADDONS addons to include APP_WIN Windows files APP_LINUX Linux files APP_MAC Mac files
This step loads the app installer script (which in turn loads the appdist utilities).
load '~user\projects\apps\example\installer.ijs'
This step builds the iapp file based on installer.ijs.
build'' copy: ~bin\profile.ijs copy: ~system\classes\* copy: ~system\extras\* copy: ~system\main\* copy: ~system\packages\* copy: ~tools\* copy: ~bin\j.exe copy: ~bin\j.dll copy: ~user\projects\apps\example\example.ijs copy: ~user\projects\apps\example\app.ijs installer: ~temp\app.exe
Run the installer (as you would a J install) to do the install.
Be careful with includes with * and ? wildcards as they may include more stuff than you really intended.
An installed iapp app is complete and it is not affected by any changes (new J installs, JAL updates, addons updates, development changes, etc.).
Running the app produces a desktop application.
Set APP_LOCK 1 to lock all user ijs files.
In general we encourage you to not lock files. However, if you must lock, be aware that the encryption is not strong and is secure against only casual attacks.
The iapp file creates a standard J installation with a few differences.
bin\profilex.ijs sets ARGV and user temp config folders bin\icons\app.??? (ico png icns) ~user is in ~install ~config is in ~user ~temp is in a system temp folder
startup.ijs is not part of the iapp. Any startup.ijs dependencies in the iapp should be added to APP_IJS.
config.ijs is not normally part of an iapp. You could include it but it is probably better to have the iapp run with the default config. Provide any specific config requirements in APP_IJS. Note that ~config is in the J folder and may be a protected folder so the iapp should not depend on writes to ~config.
Debug hint: if an installed iapp fails to run, edit iapp
bin\profilex.ijs to not set ARGV and then it will start with an ijx window.
Customized profilex.ijs targetting app environment and params.
bin\profilex.ijs to not set ARGV and then it will start with an ijx window.
Customized profilex.ijs targetting app environment and params.
NB. override profile ARGV user temp config user=. install,'\user' config=. user,'\config' u=. '/tmp/Plot 0.0-',":2!:5 'USER' w=. (":2!:5'TEMP'),'\Plot 0.0' temp=. >(6=9!:12''){u;w ARGV_z_=: ARGV,'-jijx';'~user\projects\apps\example\app.ijs'
End of lab
See Also