class Pod::Installer

Public Instance Methods

configure_catalyst() click to toggle source
# File lib/cocoapods-catalyst-support/pod/installer.rb, line 7
def configure_catalyst
  catalyst_pods_to_remove = $catalyst_configuration.ios_dependencies
  if !catalyst_pods_to_remove.empty? 
    remove_dependencies catalyst_pods_to_remove, OSPlatform.macos, OSPlatform.ios
  end

  ios_pods_to_remove = $catalyst_configuration.mac_dependencies
  if !ios_pods_to_remove.empty? 
    remove_dependencies ios_pods_to_remove, OSPlatform.ios, OSPlatform.macos
  end

  unless ios_pods_to_remove.empty? && catalyst_pods_to_remove.empty?
    puts "Catalyst => Done! Your Catalyst dependencies are ready to go".green
  else
    puts "Catalyst => Nothing to configure"
  end
end

Private Instance Methods

recursive_dependencies(to_filter_names) click to toggle source
# File lib/cocoapods-catalyst-support/pod/installer.rb, line 106
def recursive_dependencies to_filter_names
  targets = pods_project.targets
  targets_to_remove = pods_project.targets.filter do |target| to_filter_names.include? target.module_name end
  dependencies = targets_to_remove.flat_map do |target| target.dependencies end
  dependencies_names = dependencies.map do |d| d.module_name end

  if dependencies.empty?
    return to_filter_names + dependencies_names
  else
    return to_filter_names + recursive_dependencies(dependencies_names)
  end

end
remove_dependencies(pod_names_to_remove, remove_platform, keep_platform) click to toggle source
# File lib/cocoapods-catalyst-support/pod/installer.rb, line 26
def remove_dependencies pod_names_to_remove, remove_platform, keep_platform

  loggs "\n#### Configuring #{remove_platform.name} dependencies ####\n"

  ###### Variable definition ######
  all_pods = podfile.dependencies.flat_map do |d| [d.name, d.to_root_dependency.name] end.to_set.to_a.map do |s| s.sub('/', '') end
  pod_names_to_remove = podfile.dependencies.filter do |d| pod_names_to_remove.include? d.name end.flat_map do |d| [d.name, d.to_root_dependency.name] end.map do |s| s.sub('/', '') end
  pod_names_to_keep = all_pods.filter do |name| !pod_names_to_remove.include? name end
  $verbose = (defined? podfile.debug) ? podfile.debug : $verbose

  pod_names_to_keep = recursive_dependencies(pod_names_to_keep)
  pod_targets_to_keep = pod_targets.filter do |pod| pod_names_to_keep.include? pod.module_name end       # PodTarget

  pod_names_to_remove = recursive_dependencies(pod_names_to_remove).filter do |name| !pod_names_to_keep.include? name end
  pod_targets_to_remove = pod_targets.filter do |pod| pod_names_to_remove.include? pod.module_name end   # PodTarget

  loggs "\n#### Unsupported Libraries ####\n#{pod_names_to_remove}\n"

  targets_to_remove = pods_project.targets.filter do |target| pod_names_to_remove.include?(target.module_name) end.filter do |target| target.platform_name == OSPlatform.ios.name end # AbstractTarget
  pods_targets = pods_project.targets.filter do |target| target.name.start_with? "Pods-" end.filter do |target| target.platform_name == OSPlatform.ios.name end   # AbstractTarget
  targets_to_keep = pods_project.targets.filter do |target| !targets_to_remove.include?(target) && !pods_targets.include?(target) end.filter do |target| target.platform_name == OSPlatform.ios.name end   # AbstractTarget

  ######  Determine which dependencies should be removed ######
  dependencies_to_keep = targets_to_keep.reduce([]) do |dependencies, target| dependencies + target.other_linker_flags_dependencies end    
  dependencies_to_keep = dependencies_to_keep + targets_to_keep.flat_map do |target| target.to_dependency end + pod_targets_to_keep.flat_map do |pod| pod.vendor_products + pod.frameworks end
  
  dependencies_to_remove = targets_to_remove.reduce([]) do |dependencies, target| dependencies + target.other_linker_flags_dependencies end
  dependencies_to_remove = dependencies_to_remove + targets_to_remove.flat_map do |target| target.to_dependency end + pod_targets_to_remove.flat_map do |pod| pod.vendor_products + pod.frameworks end
  dependencies_to_remove = dependencies_to_remove.filter do |d|  !dependencies_to_keep.include? d end

  ###### CATALYST NOT SUPPORTED LINKS ######
  unsupported_links = dependencies_to_remove.map do |d| d.link end.to_set.to_a
  
  loggs "\n#### Unsupported dependencies ####\n"
  loggs "#{dependencies_to_remove.map do |d| d.name end.to_set.to_a }\n\n"

  ###### CATALYST NOT SUPPORTED FRAMEWORKS AND RESOURCES
  frameworks_to_uninstall = dependencies_to_remove.filter do |d| d.type == :framework || d.type == :weak_framework end.map do |d| "#{d.name}.framework" end
  resources_to_uninstall = pod_targets_to_remove.flat_map do |pod| pod.resources end.to_set.to_a

  loggs "#### Frameworks not to be included in the Archive ####\n"
  loggs "#{frameworks_to_uninstall}\n\n" 

  loggs "#### Resources not to be included in the Archive ####\n"
  loggs "#{resources_to_uninstall}\n\n"

  ###### OTHER LINKER FLAGS -> to iphone* ######
  loggs "#### Flagging unsupported libraries ####"
  pods_project.targets.filter do |target| target.platform_name == OSPlatform.ios.name end.each do |target| target.flag_libraries unsupported_links, keep_platform end

  ###### BUILD_PHASES AND DEPENDENCIES -> PLATFORM_FILTER 'ios' ######
  loggs "\n#### Filtering build phases ####"
  targets_to_remove.filter do |target| 
    pods_project.native_targets.include? target
  end.each do |target| 
    loggs "\tTarget: #{target.name}"
    target.add_platform_filter_to_build_phases keep_platform
    target.add_platform_filter_to_dependencies keep_platform
  end

  loggs "\n#### Filtering dependencies ####"
  targets_to_remove.filter do |target| 
    !pods_project.native_targets.include? target
  end.each do |target| 
    loggs "\tTarget: #{target.name}"
    target.add_platform_filter_to_dependencies keep_platform
  end

  ###### FRAMEWORKS AND RESOURCES SCRIPT -> if [ "$SDKROOT" != "MacOS" ]; then #######
  loggs "\n#### Changing frameworks and resources script ####"
  pods_targets.each do |target|
    loggs "\tTarget: #{target.name}"
    loggs "\t\t-Uninstalling frameworks"
    target.uninstall_frameworks frameworks_to_uninstall, remove_platform

    loggs "\t\t-Uninstalling resources"
    target.uninstall_resources resources_to_uninstall, remove_platform
  end
end