xcodeproj 1.12.0 → 1.17.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/command/config_dump.rb +5 -1
- data/lib/xcodeproj/config.rb +2 -0
- data/lib/xcodeproj/constants.rb +6 -1
- data/lib/xcodeproj/gem_version.rb +1 -1
- data/lib/xcodeproj/project/object.rb +1 -1
- data/lib/xcodeproj/project/object/build_configuration.rb +33 -8
- data/lib/xcodeproj/project/object/build_phase.rb +4 -0
- data/lib/xcodeproj/project/object/build_rule.rb +7 -0
- data/lib/xcodeproj/project/object/helpers/file_references_factory.rb +3 -1
- data/lib/xcodeproj/project/object/helpers/groupable_helper.rb +1 -1
- data/lib/xcodeproj/project/object/native_target.rb +7 -3
- data/lib/xcodeproj/project/object/root_object.rb +1 -1
- data/lib/xcodeproj/project/object/target_dependency.rb +5 -0
- data/lib/xcodeproj/scheme/build_action.rb +21 -0
- data/lib/xcodeproj/scheme/launch_action.rb +16 -0
- data/lib/xcodeproj/scheme/test_action.rb +20 -1
- data/lib/xcodeproj/workspace.rb +3 -2
- data/lib/xcodeproj/workspace/file_reference.rb +1 -1
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: '07911f95b24cf5e6d26bbfeca1b8374001ee97c61a94ec53ffabb0967e8303b5'
         | 
| 4 | 
            +
              data.tar.gz: a9223334f63670e3385877afb7c097be717604bac8195376d0eafa1c3c9611a4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1d2d8516fc689a28df9a71f0d5fac7ef4dadb8b8196c162ca3a6faa1746c4d8c12f5567b2b798e85a905c7fe6477179c0b7856c78fc409a1ebeda1dd04a0357c
         | 
| 7 | 
            +
              data.tar.gz: 40a40c7b1f908739005ab167e920bbd2299f6db144a7c2c4189a5746f25747db9b7ce61b6ee231dff85d182f45239b176e0c420ac8d632fabe8586f18cd9abb4
         | 
| @@ -76,7 +76,11 @@ module Xcodeproj | |
| 76 76 |  | 
| 77 77 | 
             
                  def dump_config_to_file(settings, file_path, includes = [])
         | 
| 78 78 | 
             
                    dir = @output_path + file_path + '..'
         | 
| 79 | 
            -
                    dir. | 
| 79 | 
            +
                    dir.mkpath
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    settings = Hash[settings.map do |k, v|
         | 
| 82 | 
            +
                      [k, Array(v).join(' ')]
         | 
| 83 | 
            +
                    end]
         | 
| 80 84 |  | 
| 81 85 | 
             
                    config = Config.new(settings)
         | 
| 82 86 | 
             
                    config.includes = includes
         | 
    
        data/lib/xcodeproj/config.rb
    CHANGED
    
    
    
        data/lib/xcodeproj/constants.rb
    CHANGED
    
    | @@ -32,7 +32,7 @@ module Xcodeproj | |
| 32 32 |  | 
| 33 33 | 
             
                # @return [String] The last known object version to Xcodeproj.
         | 
| 34 34 | 
             
                #
         | 
| 35 | 
            -
                LAST_KNOWN_OBJECT_VERSION =  | 
| 35 | 
            +
                LAST_KNOWN_OBJECT_VERSION = 54
         | 
| 36 36 |  | 
| 37 37 | 
             
                # @return [String] The last known object version to Xcodeproj.
         | 
| 38 38 | 
             
                #
         | 
| @@ -126,6 +126,8 @@ module Xcodeproj | |
| 126 126 | 
             
                # @return [Hash] The compatibility version string for different object versions.
         | 
| 127 127 | 
             
                #
         | 
