require 'thor' require 'fwtoolkit/cli/xcode' require 'fwtoolkit/cli/cocoapods' require 'fwtoolkit/cli/git' require 'fwtoolkit/cli/bitrise' require 'fwtoolkit/projectfile' require 'fwtoolkit/git_client' require 'fwtoolkit/cli/thorutils' module FWToolkit class Project < Thor include Thor::Actions include FWToolkit::ThorUtils source_root_templates! desc "proj new [PROJECT NAME]", "Create a new Xcode project with FW's settings. Language is either objc or swift" def create(project_name) invoke :new, ["swift", project_name, ""] end desc "proj new [swift|objc] [PROJECT NAME] [CLASS PREFIX]", "Create a new Xcode project with FW's settings. Language is either objc or swift" def new(project_language, project_name, class_prefix="") unless project_language == "swift" or project_language == "objc" say_status :error, "Project language should be either swift or objc", :red return end if project_language == "objc" and class_prefix == "" say_status :error, "Objc projects require a class prefix", :red return end destination_root = File.join(Dir.pwd, project_name) say "Creating new project in: #{File.expand_path destination_root}" invoke :conf_gemset, [destination_root] invoke FWToolkit::Bitrise, 'new', [destination_root, project_name] invoke FWToolkit::Xcode, 'new', [project_language, project_name, class_prefix.upcase, File.join(Dir.pwd, project_name)] invoke FWToolkit::Cocoapods, 'install', [destination_root] git_repo = GitClient::Repository.new destination_root if(git_repo.initialized?) say_status :skip, 'The git repository is already initialized', :yellow else invoke FWToolkit::Git, 'new', [destination_root] end end desc "proj conf_gemset [PROJECT_DIR]", "Configure gem environment on a project's folder" def conf_gemset(project_root=Dir.pwd) @project_name = File.basename(project_root) destination_root = project_root say 'Configuring Gemset' directory "templates/default_project/gemset", destination_root inside(destination_root) do bundle_update end end desc "proj update [PROJECT_DIR]", "Update project's pods/gems and submodules" def update(project_root=Dir.pwd) bundle_update invoke FWToolkit::Git, 'update', [project_root] invoke FWToolkit::Cocoapods, 'install', [project_root] end private def bundle_update if File.exists? 'Gemfile' say 'Installing bundle' begin retried ||= false run! "gem install bundler", :capture => true run! "bundle install", :capture => true rescue Thor::Error retried = true retry unless retried end else say 'No gemfile found' end end end end