Extract app bundle codesigning procedure to separate file in mac crafter
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 20 Jun 2024 11:38:33 +0000 (19:38 +0800)
committerClaudio Cambra <developer@claudiocambra.com>
Mon, 8 Jul 2024 07:41:45 +0000 (15:41 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
admin/osx/mac-crafter/Sources/Utils/Codesign.swift
admin/osx/mac-crafter/Sources/main.swift

index e0d5e5cbf32b60823ac5654e728f35b2f02a28de..b8ffb78679929a44f3506888efbc2eea3fc4386c 100644 (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)
+}
index 7e1bcf96f4442a68de80306de582bd219fa97aa3..ea4e63ac9cc068d68cbb832e77654be1ddd18ca6 100644 (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!")
     }