xcodeproj 1.5.9 → 1.6.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/lib/xcodeproj/config.rb +11 -3
- data/lib/xcodeproj/constants.rb +6 -4
- data/lib/xcodeproj/gem_version.rb +1 -1
- data/lib/xcodeproj/project.rb +17 -2
- data/lib/xcodeproj/project/object/build_phase.rb +14 -0
- data/lib/xcodeproj/project/object/file_reference.rb +7 -0
- data/lib/xcodeproj/project/object/helpers/groupable_helper.rb +27 -2
- data/lib/xcodeproj/project/object/native_target.rb +1 -1
- data/lib/xcodeproj/project/object_attributes.rb +8 -5
- data/lib/xcodeproj/project/project_helper.rb +32 -8
- data/lib/xcodeproj/project/uuid_generator.rb +2 -1
- data/lib/xcodeproj/scheme/buildable_reference.rb +1 -1
- data/lib/xcodeproj/scheme/test_action.rb +90 -6
- metadata +7 -7
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 965a58aaa67ae7f0816637cadffecc3e53d6794b7ebe97d21a562b8ceeefd7dc
         | 
| 4 | 
            +
              data.tar.gz: f2331d54681cec7fa80abab0f9d7f8ca21e04dae8d75fd037d6d71b757cf87e7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b7ec36d7eeda318e9c8d0eec8755fcbfe5a522abd650f173a86de627072fe200e05efa63125a4d56b4c5a880bf53abf07a649a41cf3c87152730eda0d57f77b5
         | 
| 7 | 
            +
              data.tar.gz: 65ccb89e5efea8092af076619a8077f324084fc258132bf9763e7f8b27ce0a7e9827ee1e0d1a79700ec48b79c6f6c0d1c0f40c6f45138386969ff85d7b98e759
         | 
    
        data/lib/xcodeproj/config.rb
    CHANGED
    
    | @@ -27,6 +27,13 @@ module Xcodeproj | |
| 27 27 | 
             
                  =             # The assignment operator
         | 
| 28 28 | 
             
                  (.*)          # The value
         | 
| 29 29 | 
             
                /x
         | 
| 30 | 
            +
                private_constant :KEY_VALUE_PATTERN
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                INHERITED = %w($(inherited) ${inherited}).freeze
         | 
| 33 | 
            +
                private_constant :INHERITED
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                INHERITED_REGEXP = Regexp.union(INHERITED)
         | 
| 36 | 
            +
                private_constant :INHERITED_REGEXP
         | 
| 30 37 |  | 
| 31 38 | 
             
                # @return [Hash{String => String}] The attributes of the settings file
         | 
| 32 39 | 
             
                #         excluding frameworks, weak_framework and libraries.
         | 
| @@ -132,8 +139,7 @@ module Xcodeproj | |
| 132 139 |  | 
| 133 140 | 
             
                  result = attributes.dup
         | 
| 134 141 | 
             
                  result['OTHER_LDFLAGS'] = list.join(' ') unless list.empty?
         | 
| 135 | 
            -
                   | 
| 136 | 
            -
                  result.reject! { |_, v| inherited.any? { |i| i == v.to_s.strip } }
         | 
| 142 | 
            +
                  result.reject! { |_, v| INHERITED.any? { |i| i == v.to_s.strip } }
         | 
| 137 143 |  | 
| 138 144 | 
             
                  result = @includes.map do |incl|
         | 
| 139 145 | 
             
                    path = File.expand_path(incl, @filepath.dirname)
         | 
| @@ -272,7 +278,9 @@ module Xcodeproj | |
| 272 278 | 
             
                      @includes.push include
         | 
| 273 279 | 
             
                    else
         | 
| 274 280 | 
             
                      key, value = extract_key_value(uncommented_line)
         | 
| 275 | 
            -
                       | 
| 281 | 
            +
                      next unless key
         | 
| 282 | 
            +
                      value.gsub!(INHERITED_REGEXP) { |m| hash.fetch(key, m) }
         | 
| 283 | 
            +
                      hash[key] = value
         | 
| 276 284 | 
             
                    end
         | 
| 277 285 | 
             
                  end
         | 
| 278 286 | 
             
                  hash
         | 
    
        data/lib/xcodeproj/constants.rb
    CHANGED
    
    | @@ -29,7 +29,7 @@ module Xcodeproj | |
| 29 29 |  | 
| 30 30 | 
             
                # @return [String] The last known object version to Xcodeproj.
         | 
| 31 31 | 
             
                #
         | 
| 32 | 
            -
                LAST_KNOWN_OBJECT_VERSION =  | 
| 32 | 
            +
                LAST_KNOWN_OBJECT_VERSION = 51
         | 
| 33 33 |  | 
| 34 34 | 
             
                # @return [String] The last known object version to Xcodeproj.
         | 
| 35 35 | 
             
                #
         | 
