diff --git a/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp b/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp index a236111159..021363c5b1 100644 --- a/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp +++ b/extras/Build/juce_build_tools/utils/juce_PlistOptions.cpp @@ -248,19 +248,10 @@ namespace build_tools void PlistOptions::addIosScreenOrientations (XmlElement& dict) const { - String screenOrientations[] = { iPhoneScreenOrientations, iPadScreenOrientations }; - String plistSuffix[] = { "", "~ipad" }; - auto orientationsAreTheSame = screenOrientations[0] == screenOrientations[1]; + addArrayToPlist (dict, "UISupportedInterfaceOrientations", iPhoneScreenOrientations); - for (int i = 0; i < (orientationsAreTheSame ? 1 : 2); ++i) - { - StringArray iOSOrientations; - - if (screenOrientations[i].contains ("portrait")) { iOSOrientations.add ("UIInterfaceOrientationPortrait"); } - if (screenOrientations[i].contains ("landscape")) { iOSOrientations.add ("UIInterfaceOrientationLandscapeLeft"); iOSOrientations.add ("UIInterfaceOrientationLandscapeRight"); } - - addArrayToPlist (dict, String ("UISupportedInterfaceOrientations") + plistSuffix[i], iOSOrientations); - } + if (iPadScreenOrientations != iPhoneScreenOrientations) + addArrayToPlist (dict, "UISupportedInterfaceOrientations~ipad", iPadScreenOrientations); } void PlistOptions::addIosBackgroundModes (XmlElement& dict) const diff --git a/extras/Build/juce_build_tools/utils/juce_PlistOptions.h b/extras/Build/juce_build_tools/utils/juce_PlistOptions.h index 2a840270ce..69ba5fe37d 100644 --- a/extras/Build/juce_build_tools/utils/juce_PlistOptions.h +++ b/extras/Build/juce_build_tools/utils/juce_PlistOptions.h @@ -72,8 +72,8 @@ namespace build_tools String pluginCode; int versionAsHex = 0; - String iPhoneScreenOrientations; - String iPadScreenOrientations; + StringArray iPhoneScreenOrientations; + StringArray iPadScreenOrientations; String pluginName; String pluginManufacturer; diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h index 2ea1fe2d7d..cf9acc6316 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h @@ -91,8 +91,8 @@ public: prebuildCommandValue (settings, Ids::prebuildCommand, getUndoManager()), duplicateAppExResourcesFolderValue (settings, Ids::duplicateAppExResourcesFolder, getUndoManager(), true), iosDeviceFamilyValue (settings, Ids::iosDeviceFamily, getUndoManager(), "1,2"), - iPhoneScreenOrientationValue (settings, Ids::iPhoneScreenOrientation, getUndoManager(), "portraitlandscape"), - iPadScreenOrientationValue (settings, Ids::iPadScreenOrientation, getUndoManager(), "portraitlandscape"), + iPhoneScreenOrientationValue (settings, Ids::iPhoneScreenOrientation, getUndoManager(), getDefaultScreenOrientations(), ","), + iPadScreenOrientationValue (settings, Ids::iPadScreenOrientation, getUndoManager(), getDefaultScreenOrientations(), ","), customXcodeResourceFoldersValue (settings, Ids::customXcodeResourceFolders, getUndoManager()), customXcassetsFolderValue (settings, Ids::customXcassetsFolder, getUndoManager()), appSandboxValue (settings, Ids::appSandbox, getUndoManager()), @@ -162,8 +162,12 @@ public: String getDeviceFamilyString() const { return iosDeviceFamilyValue.get(); } - String getiPhoneScreenOrientationString() const { return iPhoneScreenOrientationValue.get(); } - String getiPadScreenOrientationString() const { return iPadScreenOrientationValue.get(); } + Array getDefaultScreenOrientations() const { return { "UIInterfaceOrientationPortrait", + "UIInterfaceOrientationLandscapeLeft", + "UIInterfaceOrientationLandscapeRight" }; } + + Array getiPhoneScreenOrientations() const { return *iPhoneScreenOrientationValue.get().getArray(); } + Array getiPadScreenOrientations() const { return *iPadScreenOrientationValue.get().getArray(); } String getCustomResourceFoldersString() const { return customXcodeResourceFoldersValue.get().toString().replaceCharacters ("\r\n", "::"); } String getCustomXcassetsFolderString() const { return customXcassetsFolderValue.get(); } @@ -288,15 +292,16 @@ public: "The device family to target."); { - StringArray orientationStrings { "Portrait and Landscape", "Portrait", "Landscape" }; - Array orientationValues { "portraitlandscape", "portrait", "landscape"}; + StringArray orientationStrings { "Portrait", "Portrait Upside Down", + "Landscape Left", "Landsscape Right" }; - props.add (new ChoicePropertyComponent (iPhoneScreenOrientationValue, "iPhone Screen Orientation", - orientationStrings, orientationValues), + Array orientationVars { "UIInterfaceOrientationPortrait", "UIInterfaceOrientationPortraitUpsideDown", + "UIInterfaceOrientationLandscapeLeft", "UIInterfaceOrientationLandscapeRight" }; + + props.add (new MultiChoicePropertyComponent (iPhoneScreenOrientationValue, "iPhone Screen Orientation", orientationStrings, orientationVars), "The screen orientations that this app should support on iPhones."); - props.add (new ChoicePropertyComponent (iPadScreenOrientationValue, "iPad Screen Orientation", - orientationStrings, orientationValues), + props.add (new MultiChoicePropertyComponent (iPadScreenOrientationValue, "iPad Screen Orientation", orientationStrings, orientationVars), "The screen orientations that this app should support on iPads."); } @@ -607,6 +612,12 @@ public: jassert (targets.size() > 0); } + void updateDeprecatedSettings() override + { + if (iOS) + updateOldOrientationSettings(); + } + void updateDeprecatedSettingsInteractively() override { if (hasInvalidPostBuildScript()) @@ -1590,8 +1601,8 @@ public: options.IAATypeCode = owner.project.getIAATypeCode(); options.pluginCode = owner.project.getPluginCodeString(); options.versionAsHex = owner.project.getVersionAsHexInteger(); - options.iPhoneScreenOrientations = owner.getiPhoneScreenOrientationString(); - options.iPadScreenOrientations = owner.getiPadScreenOrientationString(); + options.iPhoneScreenOrientations = owner.getiPhoneScreenOrientations(); + options.iPadScreenOrientations = owner.getiPadScreenOrientations(); options.storyboardName = [&] { @@ -3185,5 +3196,32 @@ private: return file.hasFileExtension (sourceFileExtensions); } + //============================================================================== + void updateOldOrientationSettings() + { + jassert (iOS); + + StringArray orientationSettingStrings { getSetting (Ids::iPhoneScreenOrientation).getValue().toString(), + getSetting (Ids::iPadScreenOrientation).getValue().toString() }; + + for (int i = 0; i < 2; ++i) + { + auto& settingsString = orientationSettingStrings[i]; + + if (settingsString.isNotEmpty()) + { + Array orientations; + + if (settingsString.contains ("portrait")) orientations.add ("UIInterfaceOrientationPortrait"); + if (settingsString.contains ("landscape")) orientations.addArray ({ "UIInterfaceOrientationLandscapeLeft", + "UIInterfaceOrientationLandscapeRight" }); + if (i == 0) + iPhoneScreenOrientationValue = orientations; + else + iPadScreenOrientationValue = orientations; + } + } + } + JUCE_DECLARE_NON_COPYABLE (XcodeProjectExporter) };