Codesignierung hinzufügen / ersetzen

Grundsätzliches

  • Im Finder das App-Icon wählen, dann das AppleScript aus dem Menü auswählen.
  • Nach Rückfrage wird folgendes ausgeführt:
    • Quarantäne-Flag entfernen, sofern vorhanden
    • Codesignatur erstellen, eine bestehende ggf. überschreiben
    • Klappt das nicht, wird ein störendes Resourcefork entfernt und das Erstellen der Codesignatur wiederholt.
    • Endet mit Erfolgs- oder Fehlermeldung.

AppleScript

Dateiname: Codesign.scpt

Im Skripteditor öffnen

(*
Codesign

Copyright © 2021
Café MegaByte
*)

tell application "Finder"
	activate
	
	-- Zählen
	set l_selection to selection
	set l_count to count l_selection
	
	-- Keine Datei gewählt?	
	if l_count = 0 then
		set l_selection to choose file
	end if
	
	-- Nur eine Datei erlauben
	if l_count > 1 then
		display dialog "Nur ein Programm wählen" buttons {"Ok"} default button 1
		return
	end if
	
	set l_file to item 1 of l_selection
	set l_name to name of l_file
	
	-- AppleScript-Pfad in Unix-Pfad umwandeln
	set l_path_posix to POSIX path of (l_file as string)
	
	-- Sicherheitsabfrage
	display dialog "Soll die Codesignatur von " & l_name & " ersetzt werden? Dies kann nicht rückgängig gemacht werden." buttons {"Fortfahren", "Abbrechen"} default button 1
	
	-- Quarantäne-Flag entfernen, falls vorhanden
	do shell script "xattr -dr com.apple.quarantine '" & l_path_posix & "'"

	-- Codesignatur zwangsweise überschreiben
	try
		do shell script "codesign --deep -f -s - '" & l_path_posix & "'"
		
		-- Störende Ressource-Forks?
	on error l_err_msg number l_err_number
		
		-- Ressource-Forks löschen (dabei geht z.B. ein Custom Icon verloren)
		do shell script "xattr -cr '" & l_path_posix & "'"
		
		-- Codesignatur erneut überschreiben
		try
			do shell script "codesign --deep -f -s - '" & l_path_posix & "'"
			
			-- Fehler
		on error l_err_msg2 number l_err_number2
			display dialog "Fehler: " & l_err_msg2 buttons {"Ok"} default button 1
			return
		end try
		
	end try
	
	-- Erfolgsmeldung
	display dialog "Codesignatur wurde erstellt." buttons {"Ok"} default button 1
	
end tell