Uso un prodotto chiamato install4j per creare i file DMG per la mia app. Il codice firma correttamente l'app all'interno del file DMG e può farlo da sistemi operativi diversi da macOS.
Attenzione però:install4j non è un software gratuito ed è piuttosto costoso.
Puoi aggirare il problema firmando solo JavaApplicationStub e info.plist della tua applicazione ed escludendo la cartella "Resources" dalla firma. Quindi dovresti modificare il processo di compilazione per utilizzare il contenitore pre-firmato. Ovviamente questo non è il senso del codesign, ma funzionerà;-)
Per raggiungere questo obiettivo, procedi come segue:
- crea la tua .app come al solito
- spostalo sul tuo Mac
- crea un file "ResourceRules.plist" con i seguenti contenuti:
ResourceRules.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<false/>
<key>^version.plist$</key>
<true/>
</dict>
</dict>
</plist>
-
ora firma con i seguenti comandi:CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"codesign -s "Certificate Name" --resource-rules ResourceRules.plist -fv MyApp.app
-
Quindi elimina tutto in Risorsa e verifica la firma (codesign -v -v MyApp.app). Vedrai che è ancora valido
-
Usa lo stub firmato completo nel tuo processo di compilazione. Puoi cambiare tutto in Risorse ma non puoi cambiare info.plist.
Non esiste un modo documentato per firmare il codice di un'applicazione Mac OS X in Linux.
L'unico modo che ho trovato per farlo finora è usare SSH in un Mac e usarlo.
D'altra parte, secondo @Steve McLeod (https://stackoverflow.com/a/55906962/28190) il pacchetto di installazione install4j offre questo:
Firma del codice integrata su Windows e Mac OS X . Nella sezione "Impostazioni generali", install4j ora ha una scheda "Firma del codice" in cui è possibile configurare i certificati di firma del codice per Windows e Mac OS X. Il codesign verrà applicato a tutti i lanciatori e alle applicazioni di installazione nei file multimediali corrispondenti. Le implementazioni per la firma del codice sono multipiattaforma, quindi puoi firmare file multimediali Windows e Mac OS X da un server di build Linux, ad esempio.
Quindi deve essere tecnicamente possibile.