| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import '../base/logger.dart'; |
| import '../convert.dart'; |
| import '../ios/xcodeproj.dart'; |
| import '../project.dart'; |
| |
| /// The type of analysis to perform. |
| enum IOSAnalyzeOption { |
| /// Prints out available build variants of the iOS Xcode sub-project. |
| /// |
| /// An example output: |
| /// |
| /// {"configurations":["Debug","Release","Profile"],"targets":["Runner","RunnerTests"]} |
| listBuildOptions, |
| |
| /// Outputs universal link settings of the iOS Xcode sub-project into a file. |
| /// |
| /// The file path will be printed after the command is run successfully. |
| outputUniversalLinkSettings, |
| } |
| |
| /// Analyze the iOS Xcode sub-project of a Flutter project. |
| /// |
| /// The [userPath] must be point to a flutter project. |
| class IOSAnalyze { |
| IOSAnalyze({ |
| required this.project, |
| required this.option, |
| this.configuration, |
| this.target, |
| required this.logger, |
| }) : assert(option == IOSAnalyzeOption.listBuildOptions || |
| (configuration != null && target != null)); |
| |
| final FlutterProject project; |
| final IOSAnalyzeOption option; |
| final String? configuration; |
| final String? target; |
| final Logger logger; |
| |
| Future<void> analyze() async { |
| switch (option) { |
| case IOSAnalyzeOption.listBuildOptions: |
| final XcodeProjectInfo? info = await project.ios.projectInfo(); |
| final Map<String, List<String>> result; |
| if (info == null) { |
| result = const <String, List<String>>{}; |
| } else { |
| result = <String, List<String>>{ |
| 'configurations': info.buildConfigurations, |
| 'targets': info.targets, |
| }; |
| } |
| logger.printStatus(jsonEncode(result)); |
| case IOSAnalyzeOption.outputUniversalLinkSettings: |
| final String filePath = await project.ios.outputsUniversalLinkSettings( |
| configuration: configuration!, |
| target: target!, |
| ); |
| logger.printStatus('result saved in $filePath'); |
| } |
| } |
| } |