我在Mac上维护一个使用Qt 4.8.6构建的旧应用程序(它使用了声子,因此我无法升级到Qt 5.x)。构建之后,我得到了一个.app文件,然后在这个.app上运行macdeployqt
来部署Qt库。它运行良好。然后我需要codesign
这个.app。据我所知,有些问题与应用程序包的目录结构有关,而且Qt4 macdeployqt命令不符合新布局。我试着修理:
cp /Library/Frameworks/phonon.faramework/Contents/Info.plist myApp.app/Contents/Frameworks/phonon.framework/Resources/
其他库/框架也是如此。 (复制... {Qt} /Contents/Info.plist到myApp.app/Contents/Frameworks/*.framework/Resources/
然后codesign
得到了输出:带有Mach-O thin(x86_64)的签名包
然后验证,得到输出:嵌入式框架包含修改或无效的版本
在子组件中......
我在互联网上搜索了很多次但却找不到解决方案。如何协调/验证这种捆绑应用程序? (使用Qt 4.8.6。使用Qt 5.x,一切都还可以)
谢谢!
答案 0 :(得分:0)
我有一个使用Qt 4.8.7构建的Mac应用程序,这是我写给自己以完成代码签名过程的说明:
运行'macdeployqt'将Qt框架复制到包中:
$ macdeployqt myapp.app -verbose=2 -no-plugins
macdeployqt无法正常工作,需要修复框架。
进入应用程序包的根目录('cd myapp.app')并运行fix_frameworks
$ cd myapp.app $ ../../platform_specific/mac/fix_frameworks.sh
然后,您需要手动将Info.plist复制到每个框架中:
$ cp /usr/local/Trolltech/Qt-4.8.5/lib/QtCore.framework/Contents/Info.plist "myapp.app/Contents/Frameworks/QtCore.framework/Resources/" $ cp /usr/local/Trolltech/Qt-4.8.5/lib/QtGui.framework/Contents/Info.plist "myapp.app/Contents/Frameworks/QtGui.framework/Resources/" $ cp /usr/local/Trolltech/Qt-4.8.5/lib/QtNetwork.framework/Contents/Info.plist "myapp.app/Contents/Frameworks/QtNetwork.framework/Resources/"
接下来,您需要使用开发者ID证书和。签名.app 沙盒权利。从Mac开发者网站获取证书,我 相信你需要以团队代理(创建团队代理人)的身份登录 帐户)。在当前的OS X版本(Yosemite,El Cap,无论如何), 执行以下操作以签署框架和应用程序:
$ codesign --entitlements ../platform_specific/mac/sandbox.entitlements -s "Developer ID Application" --deep myapp.app
spctl应该显示应用程序已正确签名:
$ spctl --verbose=4 --assess --type execute myapp.app/ myapp.app/: accepted source=Developer ID
这是fix_frameworks.sh
#!/bin/sh # Run this from the root of the app bundle after running macdeployqt cd Contents/Frameworks/QtCore.framework mv Resources/ Versions/4 cd Versions ln -s 4 Current cd .. ln -s Versions/Current/QtCore QtCore ln -s Versions/Current/Resources Resources cd ../../../ cd Contents/Frameworks/QtGui.framework mv Resources/ Versions/4 cd Versions ln -s 4 Current cd .. ln -s Versions/Current/QtGui QtGui ln -s Versions/Current/Resources Resources cd ../../../ cd Contents/Frameworks/QtNetwork.framework mv Resources/ Versions/4 cd Versions ln -s 4 Current cd .. ln -s Versions/Current/QtNetwork QtNetwork ln -s Versions/Current/Resources Resources cd ../../../
您可能需要进行一些更改:使用系统上安装Qt框架的路径,并添加处理除Core / Gui / Network之外的Qt框架的步骤。