| @@ -227,7 +227,8 @@ module Xcodeproj | |
| 227 227 | 
             
                    'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'DEBUG',
         | 
| 228 228 | 
             
                  }.freeze,
         | 
| 229 229 | 
             
                  [:release, :swift] => {
         | 
| 230 | 
            -
                    ' | 
| 230 | 
            +
                    'SWIFT_COMPILATION_MODE'            => 'wholemodule',
         | 
| 231 | 
            +
                    'SWIFT_OPTIMIZATION_LEVEL'          => '-O',
         | 
| 231 232 | 
             
                  }.freeze,
         | 
| 232 233 | 
             
                  [:debug, :static_library, :swift] => {
         | 
| 233 234 | 
             
                  }.freeze,
         | 
| @@ -371,6 +372,7 @@ module Xcodeproj | |
| 371 372 | 
             
                    'GCC_WARN_UNINITIALIZED_AUTOS'            => 'YES_AGGRESSIVE',
         | 
| 372 373 | 
             
                    'GCC_WARN_UNUSED_FUNCTION'                => 'YES',
         | 
| 373 374 | 
             
                    'GCC_WARN_UNUSED_VARIABLE'                => 'YES',
         | 
| 375 | 
            +
                    'MTL_FAST_MATH'                           => 'YES',
         | 
| 374 376 | 
             
                    'PRODUCT_NAME'                            => '$(TARGET_NAME)',
         | 
| 375 377 | 
             
                  },
         | 
| 376 378 | 
             
                  :release => {
         | 
| @@ -384,7 +386,7 @@ module Xcodeproj | |
| 384 386 | 
             
                    'GCC_DYNAMIC_NO_PIC'                 => 'NO',
         | 
| 385 387 | 
             
                    'GCC_OPTIMIZATION_LEVEL'             => '0',
         | 
| 386 388 | 
             
                    'GCC_PREPROCESSOR_DEFINITIONS'       => ['DEBUG=1', '$(inherited)'],
         | 
| 387 | 
            -
                    'MTL_ENABLE_DEBUG_INFO'              => ' | 
| 389 | 
            +
                    'MTL_ENABLE_DEBUG_INFO'              => 'INCLUDE_SOURCE',
         | 
| 388 390 | 
             
                    'ONLY_ACTIVE_ARCH'                   => 'YES',
         | 
| 389 391 | 
             
                  }.freeze,
         | 
| 390 392 | 
             
                }.freeze
         | 
| @@ -414,7 +416,7 @@ module Xcodeproj | |
| 414 416 |  | 
| 415 417 | 
             
                # @return [Array] The extensions which are associated with header files.
         | 
| 416 418 | 
             
                #
         | 
| 417 | 
            -
                HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp .tpp .hxx .def .inl).freeze
         | 
| 419 | 
            +
                HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp .tpp .hxx .def .inl .inc).freeze
         | 
| 418 420 |  | 
| 419 421 | 
             
                # @return [Array] The keywords Xcode use to identify a build setting can
         | 
| 420 422 | 
             
                #                 inherit values from a previous precedence level
         | 
    
        data/lib/xcodeproj/project.rb
    CHANGED
    
    | @@ -46,6 +46,10 @@ module Xcodeproj | |
| 46 46 | 
             
                #
         | 
| 47 47 | 
             
                attr_reader :path
         | 
| 48 48 |  | 
| 49 | 
            +
                # @return [Pathname] the directory of the project
         | 
| 50 | 
            +
                #
         | 
| 51 | 
            +
                attr_reader :project_dir
         | 
| 52 | 
            +
             | 
| 49 53 | 
             
                # @param  [Pathname, String] path @see path
         | 
| 50 54 | 
             
                #         The path provided will be expanded to an absolute path.
         | 
| 51 55 | 
             
                # @param  [Bool] skip_initialization
         | 
| @@ -64,6 +68,7 @@ module Xcodeproj | |
| 64 68 | 
             
                #
         | 
| 65 69 | 
             
                def initialize(path, skip_initialization = false, object_version = Constants::DEFAULT_OBJECT_VERSION)
         | 
| 66 70 | 
             
                  @path = Pathname.new(path).expand_path
         | 
| 71 | 
            +
                  @project_dir = @path.dirname
         | 
| 67 72 | 
             
                  @objects_by_uuid = {}
         | 
| 68 73 | 
             
                  @generated_uuids = []
         | 
| 69 74 | 
             
                  @available_uuids = []
         | 
| @@ -676,6 +681,10 @@ module Xcodeproj | |
| 676 681 | 
             
                # @param  [String] deployment_target
         | 
| 677 682 | 
             
                #         the deployment target for the platform.
         | 
| 678 683 | 
             
                #
         | 
| 684 | 
            +
                # @param  [PBXGroup] product_group
         | 
| 685 | 
            +
                #         the product group, where to add to a file reference of the
         | 
