xcodeproj 0.20.2 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/xcodeproj/command.rb +3 -1
- data/lib/xcodeproj/command/config_dump.rb +78 -0
- data/lib/xcodeproj/config.rb +22 -2
- data/lib/xcodeproj/constants.rb +106 -57
- data/lib/xcodeproj/gem_version.rb +1 -1
- data/lib/xcodeproj/project.rb +2 -2
- data/lib/xcodeproj/project/object/native_target.rb +0 -1
- data/lib/xcodeproj/project/project_helper.rb +47 -34
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b25b3f5efcf355937e6da83fa11ae3a2e8fb8bcc
|
4
|
+
data.tar.gz: 7c6ea2172930b5404dadb6b0126fe00715eff67f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad2bda26f91fd33dad783add7c92e4059165f475fe3d940bd50a0b05e9d02099aa092203812bf21fbb49556cd8e9d044d01dc4e795f1e7a55f815d86ae6547eb
|
7
|
+
data.tar.gz: d7c68cb7602a0f40f41ae5ae36b0536bf9fe55e86cd4e504f7b53baabb1f89a72f0362331e09591c459aebe539829777705c589c9130bae064bffb0b9dee1830
|
data/lib/xcodeproj/command.rb
CHANGED
@@ -2,6 +2,7 @@ module Xcodeproj
|
|
2
2
|
require 'colored'
|
3
3
|
|
4
4
|
class Command
|
5
|
+
autoload :ConfigDump, 'xcodeproj/command/config_dump'
|
5
6
|
autoload :TargetDiff, 'xcodeproj/command/target_diff'
|
6
7
|
autoload :ProjectDiff, 'xcodeproj/command/project_diff'
|
7
8
|
autoload :Show, 'xcodeproj/command/show'
|
@@ -56,7 +57,7 @@ module Xcodeproj
|
|
56
57
|
end
|
57
58
|
|
58
59
|
def self.banner
|
59
|
-
commands = ['target-diff', 'project-diff', 'show', 'sort']
|
60
|
+
commands = ['config-dump', 'target-diff', 'project-diff', 'show', 'sort']
|
60
61
|
banner = "To see help for the available commands run:\n\n"
|
61
62
|
banner + commands.map { |cmd| " * $ xcodeproj #{cmd.green} --help" }.join("\n")
|
62
63
|
end
|
@@ -101,6 +102,7 @@ module Xcodeproj
|
|
101
102
|
String.send(:define_method, :colorize) { |string, _| string } if argv.option('--no-color')
|
102
103
|
|
103
104
|
command_class = case command_argument = argv.shift_argument
|
105
|
+
when 'config-dump' then ConfigDump
|
104
106
|
when 'target-diff' then TargetDiff
|
105
107
|
when 'project-diff' then ProjectDiff
|
106
108
|
when 'show' then Show
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Xcodeproj
|
2
|
+
class Command
|
3
|
+
class ConfigDump < Command
|
4
|
+
def self.banner
|
5
|
+
<<-eos.strip_heredoc
|
6
|
+
Dumps the build settings of all project targets for all configurations in
|
7
|
+
directories named by the target in given output directory.
|
8
|
+
|
9
|
+
$ config-dump PROJECT OUTPUT
|
10
|
+
|
11
|
+
It extracts common build settings in a per target base.xcconfig file.
|
12
|
+
If no `PROJECT` is specified then the current work directory is searched
|
13
|
+
for one.
|
14
|
+
If no `OUTPUT` is specified then the project directory will be used.%)
|
15
|
+
eos
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(argv)
|
19
|
+
xcodeproj_path = argv.shift_argument
|
20
|
+
@xcodeproj_path = File.expand_path(xcodeproj_path) if xcodeproj_path
|
21
|
+
|
22
|
+
@output_path = Pathname(argv.shift_argument || '.')
|
23
|
+
unless @output_path.directory?
|
24
|
+
raise Informative, 'The output path must be a directory.'
|
25
|
+
end
|
26
|
+
|
27
|
+
super unless argv.empty?
|
28
|
+
end
|
29
|
+
|
30
|
+
def run
|
31
|
+
dump_all_configs(xcodeproj, 'Project')
|
32
|
+
|
33
|
+
xcodeproj.targets.each do |target|
|
34
|
+
dump_all_configs(target, target.name)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def dump_all_configs(configurable, name)
|
39
|
+
path = Pathname(name)
|
40
|
+
|
41
|
+
# Dump base configuration to file
|
42
|
+
base_settings = extract_common_settings!(configurable.build_configurations)
|
43
|
+
base_file_path = path + "#{name}_base.xcconfig"
|
44
|
+
dump_config_to_file(base_settings, base_file_path)
|
45
|
+
|
46
|
+
# Dump each configuration to file
|
47
|
+
configurable.build_configurations.each do |config|
|
48
|
+
settings = config.build_settings
|
49
|
+
dump_config_to_file(settings, path + "#{name}_#{config.name.downcase}.xcconfig", [base_file_path])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def extract_common_settings!(build_configurations)
|
54
|
+
# Grasp all common build settings
|
55
|
+
all_build_settings = build_configurations.map(&:build_settings)
|
56
|
+
common_build_settings = all_build_settings.reduce do |settings, config_build_settings|
|
57
|
+
settings.select { |key, value| value == config_build_settings[key] }
|
58
|
+
end
|
59
|
+
|
60
|
+
# Remove all common build settings from each configuration specific build settings
|
61
|
+
build_configurations.each do |config|
|
62
|
+
config.build_settings.reject! { |key| !common_build_settings[key].nil? }
|
63
|
+
end
|
64
|
+
|
65
|
+
common_build_settings
|
66
|
+
end
|
67
|
+
|
68
|
+
def dump_config_to_file(settings, file_path, includes = [])
|
69
|
+
dir = @output_path + file_path + '..'
|
70
|
+
dir.mkdir unless dir.exist?
|
71
|
+
|
72
|
+
config = Config.new(settings)
|
73
|
+
config.includes = includes
|
74
|
+
config.save_as(@output_path + file_path)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/xcodeproj/config.rb
CHANGED
@@ -8,6 +8,25 @@ module Xcodeproj
|
|
8
8
|
class Config
|
9
9
|
require 'set'
|
10
10
|
|
11
|
+
KEY_VALUE_PATTERN = /
|
12
|
+
(
|
13
|
+
[^=]+ # Any char, but not an assignment operator (non-greedy)
|
14
|
+
(?: # One or multiple conditional subscripts
|
15
|
+
\[
|
16
|
+
[^\]]* # The subscript key
|
17
|
+
(?:
|
18
|
+
= # The subscript comparison operator
|
19
|
+
[^\]]* # The subscript value
|
20
|
+
)?
|
21
|
+
\]
|
22
|
+
)*
|
23
|
+
)
|
24
|
+
\s+ # Whitespaces after the key (needed because subscripts
|
25
|
+
# always end with ']')
|
26
|
+
= # The assignment operator
|
27
|
+
(.*) # The value
|
28
|
+
/x
|
29
|
+
|
11
30
|
# @return [Hash{String => String}] The attributes of the settings file
|
12
31
|
# excluding frameworks, weak_framework and libraries.
|
13
32
|
#
|
@@ -294,8 +313,9 @@ module Xcodeproj
|
|
294
313
|
# entry is the value.
|
295
314
|
#
|
296
315
|
def extract_key_value(line)
|
297
|
-
|
298
|
-
if
|
316
|
+
match = line.match(KEY_VALUE_PATTERN)
|
317
|
+
if match
|
318
|
+
key, value = match[1], match[2]
|
299
319
|
[key.strip, value.strip]
|
300
320
|
else
|
301
321
|
[]
|
data/lib/xcodeproj/constants.rb
CHANGED
@@ -112,49 +112,96 @@ module Xcodeproj
|
|
112
112
|
#
|
113
113
|
COMMON_BUILD_SETTINGS = {
|
114
114
|
:all => {
|
115
|
-
'GCC_PRECOMPILE_PREFIX_HEADER' => 'YES',
|
116
115
|
'PRODUCT_NAME' => '$(TARGET_NAME)',
|
117
|
-
'
|
118
|
-
'DSTROOT' => '/tmp/xcodeproj.dst',
|
119
|
-
'ALWAYS_SEARCH_USER_PATHS' => 'NO',
|
120
|
-
'INSTALL_PATH' => '$(BUILT_PRODUCTS_DIR)',
|
121
|
-
'OTHER_LDFLAGS' => '',
|
122
|
-
'COPY_PHASE_STRIP' => 'YES',
|
116
|
+
'ENABLE_STRICT_OBJC_MSGSEND' => 'YES',
|
123
117
|
}.freeze,
|
124
|
-
:debug => {
|
125
|
-
'
|
126
|
-
'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'],
|
127
|
-
'GCC_SYMBOLS_PRIVATE_EXTERN' => 'NO',
|
128
|
-
'GCC_OPTIMIZATION_LEVEL' => '0',
|
129
|
-
'COPY_PHASE_STRIP' => 'NO',
|
118
|
+
[:debug] => {
|
119
|
+
'MTL_ENABLE_DEBUG_INFO' => 'YES',
|
130
120
|
}.freeze,
|
131
|
-
:release => {
|
132
|
-
'
|
133
|
-
'OTHER_CPLUSPLUSFLAGS' => ['-DNS_BLOCK_ASSERTIONS=1', '$(inherited)'],
|
121
|
+
[:release] => {
|
122
|
+
'MTL_ENABLE_DEBUG_INFO' => 'NO',
|
134
123
|
}.freeze,
|
135
|
-
:ios => {
|
136
|
-
'IPHONEOS_DEPLOYMENT_TARGET' => '4.3',
|
137
|
-
'PUBLIC_HEADERS_FOLDER_PATH' => '$(TARGET_NAME)',
|
124
|
+
[:ios] => {
|
138
125
|
'SDKROOT' => 'iphoneos',
|
139
126
|
}.freeze,
|
140
|
-
:osx => {
|
141
|
-
'GCC_ENABLE_OBJC_EXCEPTIONS' => 'YES',
|
142
|
-
'GCC_VERSION' => 'com.apple.compilers.llvm.clang.1_0',
|
143
|
-
'MACOSX_DEPLOYMENT_TARGET' => '10.7',
|
127
|
+
[:osx] => {
|
144
128
|
'SDKROOT' => 'macosx',
|
145
|
-
'COMBINE_HIDPI_IMAGES' => 'YES',
|
146
129
|
}.freeze,
|
147
|
-
[:
|
130
|
+
[:debug, :osx] => {
|
148
131
|
# Empty?
|
149
132
|
}.freeze,
|
150
|
-
[:
|
133
|
+
[:release, :osx] => {
|
151
134
|
'DEBUG_INFORMATION_FORMAT' => 'dwarf-with-dsym',
|
152
135
|
}.freeze,
|
153
|
-
[:
|
136
|
+
[:debug, :ios] => {
|
154
137
|
# Empty?
|
155
138
|
}.freeze,
|
156
|
-
[:
|
157
|
-
'
|
139
|
+
[:debug, :application, :swift] => {
|
140
|
+
'SWIFT_OPTIMIZATION_LEVEL' => '-Onone',
|
141
|
+
}.freeze,
|
142
|
+
[:framework] => {
|
143
|
+
'VERSION_INFO_PREFIX' => '',
|
144
|
+
'DYLIB_COMPATIBILITY_VERSION' => '1',
|
145
|
+
'DEFINES_MODULE' => 'YES',
|
146
|
+
'DYLIB_INSTALL_NAME_BASE' => '@rpath',
|
147
|
+
'CURRENT_PROJECT_VERSION' => '1',
|
148
|
+
'VERSIONING_SYSTEM' => 'apple-generic',
|
149
|
+
'DYLIB_CURRENT_VERSION' => '1',
|
150
|
+
'SKIP_INSTALL' => 'YES',
|
151
|
+
'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Frameworks',
|
152
|
+
}.freeze,
|
153
|
+
[:ios, :framework] => {
|
154
|
+
'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/Frameworks', '@loader_path/Frameworks'],
|
155
|
+
'CODE_SIGN_IDENTITY[sdk=iphoneos*]' => 'iPhone Developer',
|
156
|
+
'TARGETED_DEVICE_FAMILY' => '1,2',
|
157
|
+
}.freeze,
|
158
|
+
[:osx, :framework] => {
|
159
|
+
'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/../Frameworks', '@loader_path/Frameworks'],
|
160
|
+
'FRAMEWORK_VERSION' => 'A',
|
161
|
+
'COMBINE_HIDPI_IMAGES' => 'YES',
|
162
|
+
}.freeze,
|
163
|
+
[:framework, :swift] => {
|
164
|
+
'DEFINES_MODULE' => 'YES',
|
165
|
+
}.freeze,
|
166
|
+
[:debug, :framework, :swift] => {
|
167
|
+
'SWIFT_OPTIMIZATION_LEVEL' => '-Onone',
|
168
|
+
}.freeze,
|
169
|
+
[:osx, :static_library] => {
|
170
|
+
'EXECUTABLE_PREFIX' => 'lib',
|
171
|
+
}.freeze,
|
172
|
+
[:ios, :static_library] => {
|
173
|
+
'OTHER_LDFLAGS' => '-ObjC',
|
174
|
+
'SKIP_INSTALL' => 'YES',
|
175
|
+
}.freeze,
|
176
|
+
[:osx, :dynamic_library] => {
|
177
|
+
'EXECUTABLE_PREFIX' => 'lib',
|
178
|
+
'DYLIB_COMPATIBILITY_VERSION' => '1',
|
179
|
+
'DYLIB_CURRENT_VERSION' => '1',
|
180
|
+
}.freeze,
|
181
|
+
[:application] => {
|
182
|
+
'ASSETCATALOG_COMPILER_APPICON_NAME' => 'AppIcon',
|
183
|
+
}.freeze,
|
184
|
+
[:ios, :application] => {
|
185
|
+
'CODE_SIGN_IDENTITY[sdk=iphoneos*]' => 'iPhone Developer',
|
186
|
+
'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/Frameworks'],
|
187
|
+
}.freeze,
|
188
|
+
[:osx, :application] => {
|
189
|
+
'COMBINE_HIDPI_IMAGES' => 'YES',
|
190
|
+
'CODE_SIGN_IDENTITY' => '-',
|
191
|
+
'LD_RUNPATH_SEARCH_PATHS' => ['$(inherited)', '@executable_path/../Frameworks'],
|
192
|
+
}.freeze,
|
193
|
+
[:bundle] => {
|
194
|
+
'PRODUCT_NAME' => '$(TARGET_NAME)',
|
195
|
+
'WRAPPER_EXTENSION' => 'bundle',
|
196
|
+
'SKIP_INSTALL' => 'YES',
|
197
|
+
}.freeze,
|
198
|
+
[:ios, :bundle] => {
|
199
|
+
'SDKROOT' => 'iphoneos',
|
200
|
+
}.freeze,
|
201
|
+
[:osx, :bundle] => {
|
202
|
+
'COMBINE_HIDPI_IMAGES' => 'YES',
|
203
|
+
'SDKROOT' => 'macosx',
|
204
|
+
'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Bundles',
|
158
205
|
}.freeze,
|
159
206
|
}.freeze
|
160
207
|
|
@@ -162,38 +209,40 @@ module Xcodeproj
|
|
162
209
|
#
|
163
210
|
PROJECT_DEFAULT_BUILD_SETTINGS = {
|
164
211
|
:all => {
|
165
|
-
'ALWAYS_SEARCH_USER_PATHS'
|
166
|
-
'CLANG_CXX_LANGUAGE_STANDARD'
|
167
|
-
'CLANG_CXX_LIBRARY'
|
168
|
-
'CLANG_ENABLE_OBJC_ARC'
|
169
|
-
'CLANG_WARN_BOOL_CONVERSION'
|
170
|
-
'CLANG_WARN_CONSTANT_CONVERSION'
|
171
|
-
'CLANG_WARN_DIRECT_OBJC_ISA_USAGE'
|
172
|
-
'
|
173
|
-
'
|
174
|
-
'
|
175
|
-
'
|
176
|
-
'
|
177
|
-
'
|
178
|
-
'
|
179
|
-
'
|
180
|
-
'
|
181
|
-
'
|
182
|
-
'
|
183
|
-
'
|
212
|
+
'ALWAYS_SEARCH_USER_PATHS' => 'NO',
|
213
|
+
'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++0x',
|
214
|
+
'CLANG_CXX_LIBRARY' => 'libc++',
|
215
|
+
'CLANG_ENABLE_OBJC_ARC' => 'YES',
|
216
|
+
'CLANG_WARN_BOOL_CONVERSION' => 'YES',
|
217
|
+
'CLANG_WARN_CONSTANT_CONVERSION' => 'YES',
|
218
|
+
'CLANG_WARN_DIRECT_OBJC_ISA_USAGE' => 'YES',
|
219
|
+
'CLANG_WARN__DUPLICATE_METHOD_MATCH' => 'YES',
|
220
|
+
'CLANG_WARN_EMPTY_BODY' => 'YES',
|
221
|
+
'CLANG_WARN_ENUM_CONVERSION' => 'YES',
|
222
|
+
'CLANG_WARN_INT_CONVERSION' => 'YES',
|
223
|
+
'CLANG_WARN_OBJC_ROOT_CLASS' => 'YES',
|
224
|
+
'CLANG_WARN_UNREACHABLE_CODE' => 'YES',
|
225
|
+
'CLANG_ENABLE_MODULES' => 'YES',
|
226
|
+
'GCC_C_LANGUAGE_STANDARD' => 'gnu99',
|
227
|
+
'GCC_WARN_64_TO_32_BIT_CONVERSION' => 'YES',
|
228
|
+
'GCC_WARN_ABOUT_RETURN_TYPE' => 'YES',
|
229
|
+
'GCC_WARN_UNDECLARED_SELECTOR' => 'YES',
|
230
|
+
'GCC_WARN_UNINITIALIZED_AUTOS' => 'YES',
|
231
|
+
'GCC_WARN_UNUSED_FUNCTION' => 'YES',
|
232
|
+
'GCC_WARN_UNUSED_VARIABLE' => 'YES',
|
184
233
|
},
|
185
234
|
:release => {
|
186
|
-
'COPY_PHASE_STRIP'
|
187
|
-
'ENABLE_NS_ASSERTIONS'
|
188
|
-
'VALIDATE_PRODUCT'
|
235
|
+
'COPY_PHASE_STRIP' => 'NO',
|
236
|
+
'ENABLE_NS_ASSERTIONS' => 'NO',
|
237
|
+
'VALIDATE_PRODUCT' => 'YES',
|
189
238
|
}.freeze,
|
190
239
|
:debug => {
|
191
|
-
'ONLY_ACTIVE_ARCH'
|
192
|
-
'COPY_PHASE_STRIP'
|
193
|
-
'GCC_DYNAMIC_NO_PIC'
|
194
|
-
'GCC_OPTIMIZATION_LEVEL'
|
195
|
-
'GCC_PREPROCESSOR_DEFINITIONS'
|
196
|
-
'GCC_SYMBOLS_PRIVATE_EXTERN'
|
240
|
+
'ONLY_ACTIVE_ARCH' => 'YES',
|
241
|
+
'COPY_PHASE_STRIP' => 'YES',
|
242
|
+
'GCC_DYNAMIC_NO_PIC' => 'NO',
|
243
|
+
'GCC_OPTIMIZATION_LEVEL' => '0',
|
244
|
+
'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'],
|
245
|
+
'GCC_SYMBOLS_PRIVATE_EXTERN' => 'NO',
|
197
246
|
}.freeze,
|
198
247
|
}.freeze
|
199
248
|
|
data/lib/xcodeproj/project.rb
CHANGED
@@ -600,8 +600,8 @@ module Xcodeproj
|
|
600
600
|
# Frameworks phase.
|
601
601
|
#
|
602
602
|
# @param [Symbol] type
|
603
|
-
# the type of target. Can be `:application`, `:
|
604
|
-
# `:static_library`.
|
603
|
+
# the type of target. Can be `:application`, `:framework`,
|
604
|
+
# `:dynamic_library` or `:static_library`.
|
605
605
|
#
|
606
606
|
# @param [String] name
|
607
607
|
# the name of the target product.
|
@@ -20,8 +20,8 @@ module Xcodeproj
|
|
20
20
|
# the project to which the target should be added.
|
21
21
|
#
|
22
22
|
# @param [Symbol] type
|
23
|
-
# the type of target. Can be `:application`, `:dynamic_library
|
24
|
-
# `:static_library`.
|
23
|
+
# the type of target. Can be `:application`, `:dynamic_library`,
|
24
|
+
# `framework` or `:static_library`.
|
25
25
|
#
|
26
26
|
# @param [String] name
|
27
27
|
# the name of the target product.
|
@@ -32,6 +32,10 @@ module Xcodeproj
|
|
32
32
|
# @param [String] deployment_target
|
33
33
|
# the deployment target for the platform.
|
34
34
|
#
|
35
|
+
# @param [PBXGroup] product_group
|
36
|
+
# the product group, where to add to a file reference of the
|
37
|
+
# created target.
|
38
|
+
#
|
35
39
|
# @return [PBXNativeTarget] the target.
|
36
40
|
#
|
37
41
|
def self.new_target(project, type, name, platform, deployment_target, product_group)
|
@@ -41,7 +45,7 @@ module Xcodeproj
|
|
41
45
|
target.name = name
|
42
46
|
target.product_name = name
|
43
47
|
target.product_type = Constants::PRODUCT_TYPE_UTI[type]
|
44
|
-
target.build_configuration_list = configuration_list(project, platform, deployment_target)
|
48
|
+
target.build_configuration_list = configuration_list(project, platform, deployment_target, type)
|
45
49
|
|
46
50
|
# Product
|
47
51
|
product = product_group.new_product_ref_for_target(name, type)
|
@@ -74,6 +78,10 @@ module Xcodeproj
|
|
74
78
|
# @param [Symbol] platform
|
75
79
|
# the platform of the resources bundle. Can be `:ios` or `:osx`.
|
76
80
|
#
|
81
|
+
# @param [PBXGroup] product_group
|
82
|
+
# the product group, where to add to a file reference of the
|
83
|
+
# created target.
|
84
|
+
#
|
77
85
|
# @return [PBXNativeTarget] the target.
|
78
86
|
#
|
79
87
|
def self.new_resources_bundle(project, name, platform, product_group)
|
@@ -128,20 +136,24 @@ module Xcodeproj
|
|
128
136
|
# @param [String] deployment_target
|
129
137
|
# the deployment target for the platform.
|
130
138
|
#
|
139
|
+
# @param [Symbol] target_product_type
|
140
|
+
# the product type of the target, can be any of `Constants::PRODUCT_TYPE_UTI.values`
|
141
|
+
# or `Constants::PRODUCT_TYPE_UTI.keys`.
|
142
|
+
#
|
131
143
|
# @return [XCConfigurationList] the generated configuration list.
|
132
144
|
#
|
133
|
-
def self.configuration_list(project, platform, deployment_target = nil)
|
145
|
+
def self.configuration_list(project, platform, deployment_target = nil, target_product_type)
|
134
146
|
cl = project.new(XCConfigurationList)
|
135
147
|
cl.default_configuration_is_visible = '0'
|
136
148
|
cl.default_configuration_name = 'Release'
|
137
149
|
|
138
150
|
release_conf = project.new(XCBuildConfiguration)
|
139
151
|
release_conf.name = 'Release'
|
140
|
-
release_conf.build_settings = common_build_settings(:release, platform, deployment_target)
|
152
|
+
release_conf.build_settings = common_build_settings(:release, platform, deployment_target, target_product_type)
|
141
153
|
|
142
154
|
debug_conf = project.new(XCBuildConfiguration)
|
143
155
|
debug_conf.name = 'Debug'
|
144
|
-
debug_conf.build_settings = common_build_settings(:debug, platform, deployment_target)
|
156
|
+
debug_conf.build_settings = common_build_settings(:debug, platform, deployment_target, target_product_type)
|
145
157
|
|
146
158
|
cl.build_configurations << release_conf
|
147
159
|
cl.build_configurations << debug_conf
|
@@ -161,38 +173,39 @@ module Xcodeproj
|
|
161
173
|
# @param [String] deployment_target
|
162
174
|
# the deployment target for the platform.
|
163
175
|
#
|
176
|
+
# @param [Symbol] target_product_type
|
177
|
+
# the product type of the target, can be any of
|
178
|
+
# `Constants::PRODUCT_TYPE_UTI.values`
|
179
|
+
# or `Constants::PRODUCT_TYPE_UTI.keys`. Default is :application.
|
180
|
+
#
|
181
|
+
# @param [Symbol] language
|
182
|
+
# the primary language of the target, can be `:objc` or `:swift`.
|
183
|
+
#
|
164
184
|
# @return [Hash] The common build settings
|
165
185
|
#
|
166
|
-
def self.common_build_settings(type, platform, deployment_target = nil, target_product_type = nil)
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
settings.merge!(deep_dup(common_settings[platform]))
|
186
|
-
settings.merge!(deep_dup(common_settings[[platform, type]]))
|
187
|
-
if deployment_target
|
188
|
-
if platform == :ios
|
189
|
-
settings['IPHONEOS_DEPLOYMENT_TARGET'] = deployment_target
|
190
|
-
elsif platform == :osx
|
191
|
-
settings['MACOSX_DEPLOYMENT_TARGET'] = deployment_target
|
192
|
-
end
|
186
|
+
def self.common_build_settings(type, platform, deployment_target = nil, target_product_type = nil, language = :objc)
|
187
|
+
target_product_type = (Constants::PRODUCT_TYPE_UTI.find { |_, v| v == target_product_type } || [target_product_type || :application])[0]
|
188
|
+
common_settings = Constants::COMMON_BUILD_SETTINGS
|
189
|
+
|
190
|
+
# Use intersecting settings for all key sets as base
|
191
|
+
settings = deep_dup(common_settings[:all])
|
192
|
+
|
193
|
+
# Match further common settings by key sets
|
194
|
+
keys = [type, platform, target_product_type, language].compact
|
195
|
+
key_combinations = (1..keys.length).flat_map { |n| keys.combination(n).to_a }
|
196
|
+
key_combinations.each do |key_combination|
|
197
|
+
settings.merge!(deep_dup(common_settings[key_combination] || {}))
|
198
|
+
end
|
199
|
+
|
200
|
+
if deployment_target
|
201
|
+
if platform == :ios
|
202
|
+
settings['IPHONEOS_DEPLOYMENT_TARGET'] = deployment_target
|
203
|
+
elsif platform == :osx
|
204
|
+
settings['MACOSX_DEPLOYMENT_TARGET'] = deployment_target
|
193
205
|
end
|
194
|
-
settings
|
195
206
|
end
|
207
|
+
|
208
|
+
settings
|
196
209
|
end
|
197
210
|
|
198
211
|
# Creates a deep copy of the given object
|
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.21.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: 2014-
|
11
|
+
date: 2014-12-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -49,6 +49,7 @@ extra_rdoc_files: []
|
|
49
49
|
files:
|
50
50
|
- README.md
|
51
51
|
- LICENSE
|
52
|
+
- lib/xcodeproj/command/config_dump.rb
|
52
53
|
- lib/xcodeproj/command/project_diff.rb
|
53
54
|
- lib/xcodeproj/command/show.rb
|
54
55
|
- lib/xcodeproj/command/sort.rb
|