>
This class represents a custom build rule of a Target.
name
compiler_spec
file_type
file_patterns
is_editable
output_files
script
isa
initialize
initialize_defaults
uuid
project
remove_from_project
display_name
to_s
referrers
add_referrer
remove_referrer
remove_reference
==
<=>
inspect
name #=> String 
String The name of the rule.
13 attribute :name, String
compiler_spec #=> String 
String A string representing what compiler to use.
`com.apple.compilers.proxy.script`.
20 attribute :compiler_spec, String
file_type #=> String 
String 
The type of the files that should be processed by this rule.
`pattern.proxy`.
28 attribute :file_type, String
file_patterns #=> String 
String 
The pattern of the files that should be processed by
this rule. This attribute is an alternative to to
file_type.
`*.css`.
37 attribute :file_patterns, String
is_editable #=> String 
String Whether the rule is editable.
`1`.
44 attribute :is_editable, String, '1'
output_files #=> ObjectList<PBXFileReference> 
ObjectList 
The file references for the output files.
49 attribute :output_files, Array
script #=> String 
String The content of the script to use for the build rule.
56 attribute :script, String
isa #=> String 
String The ISA of the class.
isa #=> String 
String The object's class name.
42 def self.isa
43   @isa ||= name.split('::').last
44 end
initialize(project, uuid) #=> AbstractObject 
Project  project
The project that will host the object.
String  uuid
The UUID of the new object.
AbstractObject A new instance of AbstractObject
64 def initialize(project, uuid)
65   @project, @uuid = project, uuid
66   @isa = self.class.isa
67   @referrers = []
68   raise "[Xcodeproj] Attempt to initialize an abstract class." unless @isa.match(/^(PBX|XC)/)
69 end
initialize_defaults #=> void 
void 
81 def initialize_defaults
82   simple_attributes.each { |a| a.set_default(self) }
83 end
uuid #=> String 
String The object universally unique identifier.
project #=> Project 
Project The project that owns the object.
remove_from_project #=> void 
void 
101 def remove_from_project
102   @project.objects_by_uuid.delete(uuid)
103   @referrers.each { |referrer| referrer.remove_reference(self) }
104   raise "[Xcodeproj] BUG: #{self} should have no referrers instead the following objects are still referencing it #{referrers}" unless referrers.count == 0
105 end
display_name #=> String 
String A name for the object.
Xcodeproj::Project::Object::AbstractObject#to_s115 def display_name
116   declared_name = name if self.respond_to?(:name)
117   if declared_name && !declared_name.empty?
118     declared_name
119   else
120     isa.gsub(/^(PBX|XC)/, '')
121   end
122 end
to_s #=> String 
String A name for the object.
124 def display_name
125   declared_name = name if self.respond_to?(:name)
126   if declared_name && !declared_name.empty?
127     declared_name
128   else
129     isa.gsub(/^(PBX|XC)/, '')
130   end
131 end
referrers #=> Array<ObjectList> 
Array 
The list of the objects that have a reference to this object.
add_referrer(referrer) #=> void 
void 
143 def add_referrer(referrer)
144   @referrers << referrer
145   @project.objects_by_uuid[uuid] = self
146 end
remove_referrer(referrer) #=> void 
void 
156 def remove_referrer(referrer)
157   @referrers.delete(referrer)
158   if @referrers.count == 0
159     @project.objects_by_uuid.delete(uuid)
160   end
161 end
remove_reference(object) #=> void 
void 
169 def remove_reference(object)
170   to_one_attributes.each do |attrb|
171     value = attrb.get_value(self)
172     attrb.set_value(self, nil) if value.equal?(object)
173   end
174 
175   to_many_attributes.each do |attrb|
176     list = attrb.get_value(self)
177     list.delete(object)
178   end
179 
180   references_by_keys_attributes.each do |attrb|
181     list = attrb.get_value(self)
182     list.each { |dictionary| dictionary.remove_reference(object) }
183   end
184 end
configure_with_plist(objects_by_uuid_plist) #=> void 
void 
202 def configure_with_plist(objects_by_uuid_plist)
203   object_plist = objects_by_uuid_plist[uuid].dup
204 
205   raise "[Xcodeproj] Attempt to initialize `#{isa}` from plist with different isa `#{object_plist}`" unless object_plist['isa'] == isa
206   object_plist.delete('isa')
207 
208   simple_attributes.each do |attrb|
209     attrb.set_value(self, object_plist[attrb.plist_name])
210     object_plist.delete(attrb.plist_name)
211   end
212 
213   to_one_attributes.each do |attrb|
214     ref_uuid = object_plist[attrb.plist_name]
215     if ref_uuid
216       ref = object_with_uuid(ref_uuid, objects_by_uuid_plist, attrb)
217       attrb.set_value(self, ref) if ref
218     end
219     object_plist.delete(attrb.plist_name)
220   end
221 
222   to_many_attributes.each do |attrb|
223     ref_uuids = object_plist[attrb.plist_name] || []
224     list = attrb.get_value(self)
225     ref_uuids.each do |uuid|
226       ref = object_with_uuid(uuid, objects_by_uuid_plist, attrb)
227       list << ref if ref
228     end
229     object_plist.delete(attrb.plist_name)
230   end
231 
232   references_by_keys_attributes.each do |attrb|
233     hashes = object_plist[attrb.plist_name] || {}
234     list = attrb.get_value(self)
235     hashes.each do |hash|
236       dictionary = ObjectDictionary.new(attrb, self)
237       hash.each do |key, uuid|
238         ref = object_with_uuid(uuid, objects_by_uuid_plist, attrb)
239         dictionary[key] = ref if ref
240       end
241       list << dictionary
242     end
243     object_plist.delete(attrb.plist_name)
244   end
245 
246   unless object_plist.empty?
247     raise "[!] Xcodeproj doesn't know about the following attributes " \
248           "#{object_plist.inspect} for the '#{isa}' isa.\n" \
249           "Please file an issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
250   end
251 end
object_with_uuid(uuid, objects_by_uuid_plist, attribute) #=> AbstractObject, Nil 
String  uuid
The UUID of the object that should be initialized.
Hash{String=>String}  objects_by_uuid_plist
The hash contained by objects key of the plist containing
the information about the object that should be initialized.
AbstractObjectAttribute  attribute
The attribute that requested the object. It is used only for exceptions.
AbstractObject The initialized object.
Nil 
If the UUID could not be found in the objects hash. In this case a warning is printed to STDERR.
274 def object_with_uuid(uuid, objects_by_uuid_plist, attribute)
275   unless object = project.objects_by_uuid[uuid] || project.new_from_plist(uuid, objects_by_uuid_plist)
276     UI.warn "`#{inspect}` attempted to initialize an object with " \
277       "an unknown UUID. `#{uuid}` for attribute: `#{attribute.name}`."\
278       " This can be the result of a merge and the unknown UUID is "    \
279       "being discarded."
280   end
281   object
282 rescue NameError
283   attributes = objects_by_uuid_plist[uuid]
284   raise "`#{isa}` attempted to initialize an object with unknown ISA "\
285         "`#{attributes['isa']}` from attributes: `#{attributes}`\n"   \
286         "Please file an issue: https://github.com/CocoaPods/Xcodeproj/issues/new"
287 end
to_hash #=> Hash 
Hash A hash representation of the project.
299 def to_hash
300   plist = {}
301   plist['isa'] = isa
302 
303   simple_attributes.each do |attrb|
304     value = attrb.get_value(self)
305     plist[attrb.plist_name] = value if value
306   end
307 
308   to_one_attributes.each do |attrb|
309     obj = attrb.get_value(self)
310     plist[attrb.plist_name] = obj.uuid if obj
311   end
312 
313   to_many_attributes.each do |attrb|
314   list = attrb.get_value(self)
315     plist[attrb.plist_name] = list.uuids
316   end
317 
318   references_by_keys_attributes.each do |attrb|
319     list = attrb.get_value(self)
320     plist[attrb.plist_name] = list.map { |dictionary| dictionary.to_hash }
321   end
322 
323   plist
324 end
to_tree_hash #=> Hash 
Hash 
A hash representation of the project different from the plist one.
339 def to_tree_hash
340   hash = {}
341   hash['displayName'] = display_name
342   hash['isa'] = isa
343 
344   simple_attributes.each do |attrb|
345     value = attrb.get_value(self)
346     hash[attrb.plist_name] = value if value
347   end
348 
349   to_one_attributes.each do |attrb|
350     obj = attrb.get_value(self)
351     hash[attrb.plist_name] = obj.to_tree_hash if obj
352   end
353 
354   to_many_attributes.each do |attrb|
355     list = attrb.get_value(self)
356     hash[attrb.plist_name] = list.map { |obj| obj.to_tree_hash }
357   end
358 
359   references_by_keys_attributes.each do |attrb|
360     list = attrb.get_value(self)
361     hash[attrb.plist_name] = list.map { |dictionary| dictionary.to_tree_hash }
362   end
363 
364   hash
365 end
pretty_print #=> Hash{String => Hash} 
Hash{String => Hash} 
A hash suitable to display the object to the user.
370 def pretty_print
371   if to_many_attributes.count == 1
372     children = to_many_attributes.first.get_value(self)
373     {display_name => children.map(&:pretty_print)}
374   else
375     display_name
376   end
377 end
==(other) #=> undefined
385 def ==(other)
386   other.is_a?(AbstractObject) && self.to_hash == other.to_hash
387 end
<=>(other) #=> undefined
389 def <=>(other)
390   self.uuid <=> other.uuid
391 end
inspect #=> undefined
393 def inspect
394   name_part = " name=#{self.name}" if respond_to?(:name)
395   "<#{self.class}#{name_part} UUID=#{uuid}>"
396 end