How to include installer dependencies in dmg/pkg on mac - macos

I have a mac application (Eg. Sample.pkg containing Sample.app) along with few pkg dependencies (Eg. A.pkg and B.pkg ). Whenever the user runs the dmg/product archive bundled with these three packages, A.pkg and B.pkg has to be run first before Sample.pkg is installed.
Is there a way where I can specify this dependency while packaging the mac application, without need the user to manually check and install them in the right order?

Solution
There is a way.
You can add such entry to your distribution.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<installer-gui-script minSpecVersion="1">
<title>Application name</title>
<organization>com.organization</organization>
....
<volume-check>
<required-bundles description="Some message which UI Installer doesn't show :(">
<!-- bundle 1 -->
<bundle id="com.organization.app1" path="Applications/App1.app" />
<!-- bundle 2 -->
<bundle id="com.organization.app2" path="Applications/App2.app" />
</required-bundles>
</volume-check>
....
</installer-gui-script>
This is documented here (required-bundles).
Some examples can be found on github.
Disadvantage
There is some bug in Apple Installer, required-bundles description says:
Attributes
|----------------|------------------|------------------------------------------------------------|
| Attribute name | Type | Description |
|----------------|------------------|------------------------------------------------------------|
| | | _Optional._ Values: `true` (default) to require all of |
| `all` | Boolean | the specified bundles, or `false` to require at least one |
| | | of them. |
|----------------|------------------|------------------------------------------------------------|
| `description` | String, | _Optional._ A description of the required bundles, |
| | localization key | displayed to the user if the requirement is not met. |
|----------------|------------------|------------------------------------------------------------|
So the message from description should be shown, but I can't see it anywhere, so user can be confused why he is unable to install application.
It just warns: You can't install <your application> here, <your application> do not allow it. (sorry translation from my localization back to English).
Alternative
I've seen some installation package which was running custom script form installation-check invoking it from installation JavaScript, using system.run('script_name').

Related

sbt - Scala - Brew - MacOS - Unable to connect to sbt shell at all: NoClassDefFoundError