| 686 | 
            +
                #         created target.
         | 
| 687 | 
            +
                #
         | 
| 679 688 | 
             
                # @param  [Symbol] language
         | 
| 680 689 | 
             
                #         the primary language of the target, can be `:objc` or `:swift`.
         | 
| 681 690 | 
             
                #
         | 
| @@ -721,10 +730,16 @@ module Xcodeproj | |
| 721 730 | 
             
                # @param  [Array<AbstractTarget>] target_dependencies
         | 
| 722 731 | 
             
                #         targets, which should be added as dependencies.
         | 
| 723 732 | 
             
                #
         | 
| 733 | 
            +
                # @param  [Symbol] platform
         | 
| 734 | 
            +
                #         the platform of the aggregate target. Can be `:ios` or `:osx`.
         | 
| 735 | 
            +
                #
         | 
| 736 | 
            +
                # @param  [String] deployment_target
         | 
| 737 | 
            +
                #         the deployment target for the platform.
         | 
| 738 | 
            +
                #
         | 
| 724 739 | 
             
                # @return [PBXNativeTarget] the target.
         | 
| 725 740 | 
             
                #
         | 
| 726 | 
            -
                def new_aggregate_target(name, target_dependencies = [])
         | 
| 727 | 
            -
                  ProjectHelper.new_aggregate_target(self, name).tap do |aggregate_target|
         | 
| 741 | 
            +
                def new_aggregate_target(name, target_dependencies = [], platform = nil, deployment_target = nil)
         | 
| 742 | 
            +
                  ProjectHelper.new_aggregate_target(self, name, platform, deployment_target).tap do |aggregate_target|
         | 
| 728 743 | 
             
                    target_dependencies.each do |dep|
         | 
| 729 744 | 
             
                      aggregate_target.add_dependency(dep)
         | 
| 730 745 | 
             
                    end
         | 
| @@ -250,6 +250,13 @@ module Xcodeproj | |
| 250 250 | 
             
                    #
         | 
| 251 251 | 
             
                    attribute :input_paths, Array, []
         | 
| 252 252 |  | 
| 253 | 
            +
                    # @return [Array<String>] an array of input file list paths of the script.
         | 
| 254 | 
            +
                    #
         | 
| 255 | 
            +
                    # @example
         | 
| 256 | 
            +
                    #   "$(SRCROOT)/newInputFile.xcfilelist"
         | 
| 257 | 
            +
                    #
         | 
| 258 | 
            +
                    attribute :input_file_list_paths, Array, []
         | 
| 259 | 
            +
             | 
| 253 260 | 
             
                    # @return [Array<String>] an array of output paths of the script.
         | 
| 254 261 | 
             
                    #
         | 
| 255 262 | 
             
                    # @example
         | 
| @@ -257,6 +264,13 @@ module Xcodeproj | |
| 257 264 | 
             
                    #
         | 
| 258 265 | 
             
                    attribute :output_paths, Array, []
         | 
| 259 266 |  | 
| 267 | 
            +
                    # @return [Array<String>] an array of output file list paths of the script.
         | 
| 268 | 
            +
                    #
         | 
| 269 | 
            +
                    # @example
         | 
| 270 | 
            +
                    #   "$(SRCROOT)/newOutputFile.xcfilelist"
         | 
| 271 | 
            +
                    #
         | 
| 272 | 
            +
                    attribute :output_file_list_paths, Array, []
         | 
| 273 | 
            +
             | 
| 260 274 | 
             
                    # @return [String] the path to the script interpreter.
         | 
| 261 275 | 
             
                    #
         | 
| 262 276 | 
             
                    # @note   Defaults to `/bin/sh`.
         | 
| @@ -169,6 +169,13 @@ module Xcodeproj | |
| 169 169 | 
             
                      GroupableHelper.real_path(self)
         | 
| 170 170 | 
             
                    end
         | 
| 171 171 |  | 
| 172 | 
            +
                    # @return [Pathname] the path of the file without resolving the
         | 
| 173 | 
            +
                    # source tree.
         | 
| 174 | 
            +
                    #
         | 
| 175 | 
            +
                    def full_path
         | 
| 176 | 
            +
                      GroupableHelper.full_path(self)
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
             | 
| 172 179 | 
             
                    # Sets the source tree of the reference.
         | 
| 173 180 | 
             
                    #
         | 
| 174 181 | 
             
                    # @param  [Symbol, String] source_tree
         | 
| @@ -106,6 +106,31 @@ module Xcodeproj | |
| 106 106 | 
             
                        end
         | 
| 107 107 | 
             
                      end
         | 
| 108 108 |  | 
| 109 | 
            +
                      # @param  [PBXGroup, PBXFileReference] object
         | 
| 110 | 
            +
                      #         The object to analyze.
         | 
| 111 | 
            +
                      #
         | 
| 112 | 
            +
                      # @return [Pathname] The path of the object without resolving the
         | 
