Add ability to notarise package from mac-crafter

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
Claudio Cambra 2024-09-19 21:01:39 +08:00
parent 1b747fa134
commit 8f2061da95
No known key found for this signature in database
GPG key ID: C839200C384636B0
2 changed files with 30 additions and 0 deletions

View file

@ -18,6 +18,7 @@ enum PackagingError: Error {
case projectNameSettingError(String) case projectNameSettingError(String)
case packageBuildError(String) case packageBuildError(String)
case packageSigningError(String) case packageSigningError(String)
case packageNotarisationError(String)
} }
func buildPackage(buildWorkPath: String, productPath: String) throws -> String { func buildPackage(buildWorkPath: String, productPath: String) throws -> String {
@ -45,3 +46,14 @@ func signPackage(packagePath: String, packageSigningId: String) throws {
try fm.moveItem(atPath: packagePathNew, toPath: packagePath) try fm.moveItem(atPath: packagePathNew, toPath: packagePath)
} }
func notarisePackage(
packagePath: String, appleId: String, applePassword: String, appleTeamId: String
) throws {
guard shell("xcrun notarytool submit \(packagePath) --apple-id \(appleId) --password \(applePassword) --team-id \(appleTeamId) --wait") == 0 else {
throw PackagingError.packageNotarisationError("Failure when notarising package!")
}
guard shell("xcrun stapler staple \(packagePath)") == 0 else {
throw PackagingError.packageNotarisationError("Could not staple notarisation on package!")
}
}

View file

@ -65,6 +65,15 @@ struct Build: ParsableCommand {
@Option(name: [.long], help: "Git clone command; include options such as depth.") @Option(name: [.long], help: "Git clone command; include options such as depth.")
var gitCloneCommand = "git clone --depth=1" var gitCloneCommand = "git clone --depth=1"
@Option(name: [.long], help: "Apple ID, used for notarisation.")
var appleId: String?
@Option(name: [.long], help: "Apple ID password, used for notarisation.")
var applePassword: String?
@Option(name: [.long], help: "Apple Team ID, used for notarisation.")
var appleTeamId: String?
@Option(name: [.long], help: "Apple package signing ID.") @Option(name: [.long], help: "Apple package signing ID.")
var packageSigningId: String? var packageSigningId: String?
@ -222,6 +231,15 @@ struct Build: ParsableCommand {
if let packageSigningId { if let packageSigningId {
try signPackage(packagePath: packagePath, packageSigningId: packageSigningId) try signPackage(packagePath: packagePath, packageSigningId: packageSigningId)
if let appleId, let applePassword, let appleTeamId {
try notarisePackage(
packagePath: packagePath,
appleId: appleId,
applePassword: applePassword,
appleTeamId: appleTeamId
)
}
} }
} }