From 748b0dbd951ef176f59835e32aabda0c5ed7edcd Mon Sep 17 00:00:00 2001 From: Matthew Lorentz Date: Fri, 17 Apr 2020 16:43:18 -0400 Subject: [PATCH] Move *.bcsymbolmap installation from 'Embed Frameworks' script phase to Copy dSYMs phase --- CHANGELOG.md | 9 ++++-- lib/cocoapods/generator/copy_dsyms_script.rb | 14 ++++++-- .../generator/embed_frameworks_script.rb | 14 +------- .../generator/script_phase_constants.rb | 10 ++++++ .../target_integrator.rb | 32 +++++++------------ .../pod_target_installer.rb | 17 ++++++++-- .../pod_target_integrator.rb | 17 +++++----- lib/cocoapods/xcode/framework_paths.rb | 2 +- .../generator/embed_frameworks_script_spec.rb | 28 +++++++++------- .../target_integrator_spec.rb | 4 +-- .../pod_target_integrator_spec.rb | 8 +++-- 11 files changed, 91 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c9725f936..9ac7362d92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,10 +23,15 @@ To install release candidates run `[sudo] gem install cocoapods --pre` ##### Bug Fixes +* Re-implement `bcsymbolmap` copying to avoid duplicate outputs. + [Dimitris Koutsogiorgas](https://github.com/dnkoutso) + [mplorentz](https://github.com/mplorentz) + [#9734](https://github.com/CocoaPods/CocoaPods/pull/9734) + * Fix Xcode 11 warning when setting Bundle Identifier in `info_plist` [Sean Reinhardt](https://github.com/seanreinhardtapps) [#9536](https://github.com/CocoaPods/CocoaPods/issues/9536) - + * Fix `incompatible encoding regexp match` for linting non-ascii pod name [banjun](https://github.com/banjun) [#9765](https://github.com/CocoaPods/CocoaPods/issues/9765) @@ -77,7 +82,7 @@ To install release candidates run `[sudo] gem install cocoapods --pre` * Re-implement `dSYM` copying and stripping to avoid duplicate outputs. [Dimitris Koutsogiorgas](https://github.com/dnkoutso) - [#9185](https://github.com/CocoaPods/CocoaPods/issues/9185) + [#9185](https://github.com/CocoaPods/CocoaPods/issues/9185) * Add support for running tests through the scheme of the app spec host of a test spec [Eric Amorde](https://github.com/amorde) diff --git a/lib/cocoapods/generator/copy_dsyms_script.rb b/lib/cocoapods/generator/copy_dsyms_script.rb index e87c711b70..fa87946e86 100644 --- a/lib/cocoapods/generator/copy_dsyms_script.rb +++ b/lib/cocoapods/generator/copy_dsyms_script.rb @@ -5,12 +5,18 @@ class CopydSYMsScript # attr_reader :dsym_paths + # @return [Array] bcsymbolmap_paths the bcsymbolmap paths to include in the script contents. + # + attr_reader :bcsymbolmap_paths + # Initialize a new instance # # @param [Array] dsym_paths @see dsym_paths + # @param [Array] bcsymbolmap_paths @see bcsymbolmap_paths # - def initialize(dsym_paths) - @dsym_paths = dsym_paths + def initialize(dsym_paths, bcsymbolmap_paths) + @dsym_paths = Array(dsym_paths) + @bcsymbolmap_paths = Array(bcsymbolmap_paths) end # Saves the copy dSYMs script to the given pathname. @@ -35,10 +41,14 @@ def generate #{Pod::Generator::ScriptPhaseConstants::STRIP_INVALID_ARCHITECTURES_METHOD} #{Pod::Generator::ScriptPhaseConstants::RSYNC_PROTECT_TMP_FILES} #{Pod::Generator::ScriptPhaseConstants::INSTALL_DSYM_METHOD} +#{Pod::Generator::ScriptPhaseConstants::INSTALL_BCSYMBOLMAP_METHOD} SH dsym_paths.each do |dsym_path| script << %(install_dsym "#{dsym_path}"\n) end + bcsymbolmap_paths.each do |bcsymbolmap_path| + script << %(install_bcsymbolmap "#{bcsymbolmap_path}"\n) + end script end end diff --git a/lib/cocoapods/generator/embed_frameworks_script.rb b/lib/cocoapods/generator/embed_frameworks_script.rb index 3aa6c803b9..4986dd7fe6 100644 --- a/lib/cocoapods/generator/embed_frameworks_script.rb +++ b/lib/cocoapods/generator/embed_frameworks_script.rb @@ -130,14 +130,7 @@ def script } #{Pod::Generator::ScriptPhaseConstants::INSTALL_DSYM_METHOD} #{Pod::Generator::ScriptPhaseConstants::STRIP_INVALID_ARCHITECTURES_METHOD} -# Copies the bcsymbolmap files of a vendored framework -install_bcsymbolmap() { - local bcsymbolmap_path="$1" - local destination="${BUILT_PRODUCTS_DIR}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" -} - +#{Pod::Generator::ScriptPhaseConstants::INSTALL_BCSYMBOLMAP_METHOD} # Signs a framework with the provided identity code_sign_if_enabled() { if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then @@ -159,11 +152,6 @@ def script frameworks_by_config.each do |config, frameworks| frameworks.each do |framework| contents_by_config[config] << %( install_framework "#{framework.source_path}"\n) - unless framework.bcsymbolmap_paths.nil? - framework.bcsymbolmap_paths.each do |bcsymbolmap_path| - contents_by_config[config] << %( install_bcsymbolmap "#{bcsymbolmap_path}"\n) - end - end end end xcframeworks_by_config.each do |config, xcframeworks| diff --git a/lib/cocoapods/generator/script_phase_constants.rb b/lib/cocoapods/generator/script_phase_constants.rb index 94837b8d0a..c99d983ff5 100644 --- a/lib/cocoapods/generator/script_phase_constants.rb +++ b/lib/cocoapods/generator/script_phase_constants.rb @@ -82,6 +82,16 @@ module ScriptPhaseConstants touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" fi fi +} + SH + + INSTALL_BCSYMBOLMAP_METHOD = <<-SH.strip_heredoc.freeze +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${bcsymbolmap_path}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" } SH end diff --git a/lib/cocoapods/installer/user_project_integrator/target_integrator.rb b/lib/cocoapods/installer/user_project_integrator/target_integrator.rb index 82c3919a25..9744f07f62 100644 --- a/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +++ b/lib/cocoapods/installer/user_project_integrator/target_integrator.rb @@ -391,20 +391,18 @@ def resource_output_paths(resource_input_paths) end.uniq end - # Returns the framework output paths for the given input paths + # Returns the framework input paths for the given framework paths # # @param [Hash>] framework_paths - # The target's framework paths to map to output paths. + # The target's framework paths to map to input paths. # # @param [Hash>] xcframeworks - # The target's xcframeworks to map to output paths. + # The target's xcframeworks to map to input paths. # # @return [Array] The embed frameworks script input paths # def embed_frameworks_input_paths(framework_paths, xcframeworks) - input_paths = framework_paths.each_with_object([]) do |path, result| - result.concat([path.source_path, path.bcsymbolmap_paths].flatten.compact) - end + input_paths = framework_paths.map(&:source_path) # Only include dynamic xcframeworks as the input since we will not be copying static xcframework slices xcframeworks.select { |xcf| xcf.build_type.dynamic_framework? }.each do |xcframework| name = xcframework.name @@ -413,26 +411,20 @@ def embed_frameworks_input_paths(framework_paths, xcframeworks) input_paths end - # Returns the framework output paths for the given input paths + # Returns the framework output paths for the given framework paths # - # @param [Array] framework_input_paths + # @param [Array] framework_paths # The framework input paths to map to output paths. # # @param [Array] xcframeworks # The installed xcframeworks. # - # @return [Array] The framework output paths - # - def embed_frameworks_output_paths(framework_input_paths, xcframeworks) - paths = framework_input_paths.flat_map do |framework_path| - framework_output_path = "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{File.basename(framework_path.source_path)}" - bcsymbol_output_paths = unless framework_path.bcsymbolmap_paths.nil? - framework_path.bcsymbolmap_paths.map do |bcsymbolmap_path| - "${BUILT_PRODUCTS_DIR}/#{File.basename(bcsymbolmap_path)}" - end - end - [framework_output_path, *bcsymbol_output_paths] - end.compact.uniq + # @return [Array] The embed framework script output paths + # + def embed_frameworks_output_paths(framework_paths, xcframeworks) + paths = framework_paths.map do |framework_path| + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{File.basename(framework_path.source_path)}" + end.uniq # Static xcframeworks are not copied to the build dir # so only include dynamic artifacts that will be copied to the build folder xcframework_paths = xcframeworks.select { |xcf| xcf.build_type.dynamic_framework? }.map do |xcframework| diff --git a/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb b/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb index 36e2a777b6..41cdb46470 100644 --- a/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +++ b/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb @@ -797,15 +797,16 @@ def create_app_target_embed_frameworks_script(app_spec) end end - # Creates a script that copies and strips vendored dSYMs. + # Creates a script that copies and strips vendored dSYMs and bcsymbolmaps. # # @return [void] # def create_copy_dsyms_script dsym_paths = PodTargetInstaller.dsym_paths(target) + bcsymbolmap_paths = PodTargetInstaller.bcsymbolmap_paths(target) path = target.copy_dsyms_script_path - unless dsym_paths.empty? - generator = Generator::CopydSYMsScript.new(dsym_paths) + unless dsym_paths.empty? && bcsymbolmap_paths.empty? + generator = Generator::CopydSYMsScript.new(dsym_paths, bcsymbolmap_paths) update_changed_file(generator, path) add_file_to_support_group(path) end @@ -1174,6 +1175,16 @@ def dsym_paths(target) dsym_paths end + # @param [PodTarget] target the target to be installed + # + # @return [Array] the bcsymbolmap paths for the given target + # + def bcsymbolmap_paths(target) + target.framework_paths.values.flatten.reject do |fmwk_path| + fmwk_path.bcsymbolmap_paths.nil? + end.flat_map(&:bcsymbolmap_paths) + end + # @param [Pathname] xcframework_path # the base path of the .xcframework bundle # diff --git a/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb b/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb index 29e443dbb3..e18f0186b4 100644 --- a/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +++ b/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb @@ -139,10 +139,7 @@ def add_embed_frameworks_script_phase(native_target, spec) input_file_list_path = target.embed_frameworks_script_input_files_path_for_spec(spec) input_file_list_relative_path = "${PODS_ROOT}/#{input_file_list_path.relative_path_from(target.sandbox.root)}" input_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(input_file_list_path, input_file_list_relative_path) - input_paths = input_paths_by_config[input_paths_key] = [script_path] - framework_paths.each do |path| - input_paths.concat([path.source_path, path.bcsymbolmap_paths].flatten.compact) - end + input_paths_by_config[input_paths_key] = [script_path] + UserProjectIntegrator::TargetIntegrator.embed_frameworks_input_paths(framework_paths, []) output_file_list_path = target.embed_frameworks_script_output_files_path_for_spec(spec) output_file_list_relative_path = "${PODS_ROOT}/#{output_file_list_path.relative_path_from(target.sandbox.root)}" @@ -209,9 +206,12 @@ def add_copy_xcframeworks_script_phase(native_target) def add_copy_dsyms_script_phase(native_target) script_path = "${PODS_ROOT}/#{target.copy_dsyms_script_path.relative_path_from(target.sandbox.root)}" dsym_paths = PodTargetInstaller.dsym_paths(target) + bcsymbolmap_paths = PodTargetInstaller.bcsymbolmap_paths(target) - if dsym_paths.empty? - script_phase = native_target.shell_script_build_phases.find { |bp| bp.name && bp.name.end_with?(UserProjectIntegrator::TargetIntegrator::COPY_DSYM_FILES_PHASE_NAME) } + if dsym_paths.empty? && bcsymbolmap_paths.empty? + script_phase = native_target.shell_script_build_phases.find do |bp| + bp.name && bp.name.end_with?(UserProjectIntegrator::TargetIntegrator::COPY_DSYM_FILES_PHASE_NAME) + end native_target.build_phases.delete(script_phase) if script_phase.present? return end @@ -227,7 +227,7 @@ def add_copy_dsyms_script_phase(native_target) input_file_list_relative_path = "${PODS_ROOT}/#{input_file_list_path.relative_path_from(target.sandbox.root)}" input_paths_key = UserProjectIntegrator::TargetIntegrator::XCFileListConfigKey.new(input_file_list_path, input_file_list_relative_path) input_paths = input_paths_by_config[input_paths_key] = [] - input_paths.concat dsym_paths + input_paths.concat([dsym_paths, *bcsymbolmap_paths].flatten.compact) output_file_list_path = target.copy_dsyms_script_output_files_path output_file_list_relative_path = "${PODS_ROOT}/#{output_file_list_path.relative_path_from(target.sandbox.root)}" @@ -235,7 +235,8 @@ def add_copy_dsyms_script_phase(native_target) output_paths = output_paths_by_config[output_paths_key] = [] dsym_output_paths = dsym_paths.map { |dsym_path| "${DWARF_DSYM_FOLDER_PATH}/#{File.basename(dsym_path)}" } - output_paths.concat dsym_output_paths + bcsymbolmap_output_paths = bcsymbolmap_paths.map { |bcsymbolmap_path| "${DWARF_DSYM_FOLDER_PATH}/#{File.basename(bcsymbolmap_path)}" } + output_paths.concat([dsym_output_paths, *bcsymbolmap_output_paths].flatten.compact) end UserProjectIntegrator::TargetIntegrator.set_input_output_paths(phase, input_paths_by_config, output_paths_by_config) diff --git a/lib/cocoapods/xcode/framework_paths.rb b/lib/cocoapods/xcode/framework_paths.rb index a5232fa752..9c334620ef 100644 --- a/lib/cocoapods/xcode/framework_paths.rb +++ b/lib/cocoapods/xcode/framework_paths.rb @@ -9,7 +9,7 @@ class FrameworkPaths # attr_reader :dsym_path - # @return [Array, Nil] the bcsymbolmap files path array, if one exists + # @return [Array, Nil] the bcsymbolmap files path array, if one exists # attr_reader :bcsymbolmap_paths diff --git a/spec/unit/generator/embed_frameworks_script_spec.rb b/spec/unit/generator/embed_frameworks_script_spec.rb index bb7aa21c4c..4bc1c025a0 100644 --- a/spec/unit/generator/embed_frameworks_script_spec.rb +++ b/spec/unit/generator/embed_frameworks_script_spec.rb @@ -4,8 +4,9 @@ module Pod describe Generator::EmbedFrameworksScript do it 'installs frameworks by config' do frameworks = { - 'Debug' => [Xcode::FrameworkPaths.new('Pods/Loopback.framework'), Xcode::FrameworkPaths.new('Reveal.framework')], - 'Release' => [Xcode::FrameworkPaths.new('CrashlyticsFramework.framework')], + 'Debug' => [Xcode::FrameworkPaths.new('Pods/Loopback.framework'), + Xcode::FrameworkPaths.new('Reveal.framework')], + 'Release' => [Xcode::FrameworkPaths.new('Crashlytics.framework')], } generator = Pod::Generator::EmbedFrameworksScript.new(frameworks, {}) result = generator.send(:script) @@ -17,34 +18,39 @@ module Pod SH result.should.include <<-SH.strip_heredoc if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "CrashlyticsFramework.framework" + install_framework "Crashlytics.framework" fi SH end - it 'installs bcsymbolmaps if specified' do + it 'does not install dSYMs or bcsymbolmaps if specified' do frameworks = { - 'Debug' => [Xcode::FrameworkPaths.new('Pods/Loopback.framework', nil, - ['7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap', 'B724D6B4-C7DD-31F0-80C6-EE818ED30B0B.bcsymbolmap']), + 'Debug' => [Xcode::FrameworkPaths.new('Pods/Loopback.framework', 'Pods/Loopback.framework.dSYM', + ['7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap', + 'B724D6B4-C7DD-31F0-80C6-EE818ED30B0B.bcsymbolmap']), Xcode::FrameworkPaths.new('Reveal.framework')], - 'Release' => [Xcode::FrameworkPaths.new('CrashlyticsFramework.framework', nil, ['ABCD1234.bcsymbolmap'])], + 'Release' => [Xcode::FrameworkPaths.new('Crashlytics.framework', 'Crashlytics.framework.dSYM', + ['ABCD1234.bcsymbolmap', 'WXYZ5678.bcsymbolmap'])], } generator = Pod::Generator::EmbedFrameworksScript.new(frameworks, {}) result = generator.send(:script) result.should.include <<-SH.strip_heredoc if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "Pods/Loopback.framework" - install_bcsymbolmap "7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap" - install_bcsymbolmap "B724D6B4-C7DD-31F0-80C6-EE818ED30B0B.bcsymbolmap" install_framework "Reveal.framework" fi SH result.should.include <<-SH.strip_heredoc if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "CrashlyticsFramework.framework" - install_bcsymbolmap "ABCD1234.bcsymbolmap" + install_framework "Crashlytics.framework" fi SH + result.should.not.include 'Pods/Loopback.framework.dSYM' + result.should.not.include 'Crashlytics.framework.dSYM' + result.should.not.include '7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap' + result.should.not.include 'B724D6B4-C7DD-31F0-80C6-EE818ED30B0B.bcsymbolmap' + result.should.not.include 'ABCD1234.bcsymbolmap' + result.should.not.include 'WXYZ5678.bcsymbolmap' end it 'installs intermediate XCFramework slices' do diff --git a/spec/unit/installer/user_project_integrator/target_integrator_spec.rb b/spec/unit/installer/user_project_integrator/target_integrator_spec.rb index 7073855cdb..07b5a0597f 100644 --- a/spec/unit/installer/user_project_integrator/target_integrator_spec.rb +++ b/spec/unit/installer/user_project_integrator/target_integrator_spec.rb @@ -455,15 +455,15 @@ module Pod @target_integrator.integrate! target = @target_integrator.send(:native_targets).first phase = target.shell_script_build_phases.find { |bp| bp.name == @embed_framework_phase_name } + # dSYM and bcsymbolmaps are intentionally excluded as they are handled by a different script phase within + # the pod target. phase.input_paths.sort.should == %w( ${BUILT_PRODUCTS_DIR}/DebugCompiledFramework/DebugCompiledFramework.framework - ${PODS_ROOT}/DebugVendoredFramework/ios/A6621399-62A0-3DC3-A6E3-B6B51BD287AD.bcsymbolmap ${PODS_ROOT}/DebugVendoredFramework/ios/DebugVendoredFramework.framework ${PODS_ROOT}/ReleaseVendoredFramework/ios/ReleaseVendoredFramework.framework ${PODS_ROOT}/Target\ Support\ Files/Pods/Pods-frameworks.sh ) phase.output_paths.sort.should == %w( - ${BUILT_PRODUCTS_DIR}/A6621399-62A0-3DC3-A6E3-B6B51BD287AD.bcsymbolmap ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DebugCompiledFramework.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DebugVendoredFramework.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReleaseVendoredFramework.framework diff --git a/spec/unit/installer/xcode/pods_project_generator/pod_target_integrator_spec.rb b/spec/unit/installer/xcode/pods_project_generator/pod_target_integrator_spec.rb index d828d16a6d..134e99ae39 100644 --- a/spec/unit/installer/xcode/pods_project_generator/pod_target_integrator_spec.rb +++ b/spec/unit/installer/xcode/pods_project_generator/pod_target_integrator_spec.rb @@ -237,7 +237,8 @@ class PodTargetIntegrator it 'integrates native target with copy dSYM script phase' do framework_paths = [Pod::Xcode::FrameworkPaths.new('${PODS_ROOT}/Vendored/Vendored.framework', - '${PODS_ROOT}/Vendored/Vendored.framework.dSYM')] + '${PODS_ROOT}/Vendored/Vendored.framework.dSYM', + ['${PODS_ROOT}/Vendored/7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap'])] @watermelon_pod_target.stubs(:framework_paths).returns('WatermelonLib' => framework_paths) installation_result = TargetInstallationResult.new(@watermelon_pod_target, @native_target, [], []) PodTargetIntegrator.new(installation_result, :use_input_output_paths => true).integrate! @@ -247,16 +248,19 @@ class PodTargetIntegrator ] @native_target.build_phases[0].input_paths.should == [ '${PODS_ROOT}/Vendored/Vendored.framework.dSYM', + '${PODS_ROOT}/Vendored/7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap', ] @native_target.build_phases[0].output_paths.should == [ '${DWARF_DSYM_FOLDER_PATH}/Vendored.framework.dSYM', + '${DWARF_DSYM_FOLDER_PATH}/7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap', ] end it 'integrates native target with copy dSYM script phase and xcfilelists' do @project.stubs(:object_version).returns('50') framework_paths = [Pod::Xcode::FrameworkPaths.new('${PODS_ROOT}/Vendored/Vendored.framework', - '${PODS_ROOT}/Vendored/Vendored.framework.dSYM')] + '${PODS_ROOT}/Vendored/Vendored.framework.dSYM', + ['${PODS_ROOT}/Vendored/7724D6B4-C7DD-31F0-80C6-EE818ED30B07.bcsymbolmap'])] @watermelon_pod_target.stubs(:framework_paths).returns('WatermelonLib' => framework_paths) installation_result = TargetInstallationResult.new(@watermelon_pod_target, @native_target, [], []) PodTargetIntegrator.new(installation_result, :use_input_output_paths => true).integrate!