* Update readme about event manager
* RouterTask can now detect a running router by scanning processes&arguments for i2p.jar
* The logger will log to OSX's default: ~/Library/Logs/I2P/[whatever].log
* Enabled Apple's "Hardened Runtime", however unsecure memory had to be allowed to spawn java etc.
* Updated docs about Event Manager code
* Make the launcher handle cases where extract is incomplete or invalid
* Bugfixes as always
* Bugfixes as always
* Added Sparkle (native updater, https://sparkle-project.org/ )
* The launcher will now extract and overwrite older versions if found
* Rewrite of the java extraction part (to enable overwrite)
* Move more functionality to use EventManager as it works quite well
* Added check for updates menu item
* In general bugfixes
* Introduced event manager for better control flow
* Splitted RouterStatusView to own file
* Added shell script to setup and produce dmg file
Mac OS X launcher:
* UI built on Swift
* Why?
* Apple seems to on purpose make it harder to get into Objective-C these days
* Swift is compiled to native code, but has easiness of Javascript in programming
* Perfect for the OS X UI, many guides & tutorials as well
* "Backend" in Objective-C++ / C++14
* Why?
* Originally written in Objective-C / C++14 with C++17 backports
* Only for backend because of the time the development takes
*
Short summary of features:
* Java
* It can detect java from:
* JAVA_HOME environment variable
* "Internet Plug-Ins" Apple stuff
* By the /usr/libexec/java_home binary helper
* It can unpack a new version of I2P
* Unpacks to ~/Library/I2P
* Can check currently unpacked version in ~/Library/I2P via i2p.jar's "net.i2p.CoreVersion"
* User Interface (a popover, see https://youtu.be/k8L3lQ5rUq0 for example of this concept)
* Router control tab view
* It can start the router
* It can stop the router
* It can detect already running router, then avoid fireing up one
* It can show basic information about the router state & version
* Log view tab (not yet done)
* While left-click triggers popover, right-click draws a minimal context menu
* Port check to see if i2p is already running.
* All buttons in the menu should work now.
* Rewrote some C++ to Objective-C, which fits better with the integration.
* Misc cleanup.
* Made the launch of router repeatable.
and then secondly fire up the router in a second java process when
extraction is completed. Gonna use "optional" type in C++ to make
global variables a bit less painful to use.
TLDR;
Howto? ant osxLauncher
Privacy Notes? If you don't got SBT, a bash script will trigger
download of SBT for you with task osxLauncher.
Results? open ./launchers/output
"Binary" App Bundle name: I2P.app
Runtime base directory? ~/Library/I2P
Runtime config directory? untouched.
After talk on IRC with zzz, I rewrote the logic since we could
start with a simple deploy, for a faster alpha version ready :)
SBT will build a zip file from the content of pkg-temp, which
CompleteDeployment.scala will again unzip in runtime. Right now
it's quite basic, but the plan is to add version detection, so
it's capable of upgrading a already deployed I2P base directory.
OSXDeployment.scala is renamed to PartialDeployment.scala for usage
in the browser bundle launcher, since it's going to be a subset of
the files found in pkg-temp.
A Info.plist is added to the launchers/macosx which is added to the
application bundle under building. Note that this differ from the one
in Start i2p router.app that's been here for years now.
process for I2P rather than trying to load Router via reflection or
anything runtime fancy stuff. Shell script is implemented in SBT now,
and can now link to download JRE script and so on.
installer resources with the fat jar (we add an exclusion list later)
which the base directory will be built(or updated if lacking files) upon
startup of the I2P router. This is done by the OSXDeployment class which
is an extension for the DeployProfile class written for Mac OS X.
Since the app bundle itself should be R/O, we use ~/Library/I2P as base path,
and continue using ~/Library/Application Support/i2p as config path. The BB
code will have other paths.
sbt-native-packager for future rpm/deb/windows and
maybe even OSX packages. Also, the macosx sbt project
now has a task named buildAppBundleTask and which will
produce an I2P.app and copy over needed directories/jars/wars
which later needs to be extracted to an writeable area which
would be i2p base directory in runtime.
The MacOSXRouterLauncherApp contains more information about how
the executable in the OS X bundle will locate our R/O i2pbase so
it can copy it to a writable area. The R/O is also to ensure valid
signature on the bundle.
At last, this approach is done casue letting an Mach-O binary load
libjvm.dylib was proved unstable, so MacOSXRouterLauncherApp will
rather use an JNI module to load the needed glue with the
Mac OS X system.
Browser Bundle i2p launcher, as well as the upcoming Mac OS X
i2p launcher. They share some few properties and how code has
to be managed for both system's update managers and so on.
More details will be documentated in README.md files as well as
in those commit messages I now write :)