application Java pour Mac OS Légaliser existant Catalina

Paul Taylor:

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
    
Dan Gravell:

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é jpackagepour 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 .appest 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é:

  1. Construire l'application dans la structure correcte
  2. Créer un fichier droits
  3. Code signe votre code
  4. Code de signer les fichiers à l'intérieur de l'exécution fourni, forçant la signature
  5. Code signe le moteur d'exécution fourni lui-même
  6. Code de signer votre fichier application
  7. Paquet dans un DMG
  8. légaliser il
  9. Expédier

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=329930&siteId=1
conseillé
Classement