$appName = File.basename(Dir['../*.xcworkspace'].first, '.*') before_all do |lane, options| appName = options[:appName] || $appName podsReposPath = File.expand_path "~/.cocoapods/repos/master/" lockFilePath = "#{podsReposPath}/.git/index.lock" # check if .lock file exists in pod repos - then remove all master repo if File.exists? lockFilePath sh("rm -rf #{podsReposPath}") end cocoapods( clean: true, repo_update: true ) set_info_plist_value( path: "./#{appName}/Info.plist", key: "CFBundleVersion", value: options[:buildNumber] || 10000 ) end after_all do |lane, options| if options[:uploadToFabric] appName = options[:appName] || $appName token = sh("cat ../#{appName}.xcodeproj/project.pbxproj | grep 'Fabric/run' | awk '{print $4}' | tr -d '\\n'") secret = sh("printf `cat ../#{appName}.xcodeproj/project.pbxproj | grep 'Fabric/run' | awk '{print $5}' | sed 's/..$//'` | tr -d '\\n'") releaseNotesFile = "release-notes.txt" sh("touch ../#{releaseNotesFile}") crashlytics( ipa_path: "./#{appName}.ipa", crashlytics_path: "./Pods/Crashlytics/", api_token: token, build_secret: secret, notes_path: releaseNotesFile, groups: "touch-instinct" ) upload_symbols_to_crashlytics( dsym_path: "./#{appName}.app.dSYM.zip", api_token: token ) end end private_lane :buildConfiguration do |options| configuration = lane_context[SharedValues::LANE_NAME] method = configuration.start_with?("Enterprise") ? "enterprise" : "development" appName = options[:appName] || $appName uploadToFabric = options[:uploadToFabric] icloudEnvironment = options[:iCloudContainerEnvironment] || "" exportOptions = icloudEnvironment.to_s.empty? ? {} : {iCloudContainerEnvironment: icloudEnvironment} exportOptions[:compileBitcode] = options[:compileBitcode] || false gym( clean: true, workspace: "./#{appName}.xcworkspace", scheme: appName, archive_path: "./", output_directory: "./", output_name: "#{appName}.ipa", configuration: configuration, export_method: method, export_options: exportOptions, skip_package_ipa: !uploadToFabric ) end