fastlane_version "1.37.0" default_platform :ios platform :ios do desc "Runs all the tests" lane :tests do test(destination: "platform=macOS", swift_version: "5.0") test(destination: "platform=iOS Simulator,name=iPhone 12", swift_version: "5.0") test(destination: "platform=tvOS Simulator,name=Apple TV", swift_version: "5.0") build(destination: "platform=watchOS Simulator,name=Apple Watch Series 6 - 44mm", swift_version: "5.0") end lane :test_ci do if ENV["DESTINATION"].include? "watchOS" then build(destination: ENV["DESTINATION"], swift_version: ENV["SWIFT_VERSION"]) else test(destination: ENV["DESTINATION"], swift_version: ENV["SWIFT_VERSION"]) end end lane :test do |options| scan( scheme: "Kingfisher", clean: true, xcargs: "SWIFT_VERSION=#{options[:swift_version]}", destination: options[:destination] ) end lane :build do |options| gym( workspace: "Kingfisher.xcworkspace", configuration: "Debug", scheme: "Kingfisher", xcargs: "SWIFT_VERSION=#{options[:swift_version]}", destination: options[:destination] ) end desc "Lint" lane :lint do # carthage(command: "build", no_skip_current: true, platform: "iOS") pod_lib_lint spm end desc "Release new version" lane :release do |options| target_version = options[:version] raise "The version is missed. Use `fastlane release version:{version_number}`.`" if target_version.nil? ensure_git_branch ensure_git_status_clean skip_tests = options[:skip_tests] tests unless skip_tests lint sync_build_number_to_git increment_version_number(version_number: target_version) version_bump_podspec(path: "Kingfisher.podspec", version_number: target_version) log = extract_current_change_log(version: target_version) release_log = update_change_log(log: log) git_commit_all(message: "Bump version to #{target_version}") Actions.sh("git tag -s #{target_version} -m ''") push_to_git_remote xcframework(version: target_version) set_github_release( repository_name: "onevcat/Kingfisher", api_token: ENV['GITHUB_TOKEN'], name: release_log[:title], tag_name: target_version, description: release_log[:text], upload_assets: ["build/Kingfisher-#{target_version}.zip"] ) pod_push end lane :podpush do pod_push end lane :xcframework do |options| target_version = "Kingfisher-#{options[:version]}" supporting_root = "../build/#{target_version}/Supporting Files" xcversion(version: "~> 13.0") FileUtils.rm_rf '../build' frameworks = [] ["macosx", "iphoneos", "iphonesimulator", "appletvos", "appletvsimulator", "watchos", "watchsimulator" ].each do |sdk| archive_path = "build/Kingfisher-#{sdk}.xcarchive" xcodebuild( archive: true, archive_path: archive_path, scheme: "Kingfisher", sdk: sdk, build_settings: { "BUILD_LIBRARY_FOR_DISTRIBUTION" => "YES", "SKIP_INSTALL" => "NO" } ) frameworks.push("#{archive_path}/Products/Library/Frameworks/Kingfisher.framework") dSYM_path = "../#{archive_path}/dSYMs/Kingfisher.framework.dSYM" FileUtils.mkdir_p("#{supporting_root}/#{sdk}/dSYMs/") FileUtils.cp_r(dSYM_path, "#{supporting_root}/#{sdk}/dSYMs/Kingfisher.framework.dSYM") bitcode_symbol_map_path = "../#{archive_path}/BCSymbolMaps/" if Dir.exist?(bitcode_symbol_map_path) FileUtils.mkdir_p("#{supporting_root}/#{sdk}/BCSymbolMaps/") FileUtils.cp_r(bitcode_symbol_map_path, "#{supporting_root}/#{sdk}") end end # `xcodebuild` action in fastlane does not support `-create-xcframework` arg yet. # Change it back to use fastlane action later when it is prepared. framework_args = frameworks.map { |framework_path| "-framework '#{framework_path}'"} args = "-create-xcframework #{framework_args.join(" ")} -output 'build/#{target_version}/Kingfisher.xcframework'" Dir.chdir("..") do Action.sh "xcodebuild #{args}" end zip( path: "build/#{target_version}", output_path: "build/#{target_version}.zip" ) end after_all do |lane| end error do |lane, exception| end end