@ -381,12 +381,22 @@ Error EditorExportPlatformOSX::_code_sign(const Ref<EditorExportPreset> &p_prese
# ifdef OSX_ENABLED
List < String > args ;
bool ad_hoc = ( p_preset - > get ( " codesign/identity " ) = = " " | | p_preset - > get ( " codesign/identity " ) = = " - " ) ;
if ( p_preset - > get ( " codesign/timestamp " ) ) {
args . push_back ( " --timestamp " ) ;
if ( ad_hoc ) {
WARN_PRINT ( " Timestamping is not compatible with ad-hoc signature, and was disabled! " ) ;
} else {
args . push_back ( " --timestamp " ) ;
}
}
if ( p_preset - > get ( " codesign/hardened_runtime " ) ) {
args . push_back ( " --options " ) ;
args . push_back ( " runtime " ) ;
if ( ad_hoc ) {
WARN_PRINT ( " Hardened Runtime is not compatible with ad-hoc signature, and was disabled! " ) ;
} else {
args . push_back ( " --options " ) ;
args . push_back ( " runtime " ) ;
}
}
if ( p_path . get_extension ( ) ! = " dmg " ) {
@ -403,7 +413,7 @@ Error EditorExportPlatformOSX::_code_sign(const Ref<EditorExportPreset> &p_prese
}
args . push_back ( " -s " ) ;
if ( p_preset- > get ( " codesign/identity " ) = = " " ) {
if ( ad_hoc ) {
args . push_back ( " - " ) ;
} else {
args . push_back ( p_preset - > get ( " codesign/identity " ) ) ;
@ -1166,10 +1176,9 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
String err ;
bool valid = false ;
// Look for export templates (first official, and if defined custom templates).
bool dvalid = exists_export_template ( " osx.zip " , & err ) ;
bool rvalid = dvalid ; // Both in the same ZIP.
// Look for export templates (custom templates).
bool dvalid = false ;
bool rvalid = false ;
if ( p_preset - > get ( " custom_template/debug " ) ! = " " ) {
dvalid = FileAccess : : exists ( p_preset - > get ( " custom_template/debug " ) ) ;
@ -1184,6 +1193,12 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
}
}
// Look for export templates (official templates, check only is custom templates are not set).
if ( ! dvalid | | ! rvalid ) {
dvalid = exists_export_template ( " osx.zip " , & err ) ;
rvalid = dvalid ; // Both in the same ZIP.
}
valid = dvalid | | rvalid ;
r_missing_templates = ! valid ;
@ -1194,16 +1209,26 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
valid = false ;
}
# ifdef OSX_ENABLED
bool sign_enabled = p_preset - > get ( " codesign/enable " ) ;
bool noto_enabled = p_preset - > get ( " notarization/enable " ) ;
bool ad_hoc = ( ( p_preset - > get ( " codesign/identity " ) = = " " ) | | ( p_preset - > get ( " codesign/identity " ) = = " - " ) ) ;
if ( noto_enabled ) {
if ( ad_hoc ) {
err + = TTR ( " Notarization: Notarization with the ad-hoc signature is not supported. " ) + " \n " ;
valid = false ;
}
if ( ! sign_enabled ) {
err + = TTR ( " Notarization: code signing required. " ) + " \n " ;
err + = TTR ( " Notarization: Code signing is required for notarization. " ) + " \n " ;
valid = false ;
}
if ( ! ( bool ) p_preset - > get ( " codesign/hardened_runtime " ) ) {
err + = TTR ( " Notarization: Hardened runtime is required for notarization. " ) + " \n " ;
valid = false ;
}
bool hr_enabled = p_preset - > get ( " codesign/hardened_runtime " ) ;
if ( ! hr_enabled ) {
err + = TTR ( " Notarization: hardened runtime required. " ) + " \n " ;
if ( ! ( bool ) p_preset - > get ( " codesign/timestamp " ) ) {
err + = TTR ( " Notarization: Timestamping is required for notarization. " ) + " \n " ;
valid = false ;
}
if ( p_preset - > get ( " notarization/apple_id_name " ) = = " " ) {
@ -1214,7 +1239,22 @@ bool EditorExportPlatformOSX::can_export(const Ref<EditorExportPreset> &p_preset
err + = TTR ( " Notarization: Apple ID password not specified. " ) + " \n " ;
valid = false ;
}
} else {
err + = TTR ( " Notarization is disabled. Exported project will be blocked by Gatekeeper, if it's downloaded from an unknown source. " ) + " \n " ;
if ( ! sign_enabled ) {
err + = TTR ( " Code signing is disabled. Exported project will not run on Macs with enabled Gatekeeper and Apple Silicon powered Macs. " ) + " \n " ;
} else {
if ( ( bool ) p_preset - > get ( " codesign/hardened_runtime " ) & & ad_hoc ) {
err + = TTR ( " Hardened Runtime is not compatible with ad-hoc signature, and will be disabled! " ) + " \n " ;
}
if ( ( bool ) p_preset - > get ( " codesign/timestamp " ) & & ad_hoc ) {
err + = TTR ( " Timestamping is not compatible with ad-hoc signature, and will be disabled! " ) + " \n " ;
}
}
}
# else
err + = TTR ( " macOS code signing and Notarization is not supported on the host OS. Exported project will not run on Macs with enabled Gatekeeper and Apple Silicon powered Macs. " ) + " \n " ;
# endif
if ( ! err . is_empty ( ) ) {
r_error = err ;