1 /*
2   ==============================================================================
3 
4    This file is part of the JUCE library.
5    Copyright (c) 2020 - Raw Material Software Limited
6 
7    JUCE is an open source library subject to commercial or open-source
8    licensing.
9 
10    By using JUCE, you agree to the terms of both the JUCE 6 End-User License
11    Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
12 
13    End User License Agreement: www.juce.com/juce-6-licence
14    Privacy Policy: www.juce.com/juce-privacy-policy
15 
16    Or: You may also use this code under the terms of the GPL v3 (see
17    www.gnu.org/licenses).
18 
19    JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20    EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21    DISCLAIMED.
22 
23   ==============================================================================
24 */
25 
26 namespace juce
27 {
28 namespace build_tools
29 {
30     class PlistOptions final
31     {
32     public:
33         void write (const File& infoPlistFile) const;
34 
35         //==============================================================================
36         ProjectType::Target::Type type          = ProjectType::Target::Type::GUIApp;
37 
38         String executableName;
39         String bundleIdentifier;
40 
41         String plistToMerge;
42 
43         bool iOS                                = false;
44 
45         bool microphonePermissionEnabled        = false;
46         String microphonePermissionText;
47 
48         bool cameraPermissionEnabled            = false;
49         String cameraPermissionText;
50 
51         bool bluetoothPermissionEnabled         = false;
52         String bluetoothPermissionText;
53 
54         bool sendAppleEventsPermissionEnabled   = false;
55         String sendAppleEventsPermissionText;
56 
57         bool shouldAddStoryboardToProject       = false;
58         String storyboardName;
59 
60         File iconFile;
61         String projectName;
62         String version;
63         String companyCopyright;
64 
65         StringPairArray allPreprocessorDefs;
66         String documentExtensions;
67 
68         bool fileSharingEnabled                 = false;
69         bool documentBrowserEnabled             = false;
70         bool statusBarHidden                    = false;
71         bool requiresFullScreen                 = false;
72         bool backgroundAudioEnabled             = false;
73         bool backgroundBleEnabled               = false;
74         bool pushNotificationsEnabled           = false;
75 
76         bool enableIAA                          = false;
77         String IAAPluginName;
78         String pluginManufacturerCode;
79         String IAATypeCode;
80         String pluginCode;
81         int versionAsHex                        = 0;
82 
83         StringArray iPhoneScreenOrientations;
84         StringArray iPadScreenOrientations;
85 
86         String pluginName;
87         String pluginManufacturer;
88         String pluginDescription;
89         String pluginAUExportPrefix;
90         String auMainType;
91         bool isAuSandboxSafe                    = false;
92         bool isPluginSynth                      = false;
93         bool suppressResourceUsage              = false;
94 
95     private:
96         void write (MemoryOutputStream&) const;
97         std::unique_ptr<XmlElement> createXML() const;
98         void addIosScreenOrientations (XmlElement&) const;
99         void addIosBackgroundModes (XmlElement&) const;
100         Array<XmlElement> createExtraAudioUnitTargetPlistOptions() const;
101         Array<XmlElement> createExtraAudioUnitV3TargetPlistOptions() const;
102     };
103 }
104 }
105