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