cocoapods 1.9.0.beta.2 → 1.9.3

Sign up to get free protection for your applications and to get access to all the features.
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