lib/xcodeproj/project/object/root_object.rb
module Xcodeproj class Project module Object # This class represents the root object of a project document. # class PBXProject < AbstractObject # @!group Attributes # @return [ObjectList<AbstractTarget>] a list of all the targets in # the project. # has_many :targets, AbstractTarget # @return [Hash{String => String}] attributes the attributes of the # target. # # @note The hash might contain the following keys: # # - `CLASSPREFIX` # - `LastUpgradeCheck` # - `ORGANIZATIONNAME` # attribute :attributes, Hash, 'LastSwiftUpdateCheck' => Constants::LAST_SWIFT_UPGRADE_CHECK, 'LastUpgradeCheck' => Constants::LAST_UPGRADE_CHECK # @return [XCConfigurationList] the configuration list of the project. # has_one :build_configuration_list, XCConfigurationList # @return [String] the compatibility version of the project. # attribute :compatibility_version, String, 'Xcode 3.2' # @return [String] the development region of the project. # attribute :development_region, String, 'en' # @return [String] whether the project has scanned for encodings. # attribute :has_scanned_for_encodings, String, '0' # @return [Array<String>] the list of known regions. # attribute :known_regions, Array, %w(en Base) # @return [PBXGroup] the main group of the project. The one displayed # by Xcode in the Project Navigator. # has_one :main_group, PBXGroup # @return [String] whether minimizes project reference proxies # attribute :minimized_project_reference_proxies, String, '0' # @return [String] preferred project object version # attribute :preferred_project_object_version, String, Constants::LAST_KNOWN_OBJECT_VERSION.to_s # @return [PBXGroup] the group containing the references to products of # the project. # has_one :product_ref_group, PBXGroup # @return [String] the directory of the project. # attribute :project_dir_path, String, '' # @return [String] the root of the project. # attribute :project_root, String, '' # @return [Array<XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference>] the list of Swift package references. # has_many :package_references, [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] # @return [Array<ObjectDictionary>] any reference to other projects. # has_many_references_by_keys :project_references, :project_ref => PBXFileReference, :product_group => PBXGroup def name project.path.basename('.xcodeproj').to_s end def ascii_plist_annotation ' Project object ' end def to_hash_as(method = :to_hash) hash_as = super if !hash_as['packageReferences'].nil? && hash_as['packageReferences'].empty? hash_as.delete('packageReferences') if !hash_as['packageReferences'].nil? && hash_as['packageReferences'].empty? end hash_as end def to_ascii_plist plist = super plist.value.delete('projectReferences') if plist.value['projectReferences'].empty? plist.value.delete('packageReferences') if !plist.value['packageReferences'].nil? && plist.value['packageReferences'].empty? plist end end end end end