- Removed explicit reference to NextcloudKit dependency which implicitly is pulled in already by NextcloudFileProviderKit.
- Consolidated some source code files into their respective view controllers in the file provider UI extension.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
Using `"*"` will result in a different GUID with each invocation of the
linker (`light.exe`), which can break automated installations when a
localised version of the installer was loaded.
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
The appimagetool as previously provided from the AppImageKit repo was
deprecated and removed.
The new versions as provided by the appimagetool repository also ship
with an updated runtime which from my understanding improve
compatibility (e.g. libfuse is now statically linked, so systems don't
need to have it present) and seem to slightly reduce the binary size as
well.
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
- mac-crafter is an executable application, not a library
- Ensures all developers use identical dependency versions
- Provides reproducible builds across different environments
- Prevents "works on my machine" dependency issues
- Critical for production deployment consistency
- Enables reliable CI/CD builds with same dependency versions
- Helps with debugging by ensuring same versions across dev/test/prod
- Standard practice for applications vs libraries which should remain flexible
Signed-off-by: Iva Horn <iva.horn@icloud.com>
Had to rename Utils/Codesign.swift to Utils/Codesigning.swift to avoid duplicate module name compiler error.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
- Isolated global state into an actor.
- Updated declarations and calls to reflect asynchronicity.
- The replacement of the enumerator with subpathsOfDirectory(atPath:) was suggested by Copilot to necessarily avoid the use of synchronous enumeration in an asynchronous context.
- Updated README.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
This step sometimes fails with an error such as: "A timestamp was
expected but was not found.". Any code-signing errors will result in
the notarisation step to fail.
Apparently this might be due to intermittent network issues. Let's just
retry codesigning a couple of times in the case it fails ...
See also: https://developer.apple.com/documentation/security/resolving-common-notarization-issues#Include-a-secure-timestamp
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
Stopping the Windows Explorer process does not always work. Per default
the MSI Restart Manager will display a warning message after a timeout,
and not attempt to restart Explorer afterwards -- resulting in a black
screen if no other window is open.
Setting the property `MSIRMSHUTDOWN` to `1` will force the termination
of the process when the timeout is reached, which finally allows the
Explorer to be restarted.
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
The MSIs we distribute perform so-called "major upgrades".
From the Microsoft docs, we learn that...
> A typical major upgrade **removes a previous version** of an
> application and installs a new version.
Indeed that was the case -- the previous version is uninstalled
completely before the new version gets installed. Since we install an
extension that's loaded by explorer, the installer will ask the user to
restart Windows Explorer during the uninstallation of the previous
version (and restarting that might not always work as expected).
There is a way to change this behaviour though, using Wix3's
`MajorUpgrade` element. Through its `Schedule` property it's possible
to define when the removal of the previous version should occur.
The previous value `afterInstallInitialize` is one of two values that
perform a complete uninstall/install sequence. The new value
`afterInstallExecute` will install new files on top of the previous
installation (depending on the `REINSTALLMODE` I guess) and remove
older files that are not present.
In the case of the extensions this means that the .dlls from the
previous installation will not be touched, as long as the version
embedded in the DLL info didn't change. This results in the installer
no longer requesting Windows Explorer to restart, which is a big plus :D
I also changed the REINSTALLMODE to `dmus` to allow downgrades as well.
With this change, the request to restart Windows Explorer should
hopefully happen only once an installation was made using an MSI that
contains this change. Further updates will only request a restart if
the DLL version of these extensions change...
See also:
- https://learn.microsoft.com/en-us/windows/win32/msi/major-upgrades
- https://docs.firegiant.com/wix/schema/wxs/majorupgrade/#attributes:~:text=Schedule
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
shoudl enable replacing files during install happen only when needed
instead of always
will need to take care of migration from older releases
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
This allows the AppImage build to find and load the experimental VFS
plugins, and not crash with:
[ critical plugins /home/user/src/common/vfs.cpp:250 ]: Could not load plugin: not existent or bad metadata "nextclouddevsync_vfs_suffix"
[ fatal default /home/user/src/gui/folderman.cpp:326 ]: Could not load plugin
[1] 72936 IOT instruction (core dumped) ./nextclouddev-master-x86_64.AppImage
Fixes#7135Fixes#7194Fixes#7465
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
Qt 6.8 now requires macOS 12.0 as per https://doc.qt.io/qt-6.8/macos.html
for comparison, Qt 6.7 supported 11.0 and newer: https://doc.qt.io/qt-6.7/macos.html
also update the Packages project to refuse to install on anything older
than Monterey (12.0)
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
building all the translated installers takes about ~1 minute each, so
keep that in mind when adding extra translations ...
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
the base translations come from WixUI itself
There are still some untranslated strings in Nextcloud.wxs, we need to
take care of them at a later point. As a first step this is good
enough.
This commit serves as a proof-of-concept, the languages I used here will
change depending on what we want to support.
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>