So I'm just trying to get a project set up using JDK 15 / SBT 1.5.4 / Scala 2.13.6 all of which have been installed via brew on MacOS.
However before I even attempt to build via intellij etc. I'm unable to connect to the sbt shell via a normal terminal.
[info] welcome to sbt 1.5.4 (AdoptOpenJDK Java 15.0.2)
[info] loading global plugins from /Users/user/.sbt/1.0/plugins
[warn] Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? (default: r)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
at com.swoval.runtime.ShutdownHooks$1.run(ShutdownHooks.java:25)
I've tried reinstalling all three dependancies a few times and cleared the cache but still nothing. I'm guessing something isn't configured right because it's unable to even connect to the shell.
Thanks!
EDIT: I've just followed the install steps on the sbt docs and the only requirements are JDK 11 or 8 and sbt itself. I've removed scala / JDK15 and re-downloaded JDK 11 via SDK-man this time and i'm still having the same issue.
EDIT 2: I've removed the .sbt directory and reinitiased and now sbt command is showing more output, hopefully this helps a little more.
java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
at com.swoval.runtime.NativeLoader.loadPackaged(NativeLoader.java:143)
at com.swoval.runtime.NativeLoader.loadPackaged(NativeLoader.java:174)
at com.swoval.files.apple.FileEventMonitorImpl.<clinit>(FileEventMonitors.java:127)
at com.swoval.files.apple.FileEventMonitors.get(FileEventMonitors.java:47)
at com.swoval.files.ApplePathWatcher.<init>(ApplePathWatcher.java:258)
at com.swoval.files.ApplePathWatcher.<init>(ApplePathWatcher.java:194)
at com.swoval.files.ApplePathWatchers.get(ApplePathWatcher.java:331)
at com.swoval.files.PathWatchers.get(PathWatchers.java:84)
at com.swoval.files.FileTreeRepositories.get(FileTreeRepositories.java:64)
at com.swoval.files.FileTreeRepositories.get(FileTreeRepositories.java:32)
at sbt.internal.nio.FileTreeRepositoryImpl.<init>(FileTreeRepositoryImpl.scala:46)
at sbt.internal.nio.FileTreeRepository$.default(FileTreeRepository.scala:40)
at sbt.BuiltinCommands$.$anonfun$setupGlobalFileTreeRepository$1(Main.scala:985)
at sbt.BuiltinCommands$.$anonfun$doLoadProject$5(Main.scala:974)
at sbt.Project$.setProject(Project.scala:501)
at sbt.BuiltinCommands$.doLoadProject(Main.scala:974)
at sbt.BuiltinCommands$.$anonfun$loadProjectImpl$2(Main.scala:912)
at sbt.Command$.$anonfun$applyEffect$4(Command.scala:150)
at sbt.Command$.$anonfun$applyEffect$2(Command.scala:145)
at sbt.Command$.process(Command.scala:189)
at sbt.MainLoop$.$anonfun$processCommand$5(MainLoop.scala:245)
at scala.Option.getOrElse(Option.scala:189)
at sbt.MainLoop$.process$1(MainLoop.scala:245)
at sbt.MainLoop$.processCommand(MainLoop.scala:278)
at sbt.MainLoop$.$anonfun$next$5(MainLoop.scala:163)
at sbt.State$StateOpsImpl$.runCmd$1(State.scala:289)
at sbt.State$StateOpsImpl$.process$extension(State.scala:325)
at sbt.MainLoop$.$anonfun$next$4(MainLoop.scala:163)
at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
at sbt.MainLoop$.next(MainLoop.scala:163)
at sbt.MainLoop$.run(MainLoop.scala:144)
at sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:119)
at sbt.io.Using.apply(Using.scala:27)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:112)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:66)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:51)
at sbt.MainLoop$.runLogged(MainLoop.scala:42)
at sbt.StandardMain$.runManaged(Main.scala:218)
at sbt.xMain$.$anonfun$run$11(Main.scala:133)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at scala.Console$.withIn(Console.scala:230)
at sbt.internal.util.Terminal$.withIn(Terminal.scala:560)
at sbt.internal.util.Terminal$.$anonfun$withStreams$1(Terminal.scala:350)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at scala.Console$.withOut(Console.scala:167)
at sbt.internal.util.Terminal$.$anonfun$withOut$2(Terminal.scala:550)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at scala.Console$.withErr(Console.scala:196)
at sbt.internal.util.Terminal$.withOut(Terminal.scala:550)
at sbt.internal.util.Terminal$.withStreams(Terminal.scala:350)
at sbt.xMain$.withStreams$1(Main.scala:87)
at sbt.xMain$.run(Main.scala:121)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at sbt.internal.XMainConfiguration.run(XMainConfiguration.java:56)
at sbt.xMain.run(Main.scala:46)
at xsbt.boot.Launch$.$anonfun$run$1(Launch.scala:149)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:176)
at xsbt.boot.Launch$.run(Launch.scala:149)
at xsbt.boot.Launch$.$anonfun$apply$1(Launch.scala:44)
at xsbt.boot.Launch$.launch(Launch.scala:159)
at xsbt.boot.Launch$.apply(Launch.scala:44)
at xsbt.boot.Launch$.apply(Launch.scala:21)
at xsbt.boot.Boot$.runImpl(Boot.scala:78)
at xsbt.boot.Boot$.run(Boot.scala:73)
at xsbt.boot.Boot$.main(Boot.scala:21)
at xsbt.boot.Boot.main(Boot.scala)
[error] java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
[error] Use 'last' for the full log.
[warn] Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? (default: r)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
at com.swoval.runtime.ShutdownHooks$1.run(ShutdownHooks.java:25)
EDIT3: Tried creating a new user and just downloading sbt and still getting the same issue. Will attempt completely removing Java as it seems to be the culprit and reinstalling.
Similar to Boris's suggestion the issue lied in the installation version of Java.
There are two versions for AdoptOpenJDK, .j9 an .hs as seen below if you are using sdk-man as a package manager:
AdoptOpenJDK | >>> | 16.0.1.j9 | adpt | installed | 16.0.1.j9-adpt
| | 16.0.1.hs | adpt | | 16.0.1.hs-adpt
| | 11.0.11.j9 | adpt | | 11.0.11.j9-adpt
| | 11.0.11.hs | adpt | | 11.0.11.hs-adpt
For some reason the OpenJDK version .hs-adpt shows this issue for every version but the .j9-adpt version works fine.
TLDR: Install the .j9-adpt version of Java that you need otherwise .hs-adpt is not working for me with sbt version 1.5.4.
I assume the reason - you are using wrong Java JDK for Mac OS with M1 chip. You need to install proper Java JDK version, I use sdkman for that.
Install sdk man:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
set up sdk man to not use rosetta2_compatbile versions:
vim .sdkman/etc/config
and set sdkman_rosetta2_compatbile=false
choose java JDK from the list:
sdk list java
================================================================================
Available Java Versions
================================================================================
Vendor | Use | Version | Dist | Status | Identifier
--------------------------------------------------------------------------------
Azul Zulu | | 16.0.1 | zulu | | 16.0.1-zulu
| | 11.0.11 | zulu | | 11.0.11-zulu
| | 8.0.292 | zulu | | 8.0.292-zulu
BellSoft | | 16.0.1 | librca | | 16.0.1-librca
| | 11.0.11 | librca | | 11.0.11-librca
| | 8.0.292 | librca | | 8.0.292-librca
Java.net | | 18.ea.3 | open | | 18.ea.3-open
| | 18.ea.2 | open | | 18.ea.2-open
| | 18.ea.1 | open | | 18.ea.1-open
| | 17.ea.28 | open | | 17.ea.28-open
| | 17.ea.27 | open | | 17.ea.27-open
| | 17.ea.26 | open | | 17.ea.26-open
| | 17.ea.25 | open | | 17.ea.25-open
================================================================================
and install it using command sdk install java IDENTIFIER, i.e.:
sdk install java 16.0.1-zulu

