| // 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. | |
| 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'); | |
| } | |
| } | |
| } |