Notarización de aplicaciones Java existentes para MacOS Catalina

Paul Taylor:

Distribuyo una aplicación Java para MacOS, es desarrollador firmado pero no notariado. No es muy seguro por dónde empezar con esto, ya que la documentación está tan sesgado hacia la creación de aplicaciones con Xcode que yo no uso, pero sólo quiero la forma más sencilla de autenticar mi aplicación y luego seguir adelante.

La lectura de la documentación Tengo algunas preocupaciones ya:

  • Actualmente estoy usando Java 8, ¿es posible para escriturar una aplicación Java 8 o necesito para mover a Java 11. preferiría no pasar a Java 11, ya que podría causar un problema en algunas otras plataformas que apoyo.

  • Mi dev máquina Mac es un viejo MacBook Pro, y como tal no puede ser actualizado pasado OSX 10.11.6 El Capitán, ¿puedo Notarización con esta máquina o no? Tengo una máquina más reciente pero no está configurado para el desarrollo y tengo algunas preocupaciones acerca de la transferencia de los certificados de ID de desarrollador a ella, porque configurar esto era problemático en primer lugar.

  • Yo uso el tenedor AppBundler https://github.com/TheInfiniteKind/appbundler/ para empaquetar mi aplicación

  • Esto se llama por un fichero de construcción Ant script que hace la firma, etc, al final creamos un dmg usando dmgCanvas

  • He puesto el guión de hormigas a continuación, con la esperanza de que alguien pueda empezar con los pasos básicos

    #!/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:

Editar 12/02/2020 - ha habido muchos cambios, ya que Apple han endurecido lentamente los requisitos para la certificación notarial. Desde febrero 3 ª parece que han golpeado la etapa final, lo que significa que su aplicación tiene que cumplir con los requisitos más altos, incluyendo un JRE que se construye en contra del último SDK y con el apoyo "en tiempo de ejecución endurecido".

Así que he despojado gran parte de la vieja discusión.

Mi primer problema fue la creación - que necesita una cuenta activa con Developer Program ID de Apple (que es fácil), pero luego, cuando se siguen las instrucciones para añadir una contraseña para el llavero, utiliza la contraseña específica de la aplicación . También es necesario para permitir la autenticación de dos factores para su cuenta ID de Apple.

Una vez que se resuelve la línea de comandos llama que es bastante fácil de automatizar en un script de construcción. He utilizado jpackagepara crear la aplicación y la DMG, pero ten cuidado - actualmente su enfoque de la firma de la aplicación no funciona .

En términos de secuencias de comandos, esto es lo que estoy haciendo para firmar código de la aplicación adecuada para la certificación notarial (esto supone una .appya se ha creado):

% 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

Los derechos deben ser:

<?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>

Todas las pruebas funcionan:

% 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

En este punto también se debe intentar ejecutar su aplicación - el proceso de firma de código puede romper cosas.

A partir de aquí, se puede crear un DMG (de nuevo, yo uso jpackage) y esto debe pasar la certificación notarial.

En resumen:

  1. Construir la aplicación en la estructura correcta
  2. Crear un archivo de derechos
  3. Código firmar su código
  4. Código firmar los archivos de tiempo de ejecución dentro liado, obligando a la firma
  5. Código firmar el mismo tiempo de ejecución incluido
  6. Código firmar el archivo de aplicación
  7. Paquete en un DMG
  8. Notarización se
  9. Envíalo

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=329932&siteId=1
Recomendado
Clasificación