cocoapods 1.9.0.beta.2 → 1.9.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af00d9cda4270d38359bb91efda3e7eeadfa605dea256f99070cf72368bf4090
4
- data.tar.gz: cb5b627c35b676ea0a587ca0abf64e13ae33957d8406e228633ecae22550412f
3
+ metadata.gz: fa7878249570ad66ff3930c61f35b24bc7a3a5447425f64711363d0bf1081bdc
4
+ data.tar.gz: 0f7bf9791f2907f913c57d73c55a6d9a72fb25f765d53f1743c9111c8cc3273c
5
5
  SHA512:
6
- metadata.gz: ad1be879990e2150bf9d6f7dcfbba749ce76b3fde68c212f0e0de5751e3a3ebdd55a51d627bac1f5efbdf008580e8440978e63ac9a8bf30022fbd4bc87ce531a
7
- data.tar.gz: f545c4630dd73698f9d95664a1ee5acfef3cf83972b012696b0468b18cc5fda2b3596d2bbe1a34d0b77b4cbba0e6602496e933dd9adc14e80de566a6fc2a5ddc
6
+ metadata.gz: fe71aa5cf13d5c88f007ee5946d64deb9b1114742b244af9a1528cc80dd0649f2de012d80ac24a63c9a2195d4c86ab79a29383bab545db68167c6da76d37ff9b
7
+ data.tar.gz: 20442eda6adb03829c5496623a4fa7e63f0ef36dff4b7bff3fa55e85e553c6c680765cadb46764db71b7b60280a35e16e92eea915215c5a3a557a8f2d274d5b2
@@ -4,6 +4,100 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
4
4
 
5
5
  To install release candidates run `[sudo] gem install cocoapods --pre`
6
6
 
