diff options
author | Eike Ziller <eike.ziller@qt.io> | 2024-01-15 15:38:18 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2024-01-29 12:13:51 +0000 |
commit | 479f1f34ceaf5605c49df2014a0d80b1e2044d7e (patch) | |
tree | 46df39b154149a2876a52633abf2beac4655692c | |
parent | 76a89667397e8b527ba3a9b00436cc0d10e6c3fa (diff) |
iOS: Disable anything but running for iOS 17+ devices
We currently cannot support anything than running for devices with iOS
17 and later.
Make it possible for RunConfigurations to state that they are disabled
depending on run mode.
Change-Id: I13df4dd482f6381cda15168c38ede00d95e1d692
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
11 files changed, 47 insertions, 28 deletions
diff --git a/src/plugins/ios/iosrunconfiguration.cpp b/src/plugins/ios/iosrunconfiguration.cpp index 334f27345d..a7c8851d56 100644 --- a/src/plugins/ios/iosrunconfiguration.cpp +++ b/src/plugins/ios/iosrunconfiguration.cpp @@ -15,6 +15,7 @@ #include <projectexplorer/devicesupport/devicemanager.h> #include <projectexplorer/kitaspects.h> #include <projectexplorer/project.h> +#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectnodes.h> #include <projectexplorer/runconfigurationaspects.h> #include <projectexplorer/target.h> @@ -87,7 +88,7 @@ void IosDeviceTypeAspect::updateDeviceType() m_deviceType = IosDeviceType(IosDeviceType::SimulatedDevice); } -bool IosRunConfiguration::isEnabled() const +bool IosRunConfiguration::isEnabled(Id runMode) const { Utils::Id devType = DeviceTypeKitAspect::deviceTypeId(kit()); if (devType != Constants::IOS_DEVICE_TYPE && devType != Constants::IOS_SIMULATOR_TYPE) @@ -99,6 +100,12 @@ bool IosRunConfiguration::isEnabled() const if (dev.isNull() || dev->deviceState() != IDevice::DeviceReadyToUse) return false; + IosDevice::ConstPtr iosdevice = dev.dynamicCast<const IosDevice>(); + if (iosdevice && iosdevice->handler() == IosDevice::Handler::DeviceCtl + && runMode != ProjectExplorer::Constants::NORMAL_RUN_MODE) { + return false; + } + return true; } @@ -223,7 +230,7 @@ void IosDeviceTypeAspect::toMap(Store &map) const map.insert(deviceTypeKey, QVariant::fromValue(deviceType().toMap())); } -QString IosRunConfiguration::disabledReason() const +QString IosRunConfiguration::disabledReason(Id runMode) const { Utils::Id devType = DeviceTypeKitAspect::deviceTypeId(kit()); if (devType != Constants::IOS_DEVICE_TYPE && devType != Constants::IOS_SIMULATOR_TYPE) @@ -270,8 +277,14 @@ QString IosRunConfiguration::disabledReason() const else return Tr::tr("%1 is not connected.").arg(dev->displayName()); } + IosDevice::ConstPtr iosdevice = dev.dynamicCast<const IosDevice>(); + if (iosdevice && iosdevice->handler() == IosDevice::Handler::DeviceCtl + && runMode != ProjectExplorer::Constants::NORMAL_RUN_MODE) { + return Tr::tr("Debugging and profiling is currently not supported for devices with iOS " + "17 and later."); + } } - return RunConfiguration::disabledReason(); + return RunConfiguration::disabledReason(runMode); } IosDeviceType IosRunConfiguration::deviceType() const diff --git a/src/plugins/ios/iosrunconfiguration.h b/src/plugins/ios/iosrunconfiguration.h index da890ae3e5..865d9c8808 100644 --- a/src/plugins/ios/iosrunconfiguration.h +++ b/src/plugins/ios/iosrunconfiguration.h @@ -70,11 +70,11 @@ public: QString applicationName() const; Utils::FilePath bundleDirectory() const; Utils::FilePath localExecutable() const; - QString disabledReason() const override; + QString disabledReason(Utils::Id runMode) const override; IosDeviceType deviceType() const; private: - bool isEnabled() const final; + bool isEnabled(Utils::Id runMode) const final; ProjectExplorer::ExecutableAspect executable{this}; ProjectExplorer::ArgumentsAspect arguments{this}; diff --git a/src/plugins/mcusupport/mcusupportrunconfiguration.cpp b/src/plugins/mcusupport/mcusupportrunconfiguration.cpp index b87b527f41..9e936c4fae 100644 --- a/src/plugins/mcusupport/mcusupportrunconfiguration.cpp +++ b/src/plugins/mcusupport/mcusupportrunconfiguration.cpp @@ -59,12 +59,12 @@ public: connect(target->project(), &Project::displayNameChanged, this, &RunConfiguration::update); } - bool isEnabled() const override + bool isEnabled(Utils::Id runMode) const override { if (disabled) return false; - return RunConfiguration::isEnabled(); + return RunConfiguration::isEnabled(runMode); } static bool disabled; diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index 4341e14cf7..dc810bac32 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -46,7 +46,7 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Target *targe setDefaultDisplayName(defaultDisplayName()); } -bool CustomExecutableRunConfiguration::isEnabled() const +bool CustomExecutableRunConfiguration::isEnabled(Id) const { return true; } diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h index 39199f4b4a..ced9892c01 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h @@ -21,7 +21,7 @@ public: private: Utils::ProcessRunData runnable() const override; - bool isEnabled() const override; + bool isEnabled(Utils::Id) const override; Tasks checkForIssues() const override; void configurationDialogFinished(); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 11318ef9ce..b2b2f5fc61 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2980,7 +2980,7 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc, Id runMode, const bool forceSkipDeploy) { - if (!rc->isEnabled()) + if (!rc->isEnabled(runMode)) return; const auto delay = [rc, runMode] { dd->m_runMode = runMode; @@ -3004,7 +3004,7 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc, delay(); break; case BuildForRunConfigStatus::NotBuilding: - if (rc->isEnabled()) + if (rc->isEnabled(runMode)) dd->executeRunConfiguration(rc, runMode); else delay(); @@ -3108,8 +3108,8 @@ expected_str<void> ProjectExplorerPlugin::canRunStartupProject(Utils::Id runMode .arg(target->displayName(), project->displayName())); } - if (!activeRC->isEnabled()) - return make_unexpected(activeRC->disabledReason()); + if (!activeRC->isEnabled(runMode)) + return make_unexpected(activeRC->disabledReason(runMode)); if (dd->m_projectExplorerSettings.buildBeforeDeploy != BuildBeforeRunMode::Off && dd->m_projectExplorerSettings.deployBeforeRun diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 30fda9b044..be59ad0eaa 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -186,13 +186,13 @@ RunConfiguration::RunConfiguration(Target *target, Utils::Id id) RunConfiguration::~RunConfiguration() = default; -QString RunConfiguration::disabledReason() const +QString RunConfiguration::disabledReason(Utils::Id) const { BuildSystem *bs = activeBuildSystem(); return bs ? bs->disabledReason(m_buildKey) : Tr::tr("No build system active"); } -bool RunConfiguration::isEnabled() const +bool RunConfiguration::isEnabled(Utils::Id) const { BuildSystem *bs = activeBuildSystem(); return bs && bs->hasParsingData(); diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 629fcd2c61..2054a840c1 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -78,8 +78,8 @@ class PROJECTEXPLORER_EXPORT RunConfiguration : public ProjectConfiguration public: ~RunConfiguration() override; - virtual QString disabledReason() const; - virtual bool isEnabled() const; + virtual QString disabledReason(Utils::Id runMode) const; + virtual bool isEnabled(Utils::Id runMode) const; QWidget *createConfigurationWidget(); diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp index 75980d8ccb..ec18f68c60 100644 --- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp @@ -8,6 +8,7 @@ #include "buildstepspage.h" #include "deployconfiguration.h" #include "projectconfigurationmodel.h" +#include "projectexplorerconstants.h" #include "projectexplorertr.h" #include "runconfiguration.h" #include "target.h" @@ -523,8 +524,12 @@ void RunSettingsWidget::removeSubWidgets() void RunSettingsWidget::updateEnabledState() { - const bool enable = m_runConfiguration ? m_runConfiguration->isEnabled() : false; - const QString reason = m_runConfiguration ? m_runConfiguration->disabledReason() : QString(); + const bool enable = m_runConfiguration + ? m_runConfiguration->isEnabled(Constants::NORMAL_RUN_MODE) + : false; + const QString reason = m_runConfiguration + ? m_runConfiguration->disabledReason(Constants::NORMAL_RUN_MODE) + : QString(); m_runConfigurationWidget->setEnabled(enable); diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index 8231366dfc..7028ffc459 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -18,6 +18,7 @@ #include "project.h" #include "projectconfigurationmodel.h" #include "projectexplorer.h" +#include "projectexplorerconstants.h" #include "projectexplorericons.h" #include "projectexplorersettings.h" #include "projectexplorertr.h" @@ -780,12 +781,12 @@ void Target::updateDefaultRunConfigurations() // Make sure a configured RC will be active after we delete the RCs: RunConfiguration *active = activeRunConfiguration(); - if (active && (removalList.contains(active) || !active->isEnabled())) { + if (active && (removalList.contains(active) || !active->isEnabled(Constants::NORMAL_RUN_MODE))) { RunConfiguration *newConfiguredDefault = newConfigured.isEmpty() ? nullptr : newConfigured.at(0); - RunConfiguration *rc - = Utils::findOrDefault(existingConfigured, - [](RunConfiguration *rc) { return rc->isEnabled(); }); + RunConfiguration *rc = Utils::findOrDefault(existingConfigured, [](RunConfiguration *rc) { + return rc->isEnabled(Constants::NORMAL_RUN_MODE); + }); if (!rc) { rc = Utils::findOr(newConfigured, newConfiguredDefault, Utils::equal(&RunConfiguration::displayName, project()->displayName())); diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index 19c57f1220..77650c9dd8 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -57,8 +57,8 @@ public: QmlProjectRunConfiguration(Target *target, Id id); private: - QString disabledReason() const final; - bool isEnabled() const final; + QString disabledReason(Utils::Id runMode) const final; + bool isEnabled(Utils::Id) const final; FilePath mainScript() const; FilePath qmlRuntimeFilePath() const; @@ -180,7 +180,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id) update(); } -QString QmlProjectRunConfiguration::disabledReason() const +QString QmlProjectRunConfiguration::disabledReason(Utils::Id runMode) const { if (mainScript().isEmpty()) return Tr::tr("No script file to execute."); @@ -193,7 +193,7 @@ QString QmlProjectRunConfiguration::disabledReason() const } if (viewer.isEmpty()) return Tr::tr("No QML utility specified for target device."); - return RunConfiguration::disabledReason(); + return RunConfiguration::disabledReason(runMode); } FilePath QmlProjectRunConfiguration::qmlRuntimeFilePath() const @@ -306,7 +306,7 @@ void QmlProjectRunConfiguration::setupQtVersionAspect() } } -bool QmlProjectRunConfiguration::isEnabled() const +bool QmlProjectRunConfiguration::isEnabled(Id) const { return const_cast<QmlProjectRunConfiguration *>(this)->qmlMainFile.isQmlFilePresent() && !commandLine().executable().isEmpty() |