# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
target 'ProjectName' do
# Uncomment this line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
pod 'iCarousel', '~> 1.8'
# pod 'Facebook-iOS-SDK', '~> 4.1'
# pod 'ParseFacebookUtilsV4', '~> 1.11'
# pod 'Parse', '~> 1.14'
end
require 'xcodeproj'
### HELPERS ###
# Array extension for non-Ruby rail
class Array
# Wraps and object into an array
#
# @param object [Any] The object to be wrapped
# @return [Any] The array with the value wrapped. If the object is nil, then returns empty array
def self.wrap(object)
if object.nil?
[]
elsif object.respond_to?(:to_ary)
object.to_ary || [object]
else
[object]
end
end
end
# Performs the cocoapods clean up actions. It will install the dependencies needed.
def cocoapod_clean_actions
## DEINTEGRATE
puts "** Installing Cocoapods 'DEINTEGRATE' **"
system("sudo gem install cocoapods-deintegrate")
puts "** Performing Cocoapods 'DEINTEGRATE' **"
system("pod deintegrate")
## CLEAN
puts "** Installing Cocoapods 'CLEAN' **"
system("sudo gem install cocoapods-deintegrate")
puts "** Performing Cocoapods 'CLEAN' **"
system("pod clean")
end
# Performs a clean up on the build settings removing all the identified pods leftovers
#
# @param project [Xcodeproj] Xcode project where to permorm the actions
def clean_build_settings(project)
puts "** Removing Cocoapods references from 'BUILD SETTING' **"
podsOcurrence = "PODS"
project.targets.each { |target|
target.build_configurations.each { |build_configuration|
puts "Inspecting BUILD_SETTINGS for TARGET => #{target.name} & CONFIGURATION => #{build_configuration.name}"
build_settings = build_configuration.build_settings
build_settings.each { |key, value|
if key.include?(podsOcurrence)
build_settings.delete(key)
else
clean(build_settings, key, podsOcurrence)
end
}
}
}
project.save()
end
# Performs a clean-up on a specific key of the build settings by removing the occurrences given. It also cleans the value if empty.
#
# @param build_settings [Hash] Build Settings for a specific target and configuration
# @param flag [String] Key to find in the build_settings
# @param occurence [String] The occurence to be removed from the value of build settings key
def clean(build_settings, flag, occurence)
puts "CLEAN => flag = #{flag}, ocurrence = #{occurence}"
indexes = Array.new()
build_settings_flag = Array.wrap(build_settings[flag])
build_settings_flag.each_with_index { |value, index|
if value.include?(occurence)
previous_index = index - 1
if previous_index >= 0 && build_settings_flag[previous_index].to_s&.start_with?("-")
indexes.append(previous_index)
end
indexes.append(index)
end
}
if indexes.count > 0
build_settings_flag.delete_if.with_index { |_, index|
indexes.include? index
}
# Replace the value for the build setting
if build_settings_flag.empty?
puts "Removing empty array #{flag}"
build_settings.delete(flag)
else
puts "Reassining array #{flag}"
build_settings[flag] = build_settings_flag
end
end
end
# Performs a clean up on the build settings removing all the identified pods leftovers
#
# @param project [Xcodeproj] Xcode project where to permorm the actions
def clean_build_phases(project)
puts "** Removing Cocoapods references from 'BUILD_PHASES' **"
project.targets.each { |target|
#if target.name == "WhiteLabel" #TESTING
puts "Inspecting BUILD_PHASES for TARGET => #{target.name}"
target.shell_script_build_phases.each { |shell_script|
if shell_script.name.include?("[CP]")
puts "Removing '#{shell_script.name}' shell script"
shell_script.remove_from_project()
elsif shell_script.name == "Crashlytics Run Script"
puts "Deleting '#{shell_script.name}'"
# Add extra build phases such as the Crashlytics
#shell_script.remove_from_project()
end
}
#break #TESTING
#end #TESTING
}
project.save()
end
# Removes all the unwanted cocoapods files and folders from the project
#
# @param project [Xcodeproj] Xcode project where to permorm the actions
def remove_files_and_folders(project)
puts "** Removing Cocoapods files and folders from project **"
## Project
# BE CAREFUL WITH GROUP(LINK) NAME AND GROUP PATH(FOLDER)
project.groups.find{ |group| group.path == "Pods" }&.remove_from_project()
project.save()
# File system
system('rm -rf Pods')
#system('rm Podfile')
end
### MAIN ###
puts "********** Cocoapods CLEAN UP **********"
cocoapod_clean_actions()
puts "********** Cocoapods EXTRA CLEAN UP **********"
project = Xcodeproj::Project.open "./WhiteLabel.xcodeproj"
clean_build_settings(project)
clean_build_phases(project)
remove_files_and_folders(project)
project.save()