784 Commits

Author SHA1 Message Date
db2748d70e chore: use newer build image with Qt 6.9.3 release as expected
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2026-01-13 16:17:05 +01:00
d61e04c503 Implement signing for Sparkle Installer and Autoupdate
Added functions to sign Sparkle Installer and Autoupdate within the Sparkle framework.

Signed-off-by: Rello <Rello@users.noreply.github.com>
2026-01-10 10:18:33 +07:00
b97a3d91bc fix(mac-crafter): Signing additional binaries.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-09 22:14:35 +01:00
f68722ab08 fix(macOS): Enabled hardened runtime in code signing.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-09 11:39:23 +01:00
0d4532e245 fix(mac-crafter): Also sign nextclouddevcmd in app bundle executables directory.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-08 17:17:31 +01:00
4342277403 fix(mac-crafter): Also sign nextcloudcmd in app bundle executables directory.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-08 16:51:03 +01:00
99eea65e8d fix(mac-crafter): Removed parallelized code signing tasks.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-08 16:50:11 +01:00
8c63f9adae fix(mac-crafter): Include dynamic libraries from binaries directory in singing.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-08 13:23:41 +01:00
ca30e5e4e7 fix(mac-crafter): Include dynamic libraries of frameworks directory in signing.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-08 10:04:18 +01:00
6e1752f2b5 fix(mac-crafter): Propagate signing verification errors.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-07 16:32:45 +01:00
80873db729 fix(mac-crafter): Updated codesign command arguments.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-07 14:23:01 +01:00
3f511c28e5 chore(mac-crafter): Added MARK comments for navigation.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-07 14:22:28 +01:00
0d976ef5c4 feat(mac-crafter): New logging.
- Write to standard output in terminal environment.
- Write to unified logging system.
- Write to log file.
- All simultaneously.
- Standard output and errors from child processes launched are captured, too.

Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-06 12:26:53 +01:00
e1bbb70ef2 fix(mac-crafter): Check for existence of a directory to remove before attempting to do so.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2026-01-05 15:04:12 +01:00
0bb0e3215a chore(mac-crafter): Removed obsolete method argument.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-19 09:04:19 +01:00
4861c0d07a feat(mac-crafter): Significantly accelerated signing with mac-crafter by signing whole bundles at once and concurrently.
- Signing individual frameworks, libraries and bundles as a whole is much faster than signing every contained file individually.
- Updated minimum macOS deployment target of mac-crafter to macOS 12. Because we are using Qt 6.9, we already have that as a requirement for our client anyway. So the raise is safe.
- The Sparkle framework is now downloaded directly with first-party network API instead of shelling out to wget which is unnecessary.
- Concurrent signing: This parallelizes the signing of dynamic libraries and frameworks on the same file system level to leverage available resources and reduce the signing time.
- Rebased branch onto i2h3/proper-macos-sandboxing
- Removed extension entitlement source files and related build settings from the Xcode project to be build with CMake instead.
- Set up CMake to generate the required entitlement manifests by itself to be used later on by Mac Crafter in the code signing.
- Updated the mac-crafter build subcommand to rely on URLs instead of path strings.
- Updated the mac-crafter build subcommand to reference the entitlement manifests generated by CMake.
- Updated the mac-crafter codesign subcommand to require arguments for specifying the entitlement manifests to sign the app extensions.
- Updated README of mac-crafter and removed a lot of outdated and redundant information.

Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-19 09:04:18 +01:00
291156dd48 fix(macOS): Development team group identifier prefix.
- Replaced "group." with DEVELOPMENT_TEAM.
- Removed every occurrence of SOCKETAPI_TEAM_IDENTIFIER_PREFIX.
- Removed NCFPKAppGroupIdentifier from MacOSXBundleInfo.plist.in.

Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-18 10:29:40 +01:00
c2e01d4930 fix(macOS): Added missing user selected read-write entitlement to main app sandbox.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-18 10:29:40 +01:00
202cb4e367 fix(macOS): Added container migration manifest.
This moves the preferences of the app into its sandbox container as documented here:
https://developer.apple.com/documentation/security/migrating-your-app-s-files-to-its-app-sandbox-container

Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-18 10:29:40 +01:00
22eec82585 feat(macOS): Enabled app sandbox and network client entitlements for main app.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-18 10:29:40 +01:00
1de9cef1e6 fix(macOS): Enforce valid app group identifier.
Signed-off-by: Iva Horn <iva.horn@nextcloud.com>
2025-12-18 10:29:40 +01:00
35f1198fc2 chore: remove unused build scripts
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-12-15 11:28:01 +01:00
21edd08f43 fix(AppImage): include an extra library for nss3 to prevent a crash
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2025-12-04 16:03:55 +01:00
6ba027c906 feat(file-provider): Integrated localizations from Transifex.
- Introduced TransifexStringCatalogSanitizer command-line utility.
- Introduced dedicated Transifex CLI configuration file for NextcloudIntegration project.

Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-10-07 14:28:44 +02:00
28b0c34548 fix: ignore Qt6 WebEngineCore PDB file that is too big for Wix Toolset 3
we have a limit in file size to 32 bits integer

