Skip to content

Instantly share code, notes, and snippets.

@mungler
Created February 20, 2020 10:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mungler/8c41bfe262cc4565571daf5640276dfe to your computer and use it in GitHub Desktop.
Save mungler/8c41bfe262cc4565571daf5640276dfe to your computer and use it in GitHub Desktop.
# assuming your project is called 'MyProject' and the xcodeproj file is inside a folder
# called 'MyProject' and is called 'MyProject.xcodeproj', and that j2objc generated source
# is output into the 'MyProject/generated_src', this script will integrate the generated
# source code and add all .m and .swift files to the project's main target
# use at your own risk... dont shout at me if this breaks your project,
# turns your hair blue or kills your dog...
require 'xcodeproj'
class XcodeFileManager
def self.process
Dir.chdir("MyProject")
add_group("MyProject.xcodeproj", "generated_src")
Dir.chdir("..")
end
private
def self.add_files(dir, group, main_target, changed = false)
Dir.glob(dir) do |item|
next if %w{. .DS_Store}.include?(item)
next if group.children.map { |f| f.name }.include? File.basename(item)
if File.directory?(item)
new_folder = File.basename(item)
created_group = group.new_group(new_folder)
changed = add_files("#{item}/*", created_group, main_target, changed)
else
i = group.new_file(item)
changed = true
if %w{.swift .m}.any? {|ext| item.end_with?(ext)}
main_target.add_file_references([i])
end
end
end
changed
end
def self.add_group(project_path, folder)
project = Xcodeproj::Project.open(project_path)
generated_group = project.main_group[folder] || project.main_group.new_group(folder)
if add_files("#{folder}/*", generated_group, project.targets.first)
project.save
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment