fastlane_version "1.37.0" default_platform :ios platform :ios do desc "Runs all the tests" lane :tests do test(destination: "platform=macOS") test(destination: "platform=iOS Simulator,name=iPhone 14") test(destination: "platform=tvOS Simulator,name=Apple TV") build(destination: "platform=watchOS Simulator,name=Apple Watch Series 8 (41mm)") end lane :test_ci do if ENV["DESTINATION"].include? "watchOS" then build(destination: ENV["DESTINATION"]) else test(destination: ENV["DESTINATION"]) end end lane :test do |options| scan( scheme: "Kingfisher", clean: true, destination: options[:destination] ) end lane :build do |options| gym( workspace: "Kingfisher.xcworkspace", configuration: "Debug", scheme: "Kingfisher", destination: options[:destination] ) end desc "Lint" lane :lint do 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 :xcframework do |options| target_version = "Kingfisher-#{options[:version]}" FileUtils.rm_rf '../build' frameworks = {} ["macosx", "iphoneos", "iphonesimulator", "appletvos", "appletvsimulator", "watchos", "watchsimulator", "xros", "xrsimulator" ].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" } ) dSYM_path = "#{Dir.pwd}/../#{archive_path}/dSYMs/Kingfisher.framework.dSYM" frameworks["#{archive_path}/Products/Library/Frameworks/Kingfisher.framework"] = { dsyms: dSYM_path } end create_xcframework( frameworks_with_dsyms: frameworks, output: "build/#{target_version}/Kingfisher.xcframework" ) Actions.sh("codesign --timestamp -v --sign 'Apple Distribution: Wei Wang (A4YJ9MRZ66)' ../build/#{target_version}/Kingfisher.xcframework") zip( path: "build/#{target_version}", output_path: "build/#{target_version}.zip", symlinks: true ) end before_all do |lane| xcode_version = ENV["XCODE_VERSION"] || "15.3" xcodes(version: xcode_version, select_for_current_build_only: true) end after_all do |lane| end error do |lane, exception| end end