this file is more than 2 GBs

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
2025-10-02 21:25:13 +02:00
98fcb0cffe chore(mac-crafter): default to next blueprint ref by default
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-09-30 12:41:50 +02:00
18b62b371a fix(mac-crafter): use correct Craft parameter for appbundleless builds
Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-09-30 12:41:50 +02:00
6c5ee7c14a feat: Replaced Unified Logging System with Custom Solution.
- 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>
2025-09-24 13:23:28 +02:00
0259ff4568 fix(msi): ensure the same ProductCode is used for embedded transforms
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>
2025-08-21 10:58:49 +02:00
7075fb4a2a ci: Remove Debian Bullseye, add Trixie
Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
2025-08-13 08:30:57 +02:00
55b09b00c1 fix(msi): display external version string in installer
e.g. 3.16.82 -> "3.17.0-rc2"; non-rc/daily builds will still read
"3.17.0"

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-08-06 12:14:23 +02:00
10b86edecb fix(mac-crafter): Do not strip get-task-allow entitlement from developer builds of extensions during code signing.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-08-01 17:48:00 +02:00
ebdee9aac0 feat(mac-crafter): Added time measurement of build phases to improve on.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-30 11:36:19 +02:00
5ca272cb49 fix(mac-crafter): use AsyncParsableCommand everywhere
For some reason using `ParsableCommand` structs as subcommands of an
`AsyncParsableCommand` does not correctly handle all passed CLI
arguments.

The behaviour before this commit was as follows:

```
% mac-crafter create-dmg
Error: Missing expected argument '<app-bundle-path>'
Help:  <app-bundle-path>  Path to the desktop client app bundle.
Usage: mac-crafter create-dmg <app-bundle-path> [--product-path <product-path>] [--build-path <build-path>] [--app-name <app-name>] [--apple-id <apple-id>] [--apple-password <apple-password>] [--apple-team-id <apple-team-id>] [--package-signing-id <package-signing-id>] [--sparkle-package-sign-key <sparkle-package-sign-key>]
  See 'mac-crafter create-dmg --help' for more information.

% mac-crafter create-dmg /tmp/Nextcloud.app
OVERVIEW: Create a DMG for the client.

USAGE: mac-crafter create-dmg <app-bundle-path> [--product-path <product-path>] [--build-path <build-path>] [--app-name <app-name>] [--apple-id <apple-id>] [--apple-password <apple-password>] [--apple-team-id <apple-team-id>] [--package-signing-id <package-signing-id>] [--sparkle-package-sign-key <sparkle-package-sign-key>]

ARGUMENTS:
  <app-bundle-path>       Path to the desktop client app bundle.
[...]
```

After changing every command struct to derive from
`AsyncParsableCommand`:

```
% mac-crafter create-dmg
Error: Missing expected argument '<app-bundle-path>'
Help:  <app-bundle-path>  Path to the desktop client app bundle.
Usage: mac-crafter create-dmg <app-bundle-path> [--product-path <product-path>] [--build-path <build-path>] [--app-name <app-name>] [--apple-id <apple-id>] [--apple-password <apple-password>] [--apple-team-id <apple-team-id>] [--package-signing-id <package-signing-id>] [--sparkle-package-sign-key <sparkle-package-sign-key>]
  See 'mac-crafter create-dmg --help' for more information.

% mac-crafter create-dmg /tmp/Nextcloud.app
Required command "create-dmg" is missing, installing...
[...]
```

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-07-22 09:49:22 +02:00
99e760363a fix(macOS): Enable debugger to attach to process.
- Disable hardened runtime for debug builds.
- Add required get-task-allow entitlement conditionally.

Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-21 14:11:16 +02:00
e0ba1db826 ci: change download url of appimagetool
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>
2025-07-21 13:09:53 +02:00
472684cf2e fix(mac-crafter): Checked in Package.resolved.
- 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>
2025-07-16 16:15:33 +02:00
5f3c381617 fix(mac-crafter): Updated .gitignore to not exclude source code files expected to be checked in.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-16 16:15:33 +02:00
c898525d74 feat(mac-crafter): Added instructions to README on how to run and debug mac-crafter from Xcode.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-16 14:23:25 +02:00
3e27c5f0f7 feat(mac-crafter): Reorganized commands in dedicated source code files for improved developer experience.
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>
2025-07-16 14:23:25 +02:00
e93e23f0a7 feat(mac-crafter): Update to Swift 6.1 and Strict Concurrency Checks.
- 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>
2025-07-16 11:56:55 +02:00
ed22111100 ci: switch back to upstream CraftMaster
The fix we needed was merged this week 🎉
https://invent.kde.org/packaging/craftmaster/-/merge_requests/7

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-07-11 19:16:41 +02:00
a954021026 ci: Remove Ubuntu Oracular, add Questing
Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
2025-07-11 13:28:35 +02:00
1c96f7fc18 fix(mac-crafter): Updated default CraftMaster repository URL.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-10 10:15:03 +02:00
f05b37a214 fix(mac-crafter): Outsourced MacCrafterError type into dedicated source code file.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-10 10:15:03 +02:00
1da444502e fix(mac-crafter): Textual improvements.
Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-10 10:15:03 +02:00
b631940a1d Fix: mac-crafter installs wget on demand.
wget is used but not automatically installed, if missing.

Signed-off-by: Iva Horn <iva.horn@icloud.com>
2025-07-07 15:24:21 +02:00
49e88d6eac fix(msi): set the REBOOT property in the MSI
A value of `ReallySuppress` will not display a reboot prompt whenever
the `ForceReboot` action was run, or whenever a reboot was scheduled
(e.g. by `FilesInUse`).  Apparently this will not reboot the machine on
its own either.

`winget` sets this property in its manifest[0], and according to reports in
issue #5369 this seems to work.

See also: https://learn.microsoft.com/en-us/windows/win32/msi/reboot

[0]: 0b40904d14/manifests/n/Nextcloud/NextcloudDesktop/3.16.5/Nextcloud.NextcloudDesktop.installer.yaml (L16)

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
2025-06-04 10:20:15 +02:00
bc102fc06b fix(cmake): Strip final newline from bundled localisations
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
2025-06-02 15:15:04 +02:00
a2b12cff72 fix(cmake): Build CFBundleLocalizations
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
2025-06-02 15:15:04 +02:00