Add ability to sign pkg from mac-crafter
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 19 Sep 2024 13:00:52 +0000 (21:00 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 24 Sep 2024 02:17:44 +0000 (10:17 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
admin/osx/mac-crafter/Sources/Utils/Packaging.swift
admin/osx/mac-crafter/Sources/main.swift

index 49ba535f49b36bcb39c65e9e7931800d5f061f0e..1da19d539480c1bf7faedde16e865b9facd7d88b 100644 (file)
@@ -17,6 +17,7 @@ import Foundation
 enum PackagingError: Error {
     case projectNameSettingError(String)
     case packageBuildError(String)
+    case packageSigningError(String)
 }
 
 func buildPackage(buildWorkPath: String, productPath: String) throws -> String {
@@ -34,3 +35,13 @@ func buildPackage(buildWorkPath: String, productPath: String) throws -> String {
     return "\(productPath)/\(packageFile)"
 }
 
+func signPackage(packagePath: String, packageSigningId: String) throws {
+    let packagePathNew = "\(packagePath).new"
+    guard shell("productsign --timestamp --sign '\(packageSigningId)' \(packagePath) \(packagePathNew)") == 0 else {
+        throw PackagingError.packageSigningError("Could not sign pkg file!")
+    }
+    let fm = FileManager.default
+    try fm.removeItem(atPath: packagePath)
+    try fm.moveItem(atPath: packagePathNew, toPath: packagePath)
+}
+
index 1efe1e99203195e28aaa65bd1fe16520970a620b..4ba8d75dc7c88351a074579ecc933fa57697b379 100644 (file)
@@ -65,6 +65,9 @@ struct Build: ParsableCommand {
     @Option(name: [.long], help: "Git clone command; include options such as depth.")
     var gitCloneCommand = "git clone --depth=1"
 
+    @Option(name: [.long], help: "Apple package signing ID.")
+    var packageSigningId: String?
+
     @Flag(help: "Reconfigure KDE Craft.")
     var reconfigureCraft = false
 
@@ -216,6 +219,10 @@ struct Build: ParsableCommand {
         if package {
             let packagePath =
                 try buildPackage(buildWorkPath: buildWorkPath, productPath: productPath)
+
+            if let packageSigningId {
+                try signPackage(packagePath: packagePath, packageSigningId: packageSigningId)
+            }
         }
 
         print("Done!")