xcodeproj 0.4.3 → 0.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.
- data/ext/xcodeproj/xcodeproj_ext.c +1 -1
- data/lib/xcodeproj.rb +9 -7
- data/lib/xcodeproj/command/project_diff.rb +7 -7
- data/lib/xcodeproj/command/show.rb +11 -2
- data/lib/xcodeproj/config.rb +102 -38
- data/lib/xcodeproj/constants.rb +16 -14
- data/lib/xcodeproj/differ.rb +243 -0
- data/lib/xcodeproj/helper.rb +1 -0
- data/lib/xcodeproj/project.rb +92 -68
- data/lib/xcodeproj/project/object.rb +32 -9
- data/lib/xcodeproj/project/object/build_configuration.rb +21 -1
- data/lib/xcodeproj/project/object/build_file.rb +40 -6
- data/lib/xcodeproj/project/object/build_phase.rb +96 -84
- data/lib/xcodeproj/project/object/build_rule.rb +14 -8
- data/lib/xcodeproj/project/object/configuration_list.rb +7 -3
- data/lib/xcodeproj/project/object/container_item_proxy.rb +31 -29
- data/lib/xcodeproj/project/object/file_reference.rb +33 -20
- data/lib/xcodeproj/project/object/group.rb +58 -35
- data/lib/xcodeproj/project/object/native_target.rb +132 -108
- data/lib/xcodeproj/project/object/reference_proxy.rb +7 -3
- data/lib/xcodeproj/project/object/root_object.rb +4 -4
- data/lib/xcodeproj/project/object_attributes.rb +9 -6
- data/lib/xcodeproj/user_interface.rb +26 -0
- data/lib/xcodeproj/workspace.rb +23 -19
- metadata +4 -3
- data/lib/xcodeproj/project/recursive_diff.rb +0 -116
@@ -18,92 +18,103 @@ module Xcodeproj
|
|
18
18
|
|
19
19
|
# @return [String] the source tree to which the file is relative.
|
20
20
|
#
|
21
|
-
# Common values are `SOURCE_ROOT`, `SDKROOT` and
|
21
|
+
# @note Common values are `SOURCE_ROOT`, `SDKROOT` and
|
22
|
+
# `BUILT_PRODUCTS_DIR`
|
22
23
|
#
|
23
24
|
attribute :source_tree, String, 'SOURCE_ROOT'
|
24
25
|
|
25
26
|
# @return [String] the file type (apparently) used for products
|
26
|
-
#
|
27
|
+
# generated by Xcode (i.e. applications, libraries).
|
27
28
|
#
|
28
29
|
attribute :explicit_file_type, String
|
29
30
|
|
30
31
|
# @return [String] the file type guessed by Xcode.
|
31
32
|
#
|
32
|
-
# This attribute is not present if there is an
|
33
|
+
# @note This attribute is not present if there is an
|
34
|
+
# `explicit_file_type`.
|
33
35
|
#
|
34
36
|
attribute :last_known_file_type, String
|
35
37
|
|
36
38
|
# @return [String] whether this file should be indexed. It can
|
37
|
-
#
|
39
|
+
# be either `0` or `1`.
|
38
40
|
#
|
39
|
-
# Apparently present only for products generated by Xcode with
|
40
|
-
# of `0`.
|
41
|
+
# @note Apparently present only for products generated by Xcode with
|
42
|
+
# a value of `0`.
|
41
43
|
#
|
42
44
|
attribute :include_in_index, String, '1'
|
43
45
|
|
44
46
|
# @return [String] a string containing a number which represents the
|
45
|
-
#
|
47
|
+
# encoding format of the file.
|
46
48
|
#
|
47
49
|
attribute :fileEncoding, String
|
48
50
|
|
49
51
|
# @return [String] a string that specifies the UTI for the syntax
|
50
|
-
#
|
52
|
+
# highlighting.
|
51
53
|
#
|
52
|
-
#
|
54
|
+
# @example
|
55
|
+
# `xcode.lang.ruby`
|
53
56
|
#
|
54
57
|
attribute :xc_language_specification_identifier, String
|
55
58
|
|
56
59
|
# @return [String] a string that specifies the UTI for the structure of
|
57
|
-
#
|
60
|
+
# a plist file.
|
58
61
|
#
|
59
|
-
#
|
62
|
+
# @example
|
63
|
+
# `com.apple.xcode.plist.structure-definition.iphone.info-plist`
|
60
64
|
#
|
61
65
|
attribute :plist_structure_definition_identifier, String
|
62
66
|
|
63
67
|
# @return [String] Whether Xcode should use tabs for text alignment.
|
64
68
|
#
|
65
|
-
#
|
69
|
+
# @example
|
70
|
+
# `1`
|
66
71
|
#
|
67
72
|
attribute :uses_tabs, String
|
68
73
|
|
69
74
|
# @return [String] The width of the indent.
|
70
75
|
#
|
71
|
-
#
|
76
|
+
# @example
|
77
|
+
# `2`
|
72
78
|
#
|
73
79
|
attribute :indent_width, String
|
74
80
|
|
75
81
|
# @return [String] The width of the tabs.
|
76
82
|
#
|
77
|
-
#
|
83
|
+
# @example
|
84
|
+
# `2`
|
78
85
|
#
|
79
86
|
attribute :tab_width, String
|
80
87
|
|
81
88
|
# @return [String] Whether Xcode should wrap lines.
|
82
89
|
#
|
83
|
-
#
|
90
|
+
# @example
|
91
|
+
# `1`
|
84
92
|
#
|
85
93
|
attribute :wraps_lines, String
|
86
94
|
|
87
95
|
|
88
96
|
# @return [String] Apparently whether Xcode should add, if needed, a
|
89
|
-
#
|
97
|
+
# new line feed before saving the file.
|
90
98
|
#
|
91
|
-
#
|
99
|
+
# @example
|
100
|
+
# `0`
|
92
101
|
#
|
93
102
|
attribute :line_ending, String
|
94
103
|
|
95
104
|
# @return [String] Comments associated with this file.
|
96
105
|
#
|
97
|
-
# This is apparently no longer used by Xcode.
|
106
|
+
# @note This is apparently no longer used by Xcode.
|
98
107
|
#
|
99
108
|
attribute :comments, String
|
100
109
|
|
101
110
|
#---------------------------------------------------------------------#
|
102
111
|
|
112
|
+
public
|
113
|
+
|
103
114
|
# @!group Helpers
|
104
115
|
|
105
116
|
# @return [String] the name of the file taking into account the path if
|
106
|
-
#
|
117
|
+
# needed.
|
107
118
|
#
|
108
119
|
def display_name
|
109
120
|
name || File.basename(path)
|
@@ -122,7 +133,7 @@ module Xcodeproj
|
|
122
133
|
end
|
123
134
|
|
124
135
|
# @return [Array<PBXBuildFile>] the build files associated with the
|
125
|
-
#
|
136
|
+
# current file reference.
|
126
137
|
#
|
127
138
|
def build_files
|
128
139
|
referrers.select { |r| r.class == PBXBuildFile }
|
@@ -144,6 +155,8 @@ module Xcodeproj
|
|
144
155
|
false
|
145
156
|
end
|
146
157
|
|
158
|
+
#---------------------------------------------------------------------#
|
159
|
+
|
147
160
|
end
|
148
161
|
end
|
149
162
|
end
|
@@ -10,59 +10,71 @@ module Xcodeproj
|
|
10
10
|
# @!group Attributes
|
11
11
|
|
12
12
|
# @return [ObjectList<PBXGroup, PBXFileReference>]
|
13
|
-
#
|
13
|
+
# the objects contained by the group.
|
14
14
|
#
|
15
15
|
has_many :children, [PBXGroup, PBXFileReference, PBXReferenceProxy]
|
16
16
|
|
17
17
|
# @return [String] the source tree to which this group is relative.
|
18
18
|
#
|
19
|
-
# Usually is group <group>.
|
19
|
+
# @note Usually is group <group>.
|
20
20
|
#
|
21
21
|
attribute :source_tree, String, '<group>'
|
22
22
|
|
23
23
|
# @return [String] the path to a folder in the file system.
|
24
24
|
#
|
25
|
-
# This attribute is present for groups that are linked to a
|
26
|
-
#
|
25
|
+
# @note This attribute is present for groups that are linked to a
|
26
|
+
# folder in the file system.
|
27
27
|
#
|
28
28
|
attribute :path, String
|
29
29
|
|
30
30
|
# @return [String] the name of the group.
|
31
31
|
#
|
32
|
-
# If path is specified this attribute is not present.
|
32
|
+
# @note If path is specified this attribute is not present.
|
33
33
|
#
|
34
34
|
attribute :name, String
|
35
35
|
|
36
36
|
# @return [String] Whether Xcode should use tabs for text alignment.
|
37
37
|
#
|
38
|
-
#
|
38
|
+
# @example
|
39
|
+
# `1`
|
39
40
|
#
|
40
41
|
attribute :uses_tabs, String
|
41
42
|
|
42
43
|
# @return [String] The width of the indent.
|
43
44
|
#
|
44
|
-
#
|
45
|
+
# @example
|
46
|
+
# `2`
|
45
47
|
#
|
46
48
|
attribute :indent_width, String
|
47
49
|
|
48
50
|
# @return [String] The width of the tabs.
|
49
51
|
#
|
50
|
-
#
|
52
|
+
# @example
|
53
|
+
# `2`
|
51
54
|
#
|
52
55
|
attribute :tab_width, String
|
53
56
|
|
54
57
|
# @return [String] Whether Xcode should wrap lines.
|
55
58
|
#
|
56
|
-
#
|
59
|
+
# @example
|
60
|
+
# `1`
|
57
61
|
#
|
58
62
|
attribute :wraps_lines, String
|
59
63
|
|
60
|
-
|
64
|
+
# @return [String] Comments associated with this group.
|
65
|
+
#
|
66
|
+
# @note This is apparently no longer used by Xcode.
|
67
|
+
#
|
68
|
+
attribute :comments, String
|
69
|
+
|
70
|
+
#---------------------------------------------------------------------#
|
71
|
+
|
72
|
+
public
|
61
73
|
|
62
74
|
# @!group Helpers
|
63
75
|
|
64
76
|
# @return [String] the name of the group taking into account the path
|
65
|
-
#
|
77
|
+
# or other factors if needed.
|
66
78
|
#
|
67
79
|
def display_name
|
68
80
|
if name
|
@@ -75,21 +87,20 @@ module Xcodeproj
|
|
75
87
|
end
|
76
88
|
|
77
89
|
# @return [Array<PBXFileReference>] the files references in the group
|
78
|
-
#
|
90
|
+
# children.
|
79
91
|
#
|
80
92
|
def files
|
81
93
|
children.select { |obj| obj.class == PBXFileReference }
|
82
94
|
end
|
83
95
|
|
84
|
-
# @return [Array<PBXGroup>] the groups in the group
|
85
|
-
# children.
|
96
|
+
# @return [Array<PBXGroup>] the groups in the group children.
|
86
97
|
#
|
87
98
|
def groups
|
88
99
|
children.select { |obj| obj.class == PBXGroup }
|
89
100
|
end
|
90
101
|
|
91
102
|
# @return [Array<XCVersionGroup>] the version groups in the group
|
92
|
-
#
|
103
|
+
# children.
|
93
104
|
#
|
94
105
|
def version_groups
|
95
106
|
children.select { |obj| obj.class == XCVersionGroup }
|
@@ -98,13 +109,15 @@ module Xcodeproj
|
|
98
109
|
# Creates a new file reference with the given path and adds it to the
|
99
110
|
# group or to an optional subpath.
|
100
111
|
#
|
101
|
-
# @note The subpath is created if needed, similar to the UNIX command
|
112
|
+
# @note The subpath is created if needed, similar to the UNIX command
|
113
|
+
# `mkdir -p`
|
102
114
|
#
|
103
|
-
# @param
|
104
|
-
#
|
115
|
+
# @param [#to_s] path
|
116
|
+
# the file system path of the file.
|
105
117
|
#
|
106
|
-
# @param
|
107
|
-
#
|
118
|
+
# @param [String] sub_group_path
|
119
|
+
# an optional subgroup path indicating the groups separated by
|
120
|
+
# a `/`.
|
108
121
|
#
|
109
122
|
# @return [PBXFileReference] the new file reference.
|
110
123
|
#
|
@@ -122,12 +135,12 @@ module Xcodeproj
|
|
122
135
|
# Creates a new group with the given name and adds it to the children
|
123
136
|
# of the group.
|
124
137
|
#
|
125
|
-
# @note
|
138
|
+
# @note @see new_file
|
126
139
|
#
|
127
|
-
# @param
|
128
|
-
#
|
140
|
+
# @param [#to_s] name
|
141
|
+
# the name of the new group.
|
129
142
|
#
|
130
|
-
# @param
|
143
|
+
# @param [String] sub_group_path @see new_file
|
131
144
|
#
|
132
145
|
# @return [PBXGroup] the new group.
|
133
146
|
#
|
@@ -143,12 +156,13 @@ module Xcodeproj
|
|
143
156
|
# Creates a file reference to a static library and adds it to the
|
144
157
|
# children of the group.
|
145
158
|
#
|
146
|
-
# @note
|
159
|
+
# @note @see new_file
|
147
160
|
#
|
148
|
-
# @param
|
149
|
-
#
|
161
|
+
# @param [#to_s] product_name
|
162
|
+
# the name of the new static library.
|
163
|
+
#
|
164
|
+
# @param [String] sub_group_path @see new_file
|
150
165
|
#
|
151
|
-
# @param [String] sub_group_path (see #new_file)#
|
152
166
|
# @return [PBXFileReference] the new group.
|
153
167
|
#
|
154
168
|
def new_static_library(product_name, sub_group_path = nil)
|
@@ -174,14 +188,12 @@ module Xcodeproj
|
|
174
188
|
end
|
175
189
|
|
176
190
|
# Traverses the children groups and finds the group with the given
|
177
|
-
# path,
|
178
|
-
#
|
179
|
-
# @param path (see #find_subpath)
|
191
|
+
# path, if exists.
|
180
192
|
#
|
181
|
-
# @
|
193
|
+
# @see find_subpath
|
182
194
|
#
|
183
195
|
def [](path)
|
184
|
-
find_subpath(path)
|
196
|
+
find_subpath(path, false)
|
185
197
|
end
|
186
198
|
|
187
199
|
# Removes children files and groups under this group.
|
@@ -211,13 +223,21 @@ module Xcodeproj
|
|
211
223
|
# g.name #=> 'Frameworks'
|
212
224
|
#
|
213
225
|
# @return [PBXGroup] the group if found.
|
226
|
+
# @return [Nil] if the path could not be found and should create is
|
227
|
+
# false.
|
214
228
|
#
|
215
229
|
def find_subpath(path, should_create = false)
|
216
230
|
return self unless path
|
217
231
|
path = path.split('/') unless path.is_a?(Array)
|
218
232
|
child_name = path.shift
|
219
233
|
child = children.find{ |c| c.display_name == child_name }
|
220
|
-
|
234
|
+
if child.nil?
|
235
|
+
if should_create
|
236
|
+
child = new_group(child_name)
|
237
|
+
else
|
238
|
+
return nil
|
239
|
+
end
|
240
|
+
end
|
221
241
|
if path.empty?
|
222
242
|
child
|
223
243
|
else
|
@@ -238,7 +258,7 @@ module Xcodeproj
|
|
238
258
|
# @note This is safe to call in an object list because it modifies it
|
239
259
|
# in C in Ruby MRI. In other Ruby implementation it can cause
|
240
260
|
# issues if there is one call to the notification enabled
|
241
|
-
# methods not compensated by the corespondent
|
261
|
+
# methods not compensated by the corespondent opposite (loss of
|
242
262
|
# UUIDs and objects from the project).
|
243
263
|
#
|
244
264
|
# @return [void]
|
@@ -292,6 +312,9 @@ module Xcodeproj
|
|
292
312
|
attribute :version_group_type, String, 'wrapper.xcdatamodel'
|
293
313
|
|
294
314
|
end
|
315
|
+
|
316
|
+
#-----------------------------------------------------------------------#
|
317
|
+
|
295
318
|
end
|
296
319
|
end
|
297
320
|
end
|
@@ -14,6 +14,12 @@ module Xcodeproj
|
|
14
14
|
#
|
15
15
|
attribute :product_name, String
|
16
16
|
|
17
|
+
# @return [String] Comments associated with this target.
|
18
|
+
#
|
19
|
+
# This is apparently no longer used by Xcode.
|
20
|
+
#
|
21
|
+
attribute :comments, String
|
22
|
+
|
17
23
|
# @return [XCConfigurationList] the list of the build configurations of
|
18
24
|
# the target. This list commonly include two configurations
|
19
25
|
# `Debug` and `Release`.
|
@@ -24,102 +30,9 @@ module Xcodeproj
|
|
24
30
|
#
|
25
31
|
has_many :dependencies, PBXTargetDependency
|
26
32
|
|
27
|
-
|
28
|
-
|
29
|
-
#-----------------------------------------------------------------------#
|
30
|
-
|
31
|
-
# Represents a target handled by Xcode.
|
32
|
-
#
|
33
|
-
class PBXNativeTarget < AbstractTarget
|
34
|
-
|
35
|
-
# @!group Attributes
|
36
|
-
|
37
|
-
# @return [PBXBuildRule] the build rules of this target.
|
38
|
-
#
|
39
|
-
has_many :build_rules, PBXBuildRule
|
40
|
-
|
41
|
-
# @return [String] the build product type identifier.
|
42
|
-
#
|
43
|
-
attribute :product_type, String, 'com.apple.product-type.library.static'
|
44
|
-
|
45
|
-
# @return [PBXFileReference] the reference to the product file.
|
46
|
-
#
|
47
|
-
has_one :product_reference, PBXFileReference
|
48
|
-
|
49
|
-
# @return [String] the install path of the product.
|
50
|
-
#
|
51
|
-
attribute :product_install_path, String
|
52
|
-
|
53
|
-
# @return [PBXBuildRule] the build phases of the target.
|
54
|
-
#
|
55
|
-
# @note Apparently only PBXCopyFilesBuildPhase and
|
56
|
-
# PBXShellScriptBuildPhase can appear multiple times in a
|
57
|
-
# target.
|
58
|
-
#
|
59
|
-
has_many :build_phases, AbstractBuildPhase
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
#-----------------------------------------------------------------------#
|
64
|
-
|
65
|
-
# Represents a target that only consists in a aggregate of targets.
|
66
|
-
#
|
67
|
-
# @todo apparently it can't have build rules.
|
68
|
-
#
|
69
|
-
class PBXAggregateTarget < AbstractTarget
|
70
|
-
|
71
|
-
# @!group Attributes
|
72
|
-
|
73
|
-
# @return [PBXBuildRule] the build phases of the target.
|
74
|
-
#
|
75
|
-
# @note Apparently only PBXCopyFilesBuildPhase and
|
76
|
-
# PBXShellScriptBuildPhase can appear multiple times in a
|
77
|
-
# target.
|
78
|
-
#
|
79
|
-
has_many :build_phases, [ PBXCopyFilesBuildPhase, PBXShellScriptBuildPhase ]
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
#-----------------------------------------------------------------------#
|
84
|
-
|
85
|
-
# Represents a legacy target which uses an external build tool.
|
86
|
-
#
|
87
|
-
# Apparently it can't have any build phase but the attribute can be
|
88
|
-
# present.
|
89
|
-
#
|
90
|
-
class PBXLegacyTarget < AbstractTarget
|
91
|
-
|
92
|
-
# @!group Attributes
|
93
|
-
|
94
|
-
# @return [String] e.g "Dir"
|
95
|
-
#
|
96
|
-
attribute :build_working_directory, String
|
97
|
-
|
98
|
-
# @return [String] e.g "$(ACTION)"
|
99
|
-
#
|
100
|
-
attribute :build_arguments_string, String
|
101
|
-
|
102
|
-
# @return [String] e.g "1"
|
103
|
-
#
|
104
|
-
attribute :pass_build_settings_in_environment, String
|
105
|
-
|
106
|
-
# @return [String] e.g "/usr/bin/make"
|
107
|
-
#
|
108
|
-
attribute :build_tool_path, String
|
109
|
-
|
110
|
-
# @return [PBXBuildRule] the build phases of the target.
|
111
|
-
#
|
112
|
-
# @note Apparently only PBXCopyFilesBuildPhase and
|
113
|
-
# PBXShellScriptBuildPhase can appear multiple times in a
|
114
|
-
# target.
|
115
|
-
#
|
116
|
-
has_many :build_phases, AbstractBuildPhase
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
#----------------------------------------------------------------------#
|
33
|
+
#--------------------------------------#
|
121
34
|
|
122
|
-
|
35
|
+
public
|
123
36
|
|
124
37
|
# @!group Helpers
|
125
38
|
|
@@ -149,8 +62,6 @@ module Xcodeproj
|
|
149
62
|
end
|
150
63
|
end
|
151
64
|
|
152
|
-
#--------------------------------------#
|
153
|
-
|
154
65
|
# @return [ObjectList<XCBuildConfiguration>] the build
|
155
66
|
# configurations of the target.
|
156
67
|
#
|
@@ -219,12 +130,62 @@ module Xcodeproj
|
|
219
130
|
phase
|
220
131
|
end
|
221
132
|
|
133
|
+
#--------------------------------------#
|
134
|
+
|
135
|
+
public
|
136
|
+
|
137
|
+
# @!group AbstractObject Hooks
|
138
|
+
|
139
|
+
# @return [Hash{String => Hash}] A hash suitable to display the object
|
140
|
+
# to the user.
|
141
|
+
#
|
142
|
+
def pretty_print
|
143
|
+
{
|
144
|
+
display_name => {
|
145
|
+
'Build Phases' => build_phases.map(&:pretty_print),
|
146
|
+
'Build Configurations' => build_configurations.map(&:pretty_print)
|
147
|
+
}
|
148
|
+
}
|
149
|
+
end
|
150
|
+
|
222
151
|
end
|
223
152
|
|
224
153
|
#-----------------------------------------------------------------------#
|
225
154
|
|
155
|
+
# Represents a target handled by Xcode.
|
156
|
+
#
|
226
157
|
class PBXNativeTarget < AbstractTarget
|
227
158
|
|
159
|
+
# @!group Attributes
|
160
|
+
|
161
|
+
# @return [PBXBuildRule] the build rules of this target.
|
162
|
+
#
|
163
|
+
has_many :build_rules, PBXBuildRule
|
164
|
+
|
165
|
+
# @return [String] the build product type identifier.
|
166
|
+
#
|
167
|
+
attribute :product_type, String, 'com.apple.product-type.library.static'
|
168
|
+
|
169
|
+
# @return [PBXFileReference] the reference to the product file.
|
170
|
+
#
|
171
|
+
has_one :product_reference, PBXFileReference
|
172
|
+
|
173
|
+
# @return [String] the install path of the product.
|
174
|
+
#
|
175
|
+
attribute :product_install_path, String
|
176
|
+
|
177
|
+
# @return [PBXBuildRule] the build phases of the target.
|
178
|
+
#
|
179
|
+
# @note Apparently only PBXCopyFilesBuildPhase and
|
180
|
+
# PBXShellScriptBuildPhase can appear multiple times in a
|
181
|
+
# target.
|
182
|
+
#
|
183
|
+
has_many :build_phases, AbstractBuildPhase
|
184
|
+
|
185
|
+
#--------------------------------------#
|
186
|
+
|
187
|
+
public
|
188
|
+
|
228
189
|
# @!group Helpers
|
229
190
|
|
230
191
|
# Adds source files to the target.
|
@@ -248,7 +209,9 @@ module Xcodeproj
|
|
248
209
|
if (header_extensions.include?(extension))
|
249
210
|
headers_build_phase.files << build_file
|
250
211
|
else
|
251
|
-
|
212
|
+
if compiler_flags && !compiler_flags.empty?
|
213
|
+
build_file.settings = { 'COMPILER_FLAGS' => compiler_flags }
|
214
|
+
end
|
252
215
|
source_build_phase.files << build_file
|
253
216
|
end
|
254
217
|
end
|
@@ -301,12 +264,12 @@ module Xcodeproj
|
|
301
264
|
# @return [PBXFrameworksBuildPhase] the frameworks build phase.
|
302
265
|
#
|
303
266
|
def frameworks_build_phase
|
304
|
-
|
305
|
-
unless
|
306
|
-
|
307
|
-
build_phases <<
|
267
|
+
phase = build_phases.find { |bp| bp.class == PBXFrameworksBuildPhase }
|
268
|
+
unless phase
|
269
|
+
phase= project.new(PBXFrameworksBuildPhase)
|
270
|
+
build_phases << phase
|
308
271
|
end
|
309
|
-
|
272
|
+
phase
|
310
273
|
end
|
311
274
|
|
312
275
|
# Finds or creates the resources build phase of the target.
|
@@ -316,14 +279,75 @@ module Xcodeproj
|
|
316
279
|
# @return [PBXResourcesBuildPhase] the resources build phase.
|
317
280
|
#
|
318
281
|
def resources_build_phase
|
319
|
-
|
320
|
-
unless
|
321
|
-
|
322
|
-
build_phases <<
|
282
|
+
phase = build_phases.find { |bp| bp.class == PBXResourcesBuildPhase }
|
283
|
+
unless phase
|
284
|
+
phase = project.new(PBXResourcesBuildPhase)
|
285
|
+
build_phases << phase
|
323
286
|
end
|
324
|
-
|
287
|
+
phase
|
325
288
|
end
|
289
|
+
|
326
290
|
end
|
291
|
+
|
292
|
+
#-----------------------------------------------------------------------#
|
293
|
+
|
294
|
+
# Represents a target that only consists in a aggregate of targets.
|
295
|
+
#
|
296
|
+
# @todo Apparently it can't have build rules.
|
297
|
+
#
|
298
|
+
class PBXAggregateTarget < AbstractTarget
|
299
|
+
|
300
|
+
# @!group Attributes
|
301
|
+
|
302
|
+
# @return [PBXBuildRule] the build phases of the target.
|
303
|
+
#
|
304
|
+
# @note Apparently only PBXCopyFilesBuildPhase and
|
305
|
+
# PBXShellScriptBuildPhase can appear multiple times in a
|
306
|
+
# target.
|
307
|
+
#
|
308
|
+
has_many :build_phases, [ PBXCopyFilesBuildPhase, PBXShellScriptBuildPhase ]
|
309
|
+
|
310
|
+
end
|
311
|
+
|
312
|
+
#-----------------------------------------------------------------------#
|
313
|
+
|
314
|
+
# Represents a legacy target which uses an external build tool.
|
315
|
+
#
|
316
|
+
# Apparently it can't have any build phase but the attribute can be
|
317
|
+
# present.
|
318
|
+
#
|
319
|
+
class PBXLegacyTarget < AbstractTarget
|
320
|
+
|
321
|
+
# @!group Attributes
|
322
|
+
|
323
|
+
# @return [String] e.g "Dir"
|
324
|
+
#
|
325
|
+
attribute :build_working_directory, String
|
326
|
+
|
327
|
+
# @return [String] e.g "$(ACTION)"
|
328
|
+
#
|
329
|
+
attribute :build_arguments_string, String
|
330
|
+
|
331
|
+
# @return [String] e.g "1"
|
332
|
+
#
|
333
|
+
attribute :pass_build_settings_in_environment, String
|
334
|
+
|
335
|
+
# @return [String] e.g "/usr/bin/make"
|
336
|
+
#
|
337
|
+
attribute :build_tool_path, String
|
338
|
+
|
339
|
+
# @return [PBXBuildRule] the build phases of the target.
|
340
|
+
#
|
341
|
+
# @note Apparently only PBXCopyFilesBuildPhase and
|
342
|
+
# PBXShellScriptBuildPhase can appear multiple times in a
|
343
|
+
# target.
|
344
|
+
#
|
345
|
+
has_many :build_phases, AbstractBuildPhase
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
#-----------------------------------------------------------------------#
|
350
|
+
|
327
351
|
end
|
328
352
|
end
|
329
353
|
end
|