构建Flutter iOS模拟器应用时遇Xcode符号未定义错误求助
Flutter iOS模拟器构建失败:Undefined symbol: _swift_FORCE_LOAD$_swiftCompatibility56
构建Flutter iOS应用到模拟器时失败,报错信息:
Error (Xcode): Undefined symbol: _swift_FORCE_LOAD$_swiftCompatibility56
环境信息
- Flutter版本:3.22.2
- Xcode版本:14.2.0
- CocoaPods版本:1.15.2
- iOS部署目标:15.0
- Swift版本:5.0
项目依赖项
dependencies: cupertino_icons: ^1.0.6 firebase_core: ^3.1.1 firebase_auth: ^5.1.1 google_sign_in: ^6.2.1 another_flutter_splash_screen: ^1.2.0 google_nav_bar: ^5.0.6 provider: ^6.1.2 flutter_splash_screen: ^3.0.0 sign_in_button: ^3.2.0 cloud_firestore: ^5.0.2 intl: ^0.19.0 image_picker: ^1.1.2 permission_handler: ^11.3.1 http: ^1.2.1 device_preview: ^1.2.0 firebase_messaging: ^15.0.2 location: ^7.0.0 url_launcher: ^6.0.20 google_maps_flutter: ^2.7.0
核心代码
main.dart 关键部分
void main() async { WidgetsFlutterBinding.ensureInitialized(); FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); try { await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); } catch (e) { print("Error initializing Firebase: $e"); return; } runApp(MyApp()); } Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); print("Handling a background message: ${message.messageId}"); } class MyApp extends StatelessWidget { const MyApp({super.key}); Future<String> getCurrentUserId() async { final user = FirebaseAuth.instance.currentUser; if (user == null) { return ''; } return user.uid; } @override Widget build(BuildContext context) { return FutureBuilder<String>( future: getCurrentUserId(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( body: Center( child: CircularProgressIndicator(), ), ), ); } else if (snapshot.hasError) { print("Error getting user ID: ${snapshot.error}"); return const MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( body: Center( child: Text('Failed to get user ID'), ), ), ); } else if (!snapshot.hasData || snapshot.data!.isEmpty) { print("No user ID available"); return const MaterialApp( debugShowCheckedModeBanner: false, home: AuthPage(), ); } else { final userId = snapshot.data!; return MultiProvider( providers: [ ChangeNotifierProvider<BalanceNotifier>( create: (context) => BalanceNotifier(userId), ), ChangeNotifierProvider<Cart>( create: (context) => Cart(), ), ChangeNotifierProvider<ThemeNotifier>( create: (context) => ThemeNotifier(), ), ], child: Consumer<ThemeNotifier>( builder: (context, themeNotifier, child) { return MaterialApp( debugShowCheckedModeBanner: false, theme: lightMode, darkTheme: darkMode, themeMode: themeNotifier.currentTheme, initialRoute: '/', routes: { '/': (context) => const SplashScreen(), '/ProfilePage': (context) => ProfilePage(), }, onGenerateRoute: (settings) { if (settings.name == '/TransfertPage') { final args = settings.arguments as Map<String, dynamic>; return MaterialPageRoute( builder: (context) => TransfertPage( total: args['total'], userId: args['userId'], pinController: args['pinController'], ), ); } return null; }, ); }, ), ); } }, ); } }
认证服务代码
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; class AuthService { // Google Sign In Future<UserCredential> signInWithGoogle() async { // Trigger the authentication flow final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn(); // Obtain the auth details from the request final GoogleSignInAuthentication googleAuth = await googleUser!.authentication; // Create a new credential final credential = GoogleAuthProvider.credential( accessToken: googleAuth.accessToken, idToken: googleAuth.idToken, ); // Once signed in, return the UserCredential return await FirebaseAuth.instance.signInWithCredential(credential); } } Future<void> _updateDeviceToken(String userId) async { String? deviceToken = await FirebaseMessaging.instance.getToken(); if (deviceToken != null) { await FirebaseFirestore.instance.collection('users').doc(userId).update({ 'deviceToken': deviceToken, }); } }
已尝试的解决步骤
- 更新iOS部署目标至15.0:
- 修改
Podfile设置platform :ios, '15.0' - 在Xcode项目设置中把
iOS Deployment Target设为15.0
- 修改
- 清理并重新安装依赖:
- 执行
flutter clean - 删除
Pods和Podfile.lock - 执行
pod install
- 执行
- 验证依赖兼容性:
- 检查所有依赖是否兼容Swift 5和iOS 15.0
- 修改Xcode构建设置:
- 确保
Swift Language Version设为5.0 - 在
Framework Search Paths和Other Linker Flags中添加$(inherited)
- 确保
以上步骤均未解决问题,仍提示相同错误,寻求可行的解决建议。
内容的提问来源于stack exchange,提问作者Whirley Paul
相关产品推荐
相关产品推荐

