xcodeproj 0.26.3 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/xcodeproj/config.rb +2 -1
- data/lib/xcodeproj/constants.rb +12 -5
- data/lib/xcodeproj/gem_version.rb +1 -1
- data/lib/xcodeproj/project/object.rb +1 -1
- data/lib/xcodeproj/project/object/group.rb +2 -2
- data/lib/xcodeproj/scheme.rb +174 -137
- data/lib/xcodeproj/scheme/abstract_scheme_action.rb +26 -0
- data/lib/xcodeproj/scheme/analyze_action.rb +19 -0
- data/lib/xcodeproj/scheme/archive_action.rb +59 -0
- data/lib/xcodeproj/scheme/build_action.rb +186 -0
- data/lib/xcodeproj/scheme/buildable_product_runnable.rb +55 -0
- data/lib/xcodeproj/scheme/buildable_reference.rb +111 -0
- data/lib/xcodeproj/scheme/launch_action.rb +68 -0
- data/lib/xcodeproj/scheme/macro_expansion.rb +34 -0
- data/lib/xcodeproj/scheme/profile_action.rb +57 -0
- data/lib/xcodeproj/scheme/test_action.rb +123 -0
- data/lib/xcodeproj/scheme/xml_element_wrapper.rb +82 -0
- metadata +13 -2
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'xcodeproj/scheme/abstract_scheme_action'
|
2
|
+
|
3
|
+
module Xcodeproj
|
4
|
+
class XCScheme
|
5
|
+
# This class wraps the LaunchAction node of a .xcscheme XML file
|
6
|
+
#
|
7
|
+
class LaunchAction < AbstractSchemeAction
|
8
|
+
# @param [REXML::Element] node
|
9
|
+
# The 'LaunchAction' XML node that this object will wrap.
|
10
|
+
# If nil, will create a default XML node to use.
|
11
|
+
#
|
12
|
+
def initialize(node = nil)
|
13
|
+
create_xml_element_with_fallback(node, 'LaunchAction') do
|
14
|
+
# Add some attributes (that are not handled by this wrapper class yet but expected in the XML)
|
15
|
+
@xml_element.attributes['selectedDebuggerIdentifier'] = 'Xcode.DebuggerFoundation.Debugger.LLDB'
|
16
|
+
@xml_element.attributes['selectedLauncherIdentifier'] = 'Xcode.DebuggerFoundation.Launcher.LLDB'
|
17
|
+
@xml_element.attributes['launchStyle'] = '0'
|
18
|
+
@xml_element.attributes['useCustomWorkingDirectory'] = bool_to_string(false)
|
19
|
+
@xml_element.attributes['ignoresPersistentStateOnLaunch'] = bool_to_string(false)
|
20
|
+
@xml_element.attributes['debugDocumentVersioning'] = bool_to_string(true)
|
21
|
+
@xml_element.attributes['debugServiceExtension'] = 'internal'
|
22
|
+
@xml_element.add_element('AdditionalOptions')
|
23
|
+
|
24
|
+
# Setup default values for other (handled) attributes
|
25
|
+
self.build_configuration = 'Debug'
|
26
|
+
self.allow_location_simulation = true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @todo handle 'launchStyle' attribute
|
31
|
+
# @todo handle 'useCustomWorkingDirectory attribute
|
32
|
+
# @todo handle 'ignoresPersistentStateOnLaunch' attribute
|
33
|
+
# @todo handle 'debugDocumentVersioning' attribute
|
34
|
+
# @todo handle 'debugServiceExtension'
|
35
|
+
|
36
|
+
# @return [Bool]
|
37
|
+
# Whether or not to allow GPS location simulation when launching this target
|
38
|
+
#
|
39
|
+
def allow_location_simulation?
|
40
|
+
string_to_bool(@xml_element.attributes['allowLocationSimulation'])
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param [Bool] flag
|
44
|
+
# Set whether or not to allow GPS location simulation when launching this target
|
45
|
+
#
|
46
|
+
def allow_location_simulation=(flag)
|
47
|
+
@xml_element.attributes['allowLocationSimulation'] = bool_to_string(flag)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [BuildableProductRunnable]
|
51
|
+
# The BuildReference to launch when executing the Launch Action
|
52
|
+
#
|
53
|
+
def buildable_product_runnable
|
54
|
+
BuildableProductRunnable.new(@xml_element.elements['BuildableProductRunnable'], 0)
|
55
|
+
end
|
56
|
+
|
57
|
+
# @param [BuildableProductRunnable] runnable
|
58
|
+
# Set the BuildableProductRunnable referencing the target to launch
|
59
|
+
#
|
60
|
+
def buildable_product_runnable=(runnable)
|
61
|
+
@xml_element.delete_element('BuildableProductRunnable')
|
62
|
+
@xml_element.add_element(runnable.xml_element) if runnable
|
63
|
+
end
|
64
|
+
|
65
|
+
# @todo handle 'AdditionalOptions' tag
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Xcodeproj
|
2
|
+
class XCScheme
|
3
|
+
# This class wraps the MacroExpansion node of a .xcscheme XML file
|
4
|
+
#
|
5
|
+
class MacroExpansion < XMLElementWrapper
|
6
|
+
# @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node
|
7
|
+
# Either the Xcode target to reference,
|
8
|
+
# or an existing XML 'MacroExpansion' node element
|
9
|
+
# or nil to create an empty MacroExpansion object
|
10
|
+
#
|
11
|
+
def initialize(target_or_node = nil)
|
12
|
+
create_xml_element_with_fallback(target_or_node, 'MacroExpansion') do
|
13
|
+
self.buildable_reference = BuildableReference.new(target_or_node) if target_or_node
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [BuildableReference]
|
18
|
+
# The BuildableReference this MacroExpansion refers to
|
19
|
+
#
|
20
|
+
def buildable_reference
|
21
|
+
@buildable_reference ||= BuildableReference.new @xml_element.elements['BuildableReference']
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param [BuildableReference] ref
|
25
|
+
# Set the BuildableReference this MacroExpansion refers to
|
26
|
+
#
|
27
|
+
def buildable_reference=(ref)
|
28
|
+
@xml_element.delete_element('BuildableReference')
|
29
|
+
@xml_element.add_element(ref.xml_element)
|
30
|
+
@buildable_reference = ref
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'xcodeproj/scheme/abstract_scheme_action'
|
2
|
+
|
3
|
+
module Xcodeproj
|
4
|
+
class XCScheme
|
5
|
+
# This class wraps the ProfileAction node of a .xcscheme XML file
|
6
|
+
#
|
7
|
+
class ProfileAction < AbstractSchemeAction
|
8
|
+
# @param [REXML::Element] node
|
9
|
+
# The 'ProfileAction' XML node that this object will wrap.
|
10
|
+
# If nil, will create a default XML node to use.
|
11
|
+
#
|
12
|
+
def initialize(node = nil)
|
13
|
+
create_xml_element_with_fallback(node, 'ProfileAction') do
|
14
|
+
# Add some attributes (that are not handled by this wrapper class yet but expected in the XML)
|
15
|
+
@xml_element.attributes['savedToolIdentifier'] = ''
|
16
|
+
@xml_element.attributes['useCustomWorkingDirectory'] = bool_to_string(false)
|
17
|
+
@xml_element.attributes['debugDocumentVersioning'] = bool_to_string(true)
|
18
|
+
|
19
|
+
# Setup default values for other (handled) attributes
|
20
|
+
self.build_configuration = 'Release'
|
21
|
+
self.should_use_launch_scheme_args_env = true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Bool]
|
26
|
+
# Whether this Profile Action should use the same arguments and environment variables
|
27
|
+
# as the Launch Action.
|
28
|
+
#
|
29
|
+
def should_use_launch_scheme_args_env?
|
30
|
+
string_to_bool(@xml_element.attributes['shouldUseLaunchSchemeArgsEnv'])
|
31
|
+
end
|
32
|
+
|
33
|
+
# @param [Bool] flag
|
34
|
+
# Set Whether this Profile Action should use the same arguments and environment variables
|
35
|
+
# as the Launch Action.
|
36
|
+
#
|
37
|
+
def should_use_launch_scheme_args_env=(flag)
|
38
|
+
@xml_element.attributes['shouldUseLaunchSchemeArgsEnv'] = bool_to_string(flag)
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [BuildableProductRunnable]
|
42
|
+
# The BuildableProductRunnable to launch when launching the Profile action
|
43
|
+
#
|
44
|
+
def buildable_product_runnable
|
45
|
+
BuildableProductRunnable.new @xml_element.elements['BuildableProductRunnable']
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param [BuildableProductRunnable] runnable
|
49
|
+
# Set the BuildableProductRunnable referencing the target to launch when profiling
|
50
|
+
#
|
51
|
+
def buildable_product_runnable=(runnable)
|
52
|
+
@xml_element.delete_element('BuildableProductRunnable')
|
53
|
+
@xml_element.add_element(runnable.xml_element) if runnable
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'xcodeproj/scheme/abstract_scheme_action'
|
2
|
+
|
3
|
+
module Xcodeproj
|
4
|
+
class XCScheme
|
5
|
+
# This class wraps the TestAction node of a .xcscheme XML file
|
6
|
+
#
|
7
|
+
class TestAction < AbstractSchemeAction
|
8
|
+
# @param [REXML::Element] node
|
9
|
+
# The 'TestAction' XML node that this object will wrap.
|
10
|
+
# If nil, will create a default XML node to use.
|
11
|
+
#
|
12
|
+
def initialize(node = nil)
|
13
|
+
create_xml_element_with_fallback(node, 'TestAction') do
|
14
|
+
@xml_element.attributes['selectedDebuggerIdentifier'] = 'Xcode.DebuggerFoundation.Debugger.LLDB'
|
15
|
+
@xml_element.attributes['selectedLauncherIdentifier'] = 'Xcode.DebuggerFoundation.Launcher.LLDB'
|
16
|
+
@xml_element.add_element('AdditionalOptions')
|
17
|
+
self.should_use_launch_scheme_args_env = true
|
18
|
+
self.build_configuration = 'Debug'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Bool]
|
23
|
+
# Whether this Test Action should use the same arguments and environment variables
|
24
|
+
# as the Launch Action.
|
25
|
+
#
|
26
|
+
def should_use_launch_scheme_args_env?
|
27
|
+
string_to_bool(@xml_element.attributes['shouldUseLaunchSchemeArgsEnv'])
|
28
|
+
end
|
29
|
+
|
30
|
+
# @param [Bool] flag
|
31
|
+
# Set Whether this Test Action should use the same arguments and environment variables
|
32
|
+
# as the Launch Action.
|
33
|
+
#
|
34
|
+
def should_use_launch_scheme_args_env=(flag)
|
35
|
+
@xml_element.attributes['shouldUseLaunchSchemeArgsEnv'] = bool_to_string(flag)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Array<TestableReference>]
|
39
|
+
# The list of TestableReference (test bundles) associated with this Test Action
|
40
|
+
#
|
41
|
+
def testables
|
42
|
+
return [] unless @xml_element.elements['Testables']
|
43
|
+
|
44
|
+
@xml_element.elements['Testables'].get_elements('TestableReference').map do |node|
|
45
|
+
TestableReference.new(node)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param [TestableReference] testable
|
50
|
+
# Add a TestableReference (test bundle) to this Test Action
|
51
|
+
#
|
52
|
+
def add_testable(testable)
|
53
|
+
testables = @xml_element.elements['Testables'] || @xml_element.add_element('Testables')
|
54
|
+
testables.add_element(testable.xml_element)
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Array<MacroExpansion>]
|
58
|
+
# The list of MacroExpansion bound with this TestAction
|
59
|
+
#
|
60
|
+
def macro_expansions
|
61
|
+
@xml_element.get_elements('MacroExpansion').map do |node|
|
62
|
+
MacroExpansion.new(node)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# @param [MacroExpansion] macro_expansion
|
67
|
+
# Add a MacroExpansion to this TestAction
|
68
|
+
#
|
69
|
+
def add_macro_expansion(macro_expansion)
|
70
|
+
@xml_element.add_element(macro_expansion.xml_element)
|
71
|
+
end
|
72
|
+
|
73
|
+
#-------------------------------------------------------------------------#
|
74
|
+
|
75
|
+
class TestableReference < XMLElementWrapper
|
76
|
+
# @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node
|
77
|
+
# Either the Xcode target to reference,
|
78
|
+
# or an existing XML 'TestableReference' node element to reference,
|
79
|
+
# or nil to create an new, empty TestableReference
|
80
|
+
#
|
81
|
+
def initialize(target_or_node = nil)
|
82
|
+
create_xml_element_with_fallback(target_or_node, 'TestableReference') do
|
83
|
+
self.skipped = false
|
84
|
+
add_buildable_reference BuildableReference.new(target_or_node) unless target_or_node.nil?
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# @return [Bool]
|
89
|
+
# Whether or not this TestableReference (test bundle) should be skipped or not
|
90
|
+
#
|
91
|
+
def skipped?
|
92
|
+
string_to_bool(@xml_element.attributes['skipped'])
|
93
|
+
end
|
94
|
+
|
95
|
+
# @param [Bool] flag
|
96
|
+
# Set whether or not this TestableReference (test bundle) should be skipped or not
|
97
|
+
#
|
98
|
+
def skipped=(flag)
|
99
|
+
@xml_element.attributes['skipped'] = bool_to_string(flag)
|
100
|
+
end
|
101
|
+
|
102
|
+
# @return [Array<BuildableReference>]
|
103
|
+
# The list of BuildableReferences this action will build.
|
104
|
+
# (The list usually contains only one element)
|
105
|
+
#
|
106
|
+
def buildable_references
|
107
|
+
@xml_element.get_elements('BuildableReference').map do |node|
|
108
|
+
BuildableReference.new(node)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# @param [BuildableReference] ref
|
113
|
+
# The BuildableReference to add to the list of targets this action will build
|
114
|
+
#
|
115
|
+
def add_buildable_reference(ref)
|
116
|
+
@xml_element.add_element(ref.xml_element)
|
117
|
+
end
|
118
|
+
|
119
|
+
# @todo handle 'AdditionalOptions' tag
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Xcodeproj
|
2
|
+
class XCScheme
|
3
|
+
# Abstract base class used for other XCScheme classes wrapping an XML element
|
4
|
+
#
|
5
|
+
class XMLElementWrapper
|
6
|
+
# @return [REXML::Element]
|
7
|
+
# The XML node wrapped and manipulated by this XMLElementWrapper object
|
8
|
+
#
|
9
|
+
attr_reader :xml_element
|
10
|
+
|
11
|
+
# @return [String]
|
12
|
+
# The XML representation of the node this XMLElementWrapper wraps,
|
13
|
+
# formatted in the same way that Xcode would.
|
14
|
+
def to_s
|
15
|
+
formatter = XMLFormatter.new(2)
|
16
|
+
formatter.compact = false
|
17
|
+
out = ''
|
18
|
+
formatter.write(@xml_element, out)
|
19
|
+
out.gsub!("<?xml version='1.0' encoding='UTF-8'?>", '')
|
20
|
+
out << "\n"
|
21
|
+
out
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
# This is a method intended to be used to facilitate the implementation of the initializers.
|
27
|
+
#
|
28
|
+
# - Create the @xml_element attribute based on the node passed as parameter, only if
|
29
|
+
# that parameter is of type REXML::Element and its name matches the tag_name given.
|
30
|
+
# - Otherwise, create a brand new REXML::Element with the proper tag name and
|
31
|
+
# execute the block given as a fallback to let the caller the chance to configure it
|
32
|
+
#
|
33
|
+
# @param [REXML::Element, *] node
|
34
|
+
# The node this XMLElementWrapper is expected to wrap
|
35
|
+
# or any other object (typically an AbstractTarget instance, or nil) the initializer might expect
|
36
|
+
#
|
37
|
+
# @param [String] tag_name
|
38
|
+
# The expected name for the node, which will also be the name used to create the new node
|
39
|
+
# if that `node` parameter is not a REXML::Element itself.
|
40
|
+
#
|
41
|
+
# @yield a parameter-less block if the `node` parameter is not actually a REXML::Element
|
42
|
+
#
|
43
|
+
# @raise Informative
|
44
|
+
# If the `node` parameter is a REXML::Element instance but the node's name
|
45
|
+
# doesn't match the one provided by the `tag_name` parameter.
|
46
|
+
#
|
47
|
+
def create_xml_element_with_fallback(node, tag_name)
|
48
|
+
if node && node.is_a?(REXML::Element)
|
49
|
+
raise Informative, 'Wrong XML tag name' unless node.name == tag_name
|
50
|
+
@xml_element = node
|
51
|
+
else
|
52
|
+
@xml_element = REXML::Element.new(tag_name)
|
53
|
+
yield if block_given?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# @param [Bool]
|
58
|
+
# The boolean we want to represent as a string
|
59
|
+
#
|
60
|
+
# @return [String]
|
61
|
+
# The string representaiton of that boolean used in the XML ('YES' or 'NO')
|
62
|
+
#
|
63
|
+
def bool_to_string(flag)
|
64
|
+
flag ? 'YES' : 'NO'
|
65
|
+
end
|
66
|
+
|
67
|
+
# @param [String]
|
68
|
+
# The string representaiton of a boolean used in the XML ('YES' or 'NO')
|
69
|
+
#
|
70
|
+
# @return [Bool]
|
71
|
+
# The boolean interpretation of that string
|
72
|
+
#
|
73
|
+
# @raise Informative
|
74
|
+
# If the string is not representing a boolean (i.e. is neither 'YES' nor 'NO')
|
75
|
+
#
|
76
|
+
def string_to_bool(str)
|
77
|
+
raise Informative, 'Invalid tag value. Expected YES or NO.' unless %w(YES NO).include?(str)
|
78
|
+
str == 'YES'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcodeproj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.27.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -101,6 +101,17 @@ files:
|
|
101
101
|
- lib/xcodeproj/project/project_helper.rb
|
102
102
|
- lib/xcodeproj/project/uuid_generator.rb
|
103
103
|
- lib/xcodeproj/scheme.rb
|
104
|
+
- lib/xcodeproj/scheme/abstract_scheme_action.rb
|
105
|
+
- lib/xcodeproj/scheme/analyze_action.rb
|
106
|
+
- lib/xcodeproj/scheme/archive_action.rb
|
107
|
+
- lib/xcodeproj/scheme/build_action.rb
|
108
|
+
- lib/xcodeproj/scheme/buildable_product_runnable.rb
|
109
|
+
- lib/xcodeproj/scheme/buildable_reference.rb
|
110
|
+
- lib/xcodeproj/scheme/launch_action.rb
|
111
|
+
- lib/xcodeproj/scheme/macro_expansion.rb
|
112
|
+
- lib/xcodeproj/scheme/profile_action.rb
|
113
|
+
- lib/xcodeproj/scheme/test_action.rb
|
114
|
+
- lib/xcodeproj/scheme/xml_element_wrapper.rb
|
104
115
|
- lib/xcodeproj/user_interface.rb
|
105
116
|
- lib/xcodeproj/workspace.rb
|
106
117
|
- lib/xcodeproj/workspace/file_reference.rb
|