You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:55:55