Je distribue une application Java pour Mac OS, il est développeur signé mais pas légalisée. Pas vraiment sûr où commencer avec cela car la documentation est biaisée vers la création d'applications avec Xcode que je ne l'utilise, mais je veux juste la façon la plus simple à mon application authentifiera et de passer ensuite.
La lecture de la documentation que j'ai quelques préoccupations déjà:
Je suis actuellement en utilisant Java 8, est-il possible d'une application Java légaliser 8 ou dois-je passer à Java 11. Je préférerais ne pas passer à Java 11 parce qu'il causerait problème sur d'autres plates-formes que je soutiens.
Mon Mac est dev la machine un vieux MacBook Pro, et en tant que tel ne peut pas être mis à jour passé OSX El Capitan 10.11.6, puis-je Légaliser avec cette machine ou non? J'ai une machine plus récente, mais il est pas configuré pour le développement et j'ai quelques préoccupations au sujet de transférer les certificats d'identification de développeur à ce que cette mise en place a été problématique en premier lieu.
J'utilise la fourchette AppBundler https://github.com/TheInfiniteKind/appbundler/ pour emballer mon application
Ceci est appelé par un fichier de script build fourmi qui fait la signature, etc, nous avons fini par créer un dmg en utilisant dmgCanvas
Je posterai le script fourmi ci-dessous, en espérant que quelqu'un peut me commencer avec les étapes de base
#!/bin/bash #set -x cd /Users/paul/code/jthink/songkong/src/main/scripts hiutil -C -fapplehelpbook/SongKongHelp/SongKongHelp.helpindex applehelpbook/SongKongHelp/ cd /Users/paul/code/jthink/songkong rm -fr /Applications/SongKong.app mvn clean mvn -DskipTests=true install rm -fr target/songkong-6.6 unzip target/songkong-6.6-distribution.zip -d target ant while read line; do echo "$line" if [[ "$line" = "<string>1.0</string>" ]]; then cat mergefile.txt # or echo or printf your extra lines fi done < /Applications/SongKong.app/Contents/Info.plist > Info.new while read line; do echo "$line" if [[ "$line" = "<false/></dict>" ]]; then cat mergefile2.txt fi done < Info.new > Info.new2 rm /Applications/SongKong.app/Contents/Info.plist rm Info.new mv Info.new2 /Applications/SongKong.app/Contents/Info.plist sudo cp -r target/songkong-6.6/applehelpbook/SongKongHelp /Applications/SongKong.app/Contents/Resources rm /Applications/SongKong.app/Contents/PlugIns/jdk1.8.0_192.jdk/Contents/MacOS/libjli.dylib cp /Applications/SongKong.app/Contents/PlugIns/jdk1.8.0_192.jdk/Contents/Home/jre/lib/jli/libjli.dylib /Applications/SongKong.app/Contents/PlugIns/jdk1.8.0_192.jdk/Contents/MacOS export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate" /usr/bin/codesign --sign "Developer ID Application: P Taylor" --force --deep --verbose /Applications/SongKong.app /usr/bin/codesign --verify --deep --verbose /Applications/SongKong.app cd /Users/paul/code/jthink/SongKong /usr/local/bin/dmgcanvas /Users/paul/code/jthink/SongKong/dmgCanvas_songkong.dmgCanvas /Users/paul/songkong-osx.dmg -v SongKong
Modifier 02/12/2020 - il y a eu beaucoup de changements parce que Apple ont lentement resserré les exigences pour notarisation. De 3 février, ils semblent avoir atteint la phase finale, ce qui signifie que votre application doit répondre aux exigences beaucoup plus élevées, y compris un qui est construit JRE contre le dernier SDK et avec le soutien « d'exécution durci ».
J'ai donc dépouillait de la vieille discussion.
Ma première question a été en place - vous avez besoin d' un compte actif du programme de développement avec Apple ID ( ce qui est facile) mais, lorsque vous suivez les instructions pour ajouter un mot de passe dans le trousseau, utilisez le mot de passe spécifique App . Vous devez également activer auth à deux facteurs pour votre compte Apple ID.
Une fois que vous travaillez la ligne de commande appelle il est assez facile d'automatiser dans un script de compilation. Je l' ai utilisé jpackage
pour créer l'application et le DMG , mais méfiez - vous - actuellement son approche de la signature de l'application ne fonctionne pas .
En termes de script, voici ce que je fais au code signer l'application appropriée pour notarisation (cela suppose une .app
est déjà créée):
% security unlock-keychain -p passwordhere codesigning.keychain
% find my-app.app -type f \
-not -path "*/Contents/runtime/*" \
-not -path "*/Contents/MacOS/my-app" \
-not -path "*libapplauncher.dylib" \
-exec codesign --timestamp --entitlements /tmp/bliss.entitlements -s "XXX" --prefix com.myapp. --options runtime -v --keychain /path/to/codesigning.keychain {} \;
% find my-app.app/Contents/runtime -type f \
-not -path "*/legal/*" \
-not -path "*/man/*" \
-exec codesign -f --timestamp --entitlements /tmp/bliss.entitlements -s "XXX" --prefix com.myapp. --options runtime -v --keychain /path/to/codesigning.keychain {} \;
% codesign -f --timestamp --entitlements /tmp/bliss.entitlements -s "XXX" --prefix com.myapp. --options runtime -v --keychain /path/to/codesigning.keychain my-app.app/Contents/runtime
% codesign -f --timestamp --entitlements /tmp/bliss.entitlements -s "XXX" --prefix com.myapp. --options runtime -v --keychain /path/to/codesigning.keychain my-app.app
Les droits devraient être:
<?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>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
<true/>
</dict>
</plist>
Tous les tests fonctionnent:
% codesign -vvv --deep --strict my-app.app/Contents/runtime
my-app.app/Contents/runtime: valid on disk
my-app.app/Contents/runtime: satisfies its Designated Requirement
% codesign -vvv --deep --strict my-app.app/
--prepared:/private/tmp/my-app.app/Contents/MacOS/libapplauncher.dylib
--validated:/private/tmp/my-app.app/Contents/MacOS/libapplauncher.dylib
my-app.app/: valid on disk
my-app.app/: satisfies its Designated Requirement
% spctl -a -t exec -vv my-app.app
my-app.app: accepted
source=Developer ID
origin=XXX
À ce stade, vous devriez également essayer de lancer votre application - le processus de signature de code peut casser des choses.
De là, vous pouvez créer un DMG (encore une fois, l' utilisation I jpackage
) et cela devrait passer notarisation.
En résumé:
- Construire l'application dans la structure correcte
- Créer un fichier droits
- Code signe votre code
- Code de signer les fichiers à l'intérieur de l'exécution fourni, forçant la signature
- Code signe le moteur d'exécution fourni lui-même
- Code de signer votre fichier application
- Paquet dans un DMG
- légaliser il
- Expédier