| 113 | 
            +
                      #         source tree.
         | 
| 114 | 
            +
                      #
         | 
| 115 | 
            +
                      def full_path(object)
         | 
| 116 | 
            +
                        folder =  case object.source_tree
         | 
| 117 | 
            +
                                  when '<group>'
         | 
| 118 | 
            +
                                    parent(object).isa != 'PBXProject' ? full_path(parent(object)) : nil
         | 
| 119 | 
            +
                                  when 'SOURCE_ROOT'
         | 
| 120 | 
            +
                                    nil
         | 
| 121 | 
            +
                                  when '<absolute>'
         | 
| 122 | 
            +
                                    Pathname.new('/')
         | 
| 123 | 
            +
                                  else
         | 
| 124 | 
            +
                                    Pathname.new("${#{object.source_tree}}")
         | 
| 125 | 
            +
                                  end
         | 
| 126 | 
            +
                        folder ||= Pathname.new('')
         | 
| 127 | 
            +
                        if object.path
         | 
| 128 | 
            +
                          folder + object.path
         | 
| 129 | 
            +
                        else
         | 
| 130 | 
            +
                          folder
         | 
| 131 | 
            +
                        end
         | 
| 132 | 
            +
                      end
         | 
| 133 | 
            +
             | 
| 109 134 | 
             
                      # @param  [PBXGroup, PBXFileReference] object
         | 
| 110 135 | 
             
                      #         The object to analyze.
         | 
| 111 136 | 
             
                      #
         | 
| @@ -116,12 +141,12 @@ module Xcodeproj | |
| 116 141 | 
             
                        case object.source_tree
         | 
| 117 142 | 
             
                        when '<group>'
         | 
| 118 143 | 
             
                          if parent(object).isa == 'PBXProject'
         | 
| 119 | 
            -
                            object.project. | 
| 144 | 
            +
                            object.project.project_dir
         | 
| 120 145 | 
             
                          else
         | 
| 121 146 | 
             
                            real_path(parent(object))
         | 
| 122 147 | 
             
                          end
         | 
| 123 148 | 
             
                        when 'SOURCE_ROOT'
         | 
| 124 | 
            -
                          object.project. | 
| 149 | 
            +
                          object.project.project_dir
         | 
| 125 150 | 
             
                        when '<absolute>'
         | 
| 126 151 | 
             
                          nil
         | 
| 127 152 | 
             
                        else
         | 
| @@ -239,7 +239,7 @@ module Xcodeproj | |
| 239 239 | 
             
                          container_proxy.container_portal = project.root_object.uuid
         | 
| 240 240 | 
             
                        else
         | 
| 241 241 | 
             
                          subproject_reference = project.reference_for_path(target.project.path)
         | 
| 242 | 
            -
                          raise ArgumentError, 'add_dependency  | 
| 242 | 
            +
                          raise ArgumentError, 'add_dependency received target that belongs to a project that is not this project and is not a subproject of this project' unless subproject_reference
         | 
| 243 243 | 
             
                          container_proxy.container_portal = subproject_reference.uuid
         | 
| 244 244 | 
             
                        end
         | 
| 245 245 | 
             
                        container_proxy.proxy_type = Constants::PROXY_TYPES[:native_target]
         | 
| @@ -354,6 +354,7 @@ module Xcodeproj | |
| 354 354 | 
             
                        # 1.9.2 fix, see https://github.com/CocoaPods/Xcodeproj/issues/40.
         | 
| 355 355 | 
             
                        public(attrb.name)
         | 
| 356 356 |  | 
| 357 | 
            +
                        variable_name = :"@#{attrb.name}"
         | 
| 357 358 | 
             
                        define_method("#{attrb.name}=") do |value|
         | 
| 358 359 | 
             
                          attrb.validate_value(value)
         | 
| 359 360 |  | 
| @@ -361,7 +362,7 @@ module Xcodeproj | |
| 361 362 | 
             
                          return value if previous_value == value
         | 
| 362 363 | 
             
                          mark_project_as_dirty!
         | 
| 363 364 | 
             
                          previous_value.remove_referrer(self) if previous_value
         | 
