QMake:为 iOS 应用程序指定自定义 Info.plist 文件

QMake: Specifying custom Info.plist file for iOS App

我有一个使用 Qt(QML) 构建的 iOS 应用程序,我想为其使用自定义 Info.plist 文件。

为此,我像往常一样构建项目(导致 QMake 提供默认的 Info.plist 文件)。然后我转到应用程序包(在 .app 文件内)并将生成的 Info.plist 文件复制到我的源代码树中。复制后,我修改了这个文件以进行必要的自定义(我只是更改了屏幕方向设置,没有别的)。

我现在指定了此自定义 Info.plist 的路径,以便在我的应用程序的 .pro 中归档,如下所示:

ios{
    QMAKE_INFO_PLIST = packages/ios/Info.plist
}

当我现在点击构建时,出现以下编译器错误:

Check dependencies
Code Sign error: Automatic provisioning profile selection unavailable: A bundle identifier is required for automatic provisioning profile selection. Either enter a bundle identifier in the Info.plist, or select a provisioning profile to use in the build settings.
CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.2'

有其他人 运行 参与其中吗?我正在使用 Qt 5.4.1。正在 OSX.

上构建

确保您的 Info.plist 副本是 XML 格式,而不是二进制格式。

这是必要的,因为 qmake 在构建过程中使用 sed 替换 some variables。例如

 @sed -e "s,@SHORT_VERSION@,1.0,g" -e "s,@FULL_VERSION@,1.0.0,g" -e "s,@TYPEINFO@,????,g" -e "s,@BUNDLEIDENTIFIER@,com.example.product,g" -e "s,@ICON@,myproduct.icns,g" -e "s,@EXECUTABLE@,MyProduct,g" -e "s,@TYPEINFO@,????,g" ../../project/subproject/Info.plist >MyProject.app/Contents/Info.plist

我打开了一个 Qt bug 因为 qmake 应该检查它。

进一步接受答案:

  1. 确保QMAKE_INFO_PLIST=不是QMAKE_INFO_PLIST+= (我做到了,啊)。
  2. 如果在 Xcode 中打开 qmake 生成的 .xcodeproj 文件后 'Update to recommended settings' 一刀切,不要将 Info.plist 复制回 你的源代码树。这将清除包标识符 下次
  3. 如果您需要添加代码签名(以便您可以在 Creator 中实际构建和 运行),可以找到这样做的方法 here
  4. 根据我的经验,自定义 Info.plist 和代码签名 qmake 添加的内容最好放在项目的 .pro 文件中,而不是 自动生成 deployment.pri 文件。后者有效,但我得到了 Xcode 中关于 Info.plist 不工作的编译器警告 复制,警告激怒了我脑海中的恶魔。