xcodeproj 0.18.0 → 0.19.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/bin/xcodeproj +5 -5
- data/lib/xcodeproj.rb +0 -2
- data/lib/xcodeproj/command.rb +26 -17
- data/lib/xcodeproj/command/project_diff.rb +8 -11
- data/lib/xcodeproj/command/show.rb +8 -10
- data/lib/xcodeproj/command/sort.rb +4 -7
- data/lib/xcodeproj/command/target_diff.rb +4 -5
- data/lib/xcodeproj/config.rb +64 -57
- data/lib/xcodeproj/config/other_linker_flags_parser.rb +62 -0
- data/lib/xcodeproj/constants.rb +31 -30
- data/lib/xcodeproj/differ.rb +5 -9
- data/lib/xcodeproj/gem_version.rb +1 -2
- data/lib/xcodeproj/helper.rb +5 -4
- data/lib/xcodeproj/plist_helper.rb +46 -11
- data/lib/xcodeproj/project.rb +16 -20
- data/lib/xcodeproj/project/case_converter.rb +59 -0
- data/lib/xcodeproj/project/object.rb +40 -30
- data/lib/xcodeproj/project/object/build_configuration.rb +1 -5
- data/lib/xcodeproj/project/object/build_file.rb +1 -4
- data/lib/xcodeproj/project/object/build_phase.rb +2 -13
- data/lib/xcodeproj/project/object/build_rule.rb +0 -3
- data/lib/xcodeproj/project/object/configuration_list.rb +0 -4
- data/lib/xcodeproj/project/object/container_item_proxy.rb +2 -4
- data/lib/xcodeproj/project/object/file_reference.rb +3 -6
- data/lib/xcodeproj/project/object/group.rb +6 -14
- data/lib/xcodeproj/project/object/helpers/file_references_factory.rb +64 -13
- data/lib/xcodeproj/project/object/helpers/groupable_helper.rb +4 -6
- data/lib/xcodeproj/project/object/native_target.rb +18 -29
- data/lib/xcodeproj/project/object/reference_proxy.rb +0 -4
- data/lib/xcodeproj/project/object/root_object.rb +4 -8
- data/lib/xcodeproj/project/object/target_dependency.rb +1 -4
- data/lib/xcodeproj/project/object_attributes.rb +76 -33
- data/lib/xcodeproj/project/object_dictionary.rb +76 -63
- data/lib/xcodeproj/project/object_list.rb +5 -9
- data/lib/xcodeproj/project/project_helper.rb +2 -7
- data/lib/xcodeproj/project/xcproj_helper.rb +0 -2
- data/lib/xcodeproj/scheme.rb +12 -15
- data/lib/xcodeproj/user_interface.rb +0 -4
- data/lib/xcodeproj/workspace.rb +36 -23
- data/lib/xcodeproj/workspace/file_reference.rb +3 -3
- data/lib/xcodeproj/xcodebuild_helper.rb +0 -6
- metadata +20 -18
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
|
3
|
+
module Xcodeproj
|
4
|
+
class Config
|
5
|
+
# Parses other linker flags values.
|
6
|
+
#
|
7
|
+
module OtherLinkerFlagsParser
|
8
|
+
# @return [Hash{Symbol, Array[String]}] Splits the given
|
9
|
+
# other linker flags value by type.
|
10
|
+
#
|
11
|
+
# @param [String] flags
|
12
|
+
# The other linker flags value.
|
13
|
+
#
|
14
|
+
def self.parse(flags)
|
15
|
+
result = {
|
16
|
+
:frameworks => [],
|
17
|
+
:weak_frameworks => [],
|
18
|
+
:libraries => [],
|
19
|
+
:simple => [],
|
20
|
+
}
|
21
|
+
|
22
|
+
key = nil
|
23
|
+
split(flags).each do |token|
|
24
|
+
case token
|
25
|
+
when '-framework'
|
26
|
+
key = :frameworks
|
27
|
+
when '-weak_framework'
|
28
|
+
key = :weak_frameworks
|
29
|
+
when '-l'
|
30
|
+
key = :libraries
|
31
|
+
else
|
32
|
+
if key
|
33
|
+
result[key] << token
|
34
|
+
key = nil
|
35
|
+
else
|
36
|
+
result[:simple] << token
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
result
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Array<String>] Split the given other linker
|
44
|
+
# flags value, taking into account quoting and
|
45
|
+
# the fact that the `-l` flag might omit the
|
46
|
+
# space.
|
47
|
+
#
|
48
|
+
# @param [String] flags
|
49
|
+
# The other linker flags value.
|
50
|
+
#
|
51
|
+
def self.split(flags)
|
52
|
+
flags.strip.shellsplit.map do |string|
|
53
|
+
if string =~ /\A-l.+/
|
54
|
+
['-l', string[2..-1]]
|
55
|
+
else
|
56
|
+
string
|
57
|
+
end
|
58
|
+
end.flatten
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/xcodeproj/constants.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
module Xcodeproj
|
2
|
-
|
3
2
|
# This modules groups all the constants known to Xcodeproj.
|
4
3
|
#
|
5
4
|
module Constants
|
6
|
-
|
7
5
|
# @return [String] The last known iOS SDK (stable).
|
8
6
|
#
|
9
7
|
LAST_KNOWN_IOS_SDK = '7.1'
|
@@ -27,7 +25,7 @@ module Xcodeproj
|
|
27
25
|
# @return [Hash] The all the known ISAs grouped by superclass.
|
28
26
|
#
|
29
27
|
KNOWN_ISAS = {
|
30
|
-
'AbstractObject' => %w
|
28
|
+
'AbstractObject' => %w(
|
31
29
|
PBXBuildFile
|
32
30
|
AbstractBuildPhase
|
33
31
|
PBXBuildRule
|
@@ -39,53 +37,56 @@ module Xcodeproj
|
|
39
37
|
PBXProject
|
40
38
|
PBXTargetDependency
|
41
39
|
PBXReferenceProxy
|
42
|
-
|
40
|
+
),
|
43
41
|
|
44
|
-
'AbstractBuildPhase' => %w
|
42
|
+
'AbstractBuildPhase' => %w(
|
45
43
|
PBXCopyFilesBuildPhase
|
46
44
|
PBXResourcesBuildPhase
|
47
45
|
PBXSourcesBuildPhase
|
48
46
|
PBXFrameworksBuildPhase
|
49
47
|
PBXHeadersBuildPhase
|
50
48
|
PBXShellScriptBuildPhase
|
51
|
-
|
49
|
+
),
|
52
50
|
|
53
|
-
'AbstractTarget' => %w
|
51
|
+
'AbstractTarget' => %w(
|
54
52
|
PBXNativeTarget
|
55
53
|
PBXAggregateTarget
|
56
54
|
PBXLegacyTarget
|
57
|
-
|
55
|
+
),
|
58
56
|
|
59
|
-
'PBXGroup' => %w
|
57
|
+
'PBXGroup' => %w(
|
60
58
|
XCVersionGroup
|
61
59
|
PBXVariantGroup
|
62
|
-
|
60
|
+
),
|
63
61
|
}.freeze
|
64
62
|
|
65
63
|
# @return [Array] The list of the super classes for each ISA.
|
66
64
|
#
|
67
|
-
ISAS_SUPER_CLASSES = %w
|
65
|
+
ISAS_SUPER_CLASSES = %w(AbstractObject AbstractBuildPhase PBXGroup)
|
68
66
|
|
69
67
|
# @return [Hash] The known file types corresponding to each extension.
|
70
68
|
#
|
71
69
|
FILE_TYPES_BY_EXTENSION = {
|
72
70
|
'a' => 'archive.ar',
|
73
71
|
'app' => 'wrapper.application',
|
72
|
+
'bundle' => 'wrapper.plug-in',
|
74
73
|
'dylib' => 'compiled.mach-o.dylib',
|
75
74
|
'framework' => 'wrapper.framework',
|
76
|
-
'bundle' => 'wrapper.plug-in',
|
77
75
|
'h' => 'sourcecode.c.h',
|
78
76
|
'm' => 'sourcecode.c.objc',
|
77
|
+
'markdown' => 'text',
|
78
|
+
'mdimporter' => 'wrapper.cfbundle',
|
79
|
+
'octest' => 'wrapper.cfbundle',
|
79
80
|
'pch' => 'sourcecode.c.h',
|
80
|
-
'
|
81
|
-
'xcdatamodel' => 'wrapper.xcdatamodel',
|
82
|
-
'xib' => 'file.xib',
|
81
|
+
'plist' => 'text.plist.xml',
|
83
82
|
'sh' => 'text.script.sh',
|
84
83
|
'swift' => 'sourcecode.swift',
|
85
|
-
'plist' => 'text.plist.xml',
|
86
|
-
'markdown' => 'text',
|
87
84
|
'xcassets' => 'folder.assetcatalog',
|
88
|
-
'
|
85
|
+
'xcconfig' => 'text.xcconfig',
|
86
|
+
'xcdatamodel' => 'wrapper.xcdatamodel',
|
87
|
+
'xcodeproj' => 'wrapper.pb-project',
|
88
|
+
'xctest' => 'wrapper.cfbundle',
|
89
|
+
'xib' => 'file.xib',
|
89
90
|
}.freeze
|
90
91
|
|
91
92
|
# @return [Hash] The uniform type identifier of various product types.
|
@@ -96,6 +97,7 @@ module Xcodeproj
|
|
96
97
|
:dynamic_library => 'com.apple.product-type.library.dynamic',
|
97
98
|
:static_library => 'com.apple.product-type.library.static',
|
98
99
|
:bundle => 'com.apple.product-type.bundle',
|
100
|
+
:unit_test_bundle => 'com.apple.product-type.bundle.unit-test',
|
99
101
|
}.freeze
|
100
102
|
|
101
103
|
# @return [Hash] The extensions or the various product UTIs.
|
@@ -118,24 +120,24 @@ module Xcodeproj
|
|
118
120
|
'SKIP_INSTALL' => 'YES',
|
119
121
|
'DSTROOT' => '/tmp/xcodeproj.dst',
|
120
122
|
'ALWAYS_SEARCH_USER_PATHS' => 'NO',
|
121
|
-
'INSTALL_PATH' =>
|
123
|
+
'INSTALL_PATH' => '$(BUILT_PRODUCTS_DIR)',
|
122
124
|
'OTHER_LDFLAGS' => '',
|
123
125
|
'COPY_PHASE_STRIP' => 'YES',
|
124
126
|
}.freeze,
|
125
127
|
:debug => {
|
126
128
|
'GCC_DYNAMIC_NO_PIC' => 'NO',
|
127
|
-
'GCC_PREPROCESSOR_DEFINITIONS' => [
|
129
|
+
'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'],
|
128
130
|
'GCC_SYMBOLS_PRIVATE_EXTERN' => 'NO',
|
129
131
|
'GCC_OPTIMIZATION_LEVEL' => '0',
|
130
132
|
'COPY_PHASE_STRIP' => 'NO',
|
131
133
|
}.freeze,
|
132
134
|
:release => {
|
133
|
-
'OTHER_CFLAGS' => ['-DNS_BLOCK_ASSERTIONS=1',
|
134
|
-
'OTHER_CPLUSPLUSFLAGS' => ['-DNS_BLOCK_ASSERTIONS=1',
|
135
|
+
'OTHER_CFLAGS' => ['-DNS_BLOCK_ASSERTIONS=1', '$(inherited)'],
|
136
|
+
'OTHER_CPLUSPLUSFLAGS' => ['-DNS_BLOCK_ASSERTIONS=1', '$(inherited)'],
|
135
137
|
}.freeze,
|
136
138
|
:ios => {
|
137
139
|
'IPHONEOS_DEPLOYMENT_TARGET' => '4.3',
|
138
|
-
'PUBLIC_HEADERS_FOLDER_PATH' =>
|
140
|
+
'PUBLIC_HEADERS_FOLDER_PATH' => '$(TARGET_NAME)',
|
139
141
|
'SDKROOT' => 'iphoneos',
|
140
142
|
}.freeze,
|
141
143
|
:osx => {
|
@@ -164,8 +166,8 @@ module Xcodeproj
|
|
164
166
|
PROJECT_DEFAULT_BUILD_SETTINGS = {
|
165
167
|
:all => {
|
166
168
|
'ALWAYS_SEARCH_USER_PATHS' => 'NO',
|
167
|
-
'CLANG_CXX_LANGUAGE_STANDARD' =>
|
168
|
-
'CLANG_CXX_LIBRARY' =>
|
169
|
+
'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++0x',
|
170
|
+
'CLANG_CXX_LIBRARY' => 'libc++',
|
169
171
|
'CLANG_ENABLE_OBJC_ARC' => 'YES',
|
170
172
|
'CLANG_WARN_BOOL_CONVERSION' => 'YES',
|
171
173
|
'CLANG_WARN_CONSTANT_CONVERSION' => 'YES',
|
@@ -193,7 +195,7 @@ module Xcodeproj
|
|
193
195
|
'COPY_PHASE_STRIP' => 'YES',
|
194
196
|
'GCC_DYNAMIC_NO_PIC' => 'NO',
|
195
197
|
'GCC_OPTIMIZATION_LEVEL' => '0',
|
196
|
-
'GCC_PREPROCESSOR_DEFINITIONS' => [
|
198
|
+
'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'],
|
197
199
|
'GCC_SYMBOLS_PRIVATE_EXTERN' => 'NO',
|
198
200
|
}.freeze,
|
199
201
|
}.freeze
|
@@ -205,18 +207,17 @@ module Xcodeproj
|
|
205
207
|
:absolute_path => '0',
|
206
208
|
:products_directory => '16',
|
207
209
|
:wrapper => '1',
|
208
|
-
:resources => '7', #default
|
210
|
+
:resources => '7', # default
|
209
211
|
:executables => '6',
|
210
212
|
:java_resources => '15',
|
211
213
|
:frameworks => '10',
|
212
214
|
:shared_frameworks => '11',
|
213
215
|
:shared_support => '12',
|
214
|
-
:plug_ins => '13'
|
216
|
+
:plug_ins => '13',
|
215
217
|
}.freeze
|
216
218
|
|
217
219
|
# @return [Hash] The extensions which are associated with header files.
|
218
220
|
#
|
219
|
-
HEADER_FILES_EXTENSIONS = %w
|
220
|
-
|
221
|
+
HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp).freeze
|
221
222
|
end
|
222
223
|
end
|
data/lib/xcodeproj/differ.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
module Xcodeproj
|
2
|
-
|
3
2
|
# Computes the recursive diff of Hashes, Array and other objects.
|
4
3
|
#
|
5
4
|
# Useful to compare two projects. Inspired from
|
@@ -23,7 +22,6 @@ module Xcodeproj
|
|
23
22
|
#
|
24
23
|
#
|
25
24
|
module Differ
|
26
|
-
|
27
25
|
# Computes the recursive difference of two given values.
|
28
26
|
#
|
29
27
|
# @param [Object] value_1
|
@@ -58,7 +56,7 @@ module Xcodeproj
|
|
58
56
|
else
|
59
57
|
method = :generic_diff
|
60
58
|
end
|
61
|
-
|
59
|
+
send(method, value_1, value_2, options)
|
62
60
|
end
|
63
61
|
|
64
62
|
# Optimized for reducing the noise from the tree hash of projects
|
@@ -138,8 +136,8 @@ module Xcodeproj
|
|
138
136
|
end
|
139
137
|
end
|
140
138
|
|
141
|
-
new_objects_value_1
|
142
|
-
new_objects_value_2
|
139
|
+
new_objects_value_1 -= matched_value_1
|
140
|
+
new_objects_value_2 -= matched_value_2
|
143
141
|
end
|
144
142
|
|
145
143
|
if new_objects_value_1.empty? && new_objects_value_2.empty?
|
@@ -166,7 +164,7 @@ module Xcodeproj
|
|
166
164
|
|
167
165
|
{
|
168
166
|
options[:key_1] => value_1,
|
169
|
-
options[:key_2] => value_2
|
167
|
+
options[:key_2] => value_2,
|
170
168
|
}
|
171
169
|
end
|
172
170
|
|
@@ -209,7 +207,7 @@ module Xcodeproj
|
|
209
207
|
when Hash
|
210
208
|
clean_hash!(value, key)
|
211
209
|
when Array
|
212
|
-
value.each { |entry| clean_hash!(entry, key) if entry.is_a?(Hash)}
|
210
|
+
value.each { |entry| clean_hash!(entry, key) if entry.is_a?(Hash) }
|
213
211
|
end
|
214
212
|
end
|
215
213
|
end
|
@@ -237,7 +235,5 @@ module Xcodeproj
|
|
237
235
|
end
|
238
236
|
|
239
237
|
#-------------------------------------------------------------------------#
|
240
|
-
|
241
238
|
end
|
242
239
|
end
|
243
|
-
|
data/lib/xcodeproj/helper.rb
CHANGED
@@ -14,15 +14,16 @@ module Xcodeproj
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# @return [Array<PBXBuildFile>] A list of source files (that will be
|
17
|
-
#
|
18
|
-
#
|
17
|
+
# compiled) which are in ‘target 2’ but not in ‘target 1’. The
|
18
|
+
# list is sorted by file path.
|
19
19
|
#
|
20
20
|
def new_source_build_files
|
21
|
-
@target2.source_build_phase.files.reject do |target2_build_file|
|
21
|
+
new = @target2.source_build_phase.files.reject do |target2_build_file|
|
22
22
|
@target1.source_build_phase.files.any? do |target1_build_file|
|
23
23
|
target1_build_file.file_ref.path == target2_build_file.file_ref.path
|
24
24
|
end
|
25
|
-
end
|
25
|
+
end
|
26
|
+
new.sort_by { |build_file| build_file.file_ref.path }
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -1,15 +1,12 @@
|
|
1
|
-
begin
|
2
|
-
require 'libxml'
|
3
|
-
rescue LoadError
|
4
|
-
Xcodeproj::UI.warn "Xcodeproj is using a fall back solution for parsing " \
|
5
|
-
"XML. To use a faster alternative install libxml:\n" \
|
6
|
-
"`$ gem install libxml-ruby`"
|
7
|
-
end
|
8
1
|
require 'cfpropertylist'
|
2
|
+
require 'open3'
|
9
3
|
|
10
4
|
module Xcodeproj
|
11
5
|
# Provides support for loading and serializing property list files.
|
12
6
|
#
|
7
|
+
# @note CFPropertyList will automatically pick up the `libxml` strategy or
|
8
|
+
# other faster strategies, if their dependencies are available.
|
9
|
+
#
|
13
10
|
module PlistHelper
|
14
11
|
class << self
|
15
12
|
# Serializes a hash as an XML property list file.
|
@@ -26,13 +23,24 @@ module Xcodeproj
|
|
26
23
|
hash = hash.to_hash
|
27
24
|
else
|
28
25
|
raise TypeError, "The given `#{hash}`, must be a hash or " \
|
29
|
-
|
26
|
+
'respond to to_hash'
|
30
27
|
end
|
31
28
|
end
|
29
|
+
|
30
|
+
unless path.is_a?(String) || path.is_a?(Pathname)
|
31
|
+
raise TypeError, "The given `#{path}`, must be a string or " \
|
32
|
+
'pathname'
|
33
|
+
end
|
32
34
|
plist = CFPropertyList::List.new
|
33
35
|
options = { :convert_unknown_to_string => true }
|
34
36
|
plist.value = CFPropertyList.guess(hash, options)
|
35
|
-
|
37
|
+
|
38
|
+
if plutil_available?
|
39
|
+
contents = plist.to_str(CFPropertyList::List::FORMAT_XML)
|
40
|
+
plutil_save(contents, path)
|
41
|
+
else
|
42
|
+
plist.save(path, CFPropertyList::List::FORMAT_XML)
|
43
|
+
end
|
36
44
|
end
|
37
45
|
|
38
46
|
# @return [String] Returns the native objects loaded from a property list
|
@@ -83,13 +91,40 @@ module Xcodeproj
|
|
83
91
|
# @note This method was extracted to simplify testing.
|
84
92
|
#
|
85
93
|
def plutil_contents(path)
|
86
|
-
|
94
|
+
`#{plutil_bin} -convert xml1 "#{path}" -o -`
|
95
|
+
end
|
96
|
+
|
97
|
+
# Saves a property to an XML file via the plutil tool.
|
98
|
+
#
|
99
|
+
# @param [#to_s] contents.
|
100
|
+
# The contents of the property list.
|
101
|
+
#
|
102
|
+
# @param [#to_s] path
|
103
|
+
# The path of the file.
|
104
|
+
#
|
105
|
+
def plutil_save(contents, path)
|
106
|
+
Open3.popen3("#{plutil_bin} -convert xml1 -o '#{path}' -") do |stdin, stdout, _stderr|
|
107
|
+
stdin.puts(contents)
|
108
|
+
stdin.close
|
109
|
+
stdout.read # Make Ruby 1.8.7 wait
|
110
|
+
end
|
87
111
|
end
|
88
112
|
|
89
113
|
# @return [Bool] Whether the `plutil` tool is available.
|
90
114
|
#
|
91
115
|
def plutil_available?
|
92
|
-
|
116
|
+
!plutil_bin.nil?
|
117
|
+
end
|
118
|
+
|
119
|
+
# @return [String] The path of the `plutil` tool.
|
120
|
+
# @return [Nil] In case the plutil is not found.
|
121
|
+
#
|
122
|
+
def plutil_bin
|
123
|
+
unless @bin
|
124
|
+
bin = `which plutil`.strip
|
125
|
+
@bin = bin if $?.success?
|
126
|
+
end
|
127
|
+
@bin
|
93
128
|
end
|
94
129
|
end
|
95
130
|
end
|
data/lib/xcodeproj/project.rb
CHANGED
@@ -7,7 +7,6 @@ require 'xcodeproj/project/project_helper'
|
|
7
7
|
require 'xcodeproj/project/xcproj_helper'
|
8
8
|
|
9
9
|
module Xcodeproj
|
10
|
-
|
11
10
|
# This class represents a Xcode project document.
|
12
11
|
#
|
13
12
|
# It can be used to manipulate existing documents or even create new ones
|
@@ -40,7 +39,6 @@ module Xcodeproj
|
|
40
39
|
# consistent state.
|
41
40
|
#
|
42
41
|
class Project
|
43
|
-
|
44
42
|
include Object
|
45
43
|
|
46
44
|
# @return [Pathname] the path of the project.
|
@@ -64,7 +62,7 @@ module Xcodeproj
|
|
64
62
|
initialize_from_scratch
|
65
63
|
end
|
66
64
|
unless skip_initialization.is_a?(TrueClass) || skip_initialization.is_a?(FalseClass)
|
67
|
-
raise ArgumentError,
|
65
|
+
raise ArgumentError, '[Xcodeproj] Initialization parameter expected to ' \
|
68
66
|
"be a boolean #{skip_initialization}"
|
69
67
|
end
|
70
68
|
end
|
@@ -130,12 +128,16 @@ module Xcodeproj
|
|
130
128
|
"#<#{self.class}> path:`#{path}` UUID:`#{root_object.uuid}`"
|
131
129
|
end
|
132
130
|
|
133
|
-
|
131
|
+
alias_method :inspect, :to_s
|
134
132
|
|
135
|
-
# @return [Bool] Whether the xcproj conversion should be disabled.
|
133
|
+
# @return [Bool] Whether the xcproj conversion should be disabled. The
|
134
|
+
# conversion can be disable also via the
|
135
|
+
# `XCODEPROJ_DISABLE_XCPROJ` environment variable.
|
136
136
|
#
|
137
137
|
attr_accessor :disable_xcproj
|
138
|
-
|
138
|
+
def disable_xcproj?
|
139
|
+
@disable_xcproj || ENV['XCODEPROJ_DISABLE_XCPROJ']
|
140
|
+
end
|
139
141
|
|
140
142
|
public
|
141
143
|
|
@@ -182,16 +184,15 @@ module Xcodeproj
|
|
182
184
|
raise "[Xcodeproj] Unable to find a root object in #{pbxproj_path}."
|
183
185
|
end
|
184
186
|
|
185
|
-
if
|
187
|
+
if archive_version.to_i > Constants::LAST_KNOWN_ARCHIVE_VERSION
|
186
188
|
raise '[Xcodeproj] Unknown archive version.'
|
187
189
|
end
|
188
190
|
|
189
|
-
if
|
191
|
+
if object_version.to_i > Constants::LAST_KNOWN_OBJECT_VERSION
|
190
192
|
raise '[Xcodeproj] Unknown object version.'
|
191
193
|
end
|
192
194
|
end
|
193
195
|
|
194
|
-
|
195
196
|
public
|
196
197
|
|
197
198
|
# @!group Plist serialization
|
@@ -278,7 +279,7 @@ module Xcodeproj
|
|
278
279
|
{
|
279
280
|
'File References' => root_object.main_group.pretty_print.values.first,
|
280
281
|
'Targets' => root_object.targets.map(&:pretty_print),
|
281
|
-
'Build Configurations' => build_configurations.sort_by(&:name).map(&:pretty_print)
|
282
|
+
'Build Configurations' => build_configurations.sort_by(&:name).map(&:pretty_print),
|
282
283
|
}
|
283
284
|
end
|
284
285
|
|
@@ -303,7 +304,7 @@ module Xcodeproj
|
|
303
304
|
file = File.join(save_path, 'project.pbxproj')
|
304
305
|
Xcodeproj::PlistHelper.write(to_hash, file)
|
305
306
|
fix_encoding(file)
|
306
|
-
XCProjHelper.touch(save_path) unless disable_xcproj
|
307
|
+
XCProjHelper.touch(save_path) unless disable_xcproj?
|
307
308
|
end
|
308
309
|
|
309
310
|
# Simple workaround to escape characters which are outside of ASCII
|
@@ -337,7 +338,6 @@ module Xcodeproj
|
|
337
338
|
File.open(filename, 'wb') { |file| file.write(output) }
|
338
339
|
end
|
339
340
|
|
340
|
-
|
341
341
|
public
|
342
342
|
|
343
343
|
# @!group Creating objects
|
@@ -377,9 +377,7 @@ module Xcodeproj
|
|
377
377
|
# @return [String] A UUID unique to the project.
|
378
378
|
#
|
379
379
|
def generate_uuid
|
380
|
-
while @available_uuids.empty?
|
381
|
-
generate_available_uuid_list
|
382
|
-
end
|
380
|
+
generate_available_uuid_list while @available_uuids.empty?
|
383
381
|
@available_uuids.shift
|
384
382
|
end
|
385
383
|
|
@@ -411,7 +409,6 @@ module Xcodeproj
|
|
411
409
|
@available_uuids += uniques
|
412
410
|
end
|
413
411
|
|
414
|
-
|
415
412
|
public
|
416
413
|
|
417
414
|
# @!group Convenience accessors
|
@@ -543,7 +540,6 @@ module Xcodeproj
|
|
543
540
|
root_object.build_configuration_list.build_settings(name)
|
544
541
|
end
|
545
542
|
|
546
|
-
|
547
543
|
public
|
548
544
|
|
549
545
|
# @!group Helpers
|
@@ -632,7 +628,9 @@ module Xcodeproj
|
|
632
628
|
#
|
633
629
|
def add_build_configuration(name, type)
|
634
630
|
build_configuration_list = root_object.build_configuration_list
|
635
|
-
|
631
|
+
if build_configuration = build_configuration_list[name]
|
632
|
+
build_configuration
|
633
|
+
else
|
636
634
|
build_configuration = new(XCBuildConfiguration)
|
637
635
|
build_configuration.name = name
|
638
636
|
common_settings = Constants::PROJECT_DEFAULT_BUILD_SETTINGS
|
@@ -657,7 +655,6 @@ module Xcodeproj
|
|
657
655
|
root_object.sort_recursively(options)
|
658
656
|
end
|
659
657
|
|
660
|
-
|
661
658
|
public
|
662
659
|
|
663
660
|
# @!group Schemes
|
@@ -707,6 +704,5 @@ module Xcodeproj
|
|
707
704
|
end
|
708
705
|
|
709
706
|
#-------------------------------------------------------------------------#
|
710
|
-
|
711
707
|
end
|
712
708
|
end
|