Mac,Qt 4.8.6编码问题

时间:2015-12-31 07:51:17

标签: macos qt4 code-signing

我在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,一切都还可以)
谢谢!

1 个答案:

答案 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框架的步骤。