Je mets un binaire exécutable XXX dans mon application qui fonctionne sur MacOS ,et je le signe. Mon application utilisera ce service via le port.
L'exécutable binaire XXX enregistrera un service par le biais du fichier plist après l'installation de mon application, le fichier plist contient DYLD_LIBRARY_PATH qui indique à l'exécutable binaire où trouver la dylib à utiliser.
launchctl load -wF "$HOME/Library/LaunchAgents/local.plist"
launchctl start local
Voici le problème :
Cela a bien fonctionné après avoir construit une application.
mais lorsque j'ai signé et notarié le tout, puis ouvert mon application pour l'utiliser, il y a eu des erreurs comme suit :
dyld: Library not loaded: @@HOMEBREW_PREFIX@@/opt/libev/lib/libev.4.dylib
Referenced from: /Users/buffer/Library/Application Support/XXX
Reason: unsafe use of relative rpath @@HOMEBREW_PREFIX@@/opt/libev/lib/libev.4.dylib in /Users/buffer/Library/Application Support/XXX with restricted binary
Il utilisera le chemin dylib par défaut@@HOMEBREW_PREFIX@@/opt/libev/lib/libev.4.dylib qui provient du binaire exécutable XXX, pas mon DYLD_LIBRARY_PATH personnalisé . Apple a restreint l'utilisation des binaires tels que le rpath relatif non sécurisé.
Mis à jour :
Mon application va démarrer un shell script pour installer l'exécutable binaire XXX et la dylib , Le binaire exécutable XXX s'enregistrera comme un service à démarrer et à arrêter par le biais de plist comme ci-dessous
launchctl load -wF "$HOME/Library/LaunchAgents/local.plist"
launchctl start local
Le chemin XXX de mon binaire exécutable et DYLD_LIBRARY_PATH sont tous deux situés dans /Users/buffer/Library/Application Support/myApp/*** , il démarre séparément en tant que service à utiliser par mon application.
J'ai trouvé quelques situations ci-dessous :
1. J'ai un même exécutable binaire XXX signé au 2018-09-25, il fonctionne bien.
2. et les binaires exécutables XXX qui n'ont pas été signés ont également fonctionné sans problème.
3. Mais quand j'ai signé le binaire exécutable XXX maintenant et que je l'utilise avec dylib, il y aura les erreurs ci-dessus.
Alors, est-ce que l'algorithme du signe d'apple a changé et fait que cette erreur se produit ? voici mon code de commande pour l'instant comme ci-dessous :
codesign --force --options runtime --sign "Application Developer ID : ****" XXX
Enfin :
J'ai trouvé le problème, Apple exige l'activation des développeurs Runtime renforcé pour chaque application à notrize maintenant. Si vous activez l'exécution renforcée mais ne spécifiez pas les droits, alors certaines autorisations seront désactivées par défaut.
Ma permission d'utiliser les variables d'environnement DYLD a été désactivée par défaut.
vous pouvez consulter ce document ci-dessous
Si vous personnalisez le flux de travail de signature de code comme moi, vous pouvez spécifier les droits lorsque vous signez en code comme ci-dessous, entitlements.plist contient les permissions que vous voulez activer.
codesign --force --options runtime --entitlements /Users/buffer/Desktop/entitlements.plist --sign "Developer ID Application: ****" XXX