lib/cocoapods-playgrounds/command/playgrounds.rb in cocoapods-playgrounds-1.2.0 vs lib/cocoapods-playgrounds/command/playgrounds.rb in cocoapods-playgrounds-1.2.1

- old
+ new

@@ -13,11 +13,14 @@ self.arguments = [CLAide::Argument.new('NAMES', true)] def self.options [ + ['--ipad', 'Create an iPad compatible Playground.'], ['--no-install', 'Skip running `pod install`'], + ['--no-migrate', 'Skip Swift migration for iPad Playgrounds.'], + ['--no-open', 'Do not open Xcode after generating the Playground.'], ['--platform', "Platform to generate for (default: #{DEFAULT_PLATFORM_NAME})"], ['--platform_version', 'Platform version to generate for ' \ "(default: #{default_version_for_platform(DEFAULT_PLATFORM_NAME)})"] ] end @@ -28,10 +31,13 @@ def initialize(argv) arg = argv.shift_argument @names = arg.split(',') if arg @install = argv.flag?('install', true) + @ipad = argv.flag?('ipad', false) + @migrate = argv.flag?('migrate', true) + @open = argv.flag?('open', true) && !@ipad @platform = argv.option('platform', DEFAULT_PLATFORM_NAME).to_sym @platform_version = argv.option('platform_version', Playgrounds.default_version_for_platform(@platform)) super end @@ -41,10 +47,44 @@ end def run # TODO: Pass platform and deployment target from configuration generator = WorkspaceGenerator.new(@names, :cocoapods, @platform, @platform_version) - generator.generate(@install) + name = generator.generate(@install, @open) + + if @ipad + FileUtils.rm_rf(Dir.glob("#{name}Playground/*.xcodeproj")) + FileUtils.rm_rf(Dir.glob("#{name}Playground/*.xcworkspace")) + FileUtils.rm_f(Dir.glob("#{name}Playground/Podfile*")) + + playground_files = "#{name}Playground/#{name}.playground/Sources" + FileUtils.mkdir_p(playground_files) + pods = "#{name}Playground/Pods" + + Dir.glob("#{pods}/**/*.swift").each do |file| + if @migrate + migrate(file, "#{playground_files}/#{File.basename(file)}") + else + FileUtils.cp(file, playground_files) + end + end + FileUtils.rm_rf(pods) + + File.open("#{name}Playground/#{name}.playground/Contents.swift", 'w') do |f| + f.write("import PlaygroundSupport\n") + f.write("PlaygroundPage.current.needsIndefiniteExecution = true\n\n") + end + end + end + + private + + # Thanks to http://swift.ayaka.me/posts/2016/6/17/running-the-swift-30-migrator-on-a-standalone-swift-file + def migrate(input, output) + xcode_path = `xcode-select -p`.strip + sdk_path = "#{xcode_path}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk" + `xcrun swift-update -sdk '#{sdk_path}' -target arm64-apple-ios9 #{input} >#{output}` + FileUtils.cp(input, output) if $?.exitstatus != 0 end end end end