Flyway is not executing script

I have Spring Boot application with Flyway.
I have following sql script:
src/main/resources/db/migration/V1__init.sql
but the script is not executed.
In application.properties file I have:
spring.datasource.url = jdbc:mysql://localhost:3306/carorderprocess?useSSL=false
spring.datasource.username = root
spring.datasource.password = ...
spring.flyway.baselineOnMigrate = true
When I run application, in DB I only see:
mysql> select * from flyway_schema_history;
+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
| installed_rank | version | description | type | script | checksum | installed_by | installed_on | execution_time | success |
+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
| 1 | 1 | << Flyway Baseline >> | BASELINE | << Flyway Baseline >> | NULL | root | 2019-11-19 10:47:52 | 0 | 1 |
+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
So the script is not executed, why?
This script won't run, as the version of the filename provided is not higher than the greatest version stored in flyway_schema_history table. There are two solutions you can do:
Clear the flyway_schema_history table
Rename your file to V2__init.sql (recommended solution)
Then simply restart your spring boot app, and changes should be applied out of the box
One note: 1st solution probably requires removal of spring.flyway.baselineOnMigrate = true property. I would also consider if you really need it. What it does can be found here
When you create Spring Boot application using Flyway, you need to do the next steps:
First. Add flyway dependency in pom.xml, if using maven:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>4.0.3</version>
</plugin>
Second. Generate flyway.properties file and it should reside in the same directory as the pom.xml file. Default configs to describe:
flyway.user=databaseUser
flyway.password=databasePassword
flyway.schemas=schemaName
flyway.url=jdbc:h2:mem:DATABAS
flyway.locations=filesystem:db/migration
Third. Create your migration files under db/migration folder. For example - V1_1_0__my_first_migration.sql.
Fourth. Run the application: mvn spring-boot:run.

Unable to use GMP with Omnet++

