我可以从 Qt Creator 向 xcodebuild 传递参数吗?

Posted

技术标签:

【中文标题】我可以从 Qt Creator 向 xcodebuild 传递参数吗?【英文标题】:Can I pass parameters to xcodebuild from Qt Creator? 【发布时间】:2017-09-26 10:17:26 【问题描述】:

我的 Qt 和 Qt Creator 知识非常缺乏,我一直在尝试重建我们现有的应用程序以使其适用于 ios 11 的 64 位。

在为 iOS 构建发布版本时,我收到以下错误:

Check dependencies
Code Signing Error: No profiles for 'com.yourcompany.MYTESTAPP' were found:  Xcode couldn't find any iOS App Development provisioning profiles matching 'com.yourcompany.MYTESTAPP'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild.
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.0'

我尝试替换 Info.plist 中的 com.yourcompany,但似乎该文件是在每次构建时自动生成的,因此那里的更改被覆盖。还有其他方法可以用我们的域替换该域吗?

最简单的解决方案可能是按照错误提示执行并将-allowProvisioningUpdates 传递给 xcodebuild,但我不知道如何...另外我找不到任何有关该主题的有用文章。

我确实找到了this SO question,但是对于像我这样的初学者来说,那里的答案太高级了。我根据接受的答案尝试了以下方法,但没有任何效果:

contains(MYDEFINES, iOS) 
    QMAKE_CXXFLAGS += -allowProvisioningUpdates

编辑:知道我确实启用了“自动管理签名”Qt Creator 的构建设置可能很重要。而且我使用的是 Qt 5.9.1 和 Qt Creator 4.4.0。

【问题讨论】:

从终端手动执行命令时,xcodebuild build -project MYTESTAPP.xcodeproj -scheme MYTESTAPP -configuration Release -destination generic/platform=iOS -destination-timeout 1 -allowProvisioningUpdates,它确实走得更远,但随后崩溃说The following build commands failed: Ld PORTA.build/Release-iphoneos/PORTA.build/Objects-normal/arm64/PORTA normal arm64。我想我会调查一下 【参考方案1】:

我在使用 CI 构建时遇到了同样的问题。通过Makefile 及其包含的搜索,我发现您可以使用XCODEBUILD_FLAGS 变量将额外的标志传递给xcodebuild。添加您的构建环境应该可以解决问题。

【讨论】:

那是您添加标志的地方(在 Qt 下的 Project 中,在标记为“构建环境”的设置列表中),但不幸的是这仍然不起作用。但是,它确实将错误更改为:“xcodebuild[62700:9920056] DVTPortal: Service '' 遇到来自门户的意外结果代码 ('9401') 2019-03 -04 01:06:38.084 xcodebuild[62700:9920056] DVTPortal:错误:错误域 = DVTPortalServiceErrorDomain 代码 = 9401“标识符为 'com.YourID.gallery-mobile' 的应用程序 ID 不可用。请输入不同的字符串。”【参考方案2】:

是的,您可以将数据从您的.pro 项目文件传递到您的Info.plist。当您运行 QMake 时,这会构建您的 Xcode 项目文件并传递 Xcode 的设置。所以重要的是 QMake,而不是 Qt Creator。

不幸的是,存在更改和错误(例如QTBUG-70072),并且文档中也存在遗漏。

从 Qt 5.11.2 开始,以下是如何设置捆绑包(以及其他一些字段):

QMAKE_INFO_PLIST = path/to/your/Info.plist
QMAKE_TARGET_BUNDLE_PREFIX = com.yourcompany
QMAKE_BUNDLE = yourapp
QMAKE_IOS_DEPLOYMENT_TARGET = 11.0
QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1

如果您没有设置QMAKE_BUNDLE,QMake 将使用您的TARGET。在我的例子中,我的应用程序包 ID 都是小写的,而我的 TARGET 不是,并且包区分大小写。

QMAKE_IOS_DEPLOYMENT_TARGET 设置最低 iOS 版本。

QMAKE_APPLE_TARGETED_DEVICE_FAMILY 设置设备系列:1 用于 iPhone,2 用于 iPad,1,2 支持两者。

在您的Info.plist 中,您应该有:

<key>CFBundleIdentifier</key>
<string>$PRODUCT_BUNDLE_IDENTIFIER</string>

The official documentation relating to Info.plist is on the QMake Variables Reference page.

【讨论】:

以上是关于我可以从 Qt Creator 向 xcodebuild 传递参数吗?的主要内容,如果未能解决你的问题,请参考以下文章

哪个 Qt Creator 与 Qt4 兼容?

在 Mac OS 下使用 Qt-creator 调试时如何进入 Qt 的源代码

QT Creator 主窗口 - 如何从菜单中更改每个元素的界面?

无法从 Qt Creator 部署 Qt 项目

从 Qt creator 访问 Modern OpenGL 函数

从 QT Creator 加载构建的 exe 与从文件系统加载 exe 不同吗? [网络套件问题]