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