class MotionSwifty::Swifty

Attributes

carts[RW]
config[R]

Public Class Methods

new(config) click to toggle source
# File lib/motion/swifty/swifty.rb, line 6
def initialize(config)
  @config = config
  @carts = []
end

Public Instance Methods

cart(cart, options = {}) click to toggle source
# File lib/motion/swifty/swifty.rb, line 15
def cart(cart, options = {})
  @carts << Cart.new(cart, options)
end
cartfile(&block) click to toggle source
# File lib/motion/swifty/swifty.rb, line 11
def cartfile(&block)
  self.instance_eval(&block)
end
configure_platform(platform) click to toggle source
# File lib/motion/swifty/swifty.rb, line 25
def configure_platform(platform)
  frameworks = File.join(self.config.app_bundle(platform), "Frameworks")
  update_swift_dlybs("./Cartfile", frameworks) do
    clean_swift_dlybs(frameworks)
    copy_swift_dlybs(platform, frameworks)
  end

  self.config.embedded_frameworks += self.carts.map(&:path)
end
setup() click to toggle source
# File lib/motion/swifty/swifty.rb, line 19
def setup
  generate_cartfile(self.carts)
  pull_frameworks(carthage_platform(config.template))
  copy_frameworks(self.config.archs, self.carts)
end

Private Instance Methods

carthage_platform(platform) click to toggle source
# File lib/motion/swifty/swifty.rb, line 69
def carthage_platform(platform)
  case platform
  when :ios
    "iOS"
  else
    "all"
  end
end
clean_swift_dlybs(dlybs_folder) click to toggle source
# File lib/motion/swifty/swifty.rb, line 65
def clean_swift_dlybs(dlybs_folder)
  FileUtils.rm(Dir.glob(File.join(dlybs_folder, '**/libswift*.dylib')))
end
copy_frameworks(archs, carts) click to toggle source
# File lib/motion/swifty/swifty.rb, line 48
def copy_frameworks(archs, carts)
  ENV["TARGET_BUILD_DIR"] = File.expand_path("./vendor/Carts")
  ENV["BUILT_PRODUCTS_DIR"] = File.expand_path("./vendor/Carts")

  archs.each do |platform, platform_archs|
    ENV["SCRIPT_INPUT_FILE_COUNT"] = carts.count.to_s
    ENV["FRAMEWORKS_FOLDER_PATH"] = platform_archs.join(" ")
    ENV["VALID_ARCHS"] = platform_archs.join(" ")

    carts.each_with_index do |cart, index|
      ENV["SCRIPT_INPUT_FILE_#{index}"] = cart.path
    end

    `carthage copy-frameworks`
  end
end
copy_swift_dlybs(platform, frameworks_path) click to toggle source
# File lib/motion/swifty/swifty.rb, line 84
def copy_swift_dlybs(platform, frameworks_path)
  swift_stdlib_tool = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-stdlib-tool"
  archs = self.config.archs[platform].join(' ')
  folder = Shellwords.escape("./vendor/Carts/#{archs}")
  frameworks_path = Shellwords.escape(frameworks_path)
  `#{swift_stdlib_tool} --copy --scan-folder #{folder} --platform #{platform.downcase} --destination #{frameworks_path}`
end
generate_cartfile(carts) click to toggle source
# File lib/motion/swifty/swifty.rb, line 78
def generate_cartfile(carts)
  target = File.open("Cartfile", 'w+')
  target.write(carts.map(&:definition).join("\r\n"))
  target.close
end
pull_frameworks(carthage_platform) click to toggle source
# File lib/motion/swifty/swifty.rb, line 44
def pull_frameworks(carthage_platform)
  `carthage update --platform #{carthage_platform} --no-use-binaries`
end
update_swift_dlybs(cartfile, frameworks, &block) click to toggle source
# File lib/motion/swifty/swifty.rb, line 37
def update_swift_dlybs(cartfile, frameworks, &block)
  lib_swift = Dir.glob(File.join(frameworks, '**/libswiftCore.dylib')).first
  if !lib_swift || !File.exists?(lib_swift) || File.mtime(cartfile) > File.mtime(lib_swift)
    block.call
  end
end