@@ -6,20 +6,24 @@ import 'package:file/file.dart';
6
6
import 'package:file/memory.dart' ;
7
7
import 'package:flutter_tools/src/base/logger.dart' ;
8
8
import 'package:flutter_tools/src/base/project_migrator.dart' ;
9
+ import 'package:flutter_tools/src/base/version.dart' ;
9
10
import 'package:flutter_tools/src/ios/migrations/host_app_info_plist_migration.dart' ;
10
11
import 'package:flutter_tools/src/ios/migrations/ios_deployment_target_migration.dart' ;
11
12
import 'package:flutter_tools/src/ios/migrations/project_base_configuration_migration.dart' ;
12
13
import 'package:flutter_tools/src/ios/migrations/project_build_location_migration.dart' ;
13
14
import 'package:flutter_tools/src/ios/migrations/remove_bitcode_migration.dart' ;
14
15
import 'package:flutter_tools/src/ios/migrations/remove_framework_link_and_embedding_migration.dart' ;
15
16
import 'package:flutter_tools/src/ios/migrations/xcode_build_system_migration.dart' ;
17
+ import 'package:flutter_tools/src/ios/xcodeproj.dart' ;
18
+ import 'package:flutter_tools/src/migrations/cocoapods_script_symlink.dart' ;
16
19
import 'package:flutter_tools/src/migrations/xcode_project_object_version_migration.dart' ;
17
20
import 'package:flutter_tools/src/migrations/xcode_script_build_phase_migration.dart' ;
18
21
import 'package:flutter_tools/src/reporting/reporting.dart' ;
19
22
import 'package:flutter_tools/src/xcode_project.dart' ;
20
23
import 'package:test/fake.dart' ;
21
24
22
25
import '../../src/common.dart' ;
26
+ import '../../src/fake_process_manager.dart' ;
23
27
24
28
void main () {
25
29
group ('iOS migration' , () {
@@ -900,6 +904,104 @@ platform :ios, '11.0'
900
904
expect ('Disabling deprecated bitcode Xcode build setting' .allMatches (testLogger.warningText).length, 1 );
901
905
});
902
906
});
907
+
908
+ group ('CocoaPods script readlink' , () {
909
+ late MemoryFileSystem memoryFileSystem;
910
+ late BufferLogger testLogger;
911
+ late FakeIosProject project;
912
+ late File podRunnerFrameworksScript;
913
+ late ProcessManager processManager;
914
+ late XcodeProjectInterpreter xcode143ProjectInterpreter;
915
+
916
+ setUp (() {
917
+ memoryFileSystem = MemoryFileSystem ();
918
+ podRunnerFrameworksScript = memoryFileSystem.file ('Pods-Runner-frameworks.sh' );
919
+ testLogger = BufferLogger .test ();
920
+ project = FakeIosProject ();
921
+ processManager = FakeProcessManager .any ();
922
+ xcode143ProjectInterpreter = XcodeProjectInterpreter .test (processManager: processManager, version: Version (14 , 3 , 0 ));
923
+ project.podRunnerFrameworksScript = podRunnerFrameworksScript;
924
+ });
925
+
926
+ testWithoutContext ('skipped if files are missing' , () {
927
+ final CocoaPodsScriptReadlink iosProjectMigration = CocoaPodsScriptReadlink (
928
+ project,
929
+ xcode143ProjectInterpreter,
930
+ testLogger,
931
+ );
932
+ iosProjectMigration.migrate ();
933
+ expect (podRunnerFrameworksScript.existsSync (), isFalse);
934
+
935
+ expect (testLogger.traceText, contains ('CocoaPods Pods-Runner-frameworks.sh script not found' ));
936
+ expect (testLogger.statusText, isEmpty);
937
+ });
938
+
939
+ testWithoutContext ('skipped if nothing to upgrade' , () {
940
+ const String contents = r'''
941
+ if [ -L "${source}" ]; then
942
+ echo "Symlinked..."
943
+ source="$(readlink -f "${source}")"
944
+ fi''' ;
945
+ podRunnerFrameworksScript.writeAsStringSync (contents);
946
+
947
+ final CocoaPodsScriptReadlink iosProjectMigration = CocoaPodsScriptReadlink (
948
+ project,
949
+ xcode143ProjectInterpreter,
950
+ testLogger,
951
+ );
952
+ iosProjectMigration.migrate ();
953
+ expect (podRunnerFrameworksScript.existsSync (), isTrue);
954
+ expect (testLogger.traceText, isEmpty);
955
+ expect (testLogger.statusText, isEmpty);
956
+ });
957
+
958
+ testWithoutContext ('skipped if Xcode version below 14.3' , () {
959
+ const String contents = r'''
960
+ if [ -L "${source}" ]; then
961
+ echo "Symlinked..."
962
+ source="$(readlink "${source}")"
963
+ fi''' ;
964
+ podRunnerFrameworksScript.writeAsStringSync (contents);
965
+
966
+ final XcodeProjectInterpreter xcode142ProjectInterpreter = XcodeProjectInterpreter .test (
967
+ processManager: processManager,
968
+ version: Version (14 , 2 , 0 ),
969
+ );
970
+
971
+ final CocoaPodsScriptReadlink iosProjectMigration = CocoaPodsScriptReadlink (
972
+ project,
973
+ xcode142ProjectInterpreter,
974
+ testLogger,
975
+ );
976
+ iosProjectMigration.migrate ();
977
+ expect (podRunnerFrameworksScript.existsSync (), isTrue);
978
+ expect (testLogger.traceText, contains ('Detected Xcode version is 14.2.0, below 14.3, skipping "readlink -f" workaround' ));
979
+ expect (testLogger.statusText, isEmpty);
980
+ });
981
+
982
+ testWithoutContext ('Xcode project is migrated' , () {
983
+ const String contents = r'''
984
+ if [ -L "${source}" ]; then
985
+ echo "Symlinked..."
986
+ source="$(readlink "${source}")"
987
+ fi''' ;
988
+ podRunnerFrameworksScript.writeAsStringSync (contents);
989
+
990
+ final CocoaPodsScriptReadlink iosProjectMigration = CocoaPodsScriptReadlink (
991
+ project,
992
+ xcode143ProjectInterpreter,
993
+ testLogger,
994
+ );
995
+ iosProjectMigration.migrate ();
996
+ expect (podRunnerFrameworksScript.readAsStringSync (), r'''
997
+ if [ -L "${source}" ]; then
998
+ echo "Symlinked..."
999
+ source="$(readlink -f "${source}")"
1000
+ fi
1001
+ ''' );
1002
+ expect (testLogger.statusText, contains ('Upgrading Pods-Runner-frameworks.sh' ));
1003
+ });
1004
+ });
903
1005
});
904
1006
905
1007
group ('update Xcode script build phase' , () {
@@ -1025,6 +1127,9 @@ class FakeIosProject extends Fake implements IosProject {
1025
1127
1026
1128
@override
1027
1129
File podfile = MemoryFileSystem .test ().file ('Podfile' );
1130
+
1131
+ @override
1132
+ File podRunnerFrameworksScript = MemoryFileSystem .test ().file ('podRunnerFrameworksScript' );
1028
1133
}
1029
1134
1030
1135
class FakeIOSMigrator extends ProjectMigrator {
0 commit comments