case failedToCodeSign(String)
}
+enum AppBundleSigningError: Error {
+ case couldNotEnumeratePlugins(String)
+}
+
func codesign(
identity: String,
path: String,
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)
+}
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!")
}