Extract app bundle codesigning procedure to separate file in mac crafter

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2024-06-20 19:38:33 +08:00 committed by Claudio Cambra
parent a4fbf97f36
commit 922748755f
2 changed files with 34 additions and 21 deletions

View file

@ -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)
}

View file

@ -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!")
}