一个跨平台的QT应用程序是为macOS构建的。如果我在同一台机器上测试,这个应用程序可以工作。当我创建一个.dmg
文件时,这在我的机器上也可以工作。当我在另一台机器上测试时,我得到了错误:
您没有权限打开应用程序"MYAPP"
我如何调试这个以查看问题是什么?
创建.dmg
文件的步骤:
-
运行
qmake
和make
直到我有MYAPP。App(发布版本) -
binarycreator -c config/config.xml -p packages/ setup_MYAPP
创建setup_MYAPP.app
-
codesign -s "我的Apple Distribution配置文件的通用全名"setup_MYAPP.app
当我在引号之间提供一个无意义的名字时,它会抛出一个错误,所以我认为这是正常的。
-
hdiutil create -format UDZO -srcfolder setup_MYAPP.app MYAPP.dmg
创建MYAPP。安装程序拒绝在另一台macbook上运行。
另外:
-
运行
qmake
和make
,直到我有MYAPP。App(发布版本) -
codesign -s "Full common name of my Apple Distribution profile" MYAPP.app
-
macdeployqt MYAPP.app/ -dmg -codesign="Full common name of my Apple Distribution profile" -appstore-compliant
创建MYAPP。在另一台macbook上无法运行。
好的,看起来正确的答案是" it's complicated "
我还没有成功创建一个可以在MAC应用商店外共享的安装程序。苹果公司已经限制了这一点,以至于我只能屈服于官僚主义和好看但非常糟糕的文档。
- Mac App Store以外的分发需要公证自macOS 10.15.5:见https://developer.apple.com/news/?id=04102019a.
- 公证意味着对代码进行签名并上传到Apple。苹果会执行一些魔术检查,并将其列入内部数据库。
- 公证需要开发者ID证书:参见https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087721这与应用程序开发和应用商店发行所需的证书不同(为什么,Apple,为什么?)
- 要获得开发人员ID证书,您需要在https://developer.apple.com/contact/kext上填写表单,这与编写内核扩展时使用的表单相同。<<strong>内核扩展/strong>.(为什么,苹果,为什么?)
- 当苹果没有回应你的表单提交,你需要戳他们几次。在他们拒绝了你的请求之后,你可以随心所欲地戳,他们很可能在那之后立即建立了一个垂直分类规则。
但是,如果你已经能够得到一个宝贵的开发者ID证书,这些似乎是成功公证你的应用程序的步骤:
> security unlock-keychain -p PASSWORD !/Library/Keychains/login.keychain-db
> codesign --timestamp="http://timestamp.apple.com/ts01" --options runtime --verbose=3 --force --deep --sign "NAME OF CERTIFICATE" PATH/TO/APP.app
> xcrun altool -u USER_EMAIL -p APP_SPECIFIC_PASSWORD -notarize-app -t osx --primary-bundle-id INVENT_YOUR_OWN_UNIQUE_ID -f PATH/TO/APP.app
最后一次运行将返回另一个ID,形式为abcdef01-2345-6789-abcd-ef0123456789
,您可以使用该ID来跟踪您的公证请求:
> xcrun altool -u USER_EMAIL -p APP_SPECIFIC_PASSWORD --notarization-info abcdef01-2345-6789-abcd-ef0123456789
您还会收到一封带有公证结果链接的邮件。
我没有成功,我要放弃了。我放弃了。下一个遇到这种情况的勇敢的人读了这篇文章后可能会节省一些时间。祝你好运,愿你在我失败的地方成功!