7
+ ## 1.9.3 (2020-05-29)
8
+
9
+ ##### Enhancements
10
+
11
+ * None.
12
+
13
+ ##### Bug Fixes
14
+
15
+ * None.
16
+
17
+
18
+ ## 1.9.2 (2020-05-22)
19
+
20
+ ##### Enhancements
21
+
22
+ * None.
23
+
24
+ ##### Bug Fixes
25
+
26
+ * None.
27
+
28
+
29
+ ## 1.9.1 (2020-03-09)
30
+
31
+ ##### Enhancements
32
+
33
+ * None.
34
+
35
+ ##### Bug Fixes
36
+
37
+ * Apply correct `SYSTEM_FRAMEWORK_SEARCH_PATHS` for `XCTUnwrap` fix.
38
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
39
+ [#9579](https://github.com/CocoaPods/CocoaPods/pull/9579)
40
+
41
+ * Fix an issue that caused a build failure with vendored XCFrameworks on macOS
42
+ [Eric Amorde](https://github.com/amorde)
43
+ [#9572](https://github.com/CocoaPods/CocoaPods/issues/9572)
44
+
45
+ * Fix an issue that prevented the correct XCFramework slice from being selected for watchOS extensions
46
+ [Eric Amorde](https://github.com/amorde)
47
+ [#9569](https://github.com/CocoaPods/CocoaPods/issues/9569)
48
+
49
+
50
+ ## 1.9.0 (2020-02-25)
51
+
52
+ ##### Enhancements
53
+
54
+ * None.
55
+
56
+ ##### Bug Fixes
57
+
58
+ * Also apply Xcode 11 `XCTUnwrap` fix to library and framework targets that weakly link `XCTest`.
59
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
60
+ [#9518](https://github.com/CocoaPods/CocoaPods/pull/9518)
61
+
62
+ * Fix dSYM handling for XCFrameworks.
63
+ [Eric Amorde](https://github.com/amorde)
64
+ [#9530](https://github.com/CocoaPods/CocoaPods/issues/9530)
65
+
66
+
67
+ ## 1.9.0.beta.3 (2020-02-04)
68
+
69
+ ##### Enhancements
70
+
71
+ * PathList optimizations related to file system reads.
72
+ [manuyavuz](https://github.com/manuyavuz)
73
+ [#9428](https://github.com/CocoaPods/CocoaPods/pull/9428)
74
+
75
+ ##### Bug Fixes
76
+
77
+ * Apply Xcode 11 `XCTUnwrap` fix to library and framework targets.
78
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
79
+ [#9500](https://github.com/CocoaPods/CocoaPods/pull/9500)
80
+
81
+ * Fix resources script when building a project from a symlink.
82
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
83
+ [#9423](https://github.com/CocoaPods/CocoaPods/issues/9423)
84
+
85
+ * Fix `pod install` crash on projects with atypical configuration names.
86
+ [Paul Beusterien](https://github.com/paulb777)
87
+ [#9465](https://github.com/CocoaPods/CocoaPods/pull/9465)
88
+
89
+ * Fix an issue that caused iOS archives to be invalid when including a vendored XCFramework
90
+ [Eric Amorde](https://github.com/amorde)
91
+ [#9458](https://github.com/CocoaPods/CocoaPods/issues/9458)
92
+
93
+ * Fix a bug where an incremental install missed library resources.
94
+ [Igor Makarov](https://github.com/igor-makarov)
95
+ [#9431](https://github.com/CocoaPods/CocoaPods/pull/9431)
96
+
97
+ * Fix an issue that caused an incorrect warning to be emitted for CLI targets with static libraries
98
+ [Eric Amorde](https://github.com/amorde)
99
+ [#9498](https://github.com/CocoaPods/CocoaPods/issues/9498)
100
+
7
101
  ## 1.9.0.beta.2 (2019-12-17)
8
102
 
9
103
  ##### Enhancements
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  # The version of the CocoaPods command line tool.
3
3
  #
4
- VERSION = '1.9.0.beta.2'.freeze unless defined? Pod::VERSION
4
+ VERSION = '1.9.3'.freeze unless defined? Pod::VERSION
5
5
  end
@@ -216,7 +216,7 @@ EOS
216
216
  if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
217
217
  then
218
218
  # Find all other xcassets (this unfortunately includes those of path pods and other targets).
219
- OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
219
+ OTHER_XCASSETS=$(find -L "$PWD" -iname "*.xcassets" -type d)
220
220
  while read line; do
221
221
  if [[ $line != "${PODS_ROOT}*" ]]; then
222
222
  XCASSET_FILES+=("$line")
@@ -129,27 +129,29 @@ module Pod
129
129
  # Copies and strips a vendored dSYM
130
130
  install_dsym() {
131
131
  local source="$1"
132
+ warn_missing_arch=${2:-true}
132
133
  if [ -r "$source" ]; then
133
- # Copy the dSYM into a the targets temp dir.
134
+ # Copy the dSYM into the targets temp dir.
134
135
  echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" --filter \\"- Headers\\" --filter \\"- PrivateHeaders\\" --filter \\"- Modules\\" \\"${source}\\" \\"${DERIVED_FILES_DIR}\\""
135
136
  rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
136
137
 
137
138
  local basename
138
- basename="$(basename -s .framework.dSYM "$source")"
139
- binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}"
139
+ basename="$(basename -s .dSYM "$source")"
140
+ binary_name="$(ls "$source/Contents/Resources/DWARF")"
141
+ binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
140
142
 
141
143
  # Strip invalid architectures so "fat" simulator / device frameworks work on device
142
144
  if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
143
- strip_invalid_archs "$binary"
145
+ strip_invalid_archs "$binary" "$warn_missing_arch"
144
146
  fi
145
147
 
146
148
  if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
147
149
  # Move the stripped file into its final destination.
148
150
  echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \\"- CVS/\\" --filter \\"- .svn/\\" --filter \\"- .git/\\" --filter \\"- .hg/\\" --filter \\"- Headers\\" --filter \\"- PrivateHeaders\\" --filter \\"- Modules\\" \\"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\\" \\"${DWARF_DSYM_FOLDER_PATH}\\""
149
- rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
151
+ rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
150
152
  else
151
153
  # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
152
- touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
154
+ touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
153
155
  fi
154
156
  fi
155
157
  }
@@ -180,13 +182,16 @@ module Pod
180
182
  # Strip invalid architectures
181
183
  strip_invalid_archs() {
182
184
  binary="$1"
185
+ warn_missing_arch=${2:-true}
183
186
  # Get architectures for current target binary
184
187
  binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
185
188
  # Intersect them with the architectures we are building for
186
189
  intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\\n' | sort | uniq -d)"
187
190
  # If there are no archs supported by this binary then warn the user
188
191
  if [[ -z "$intersected_archs" ]]; then
189
- echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
192
+ if [[ "$warn_missing_arch" == "true" ]]; then
193
+ echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
194
+ fi
190
195
  STRIP_BINARY_RETVAL=0
191
196
  return
192
197
  fi
@@ -212,7 +217,8 @@ module Pod
212
217
  install_framework "$artifact"
213
218
  ;;
214
219
  *.dSYM)
215
- install_dsym "$artifact"
220
+ # Suppress arch warnings since XCFrameworks will include many dSYM files
221
+ install_dsym "$artifact" "false"
216
222
  ;;
217
223
  *.bcsymbolmap)
218
224
  install_bcsymbolmap "$artifact"
@@ -259,6 +265,18 @@ module Pod
259
265
  SH
260
266
  script
261
267
  end
268
+
269
+ # @param [Xcode::FrameworkPaths] framework_path
270
+ # the framework path containing the dSYM
271
+ #
272
+ # @return [String, Nil] the name of the dSYM binary, if found
273
+ #
274
+ def dsym_binary_name(framework_path)
275
+ return nil if framework_path.dsym_path.nil?
276
+ if (path = Pathname.glob(framework_path.dsym_path.join('Contents/Resources/DWARF', '**/*')).first)
277
+ File.basename(path)
278
+ end
279
+ end
262
280
  end
263
281
  end
264
282
  end
@@ -117,7 +117,7 @@ module Pod
117
117
  fi
118
118
 
119
119
  local record_artifact=${2:-true}
120
- local destination="${TARGET_BUILD_DIR}"
120
+ local destination="${CONFIGURATION_BUILD_DIR}"
121
121
 
122
122
  if [ -L "${source}" ]; then
123
123
  echo "Symlinked..."
@@ -136,18 +136,23 @@ module Pod
136
136
 
137
137
  install_xcframework() {
138
138
  local basepath="$1"
139
- local embed="$2"
139
+ local dsym_folder="$2"
140
+ local embed="$3"
140
141
  shift
141
142
  local paths=("$@")
142
143
 
143
144
  # Locate the correct slice of the .xcframework for the current architectures
144
145
  local target_path=""
145
146
  local target_arch="$ARCHS"
147
+
148
+ # Replace spaces in compound architectures with _ to match slice format
149
+ target_arch=${target_arch//\ /_}
150
+
146
151
  local target_variant=""
147
152
  if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
148
153
  target_variant="simulator"
149
154
  fi
150
- if [[ "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
155
+ if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
151
156
  target_variant="maccatalyst"
152
157
  fi
153
158
  for i in ${!paths[@]}; do
@@ -165,6 +170,17 @@ module Pod
165
170
  fi
166
171
 
167
172
  install_framework "$basepath/$target_path" "$embed"
173
+
174
+ if [[ -z "$dsym_folder" || ! -d "$dsym_folder" ]]; then
175
+ return
176
+ fi
177
+
178
+ dsyms=($(ls "$dsym_folder"))
179
+
180
+ local target_dsym=""
181
+ for i in ${!dsyms[@]}; do
182
+ install_artifact "$dsym_folder/${dsyms[$i]}" "$CONFIGURATION_BUILD_DIR" "true"
183
+ done
168
184
  }
169
185
 
170
186
  SH
@@ -186,12 +202,6 @@ module Pod
186
202
  args = install_xcframework_args(xcframework.path, static_slices, true)
187
203
  contents_by_config[config] << %( install_xcframework #{args}\n)
188
204
  end
189
-
190
- dsyms = PrepareArtifactsScript.dsym_paths(xcframework.path)
191
- dsyms.each do |path|
192
- source = shell_escape("${PODS_ROOT}/#{path.relative_path_from(sandbox_root)}")
193
- contents_by_config[config] << %( install_artifact #{source} "${TARGET_BUILD_DIR}" "true"\n)
194
- end
195
205
  end
196
206
  end
197
207
 
@@ -215,6 +225,12 @@ module Pod
215
225
 
216
226
  def install_xcframework_args(root, slices, static)
217
227
  args = [shell_escape("${PODS_ROOT}/#{root.relative_path_from(sandbox_root)}")]
228
+ dsym_folder_arg = if (dsym_folder = PrepareArtifactsScript.dsym_folder(root))
229
+ shell_escape("${PODS_ROOT}/#{dsym_folder.relative_path_from(sandbox_root)}")
230
+ else
231
+ '""'
232
+ end
233
+ args << dsym_folder_arg
218
234
  embed = static ? 'false' : 'true'
219
235
  args << shell_escape(embed)
220
236
  slices.each do |slice|
@@ -229,14 +245,11 @@ module Pod
229
245
  #
230
246
  # @return [Array<Pathname>] all found .dSYM paths
231
247
  #
232
- def dsym_paths(xcframework_path)
248
+ def dsym_folder(xcframework_path)
233
249
  basename = File.basename(xcframework_path, '.xcframework')
234
250
  dsym_basename = basename + '.dSYMs'
235
251
  path = xcframework_path.dirname + dsym_basename
236
- return [] unless File.directory?(path)
237
-
238
- pattern = path + '*.dSYM'
239
- Dir.glob(pattern).map { |s| Pathname.new(s) }
252
+ Pathname.new(path) if File.directory?(path)
240
253
  end
241
254
  end
242
255
  end
@@ -334,15 +334,16 @@ module Pod
334
334
  #
335
335
  def analyze_host_targets_in_podfile(aggregate_targets, embedded_aggregate_targets)
336
336
  target_definitions_by_uuid = {}
337
- cli_host_with_frameworks = []
337
+ cli_host_with_dynamic_linkage = []
338
338
  cli_product_type = 'com.apple.product-type.tool'
339
339
  # Collect aggregate target definitions by uuid to later lookup host target
340
340
  # definitions and verify their compatibility with their embedded targets
341
341
  aggregate_targets.each do |target|
342
342
  target.user_targets.each do |user_target|
343
- target_definitions_by_uuid[user_target.uuid] = target.target_definition
344
- if user_target.product_type == cli_product_type
345
- cli_host_with_frameworks << user_target
343
+ target_definition = target.target_definition
344
+ target_definitions_by_uuid[user_target.uuid] = target_definition
345
+ if user_target.product_type == cli_product_type && target_definition.build_type.linkage == :dynamic
346
+ cli_host_with_dynamic_linkage << user_target
346
347
  end
347
348
  end
348
349
  end
@@ -368,10 +369,10 @@ module Pod
368
369
  end
369
370
  end
370
371
 
371
- unless cli_host_with_frameworks.empty?
372
- UI.warn "The Podfile contains command line tool target(s) (#{cli_host_with_frameworks.map(&:name).to_sentence}) which are attempting to integrate dynamic frameworks." \
372
+ unless cli_host_with_dynamic_linkage.empty?
373
+ UI.warn "The Podfile contains command line tool target(s) (#{cli_host_with_dynamic_linkage.map(&:name).to_sentence}) which are attempting to integrate dynamic frameworks or libraries." \
373
374
  "\n" \
374
- 'This may not behave as expected, because command line tools are usually distributed as a single binary and cannot contain their own dynamic frameworks.'
375
+ 'This may not behave as expected, because command line tools are usually distributed as a single binary and cannot contain their own dynamic dependencies.'
375
376
  end
376
377
 
377
378
  unless embedded_targets_missing_hosts.empty?
@@ -51,10 +51,13 @@ module Pod
51
51
  return :project if (other.key_hash.keys - key_hash.keys).any?
52
52
  return :project if other.key_hash['CHECKSUM'] != key_hash['CHECKSUM']
53
53
  return :project if other.key_hash['SPECS'] != key_hash['SPECS']
54
- return :project if other.key_hash['FILES'] != key_hash['FILES']
55
54
  return :project if other.key_hash['PROJECT_NAME'] != key_hash['PROJECT_NAME']
56
55
  end
57
56
 
57
+ this_files = key_hash['FILES']
58
+ other_files = other.key_hash['FILES']
59
+ return :project if this_files != other_files
60
+
58
61
  this_build_settings = key_hash['BUILD_SETTINGS_CHECKSUM']
59
62
  other_build_settings = other.key_hash['BUILD_SETTINGS_CHECKSUM']
60
63
  return :project if this_build_settings != other_build_settings
@@ -155,7 +158,14 @@ module Pod
155
158
  build_settings[configuration] = Digest::MD5.hexdigest(aggregate_target.build_settings(configuration).xcconfig.to_s)
156
159
  end
157
160
 
158
- TargetCacheKey.new(sandbox, :aggregate, 'BUILD_SETTINGS_CHECKSUM' => build_settings)
161
+ contents = {
162
+ 'BUILD_SETTINGS_CHECKSUM' => build_settings,
163
+ }
164
+ if aggregate_target.includes_resources?
165
+ relative_file_paths = aggregate_target.resource_paths_by_config.values.flatten.uniq
166
+ contents['FILES'] = relative_file_paths.sort_by(&:downcase)
167
+ end
168
+ TargetCacheKey.new(sandbox, :aggregate, contents)
159
169
  end
160
170
  end
161
171
  end
@@ -65,7 +65,10 @@ module Pod
65
65
  # @return [void]
66
66
  #
67
67
  def refresh_file_accessors
68
- file_accessors.map(&:path_list).uniq.each(&:read_file_system)
68
+ file_accessors.reject do |file_accessor|
69
+ pod_name = file_accessor.spec.name
70
+ sandbox.local?(pod_name)
71
+ end.map(&:path_list).uniq.each(&:read_file_system)
69
72
  end
70
73
 
71
74
  # Prepares the main groups to which all files will be added for the respective target
@@ -163,8 +163,10 @@ module Pod
163
163
  def remove_pod_target_xcconfig_overrides_from_target(build_settings_by_config, native_target)
164
164
  native_target.build_configurations.each do |configuration|
165
165
  build_settings = build_settings_by_config[target.user_build_configurations[configuration.name]]
166
- build_settings.merged_pod_target_xcconfigs.each_key do |setting|
167
- configuration.build_settings.delete(setting)
166
+ unless build_settings.nil?
167
+ build_settings.merged_pod_target_xcconfigs.each_key do |setting|
168
+ configuration.build_settings.delete(setting)
169
+ end
168
170
  end
169
171
  end
170
172
  end
@@ -51,12 +51,15 @@ module Pod
51
51
  unless root.exist?
52
52
  raise Informative, "Attempt to read non existent folder `#{root}`."
53
53
  end
54
-
55
54
  dirs = []
56
55
  files = []
57
56
  root_length = root.cleanpath.to_s.length + File::SEPARATOR.length
58
- Find.find(root.to_s) do |f|
57
+ escaped_root = escape_path_for_glob(root)
58
+ Dir.glob(escaped_root + '**/*', File::FNM_DOTMATCH).each do |f|
59
59
  directory = File.directory?(f)
60
+ # Ignore `.` and `..` directories
61
+ next if directory && f =~ /\.\.?$/
62
+
60
63
  f = f.slice(root_length, f.length - root_length)
61
64
  next if f.nil?
62
65
 
@@ -214,6 +217,25 @@ module Pod
214
217
  end
215
218
  end
216
219
 
220
+ # Escapes the glob metacharacters from a given path so it can used in
221
+ # Dir#glob and similar methods.
222
+ #
223
+ # @note See CocoaPods/CocoaPods#862.
224
+ #
225
+ # @param [String, Pathname] path
226
+ # The path to escape.
227
+ #
228
+ # @return [Pathname] The escaped path.
229
+ #
230
+ def escape_path_for_glob(path)
231
+ result = path.to_s
232
+ characters_to_escape = ['[', ']', '{', '}', '?', '*']
233
+ characters_to_escape.each do |character|
234
+ result.gsub!(character, "\\#{character}")
235
+ end
236
+ Pathname.new(result)
237
+ end
238
+
217
239
  #-----------------------------------------------------------------------#
218
240
  end
219
241
  end
@@ -492,9 +492,15 @@ module Pod
492
492
  attr_reader :test_xcconfig
493
493
  alias test_xcconfig? test_xcconfig
494
494
 
495
+ # @return [Boolean]
496
+ # whether settings are being generated for an application bundle
497
+ #
495
498
  attr_reader :app_xcconfig
496
499
  alias app_xcconfig? app_xcconfig
497
500
 
501
+ # @return [Boolean]
502
+ # whether settings are being generated for an library bundle
503
+ #
498
504
  attr_reader :library_xcconfig
499
505
  alias library_xcconfig? library_xcconfig
500
506
 
@@ -683,6 +689,12 @@ module Pod
683
689
  file_accessors.flat_map(&:vendored_xcframeworks).map { |path| Xcode::XCFramework.new(path) }
684
690
  end
685
691
 
692
+ # @return [Array<String>]
693
+ define_build_settings_method :system_framework_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
694
+ return ['$(PLATFORM_DIR)/Developer/Library/Frameworks'] if should_apply_xctunwrap_fix?
695
+ []
696
+ end
697
+
686
698
  #-------------------------------------------------------------------------#
687
699
 
688
700
  # @!group Libraries
@@ -737,16 +749,18 @@ module Pod
737
749
 
738
750
  # @return [Array<String>]
739
751
  define_build_settings_method :library_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
740
- return [] if library_xcconfig? && target.build_as_static?
752
+ library_search_paths = should_apply_xctunwrap_fix? ? ['$(PLATFORM_DIR)/Developer/usr/lib'] : []
753
+ return library_search_paths if library_xcconfig? && target.build_as_static?
741
754
 
742
- vendored = library_search_paths_to_import.dup
743
- vendored.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].vendored_dynamic_library_search_paths }
755
+ library_search_paths.concat library_search_paths_to_import.dup
756
+ library_search_paths.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].vendored_dynamic_library_search_paths }
744
757
  if library_xcconfig?
745
- vendored.delete(target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE))
758
+ library_search_paths.delete(target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE))
746
759
  else
747
- vendored.concat(dependent_targets.flat_map { |pt| pt.build_settings[@configuration].library_search_paths_to_import })
760
+ library_search_paths.concat(dependent_targets.flat_map { |pt| pt.build_settings[@configuration].library_search_paths_to_import })
748
761
  end
749
- vendored
762
+
763
+ library_search_paths
750
764
  end
751
765
 
752
766
  # @return [Array<String>]
@@ -837,6 +851,7 @@ module Pod
837
851
  define_build_settings_method :swift_include_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
838
852
  paths = dependent_targets.flat_map { |pt| pt.build_settings[@configuration].swift_include_paths_to_import }
839
853
  paths.concat swift_include_paths_to_import if non_library_xcconfig?
854
+ paths.concat ['$(PLATFORM_DIR)/Developer/usr/lib'] if should_apply_xctunwrap_fix?
840
855
  paths
841
856
  end
842
857
 
@@ -966,6 +981,20 @@ module Pod
966
981
  end
967
982
  end
968
983
 
984
+ # Xcode 11 causes an issue with frameworks or libraries before 12.2 deployment target that link or are part of
985
+ # test bundles that use XCTUnwrap. Apple has provided an official work around for this.
986
+ #
987
+ # @see https://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes
988
+ #
989
+ # @return [Boolean] Whether to apply the fix or not.
990
+ #
991
+ define_build_settings_method :should_apply_xctunwrap_fix?, :memoized => true do
992
+ library_xcconfig? &&
993
+ target.platform.name == :ios &&
994
+ Version.new(target.platform.deployment_target) < Version.new('12.2') &&
995
+ (frameworks_to_import + weak_frameworks_to_import).uniq.include?('XCTest')
996
+ end
997
+
969
998
  #-------------------------------------------------------------------------#
970
999
  end
971
1000
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0.beta.2
4
+ version: 1.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-12-17 00:00:00.000000000 Z
14
+ date: 2020-05-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: cocoapods-core
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 1.9.0.beta.2
22
+ version: 1.9.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 1.9.0.beta.2
29
+ version: 1.9.3
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: claide
32
32
  requirement: !ruby/object:Gem::Requirement