Pau*_*lor 7 java macos notarize
我为 MacOS 分发了一个 Java 应用程序,它经过开发人员签名但未经过公证。不确定从哪里开始,因为文档太偏向于使用我不使用的 Xcode 创建应用程序,但我只想用最简单的方法来公证我的应用程序,然后继续。
阅读文档我已经有一些担忧:
我目前正在使用 Java 8,是否可以对 Java 8 应用程序进行公证,或者我是否需要迁移到 Java 11。我宁愿不迁移到 Java 11,因为它会在我支持的其他一些平台上引起问题。
我的开发 Mac 机器是旧的 MacBook Pro,因此无法更新到 OSX El Capitan 10.11.6 之后,我可以用这台机器公证吗?我确实有一台更新的机器,但它没有设置用于开发,我对将 Developer Id 证书转移给它有一些担忧,因为首先设置它是有问题的。
我使用 AppBundler fork https://github.com/TheInfiniteKind/appbundler/来打包我的应用程序
这由执行签名等操作的 ant 脚本构建文件调用,我们最终使用 dmgCanvas 创建了一个 dmg
我在下面发布了蚂蚁脚本,希望有人可以从基本步骤开始
#!/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
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
Run Code Online (Sandbox Code Playgroud)编辑 12/2/2020 - 由于 Apple 慢慢收紧了公证要求,因此发生了很多变化。从 2 月 3 日开始,它们似乎已经进入最后阶段,这意味着您的应用程序必须满足更高的要求,包括针对最新 SDK 构建的 JRE,并具有“强化运行时”支持。
所以我删除了很多旧的讨论。
我的第一个问题是设置 - 您需要一个带有 Apple ID 的有效开发者计划帐户(这很容易),但是,当您按照说明向钥匙串添加密码时,请使用App 特定密码。您还需要为您的 Apple ID 帐户启用双重身份验证。
一旦您计算出命令行调用,就很容易在构建脚本中实现自动化。我曾经jpackage
创建过应用程序和 DMG,但要注意 -目前它对应用程序进行签名的方法不起作用。
在脚本方面,以下是我对适合公证的应用程序进行代码签名的操作(假设 a.app
已创建):
% 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
Run Code Online (Sandbox Code Playgroud)
权利应该是:
<?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>
Run Code Online (Sandbox Code Playgroud)
所有测试都有效:
% 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
Run Code Online (Sandbox Code Playgroud)
此时,您还应该尝试运行您的应用程序 - 代码签名过程可能会破坏一些事情。
从这里,您可以创建一个 DMG(我再次使用jpackage
),这应该通过公证。
总之:
截至 2020 年 2 月 3 日更新 Apple 收紧了公证要求,答案重写。
注意:我需要 AdoptJdk Java 11.0.7 JRE,早期版本不适合我。
这是我的步骤
songkong.entitlements
文件build.xml 包括:
<runtime dir="/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jre/Contents/Home"/>
Run Code Online (Sandbox Code Playgroud)
buildosx.sh 是
#!/bin/bash
#set -x
cd /Users/paul/code/jthink/songkong
sudo rm -fr /Applications/SongKong.app
mvn -f pommacos.xml -DskipTests=true install
rm -fr target/songkong-6.9
unzip target/songkong-6.9-distribution.zip -d target
ant
export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"
/usr/bin/codesign --timestamp --options runtime \
--entitlements /Users/paul/code/jthink/songkong/songkong.entitlements \
--sign "Developer ID Application: P Taylor" \
--force --deep --verbose /Applications/SongKong.app
/usr/bin/codesign -vvv --deep --strict /Applications/SongKong.app
spctl -a -t exec -vv /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 -identity "Developer ID Application: P Taylor" \
-notarizationAppleID paultaylor@jthink.net \
-notarizationPassword password \
-notarizationPrimaryBundleID songkong
Run Code Online (Sandbox Code Playgroud)
SongKong权利文件是:
<?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>
Run Code Online (Sandbox Code Playgroud)
注意:我还参考 AdoptJdk Java 11.0.7 JDK build.xml 进行了尝试,并且构建也没有问题(尽管最终会产生更大的 dmg)
归档时间: |
|
查看次数: |
2666 次 |
最近记录: |