xcodeproj 1.4.4 → 1.5.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/constants.rb +7 -0
- data/lib/xcodeproj/gem_version.rb +1 -1
- data/lib/xcodeproj/project.rb +2 -0
- data/lib/xcodeproj/project/object/build_configuration.rb +38 -1
- data/lib/xcodeproj/project/object/configuration_list.rb +6 -2
- data/lib/xcodeproj/project/object/native_target.rb +18 -6
- data/lib/xcodeproj/project/project_helper.rb +37 -0
- data/lib/xcodeproj/scheme/build_action.rb +3 -1
- data/lib/xcodeproj/scheme/test_action.rb +18 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8046e57ba42d21845af2c95f063f5c51fd87625
|
4
|
+
data.tar.gz: 261b049b8d6d5dbc3884901e1bd6a6d184a6b0ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c6bdef5a2db8877086391a9ba5382ec220a58fa4cd212c432ddb2dd7659a964baf30f96566ec83c54a9de6ff427f7e4a27f161997670298ea898205390899b7
|
7
|
+
data.tar.gz: 31e7ec5eb73b9c36733b21d53997fc06e6ca986d8eb11438f611aeda9fbb7fad607e65438d9f11a452f590c538d5bc3e418b0f3f141d5a823dc99c5bae326b90
|
data/lib/xcodeproj/constants.rb
CHANGED
@@ -383,5 +383,12 @@ module Xcodeproj
|
|
383
383
|
# @return [Array] The extensions which are associated with header files.
|
384
384
|
#
|
385
385
|
HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp .tpp .hxx .def).freeze
|
386
|
+
|
387
|
+
# @return [Array] The keywords Xcode use to identify a build setting can
|
388
|
+
# inherit values from a previous precedence level
|
389
|
+
INHERITED_KEYWORDS = %w(
|
390
|
+
$(inherited)
|
391
|
+
${inherited}
|
392
|
+
).freeze
|
386
393
|
end
|
387
394
|
end
|
data/lib/xcodeproj/project.rb
CHANGED
@@ -809,6 +809,8 @@ module Xcodeproj
|
|
809
809
|
targets.each do |target|
|
810
810
|
scheme = XCScheme.new
|
811
811
|
scheme.add_build_target(target)
|
812
|
+
scheme.add_test_target(target) if target.test_target_type?
|
813
|
+
yield scheme, target if block_given?
|
812
814
|
scheme.save_as(path, target.name, false)
|
813
815
|
xcschememanagement['SchemeUserState']["#{target.name}.xcscheme"] = {}
|
814
816
|
xcschememanagement['SchemeUserState']["#{target.name}.xcscheme"]['isShown'] = visible
|
@@ -57,7 +57,7 @@ module Xcodeproj
|
|
57
57
|
# debugging.
|
58
58
|
#
|
59
59
|
def debug?
|
60
|
-
gcc_preprocessor_definitions =
|
60
|
+
gcc_preprocessor_definitions = resolve_build_setting('GCC_PREPROCESSOR_DEFINITIONS')
|
61
61
|
gcc_preprocessor_definitions && gcc_preprocessor_definitions.include?('DEBUG=1')
|
62
62
|
end
|
63
63
|
|
@@ -68,10 +68,41 @@ module Xcodeproj
|
|
68
68
|
debug? ? :debug : :release
|
69
69
|
end
|
70
70
|
|
71
|
+
# @!group Helpers
|
72
|
+
#---------------------------------------------------------------------#
|
73
|
+
|
74
|
+
# Gets the value for the given build setting considering any configuration
|
75
|
+
# file present and resolving inheritance between them
|
76
|
+
#
|
77
|
+
# @param [String] key
|
78
|
+
# the key of the build setting.
|
79
|
+
#
|
80
|
+
# @return [String] The value of the build setting
|
81
|
+
#
|
82
|
+
def resolve_build_setting(key)
|
83
|
+
setting = build_settings[key]
|
84
|
+
config_setting = base_configuration_reference && config[key]
|
85
|
+
|
86
|
+
project_setting = project.build_configuration_list[name]
|
87
|
+
project_setting = nil if project_setting == self
|
88
|
+
project_setting &&= project_setting.resolve_build_setting(key)
|
89
|
+
|
90
|
+
[project_setting, config_setting, setting].compact.reduce do |inherited, value|
|
91
|
+
expand_build_setting(value, inherited)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
71
95
|
#---------------------------------------------------------------------#
|
72
96
|
|
73
97
|
private
|
74
98
|
|
99
|
+
def expand_build_setting(build_setting_value, config_value)
|
100
|
+
default = build_setting_value.is_a?(String) ? '' : []
|
101
|
+
inherited = config_value || default
|
102
|
+
return build_setting_value.gsub(Regexp.union(Constants::INHERITED_KEYWORDS), inherited) if build_setting_value.is_a? String
|
103
|
+
build_setting_value.map { |value| Constants::INHERITED_KEYWORDS.include?(value) ? inherited : value }.flatten
|
104
|
+
end
|
105
|
+
|
75
106
|
def sorted_build_settings
|
76
107
|
sorted = {}
|
77
108
|
build_settings.keys.sort.each do |key|
|
@@ -126,6 +157,12 @@ module Xcodeproj
|
|
126
157
|
string.scan(regexp).map(&:first)
|
127
158
|
end
|
128
159
|
|
160
|
+
def config
|
161
|
+
@config ||= Xcodeproj::Config.new(base_configuration_reference.real_path).to_hash.tap do |hash|
|
162
|
+
normalize_array_settings(hash)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
129
166
|
#---------------------------------------------------------------------#
|
130
167
|
end
|
131
168
|
end
|
@@ -62,13 +62,17 @@ module Xcodeproj
|
|
62
62
|
# @param [String] key
|
63
63
|
# the key of the build setting.
|
64
64
|
#
|
65
|
+
# @param [Bool] resolve_against_xcconfig
|
66
|
+
# wether the retrieved setting should take in consideration any
|
67
|
+
# configuration file present.
|
68
|
+
#
|
65
69
|
# @return [Hash{String => String}] The value of the build setting
|
66
70
|
# grouped by the name of the build configuration.
|
67
71
|
#
|
68
|
-
def get_setting(key)
|
72
|
+
def get_setting(key, resolve_against_xcconfig = false)
|
69
73
|
result = {}
|
70
74
|
build_configurations.each do |bc|
|
71
|
-
result[bc.name] = bc.build_settings[key]
|
75
|
+
result[bc.name] = resolve_against_xcconfig ? bc.resolve_build_setting(key) : bc.build_settings[key]
|
72
76
|
end
|
73
77
|
result
|
74
78
|
end
|
@@ -41,18 +41,30 @@ module Xcodeproj
|
|
41
41
|
# @param [String] key
|
42
42
|
# the key of the build setting.
|
43
43
|
#
|
44
|
+
# @param [Bool] resolve_against_xcconfig
|
45
|
+
# wether the resolved setting should take in consideration any
|
46
|
+
# configuration file present.
|
47
|
+
#
|
44
48
|
# @return [Hash{String => String}] The value of the build setting
|
45
49
|
# grouped by the name of the build configuration.
|
46
50
|
#
|
47
51
|
# TODO: Full support for this would require to take into account
|
48
|
-
#
|
49
|
-
# platform.
|
52
|
+
# the default values for the platform.
|
50
53
|
#
|
51
|
-
def resolved_build_setting(key)
|
52
|
-
target_settings = build_configuration_list.get_setting(key)
|
53
|
-
project_settings = project.build_configuration_list.get_setting(key)
|
54
|
+
def resolved_build_setting(key, resolve_against_xcconfig = false)
|
55
|
+
target_settings = build_configuration_list.get_setting(key, resolve_against_xcconfig)
|
56
|
+
project_settings = project.build_configuration_list.get_setting(key, resolve_against_xcconfig)
|
54
57
|
target_settings.merge(project_settings) do |_key, target_val, proj_val|
|
55
|
-
target_val
|
58
|
+
target_includes_inherited = Constants::INHERITED_KEYWORDS.any? { |keyword| target_val.include?(keyword) } if target_val
|
59
|
+
if target_includes_inherited && proj_val
|
60
|
+
if target_val.is_a? String
|
61
|
+
target_val.gsub(Regexp.union(Constants::INHERITED_KEYWORDS), proj_val)
|
62
|
+
else
|
63
|
+
target_val.map { |value| Constants::INHERITED_KEYWORDS.include?(value) ? proj_val : value }.flatten
|
64
|
+
end
|
65
|
+
else
|
66
|
+
target_val || proj_val
|
67
|
+
end
|
56
68
|
end
|
57
69
|
end
|
58
70
|
|
@@ -143,6 +143,43 @@ module Xcodeproj
|
|
143
143
|
target
|
144
144
|
end
|
145
145
|
|
146
|
+
# Creates a new legacy target and adds it to the project.
|
147
|
+
#
|
148
|
+
# The target is configured for the given platform.
|
149
|
+
#
|
150
|
+
# @param [Project] project
|
151
|
+
# the project to which the target should be added.
|
152
|
+
#
|
153
|
+
# @param [String] name
|
154
|
+
# the name of the aggregate target.
|
155
|
+
#
|
156
|
+
# @param [String] build_tool_path
|
157
|
+
# the build tool path to use for this target.
|
158
|
+
#
|
159
|
+
# @param [String] build_arguments_string
|
160
|
+
# the build arguments string to use for this target.
|
161
|
+
#
|
162
|
+
# @param [String] build_working_directory
|
163
|
+
# the build working directory to use for this target.
|
164
|
+
#
|
165
|
+
# @param [String] pass_build_settings_in_environment
|
166
|
+
# whether to pass build settings in the environment during execution of this target.
|
167
|
+
#
|
168
|
+
# @return [PBXLegacyTarget] the target.
|
169
|
+
#
|
170
|
+
def self.new_legacy_target(project, name, build_tool_path = '/usr/bin/make', build_arguments_string = '$(ACTION)',
|
171
|
+
build_working_directory = nil, pass_build_settings_in_environment = '1')
|
172
|
+
target = project.new(PBXLegacyTarget)
|
173
|
+
project.targets << target
|
174
|
+
target.name = name
|
175
|
+
target.build_configuration_list = configuration_list(project)
|
176
|
+
target.build_tool_path = build_tool_path
|
177
|
+
target.build_arguments_string = build_arguments_string
|
178
|
+
target.build_working_directory = build_working_directory
|
179
|
+
target.pass_build_settings_in_environment = pass_build_settings_in_environment
|
180
|
+
target
|
181
|
+
end
|
182
|
+
|
146
183
|
# @!group Private Helpers
|
147
184
|
|
148
185
|
#-----------------------------------------------------------------------#
|
@@ -52,7 +52,9 @@ module Xcodeproj
|
|
52
52
|
# Each entry represent a target to build and tells for which action it's needed to be built.
|
53
53
|
#
|
54
54
|
def entries
|
55
|
-
@xml_element.elements['BuildActionEntries']
|
55
|
+
entries = @xml_element.elements['BuildActionEntries']
|
56
|
+
return nil unless entries
|
57
|
+
entries.get_elements('BuildActionEntry').map do |entry_node|
|
56
58
|
BuildAction::Entry.new(entry_node)
|
57
59
|
end
|
58
60
|
end
|
@@ -101,6 +101,24 @@ module Xcodeproj
|
|
101
101
|
env_vars
|
102
102
|
end
|
103
103
|
|
104
|
+
# @todo handle 'AdditionalOptions' tag
|
105
|
+
|
106
|
+
# @return [CommandLineArguments]
|
107
|
+
# Returns the CommandLineArguments that will be passed at app launch
|
108
|
+
#
|
109
|
+
def command_line_arguments
|
110
|
+
CommandLineArguments.new(@xml_element.elements[XCScheme::COMMAND_LINE_ARGS_NODE])
|
111
|
+
end
|
112
|
+
|
113
|
+
# @return [CommandLineArguments] arguments
|
114
|
+
# Sets the CommandLineArguments that will be passed at app launch
|
115
|
+
#
|
116
|
+
def command_line_arguments=(arguments)
|
117
|
+
@xml_element.delete_element(XCScheme::COMMAND_LINE_ARGS_NODE)
|
118
|
+
@xml_element.add_element(arguments.xml_element) if arguments
|
119
|
+
arguments
|
120
|
+
end
|
121
|
+
|
104
122
|
#-------------------------------------------------------------------------#
|
105
123
|
|
106
124
|
class TestableReference < XMLElementWrapper
|
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: 1.
|
4
|
+
version: 1.5.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: 2017-
|
11
|
+
date: 2017-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: CFPropertyList
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.
|
33
|
+
version: 1.0.2
|
34
34
|
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: '2.0'
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.0.
|
43
|
+
version: 1.0.2
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '2.0'
|
@@ -159,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
159
|
version: '0'
|
160
160
|
requirements: []
|
161
161
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
162
|
+
rubygems_version: 2.4.5.1
|
163
163
|
signing_key:
|
164
164
|
specification_version: 3
|
165
165
|
summary: Create and modify Xcode projects from Ruby.
|