| 128 128 | 
             
                COMPATIBILITY_VERSION_BY_OBJECT_VERSION = {
         | 
| 129 | 
            +
                  54 => 'Xcode 12.0',
         | 
| 130 | 
            +
                  53 => 'Xcode 11.4',
         | 
| 129 131 | 
             
                  52 => 'Xcode 11.0',
         | 
| 130 132 | 
             
                  51 => 'Xcode 10.0',
         | 
| 131 133 | 
             
                  50 => 'Xcode 9.3',
         | 
| @@ -172,6 +174,9 @@ module Xcodeproj | |
| 172 174 | 
             
                  :unit_test_bundle     => 'xctest',
         | 
| 173 175 | 
             
                  :ui_test_bundle       => 'xctest',
         | 
| 174 176 | 
             
                  :app_extension        => 'appex',
         | 
| 177 | 
            +
                  :messages_application => 'app',
         | 
| 178 | 
            +
                  :messages_extension   => 'appex',
         | 
| 179 | 
            +
                  :sticker_pack         => 'appex',
         | 
| 175 180 | 
             
                  :watch2_extension     => 'appex',
         | 
| 176 181 | 
             
                  :watch2_app           => 'app',
         | 
| 177 182 | 
             
                  :watch2_app_container => 'app',
         | 
| @@ -350,7 +350,7 @@ module Xcodeproj | |
| 350 350 | 
             
                      unless object = project.objects_by_uuid[uuid] || project.new_from_plist(uuid, objects_by_uuid_plist)
         | 
| 351 351 | 
             
                        UI.warn "`#{inspect}` attempted to initialize an object with " \
         | 
| 352 352 | 
             
                          "an unknown UUID. `#{uuid}` for attribute: " \
         | 
| 353 | 
            -
                          "`#{attribute.name}`. This can be the result of a merge and | 
| 353 | 
            +
                          "`#{attribute.name}`. This can be the result of a merge and " \
         | 
| 354 354 | 
             
                          'the unknown UUID is being discarded.'
         | 
| 355 355 | 
             
                      end
         | 
| 356 356 | 
             
                      object
         | 
| @@ -6,6 +6,10 @@ module Xcodeproj | |
| 6 6 | 
             
                  # {PBXProject} or a {PBXNativeTarget}.
         | 
| 7 7 | 
             
                  #
         | 
| 8 8 | 
             
                  class XCBuildConfiguration < AbstractObject
         | 
| 9 | 
            +
                    MUTUAL_RECURSION_SENTINEL = 'xcodeproj.mutual_recursion_sentinel'.freeze
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    private_constant :MUTUAL_RECURSION_SENTINEL
         | 
| 12 | 
            +
             | 
| 9 13 | 
             
                    # @!group Attributes
         | 
| 10 14 |  | 
| 11 15 | 
             
                    # @return [String] the name of the Target.
         | 
| @@ -79,16 +83,19 @@ module Xcodeproj | |
| 79 83 | 
             
                    #        the key of the build setting.
         | 
| 80 84 | 
             
                    #
         | 
| 81 85 | 
             
                    # @param [PBXNativeTarget] root_target
         | 
| 82 | 
            -
                    #        use this to resolve complete recursion between project and targets
         | 
| 86 | 
            +
                    #        use this to resolve complete recursion between project and targets.
         | 
| 87 | 
            +
                    #
         | 
| 88 | 
            +
                    # @param [String] previous_key
         | 
| 89 | 
            +
                    #        use this to resolve complete recursion between different build settings.
         | 
| 83 90 | 
             
                    #
         | 
| 84 91 | 
             
                    # @return [String] The value of the build setting
         | 
| 85 92 | 
             
                    #
         | 
| 86 | 
            -
                    def resolve_build_setting(key, root_target = nil)
         | 
| 93 | 
            +
                    def resolve_build_setting(key, root_target = nil, previous_key = nil)
         | 
| 87 94 | 
             
                      setting = build_settings[key]
         | 
| 88 | 
            -
                      setting = resolve_variable_substitution(key, setting, root_target)
         | 
| 95 | 
            +
                      setting = resolve_variable_substitution(key, setting, root_target, previous_key)
         | 
| 89 96 |  | 
| 90 97 | 
             
                      config_setting = config[key]
         | 
| 91 | 
            -
                      config_setting = resolve_variable_substitution(key, config_setting, root_target)
         | 
| 98 | 
            +
                      config_setting = resolve_variable_substitution(key, config_setting, root_target, previous_key)
         | 
| 92 99 |  | 
| 93 100 | 
             
                      project_setting = project.build_configuration_list[name]
         | 
| 94 101 | 
             
                      project_setting = nil if equal?(project_setting)
         | 
| @@ -99,6 +106,12 @@ module Xcodeproj | |
| 99 106 | 
             
                        'SRCROOT' => project.project_dir.to_s,
         | 
| 100 107 | 
             
                      }
         | 
