From 922748755fe6a88a3a1ecc4e6342f86b7c4dfa40 Mon Sep 17 00:00:00 2001 From: Claudio Cambra Date: Thu, 20 Jun 2024 19:38:33 +0800 Subject: [PATCH] Extract app bundle codesigning procedure to separate file in mac crafter Signed-off-by: Claudio Cambra --- .../mac-crafter/Sources/Utils/Codesign.swift | 33 +++++++++++++++++++ admin/osx/mac-crafter/Sources/main.swift | 22 +------------ 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/admin/osx/mac-crafter/Sources/Utils/Codesign.swift b/admin/osx/mac-crafter/Sources/Utils/Codesign.swift index e0d5e5cbf..b8ffb7867 100644 --- a/admin/osx/mac-crafter/Sources/Utils/Codesign.swift +++ b/admin/osx/mac-crafter/Sources/Utils/Codesign.swift @@ -18,6 +18,10 @@ enum CodeSigningError: Error { case failedToCodeSign(String) } +enum AppBundleSigningError: Error { + case couldNotEnumeratePlugins(String) +} + func codesign( identity: String, path: String, @@ -29,3 +33,32 @@ func codesign( throw CodeSigningError.failedToCodeSign("Failed to code-sign \(path).") } } + +func codesignClientAppBundle( + at clientAppDir: String, withCodeSignIdentity codeSignIdentity: String +) throws { + print("Code-signing Nextcloud Desktop Client libraries and frameworks...") + + let clientFrameworksDir = "\(clientAppDir)/Contents/Frameworks" + let fm = FileManager.default + let clientLibs = try fm.contentsOfDirectory(atPath: clientFrameworksDir) + for lib in clientLibs { + guard isLibrary(lib) else { continue } + try codesign(identity: codeSignIdentity, path: "\(clientFrameworksDir)/\(lib)") + } + + let clientPluginsDir = "\(clientAppDir)/Contents/PlugIns" + guard let clientPluginsEnumerator = fm.enumerator(atPath: clientPluginsDir) else { + throw AppBundleSigningError.couldNotEnumeratePlugins( + "Failed to list craft plugins directory at \(clientPluginsDir)." + ) + } + + for case let plugin as String in clientPluginsEnumerator { + guard isLibrary(plugin) else { continue } + try codesign(identity: codeSignIdentity, path: "\(clientPluginsDir)/\(plugin)") + } + + print("Code-signing Nextcloud Desktop Client app bundle...") + try codesign(identity: codeSignIdentity, path: clientAppDir) +} diff --git a/admin/osx/mac-crafter/Sources/main.swift b/admin/osx/mac-crafter/Sources/main.swift index 7e1bcf96f..ea4e63ac9 100644 --- a/admin/osx/mac-crafter/Sources/main.swift +++ b/admin/osx/mac-crafter/Sources/main.swift @@ -113,27 +113,7 @@ struct MacCrafter: ParsableCommand { let craftBuildDir = "\(buildPath)/\(craftTarget)/build" let clientAppDir = "\(craftBuildDir)/nextcloud-client/image-\(buildType)-master/\(appName).app" - let clientFrameworksDir = "\(clientAppDir)/Contents/Frameworks" - let clientLibs = try fm.contentsOfDirectory(atPath: clientFrameworksDir) - for lib in clientLibs { - guard isLibrary(lib) else { continue } - try codesign(identity: codeSignIdentity, path: "\(clientFrameworksDir)/\(lib)") - } - - let clientPluginsDir = "\(clientAppDir)/Contents/PlugIns" - guard let clientPluginsEnumerator = fm.enumerator(atPath: clientPluginsDir) else { - throw MacCrafterError.failedEnumeration( - "Failed to list craft plugins directory at \(clientPluginsDir)." - ) - } - - for case let plugin as String in clientPluginsEnumerator { - guard isLibrary(plugin) else { continue } - try codesign(identity: codeSignIdentity, path: "\(clientPluginsDir)/\(plugin)") - } - - print("Code-signing Nextcloud Desktop Client app bundle...") - try codesign(identity: codeSignIdentity, path: clientAppDir) + try codesignClientAppBundle(at: clientAppDir, withCodeSignIdentity: codeSignIdentity) print("Done!") } -- 2.30.2