Helfer startet nicht: --deep hat ihm die App-Entitlements verpasst

launchd lehnte den Start ab, ohne Absturzbericht und ohne sichtbaren Fehler:

  launchd: exited with exit reason (namespace: 9 code: 0x8) - OS_REASON_EXEC
  amfid: OnyxHelper not valid: Code=-413 "No matching profile found"
  taskgated-helper: Disallowing com.scarriffleservices.onyx.helper
                    because no eligible provisioning profiles found

Ursache war OTHER_CODE_SIGN_FLAGS = --deep, das ich anfangs für das ad-hoc
signierte MediaRemoteAdapter.framework gesetzt hatte. --deep überträgt die
Entitlements der App auf jede eingebettete Binary. Der Helfer bekam dadurch
application-identifier, weatherkit und application-groups verpasst — alles
eingeschränkte Entitlements, die ein Provisioning-Profil verlangen. Ein nacktes
Kommandozeilenprogramm kann aber keines einbetten, denn das ist eine Datei im
Bundle. Also verweigerte AMFI die Ausführung.

Für das Framework wird --deep gar nicht gebraucht: es wird von /usr/bin/perl
geladen, nicht von Onyx, und dafür ist ohnehin disable-library-validation da.

Der Helfer trägt jetzt keine Entitlements — er braucht auch keine. Ein
root-Dienst mit möglichst wenig Rechten ist genau das, was man will.

Gefunden über das Protokoll von amfid und taskgated. Der Weg dorthin führte
über zwei Ausschlüsse: der Helfer läuft direkt gestartet einwandfrei, und seine
Signatur erfüllt die Anforderung der App. Damit war klar, dass es weder an der
Binary noch an der Signatur liegt, sondern an der Umgebung.
This commit is contained in:
Guido Schmit
2026-08-10 23:01:51 +02:00
parent d73b789fb7
commit f48b29e53e
3 changed files with 750 additions and 714 deletions

View File

@@ -433,7 +433,6 @@
MARKETING_VERSION = 0.1.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
OTHER_CODE_SIGN_FLAGS = "--deep";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
@@ -521,7 +520,6 @@
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_CODE_SIGN_FLAGS = "--deep";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;

File diff suppressed because it is too large Load Diff

View File

@@ -13,9 +13,20 @@ settings:
MARKETING_VERSION: "0.1.0"
CURRENT_PROJECT_VERSION: "1"
ENABLE_HARDENED_RUNTIME: YES
# Der MediaRemote-Adapter bringt ein ad-hoc signiertes Framework mit, das
# der mit Team-Zertifikat signierte Host sonst nicht laden darf.
OTHER_CODE_SIGN_FLAGS: "--deep"
# KEIN --deep.
#
# Es überträgt die Entitlements der App auf jede eingebettete Binary. Der
# privilegierte Helfer bekam dadurch application-identifier, weatherkit und
# application-groups verpasst — allesamt eingeschränkte Entitlements, die
# ein Provisioning-Profil verlangen. Ein nacktes Kommandozeilenprogramm kann
# aber keines einbetten, also lehnte AMFI den Start ab:
#
# amfid: OnyxHelper not valid: Code=-413 "No matching profile found"
# taskgated-helper: Disallowing com.scarriffleservices.onyx.helper
# because no eligible provisioning profiles found
#
# Für das ad-hoc signierte MediaRemoteAdapter.framework wird --deep nicht
# gebraucht: dafür ist disable-library-validation da.
SWIFT_STRICT_CONCURRENCY: complete
# Xcode lagert im Debug-Build den Programmcode in eine eigene dylib aus
# (für SwiftUI-Vorschauen). Das Hauptprogramm ist dann nur noch ein Rumpf —