| 101 108 |  | 
| 109 | 
            +
                      # if previous_key is nil, it means that we're back at the first call, so we can replace our sentinel string
         | 
| 110 | 
            +
                      # used to prevent recursion with nil
         | 
| 111 | 
            +
                      if previous_key.nil? && setting == MUTUAL_RECURSION_SENTINEL
         | 
| 112 | 
            +
                        setting = nil
         | 
| 113 | 
            +
                      end
         | 
| 114 | 
            +
             | 
| 102 115 | 
             
                      [defaults[key], project_setting, config_setting, setting, ENV[key]].compact.reduce(nil) do |inherited, value|
         | 
| 103 116 | 
             
                        expand_build_setting(value, inherited)
         | 
| 104 117 | 
             
                      end
         | 
| @@ -142,7 +155,7 @@ module Xcodeproj | |
| 142 155 | 
             
                      build_setting_value.flat_map { |value| Constants::INHERITED_KEYWORDS.include?(value) ? inherited : value }
         | 
| 143 156 | 
             
                    end
         | 
| 144 157 |  | 
| 145 | 
            -
                    def resolve_variable_substitution(key, value, root_target)
         | 
| 158 | 
            +
                    def resolve_variable_substitution(key, value, root_target, previous_key = nil)
         | 
| 146 159 | 
             
                      case value
         | 
| 147 160 | 
             
                      when Array
         | 
| 148 161 | 
             
                        return value.map { |v| resolve_variable_substitution(key, v, root_target) }
         | 
| @@ -168,9 +181,20 @@ module Xcodeproj | |
| 168 181 | 
             
                      when key
         | 
| 169 182 | 
             
                        # to prevent infinite recursion
         | 
| 170 183 | 
             
                        nil
         | 
| 184 | 
            +
                      when previous_key
         | 
| 185 | 
            +
                        # to prevent infinite recursion; we don't return nil as for the self recursion because it needs to be
         | 
| 186 | 
            +
                        # distinguished outside this method too
         | 
| 187 | 
            +
                        MUTUAL_RECURSION_SENTINEL
         | 
| 171 188 | 
             
                      else
         | 
| 172 189 | 
             
                        configuration_to_resolve_against = root_target ? root_target.build_configuration_list[name] : self
         | 
| 173 | 
            -
                        resolved_value_for_variable = configuration_to_resolve_against.resolve_build_setting(variable, root_target) || ''
         | 
| 190 | 
            +
                        resolved_value_for_variable = configuration_to_resolve_against.resolve_build_setting(variable, root_target, key) || ''
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                        # we use this sentinel string instead of nil, because, otherwise, it would be swallowed by the default empty
         | 
| 193 | 
            +
                        # string from the preceding line, and we want to distinguish between mutual recursion and other cases
         | 
| 194 | 
            +
                        if resolved_value_for_variable == MUTUAL_RECURSION_SENTINEL
         | 
| 195 | 
            +
                          return MUTUAL_RECURSION_SENTINEL
         | 
| 196 | 
            +
                        end
         | 
| 197 | 
            +
             | 
| 174 198 | 
             
                        value = value.gsub(variable_reference, resolved_value_for_variable)
         | 