I have installed GMP on ubuntu. I download GMP-6.1.2 from "https://gmplib.org".Then I extracted it in Home folder and installed like:
1. cd gmp-6.1.2
2../configure
3. make
4. sudo make install
5. make check
I checked,gmp was installed in "/usr/local" and I opened omnet and I change these paths:
I entered Properties project:
1. in (c/c++ build | environment | path ), I added :
(/usr/local/include:/usr/local/lib) then I applied.
2. in (c/c++ General | paths and symbols | includes),I added
(/usr/local/include) in assembly, GNU c, GNU C++.then I applied.
At ( (c/c++ General | paths and symbols | Library paths). I added (/usr/local/lib). Then I applied.
Also ( (c/c++ General | paths and symbols | libraries). I wrote "gmpxx" and "gmp". Then I applied.
3. in (omnet++ | Makemake | select "src" folder | select Options |
custom | makefrag ) I added "EXTRA_OBJS=-lgmp". Then I applied them
and OK.
After that,I built my project and I received these errors :
Description Resource Path Location Type
Error refreshing Makefiles: /home/mar/Desktop/omnet_proj/id_2/test_independent/mixim-2.3/src/EXTRA_OBJS=-lgmp (No such file or directory) mixim-2.3 Unknown Makefile Problem
Description Resource Path Location Type
Program "gcc" not found in PATH mixim-2.3 [Discovery Options] page in project properties C/C++ Problem
Description Resource Path Location Type
Program "make" not found in PATH mixim-2.3 C/C++ Problem
I must say I am using MIXIM in Omnet++.
I don't know what is going on?
Could you please help me?
Thank you in advance of your help.
Assuming that you have installed libgmp using sudo apt-get install libgmp3-dev in your OMNeT++ project you have to do:
In header file (*.h) of simple module where you want to use gmp add:
#include <gmp.h>
Go to Project Properties, choose OMNeT++ | Makemake | select src | Options | Custom | Makefrag and write:
EXTRA_OBJS=-lgmp
To check you can add the following code somewhere in your source file, for example in initialize():
mpz_t a, b, c;
mpz_init_set_str(a, "123", 10);
mpz_init_set_str(b, "458", 10);
mpz_init(c);
mpz_add(c, a, b);
char * ctxt = mpz_get_str(NULL, 10, c);
EV << "c=" << ctxt << std::endl; // print the result
mpz_clear(a);
mpz_clear(b);
mpz_clear(c);
I think I can do that.
I have installed gmp in ubuntu. Then I added "gmp.h" and "gmpXX.h" to my project.
After that,I went to project properties | omnet++ | select SRC | Options | link | Additional libraries to link with:(-l option) and I inserted these two Option:
gmpxx , gmp .
Also,I added "/usr/local/include" in "paths and symbols(in project properties) | includes " and "/usr/local/lib" in " paths and symbols | library paths ".
After that,I added "/usr/include" in "paths and symbols(in project properties) | includes " and "/usr/lib/i386-linux-gnu" in " paths and symbols | library paths ".
And I built my project without any error.
At last,I run dear Jurzy D's example without any error.
I did not change any thing else.

No 'SPI-Provider' Manifest header

When trying to install my application as an osgi bundle with the install command in karaf on the command line, everything seems fine. When I then type start (id) everything still seems fine, but my application does not seem to accept requests. When I then type log:display, I get this:
2016-04-20 13:49:38,251 | INFO | Thread-19 | bundle | 37 - org.apache.aries.spifly.dynamic.bundle - 1.0.1 | Bundle Considered for SPI providers: oms-integrations
2016-04-20 13:49:38,251 | INFO | Thread-19 | bundle | 37 - org.apache.aries.spifly.dynamic.bundle - 1.0.1 | No 'SPI-Provider' Manifest header. Skipping bundle: oms-integrations
I'm new and I have no clue what this means ("No 'SPI-Provider' Manifest header.") or how to solve it?
This is not a problem. It just means that you have Aries spi-fly installed. It scans all bundles for this header and enhances the ones with the header to be able to use the ServiceLoader in OSGi. If you do not use ServiceLoader then you can safely ignore these messages.
You can also configure this logger to WARN to suppress the messsages.

Slow Regeneration in Jekyll

I'm developing a blog using jekyll and up until now I was very happy with it.
But as I make more posts the regeneration times are getting ridiculous (3-4 minutes). It's just not feasible to wait that long every time you make a change.
Specs:
Ruby 2.2.1
Jekyll 2.5.3
markdown: kramdown
highlighter: pygments
permalink:pretty
Working on a cloud service (Cloud9) with 2 GB of RAM
Not a lot of posts (~10), but I do use a lot of data (10 MB of json files in the "_data" folder, 14 MB of images in "img" folder)
Total size of the "_site" folder is 40 MB
Is it a normal thing with these specifications?
I've updated to Jekyll 3.0 to try incremental regeneration, but it didn't help in my case.
Any ideas?
Thanks!
Willem
Run jekyll serve --profile on your site and check what is taking more time to render. It should output a table that looks something like this.
Filename | Count | Bytes | Time
----------------------------------------------------------------------+-------+----------+------
_layouts/compress.html | 73 | 1649.86K | 1.526
_layouts/default.html | 72 | 1874.79K | 0.445
_layouts/post.html | 58 | 980.02K | 0.307
_posts/2015-12-10-how-to-create-and-host-a-website-on-github-pages.md | 1 | 9.36K | 0.294
feed.xml | 1 | 34.74K | 0.105
_includes/prev-next.html | 58 | 39.17K | 0.053
sitemap.xml | 1 | 19.90K | 0.035
_pages/archive.md | 1 | 28.98K | 0.035
_posts/2017-02-15-jekyll-sort-filters.md | 1 | 16.09K | 0.019
_includes/ga_data_fetch.html | 58 | 41.77K | 0.018
_includes/disqus-script.html | 58 | 30.89K | 0.018
_pages/tags.html | 1 | 14.97K | 0.015
That should give you a fair idea on where the problem exists.
Now while making changes to the site, if you want to render only the changed files then use jekyll serve --incremental or jekyll serve -I.
Incremental build still has some issues that the Jekyll team is working on.
A handy option to render only the latest post that you are writing would be jekyll serve --watch --limit_posts 1. This has saved me a lot of time while writing new posts.
There are a few options
Use --incremental on jekyll build or serve but use with caution
Use --profile on jekyll build to get an output of where time is used up
You could also have different config.yml files where you might include only draft posts for development and not for production.
Consider restructuring your development environment
Development folder with _posts containing just a sample
Production folder with your live set of _posts
copy you dev content over prior to production build
The profiling was showing nothing to worry about, but I was still getting 2-3 seconds regeneration times with a simple one page website.
I used a super simple Gemfile
source 'https://rubygems.org'
ruby "2.4.2"
gem "jekyll", "~> 3.6.2"
Then called bundle install again.
After that, regeneration times were back under 1 second.

Resources