From b1881d521bb0dbab96fb8cc74a45f9a450666e15 Mon Sep 17 00:00:00 2001 From: Miguel Ruivo Date: Fri, 12 Jun 2020 01:07:21 +0100 Subject: [PATCH] Adds codemagic CI script --- .gitignore | 1 - codemagic.yaml | 28 +++++++++++ file_picker/example/ios/Podfile | 87 +++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 codemagic.yaml create mode 100644 file_picker/example/ios/Podfile diff --git a/.gitignore b/.gitignore index eb4f457..d7285d8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ .dart_tool/ pubspec.lock -Podfile Podfile.lock Pods/ .symlinks/ diff --git a/codemagic.yaml b/codemagic.yaml new file mode 100644 index 0000000..8558f15 --- /dev/null +++ b/codemagic.yaml @@ -0,0 +1,28 @@ + +workflows: + my-workflow: + name: Build example app + environment: + flutter: stable + xcode: latest + cache: + cache_paths: + - ~/.pub-cache + triggering: + events: + - push + branch_patterns: + - pattern: '*' + include: true + source: true + scripts: + - | + # Build iOS & Android + + cd file_picker/example + flutter packages pub get + flutter analyze + flutter test + find . -name "Podfile" -execdir pod install \; + flutter build apk --debug + flutter build ios --debug --no-codesign \ No newline at end of file diff --git a/file_picker/example/ios/Podfile b/file_picker/example/ios/Podfile new file mode 100644 index 0000000..7c81246 --- /dev/null +++ b/file_picker/example/ios/Podfile @@ -0,0 +1,87 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '9.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + generated_key_values = {} + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values +end + +target 'Runner' do + # Flutter Pod + use_frameworks! + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end + +# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. +install! 'cocoapods', :disable_input_output_paths => true + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end +end \ No newline at end of file