| 364 | 
            -
                          instance_variable_set( | 
| 365 | 
            +
                          instance_variable_set(variable_name, value)
         | 
| 365 366 | 
             
                          value.add_referrer(self) if value
         | 
| 366 367 | 
             
                        end
         | 
| 367 368 | 
             
                      end
         | 
| @@ -392,12 +393,13 @@ module Xcodeproj | |
| 392 393 | 
             
                        attrb.classes = isas
         | 
| 393 394 | 
             
                        add_attribute(attrb)
         | 
| 394 395 |  | 
| 396 | 
            +
                        variable_name = :"@#{attrb.name}"
         | 
| 395 397 | 
             
                        define_method(attrb.name) do
         | 
| 396 398 | 
             
                          # Here we are in the context of the instance
         | 
| 397 | 
            -
                          list = instance_variable_get( | 
| 399 | 
            +
                          list = instance_variable_get(variable_name)
         | 
| 398 400 | 
             
                          unless list
         | 
| 399 401 | 
             
                            list = ObjectList.new(attrb, self)
         | 
| 400 | 
            -
                            instance_variable_set( | 
| 402 | 
            +
                            instance_variable_set(variable_name, list)
         | 
| 401 403 | 
             
                          end
         | 
| 402 404 | 
             
                          list
         | 
| 403 405 | 
             
                        end
         | 
| @@ -428,12 +430,13 @@ module Xcodeproj | |
| 428 430 | 
             
                        attrb.classes_by_key = classes_by_key
         | 
| 429 431 | 
             
                        add_attribute(attrb)
         | 
| 430 432 |  | 
| 433 | 
            +
                        variable_name = :"@#{attrb.name}"
         | 
| 431 434 | 
             
                        define_method(attrb.name) do
         | 
| 432 435 | 
             
                          # Here we are in the context of the instance
         | 
| 433 | 
            -
                          list = instance_variable_get( | 
| 436 | 
            +
                          list = instance_variable_get(variable_name)
         | 
| 434 437 | 
             
                          unless list
         | 
| 435 438 | 
             
                            list = ObjectList.new(attrb, self)
         | 
| 436 | 
            -
                            instance_variable_set( | 
| 439 | 
            +
                            instance_variable_set(variable_name, list)
         | 
| 437 440 | 
             
                          end
         | 
| 438 441 | 
             
                          list
         | 
| 439 442 | 
             
                        end
         | 
| @@ -55,8 +55,7 @@ module Xcodeproj | |
| 55 55 | 
             
                    target.product_reference = product
         | 
| 56 56 |  | 
| 57 57 | 
             
                    # Build phases
         | 
| 58 | 
            -
                    target.build_phases << project.new( | 
| 59 | 
            -
                    target.build_phases << project.new(PBXFrameworksBuildPhase)
         | 
| 58 | 
            +
                    build_phases_for_target_type(type).each { |phase| target.build_phases << project.new(phase) }
         | 
| 60 59 |  | 
| 61 60 | 
             
                    # Frameworks
         | 
| 62 61 | 
             
                    unless type == :static_library
         | 
| @@ -116,9 +115,7 @@ module Xcodeproj | |
| 116 115 | 
             
                    target.product_reference = product
         | 
| 117 116 |  | 
| 118 117 | 
             
                    # Build phases
         | 
| 119 | 
            -
                    target.build_phases << project.new( | 
| 120 | 
            -
                    target.build_phases << project.new(PBXFrameworksBuildPhase)
         | 
| 121 | 
            -
                    target.build_phases << project.new(PBXResourcesBuildPhase)
         | 
| 118 | 
            +
                    build_phases_for_target_type(:bundle).each { |phase| target.build_phases << project.new(phase) }
         | 
| 122 119 |  | 
| 123 120 | 
             
                    target
         | 
| 124 121 | 
             
                  end
         | 
| @@ -133,13 +130,19 @@ module Xcodeproj | |
| 133 130 | 
             
                  # @param  [String] name
         | 
| 134 131 | 
             
                  #         the name of the aggregate target.
         | 
| 135 132 | 
             
                  #
         | 
| 133 | 
            +
                  # @param  [Symbol] platform
         | 
| 134 | 
            +
                  #         the platform of the aggregate target. Can be `:ios` or `:osx`.
         | 
| 135 | 
            +
                  #
         | 
| 136 | 
            +
                  # @param  [String] deployment_target
         | 
| 137 | 
            +
                  #         the deployment target for the platform.
         | 
| 138 | 
            +
                  #
         | 
| 136 139 | 
             
                  # @return [PBXAggregateTarget] the target.
         | 
| 137 140 | 
             
                  #
         | 
| 138 | 
            -
                  def self.new_aggregate_target(project, name)
         | 
| 141 | 
            +
                  def self.new_aggregate_target(project, name, platform, deployment_target)
         | 
| 139 142 | 
             
                    target = project.new(PBXAggregateTarget)
         | 
| 140 143 | 
             
                    project.targets << target
         | 
| 141 144 | 
             
                    target.name = name
         | 
| 142 | 
            -
                    target.build_configuration_list = configuration_list(project)
         | 
| 145 | 
            +
                    target.build_configuration_list = configuration_list(project, platform, deployment_target)
         | 
| 143 146 | 
             
                    target
         | 
| 144 147 | 
             
                  end
         | 
| 145 148 |  | 
| @@ -293,7 +296,7 @@ module Xcodeproj | |
| 293 296 | 
             
                  # @param  [Object] object
         | 
| 294 297 | 
             
                  #         the object to copy.
         | 
| 295 298 | 
             
                  #
         | 
| 296 | 
            -
                  # @return [Object] The  | 
| 299 | 
            +
                  # @return [Object] The deep copy of the object.
         | 
| 297 300 | 
             
                  #
         | 
| 298 301 | 
             
                  def self.deep_dup(object)
         | 
| 299 302 | 
             
                    case object
         | 
| @@ -310,6 +313,27 @@ module Xcodeproj | |
| 310 313 | 
             
                    end
         | 
| 311 314 | 
             
                  end
         | 
| 312 315 |  | 
| 316 | 
            +
                  # Returns the build phases, in order, that appear by default
         | 
| 317 | 
            +
                  # on a target of the given type.
         | 
| 318 | 
            +
                  #
         | 
| 319 | 
            +
                  # @param  [Symbol] type
         | 
| 320 | 
            +
                  #         the name of the target type.
         | 
| 321 | 
            +
                  #
         | 
| 322 | 
            +
                  # @return [Array<String>] The list of build phase class names for the target type.
         | 
| 323 | 
            +
                  #
         | 
| 324 | 
            +
                  def self.build_phases_for_target_type(type)
         | 
| 325 | 
            +
                    case type
         | 
| 326 | 
            +
                    when :static_library, :dynamic_library
         | 
| 327 | 
            +
                      %w(Headers Sources Frameworks)
         | 
| 328 | 
            +
                    when :framework
         | 
| 329 | 
            +
                      %w(Headers Sources Frameworks Resources)
         | 
| 330 | 
            +
                    when :command_line_tool
         | 
| 331 | 
            +
                      %w(Sources Frameworks)
         | 
| 332 | 
            +
                    else
         | 
| 333 | 
            +
                      %w(Sources Frameworks Resources)
         | 
| 334 | 
            +
                    end.map { |phase| "PBX#{phase}BuildPhase" }
         | 
| 335 | 
            +
                  end
         | 
| 336 | 
            +
             | 
| 313 337 | 
             
                  #-----------------------------------------------------------------------#
         | 
| 314 338 | 
             
                end
         | 
| 315 339 | 
             
              end
         | 
| @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            module Xcodeproj
         | 
| 2 2 | 
             
              class Project
         | 
| 3 3 | 
             
                class UUIDGenerator
         | 
| 4 | 
            +
                  require 'digest'
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
                  def initialize(project)
         | 
| 5 7 | 
             
                    @project = project
         | 
| 6 8 | 
             
                    @new_objects_by_uuid = {}
         | 
| @@ -76,7 +78,6 @@ module Xcodeproj | |
| 76 78 | 
             
                  end
         | 
| 77 79 |  | 
| 78 80 | 
             
                  def uuid_for_path(path)
         | 
| 79 | 
            -
                    require 'digest'
         | 
| 80 81 | 
             
                    Digest::MD5.hexdigest(path).upcase
         | 
| 81 82 | 
             
                  end
         | 
| 82 83 |  | 
| @@ -116,7 +116,7 @@ module Xcodeproj | |
| 116 116 | 
             
                    path = if !root_project_dir_path.to_s.empty?
         | 
| 117 117 | 
             
                             root_project.path + root_project_dir_path
         | 
| 118 118 | 
             
                           else
         | 
| 119 | 
            -
                             root_project. | 
| 119 | 
            +
                             root_project.project_dir
         | 
| 120 120 | 
             
                           end
         | 
| 121 121 | 
             
                    relative_path = target_project.path.relative_path_from(path).to_s
         | 
| 122 122 | 
             
                    relative_path = target_project.path.basename if relative_path == '.'
         | 
| @@ -151,6 +151,41 @@ module Xcodeproj | |
| 151 151 | 
             
                      @xml_element.attributes['skipped'] = bool_to_string(flag)
         | 
| 152 152 | 
             
                    end
         | 
| 153 153 |  | 
| 154 | 
            +
                    # @return [Bool]
         | 
| 155 | 
            +
                    #         Whether or not this TestableReference (test bundle) should be run in parallel or not
         | 
| 156 | 
            +
                    #
         | 
| 157 | 
            +
                    def parallelizable?
         | 
| 158 | 
            +
                      string_to_bool(@xml_element.attributes['parallelizable'])
         | 
| 159 | 
            +
                    end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                    # @param [Bool] flag
         | 
| 162 | 
            +
                    #         Set whether or not this TestableReference (test bundle) should be run in parallel or not
         | 
| 163 | 
            +
                    #
         | 
| 164 | 
            +
                    def parallelizable=(flag)
         | 
| 165 | 
            +
                      @xml_element.attributes['parallelizable'] = bool_to_string(flag)
         | 
| 166 | 
            +
                    end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                    # @return [String]
         | 
| 169 | 
            +
                    #         The execution order for this TestableReference (test bundle)
         | 
| 170 | 
            +
                    #
         | 
| 171 | 
            +
                    def test_execution_ordering
         | 
| 172 | 
            +
                      @xml_element.attributes['testExecutionOrdering']
         | 
| 173 | 
            +
                    end
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    # @param [String] order
         | 
| 176 | 
            +
                    #         Set the execution order for this TestableReference (test bundle)
         | 
| 177 | 
            +
                    #
         | 
| 178 | 
            +
                    def test_execution_ordering=(order)
         | 
| 179 | 
            +
                      @xml_element.attributes['testExecutionOrdering'] = order
         | 
| 180 | 
            +
                    end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    # @return [Bool]
         | 
| 183 | 
            +
                    #         Whether or not this TestableReference (test bundle) should be run in randomized order.
         | 
| 184 | 
            +
                    #
         | 
| 185 | 
            +
                    def randomized?
         | 
| 186 | 
            +
                      test_execution_ordering == 'random'
         | 
| 187 | 
            +
                    end
         | 
| 188 | 
            +
             | 
| 154 189 | 
             
                    # @return [Array<BuildableReference>]
         | 
| 155 190 | 
             
                    #         The list of BuildableReferences this action will build.
         | 
| 156 191 | 
             
                    #         (The list usually contains only one element)
         | 
| @@ -168,21 +203,21 @@ module Xcodeproj | |
| 168 203 | 
             
                      @xml_element.add_element(ref.xml_element)
         | 
| 169 204 | 
             
                    end
         | 
| 170 205 |  | 
| 171 | 
            -
                    # @return [Array< | 
| 206 | 
            +
                    # @return [Array<Test>]
         | 
| 172 207 | 
             
                    #         The list of SkippedTest this action will skip.
         | 
| 173 208 | 
             
                    #
         | 
| 174 209 | 
             
                    def skipped_tests
         | 
| 175 210 | 
             
                      return [] if @xml_element.elements['SkippedTests'].nil?
         | 
| 176 211 | 
             
                      @xml_element.elements['SkippedTests'].get_elements('Test').map do |node|
         | 
| 177 | 
            -
                         | 
| 212 | 
            +
                        Test.new(node)
         | 
| 178 213 | 
             
                      end
         | 
| 179 214 | 
             
                    end
         | 
| 180 215 |  | 
| 181 | 
            -
                    # @param [Array< | 
| 216 | 
            +
                    # @param [Array<Test>] tests
         | 
| 182 217 | 
             
                    #         Set the list of SkippedTest this action will skip.
         | 
| 183 218 | 
             
                    #
         | 
| 184 219 | 
             
                    def skipped_tests=(tests)
         | 
| 185 | 
            -
                      @xml_element.delete_element('SkippedTests') | 
| 220 | 
            +
                      @xml_element.delete_element('SkippedTests')
         | 
| 186 221 | 
             
                      if tests.nil?
         | 
| 187 222 | 
             
                        return
         | 
| 188 223 | 
             
                      end
         | 
| @@ -192,7 +227,7 @@ module Xcodeproj | |
| 192 227 | 
             
                      end
         | 
| 193 228 | 
             
                    end
         | 
| 194 229 |  | 
| 195 | 
            -
                    # @param [ | 
| 230 | 
            +
                    # @param [Test] skipped_test
         | 
| 196 231 | 
             
                    #         The SkippedTest to add to the list of tests this action will skip
         | 
| 197 232 | 
             
                    #
         | 
| 198 233 | 
             
                    def add_skipped_test(skipped_test)
         | 
| @@ -200,7 +235,51 @@ module Xcodeproj | |
| 200 235 | 
             
                      entries.add_element(skipped_test.xml_element)
         | 
| 201 236 | 
             
                    end
         | 
| 202 237 |  | 
| 203 | 
            -
                     | 
| 238 | 
            +
                    # @return [Bool]
         | 
| 239 | 
            +
                    #         Whether or not this TestableReference (test bundle) should use a whitelist or not
         | 
| 240 | 
            +
                    #
         | 
| 241 | 
            +
                    def use_test_selection_whitelist?
         | 
| 242 | 
            +
                      string_to_bool(@xml_element.attributes['useTestSelectionWhitelist'])
         | 
| 243 | 
            +
                    end
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                    # @param [Bool] flag
         | 
| 246 | 
            +
                    #        Set whether or not this TestableReference (test bundle) should use a whitelist or not
         | 
| 247 | 
            +
                    #
         | 
| 248 | 
            +
                    def use_test_selection_whitelist=(flag)
         | 
| 249 | 
            +
                      @xml_element.attributes['useTestSelectionWhitelist'] = bool_to_string(flag)
         | 
| 250 | 
            +
                    end
         | 
| 251 | 
            +
             | 
| 252 | 
            +
                    # @return [Array<Test>]
         | 
| 253 | 
            +
                    #         The list of SelectedTest this action will run.
         | 
| 254 | 
            +
                    #
         | 
| 255 | 
            +
                    def selected_tests
         | 
| 256 | 
            +
                      return [] if @xml_element.elements['SelectedTests'].nil?
         | 
| 257 | 
            +
                      @xml_element.elements['SelectedTests'].get_elements('Test').map do |node|
         | 
| 258 | 
            +
                        Test.new(node)
         | 
| 259 | 
            +
                      end
         | 
| 260 | 
            +
                    end
         | 
| 261 | 
            +
             | 
| 262 | 
            +
                    # @param [Array<Test>] tests
         | 
| 263 | 
            +
                    #         Set the list of SelectedTest this action will run.
         | 
| 264 | 
            +
                    #
         | 
| 265 | 
            +
                    def selected_tests=(tests)
         | 
| 266 | 
            +
                      @xml_element.delete_element('SelectedTests')
         | 
| 267 | 
            +
                      return if tests.nil?
         | 
| 268 | 
            +
                      entries = @xml_element.add_element('SelectedTests')
         | 
| 269 | 
            +
                      tests.each do |selected|
         | 
| 270 | 
            +
                        entries.add_element(selected.xml_element)
         | 
| 271 | 
            +
                      end
         | 
| 272 | 
            +
                    end
         | 
| 273 | 
            +
             | 
| 274 | 
            +
                    # @param [Test] selected_test
         | 
| 275 | 
            +
                    #         The SelectedTest to add to the list of tests this action will run.
         | 
| 276 | 
            +
                    #
         | 
| 277 | 
            +
                    def add_selected_test(selected_test)
         | 
| 278 | 
            +
                      entries = @xml_element.elements['SelectedTests'] || @xml_element.add_element('SelectedTests')
         | 
| 279 | 
            +
                      entries.add_element(selected_test.xml_element)
         | 
| 280 | 
            +
                    end
         | 
| 281 | 
            +
             | 
| 282 | 
            +
                    class Test < XMLElementWrapper
         | 
| 204 283 | 
             
                      # @param [REXML::Element] node
         | 
| 205 284 | 
             
                      #        The 'Test' XML node that this object will wrap.
         | 
| 206 285 | 
             
                      #        If nil, will create a default XML node to use.
         | 
| @@ -226,6 +305,11 @@ module Xcodeproj | |
| 226 305 | 
             
                      end
         | 
| 227 306 | 
             
                    end
         | 
| 228 307 |  | 
| 308 | 
            +
                    # Aliased to`Test` for compatibility
         | 
| 309 | 
            +
                    # @todo Remove in Xcodeproj 2
         | 
| 310 | 
            +
                    #
         | 
| 311 | 
            +
                    SkippedTest = Test
         | 
| 312 | 
            +
             | 
| 229 313 | 
             
                    # @todo handle 'AdditionalOptions' tag
         | 
| 230 314 | 
             
                  end
         | 
| 231 315 | 
             
                end
         | 
    
        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: 1. | 
| 4 | 
            +
              version: 1.6.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: 2018- | 
| 11 | 
            +
            date: 2018-08-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: atomos
         | 
| @@ -16,14 +16,14 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 0.1. | 
| 19 | 
            +
                    version: 0.1.3
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 0.1. | 
| 26 | 
            +
                    version: 0.1.3
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: CFPropertyList
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -84,14 +84,14 @@ dependencies: | |
| 84 84 | 
             
                requirements:
         | 
| 85 85 | 
             
                - - "~>"
         | 
| 86 86 | 
             
                  - !ruby/object:Gem::Version
         | 
| 87 | 
            -
                    version: 0.2. | 
| 87 | 
            +
                    version: 0.2.6
         | 
| 88 88 | 
             
              type: :runtime
         | 
| 89 89 | 
             
              prerelease: false
         | 
| 90 90 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 91 91 | 
             
                requirements:
         | 
| 92 92 | 
             
                - - "~>"
         | 
| 93 93 | 
             
                  - !ruby/object:Gem::Version
         | 
| 94 | 
            -
                    version: 0.2. | 
| 94 | 
            +
                    version: 0.2.6
         | 
| 95 95 | 
             
            description: Xcodeproj lets you create and modify Xcode projects from Ruby. Script
         | 
| 96 96 | 
             
              boring management tasks or build Xcode-friendly libraries. Also includes support
         | 
| 97 97 | 
             
              for Xcode workspaces (.xcworkspace) and configuration files (.xcconfig).
         | 
| @@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 181 181 | 
             
                  version: '0'
         | 
| 182 182 | 
             
            requirements: []
         | 
| 183 183 | 
             
            rubyforge_project: 
         | 
| 184 | 
            -
            rubygems_version: 2.7. | 
| 184 | 
            +
            rubygems_version: 2.7.7
         | 
| 185 185 | 
             
            signing_key: 
         | 
| 186 186 | 
             
            specification_version: 3
         | 
| 187 187 | 
             
            summary: Create and modify Xcode projects from Ruby.
         |