| 175 199 | 
             
                        resolve_variable_substitution(key, value, root_target)
         | 
| 176 200 | 
             
                      end
         | 
| @@ -191,14 +215,15 @@ module Xcodeproj | |
| 191 215 |  | 
| 192 216 | 
             
                      settings.keys.each do |key|
         | 
| 193 217 | 
             
                        next unless value = settings[key]
         | 
| 218 | 
            +
                        stripped_key = key.sub(/\[[^\]]+\]$/, '')
         | 
| 194 219 | 
             
                        case value
         | 
| 195 220 | 
             
                        when String
         | 
| 196 | 
            -
                          next unless array_settings.include?( | 
| 221 | 
            +
                          next unless array_settings.include?(stripped_key)
         | 
| 197 222 | 
             
                          array_value = split_build_setting_array_to_string(value)
         | 
| 198 223 | 
             
                          next unless array_value.size > 1
         | 
| 199 224 | 
             
                          settings[key] = array_value
         | 
| 200 225 | 
             
                        when Array
         | 
| 201 | 
            -
                          next if value.size > 1 && array_settings.include?( | 
| 226 | 
            +
                          next if value.size > 1 && array_settings.include?(stripped_key)
         | 
| 202 227 | 
             
                          settings[key] = value.join(' ')
         | 
| 203 228 | 
             
                        end
         | 
| 204 229 | 
             
                      end
         | 
| @@ -301,6 +301,10 @@ module Xcodeproj | |
| 301 301 | 
             
                    #
         | 
| 302 302 | 
             
                    attribute :show_env_vars_in_log, String
         | 
| 303 303 |  | 
| 304 | 
            +
                    # @return [String] the discovered dependency file to use.
         | 
| 305 | 
            +
                    #
         | 
| 306 | 
            +
                    attribute :dependency_file, String
         | 
| 307 | 
            +
             | 
| 304 308 | 
             
                    # @return [Hash{String => Hash}] A hash suitable to display the build
         | 
| 305 309 | 
             
                    #         phase to the user.
         | 
| 306 310 | 
             
                    #
         | 
| @@ -56,6 +56,13 @@ module Xcodeproj | |
| 56 56 | 
             
                    #
         | 
| 57 57 | 
             
                    attribute :output_files_compiler_flags, Array
         | 
| 58 58 |  | 
| 59 | 
            +
                    # @return [String] whether the rule should be run once per architecture.
         | 
| 60 | 
            +
                    #
         | 
| 61 | 
            +
                    # @example
         | 
| 62 | 
            +
                    #   `0`.
         | 
| 63 | 
            +
                    #
         | 
| 64 | 
            +
                    attribute :run_once_per_architecture, String
         | 
| 65 | 
            +
             | 
| 59 66 | 
             
                    # @return [String] the content of the script to use for the build rule.
         | 
| 60 67 | 
             
                    #
         | 
| 61 68 | 
             
                    # @note   This attribute is present if the #{#compiler_spec} is
         | 
| @@ -52,7 +52,9 @@ module Xcodeproj | |
| 52 52 | 
             
                          prefix = 'lib'
         | 
| 53 53 | 
             
                        end
         | 
| 54 54 | 
             
                        extension = Constants::PRODUCT_UTI_EXTENSIONS[product_type]
         | 
| 55 | 
            -
                         | 
| 55 | 
            +
                        path = "#{prefix}#{target_name}"
         | 
| 56 | 
            +
                        path += ".#{extension}" if extension
         | 
| 57 | 
            +
                        ref = new_reference(group, path, :built_products)
         | 
| 56 58 | 
             
                        ref.include_in_index = '0'
         | 
| 57 59 | 
             
                        ref.set_explicit_file_type
         | 
| 58 60 | 
             
                        ref
         | 
| @@ -148,7 +148,7 @@ module Xcodeproj | |
| 148 148 | 
             
                        when '<group>'
         | 
| 149 149 | 
             
                          object_parent = parent(object)
         | 
| 150 150 | 
             
                          if object_parent.isa == 'PBXProject'.freeze
         | 
| 151 | 
            -
                            object.project.project_dir
         | 
| 151 | 
            +
                            object.project.project_dir + object.project.root_object.project_dir_path
         | 
| 152 152 | 
             
                          else
         | 
| 153 153 | 
             
                            real_path(object_parent)
         | 
| 154 154 | 
             
                          end
         | 
| @@ -42,7 +42,7 @@ module Xcodeproj | |
| 42 42 | 
             
                    #        the key of the build setting.
         | 
| 43 43 | 
             
                    #
         | 
| 44 44 | 
             
                    # @param [Bool] resolve_against_xcconfig
         | 
| 45 | 
            -
                    #         | 
| 45 | 
            +
                    #        whether the resolved setting should take in consideration any
         | 
| 46 46 | 
             
                    #        configuration file present.
         | 
| 47 47 | 
             
                    #
         | 
| 48 48 | 
             
                    # @return [Hash{String => String}] The value of the build setting
         | 
| @@ -74,6 +74,10 @@ module Xcodeproj | |
| 74 74 | 
             
                    # @param [String] key
         | 
| 75 75 | 
             
                    #        the key of the build setting.
         | 
| 76 76 | 
             
                    #
         | 
| 77 | 
            +
                    # @param [Boolean] resolve_against_xcconfig
         | 
| 78 | 
            +
                    #        whether the resolved setting should take in consideration any
         | 
| 79 | 
            +
                    #        configuration file present.
         | 
| 80 | 
            +
                    #
         | 
| 77 81 | 
             
                    # @raise  If the build setting has multiple values.
         | 
| 78 82 | 
             
                    #
         | 
| 79 83 | 
             
                    # @note   As it is common not to have a setting with no value for
         | 
| @@ -83,8 +87,8 @@ module Xcodeproj | |
| 83 87 | 
             
                    #
         | 
| 84 88 | 
             
                    # @return [String] The value of the build setting.
         | 
| 85 89 | 
             
                    #
         | 
| 86 | 
            -
                    def common_resolved_build_setting(key)
         | 
| 87 | 
            -
                      values = resolved_build_setting(key).values.compact.uniq
         | 
| 90 | 
            +
                    def common_resolved_build_setting(key, resolve_against_xcconfig: false)
         | 
| 91 | 
            +
                      values = resolved_build_setting(key, resolve_against_xcconfig).values.compact.uniq
         | 
| 88 92 | 
             
                      if values.count <= 1
         | 
| 89 93 | 
             
                        values.first
         | 
| 90 94 | 
             
                      else
         | 
| @@ -42,7 +42,7 @@ module Xcodeproj | |
| 42 42 |  | 
| 43 43 | 
             
                    # @return [Array<String>] the list of known regions.
         | 
| 44 44 | 
             
                    #
         | 
| 45 | 
            -
                    attribute :known_regions, Array,  | 
| 45 | 
            +
                    attribute :known_regions, Array, %w(en Base)
         | 
| 46 46 |  | 
| 47 47 | 
             
                    # @return [PBXGroup] the main group of the project. The one displayed
         | 
| 48 48 | 
             
                    #         by Xcode in the Project Navigator.
         | 
| @@ -30,6 +30,10 @@ module Xcodeproj | |
| 30 30 | 
             
                    #
         | 
| 31 31 | 
             
                    attribute :platform_filter, String
         | 
| 32 32 |  | 
| 33 | 
            +
                    # @return [String] the product reference for this target dependency.
         | 
| 34 | 
            +
                    #
         | 
| 35 | 
            +
                    attribute :product_ref, String
         | 
| 36 | 
            +
             | 
| 33 37 | 
             
                    public
         | 
| 34 38 |  | 
| 35 39 | 
             
                    # @!group AbstractObject Hooks
         | 
| @@ -69,6 +73,7 @@ module Xcodeproj | |
| 69 73 | 
             
                      hash = {}
         | 
| 70 74 | 
             
                      hash['displayName'] = display_name
         | 
| 71 75 | 
             
                      hash['isa'] = isa
         | 
| 76 | 
            +
                      hash['targetProxy'] = target_proxy.to_tree_hash
         | 
| 72 77 | 
             
                      hash
         | 
| 73 78 | 
             
                    end
         | 
| 74 79 |  | 
| @@ -59,6 +59,20 @@ module Xcodeproj | |
| 59 59 | 
             
                    end
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 |  | 
| 62 | 
            +
                  # @param [Array<BuildAction::Entry>] entries
         | 
| 63 | 
            +
                  #        Sets the list of BuildActionEntry nodes associated with this Build Action.
         | 
| 64 | 
            +
                  #
         | 
| 65 | 
            +
                  def entries=(entries)
         | 
| 66 | 
            +
                    @xml_element.delete_element('BuildActionEntries')
         | 
| 67 | 
            +
                    unless entries.empty?
         | 
| 68 | 
            +
                      entries_element = @xml_element.add_element('BuildActionEntries')
         | 
| 69 | 
            +
                      entries.each do |entry_node|
         | 
| 70 | 
            +
                        entries_element.add_element(entry_node.xml_element)
         | 
| 71 | 
            +
                      end
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                    entries
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 62 76 | 
             
                  # @param [BuildAction::Entry] entry
         | 
| 63 77 | 
             
                  #        The BuildActionEntry to add to the list of targets to build for the various actions
         | 
| 64 78 | 
             
                  #
         | 
| @@ -185,6 +199,13 @@ module Xcodeproj | |
| 185 199 | 
             
                    def add_buildable_reference(ref)
         | 
| 186 200 | 
             
                      @xml_element.add_element(ref.xml_element)
         | 
| 187 201 | 
             
                    end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
                    # @param [BuildableReference] ref
         | 
| 204 | 
            +
                    #         The BuildableReference to remove from the list of targets this entry will build
         | 
| 205 | 
            +
                    #
         | 
| 206 | 
            +
                    def remove_buildable_reference(ref)
         | 
| 207 | 
            +
                      @xml_element.delete_element(ref.xml_element)
         | 
| 208 | 
            +
                    end
         | 
| 188 209 | 
             
                  end
         | 
| 189 210 | 
             
                end
         | 
| 190 211 | 
             
              end
         | 
| @@ -143,6 +143,22 @@ module Xcodeproj | |
| 143 143 | 
             
                    @xml_element.add_element(arguments.xml_element) if arguments
         | 
| 144 144 | 
             
                    arguments
         | 
| 145 145 | 
             
                  end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                  # @return [Array<MacroExpansion>]
         | 
| 148 | 
            +
                  #         The list of MacroExpansion bound with this LaunchAction
         | 
| 149 | 
            +
                  #
         | 
| 150 | 
            +
                  def macro_expansions
         | 
| 151 | 
            +
                    @xml_element.get_elements('MacroExpansion').map do |node|
         | 
| 152 | 
            +
                      MacroExpansion.new(node)
         | 
| 153 | 
            +
                    end
         | 
| 154 | 
            +
                  end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                  # @param [MacroExpansion] macro_expansion
         | 
| 157 | 
            +
                  #        Add a MacroExpansion to this LaunchAction
         | 
| 158 | 
            +
                  #
         | 
| 159 | 
            +
                  def add_macro_expansion(macro_expansion)
         | 
| 160 | 
            +
                    @xml_element.add_element(macro_expansion.xml_element)
         | 
| 161 | 
            +
                  end
         | 
| 146 162 | 
             
                end
         | 
| 147 163 | 
             
              end
         | 
| 148 164 | 
             
            end
         | 
| @@ -58,7 +58,7 @@ module Xcodeproj | |
| 58 58 | 
             
                    string_to_bool(@xml_element.attributes['codeCoverageEnabled'])
         | 
| 59 59 | 
             
                  end
         | 
| 60 60 |  | 
| 61 | 
            -
                  # @ | 
| 61 | 
            +
                  # @param [Bool] flag
         | 
| 62 62 | 
             
                  #         Set whether Clang Code Coverage is enabled ('Gather coverage data' turned ON)
         | 
| 63 63 | 
             
                  #
         | 
| 64 64 | 
             
                  def code_coverage_enabled=(flag)
         | 
| @@ -76,6 +76,18 @@ module Xcodeproj | |
| 76 76 | 
             
                    end
         | 
| 77 77 | 
             
                  end
         | 
| 78 78 |  | 
| 79 | 
            +
                  # @param [Array<TestableReference>] testables
         | 
| 80 | 
            +
                  #         Sets the list of TestableReference (test bundles) associated with this Test Action
         | 
| 81 | 
            +
                  #
         | 
| 82 | 
            +
                  def testables=(testables)
         | 
| 83 | 
            +
                    @xml_element.delete_element('Testables')
         | 
| 84 | 
            +
                    testables_element = @xml_element.add_element('Testables')
         | 
| 85 | 
            +
                    testables.each do |testable|
         | 
| 86 | 
            +
                      testables_element.add_element(testable.xml_element)
         | 
| 87 | 
            +
                    end
         | 
| 88 | 
            +
                    testables
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 79 91 | 
             
                  # @param [TestableReference] testable
         | 
| 80 92 | 
             
                  #        Add a TestableReference (test bundle) to this Test Action
         | 
| 81 93 | 
             
                  #
         | 
| @@ -219,6 +231,13 @@ module Xcodeproj | |
| 219 231 | 
             
                      @xml_element.add_element(ref.xml_element)
         | 
| 220 232 | 
             
                    end
         | 
| 221 233 |  | 
| 234 | 
            +
                    # @param [BuildableReference] ref
         | 
| 235 | 
            +
                    #         The BuildableReference to remove from the list of targets this entry will build
         | 
| 236 | 
            +
                    #
         | 
| 237 | 
            +
                    def remove_buildable_reference(ref)
         | 
| 238 | 
            +
                      @xml_element.delete_element(ref.xml_element)
         | 
| 239 | 
            +
                    end
         | 
| 240 | 
            +
             | 
| 222 241 | 
             
                    # @return [Array<Test>]
         | 
| 223 242 | 
             
                    #         The list of SkippedTest this action will skip.
         | 
| 224 243 | 
             
                    #
         | 
    
        data/lib/xcodeproj/workspace.rb
    CHANGED
    
    | @@ -107,8 +107,9 @@ module Xcodeproj | |
| 107 107 | 
             
                  else
         | 
| 108 108 | 
             
                    raise ArgumentError, "Input to the << operator must be a file path or FileReference, got #{path_or_reference.inspect}"
         | 
| 109 109 | 
             
                  end
         | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 110 | 
            +
                  unless file_references.any? { |ref| project_file_reference.eql? ref }
         | 
| 111 | 
            +
                    @document.root.add_element(project_file_reference.to_node)
         | 
| 112 | 
            +
                  end
         | 
| 112 113 | 
             
                  load_schemes_from_project File.expand_path(projpath || project_file_reference.path)
         | 
| 113 114 | 
             
                end
         | 
| 114 115 |  | 
    
        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.17.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:  | 
| 11 | 
            +
            date: 2020-06-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: atomos
         | 
| @@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 183 183 | 
             
                - !ruby/object:Gem::Version
         | 
| 184 184 | 
             
                  version: '0'
         | 
| 185 185 | 
             
            requirements: []
         | 
| 186 | 
            -
            rubygems_version: 3.0. | 
| 186 | 
            +
            rubygems_version: 3.0.4
         | 
| 187 187 | 
             
            signing_key: 
         | 
| 188 188 | 
             
            specification_version: 3
         | 
| 189 189 | 
             
            summary: Create and modify Xcode projects from Ruby.
         |