You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React Native iOS应用编译时出现Clang链接错误

解决React Native + Expo iOS编译符号缺失与Library文件夹为空问题

看起来你遇到的是纯RN项目后期集成Expo后,iOS端Unimodules(Expo核心模块系统)未正确链接导致的编译错误——那些缺失的UM*类都是Expo Unimodules的核心组件,再加上Library文件夹为空,说明项目没有正确引入这些依赖的源文件。以下是针对性的解决方案:

1. 确认Expo Unimodules依赖与Pod配置

首先检查项目是否完整安装了Unimodules相关依赖,并且Podfile配置正确:

  • 打开项目根目录的package.json,确认包含@unimodules/core@unimodules/react-native-adapter这两个依赖,如果没有,先安装:
    npm install @unimodules/core @unimodules/react-native-adapter
    
  • 进入ios目录,检查Podfile是否包含Unimodules的自动链接配置,正确的配置应该如下:
    require_relative '../node_modules/@unimodules/core/scripts/autolinking'
    require_relative '../node_modules/expo-universal-links/ios/podhelper'
    
    target '你的App名称' do
      use_unimodules!
      # 其他原有Pod配置...
    end
    
  • 如果Podfile缺少上述内容,添加后执行彻底的Pod重置:
    pod deintegrate && rm -rf Podfile.lock && rm -rf Pods && pod install
    

2. 修复AppDelegate的继承与导入

你的错误提示AppDelegate继承自UMAppDelegateWrapper但找不到该类,需要确认AppDelegate的代码配置:

  • 打开ios/你的App名称/AppDelegate.m(或.mm文件),检查顶部是否导入了Unimodules的头文件:
    #import <UMCore/UMAppDelegateWrapper.h>
    
  • 确认AppDelegate的类定义正确:
    @interface AppDelegate : UMAppDelegateWrapper
    
  • 如果是Swift项目,还要确保桥接文件(YourApp-Bridging-Header.h)中导入了<UMCore/UMAppDelegateWrapper.h>

3. 手动添加Unimodules项目到Xcode(解决Library文件夹为空)

Library文件夹为空说明Xcode没有识别到Unimodules的源文件,需要手动添加:

  • 关闭Xcode,打开项目的ios目录,找到node_modules/@unimodules/core/ios下的UMCore.xcodeproj,以及node_modules/@unimodules/react-native-adapter/ios下的UMReactNativeAdapter.xcodeproj
  • 重新打开Xcode的.xcworkspace文件,右键点击项目导航栏中的你的App名称,选择Add Files to "你的App名称"...
  • 分别选中刚才找到的两个.xcodeproj文件,点击Add,确保勾选"Copy items if needed"(如果远程Mac的路径有特殊权限,这一步能保证Xcode能读取到文件)
  • 进入项目的Build Phases -> Link Binary With Libraries,确认libUMCore.alibUMReactNativeAdapter.a已经在列表中,如果没有,点击+号搜索并添加它们

4. 清理Xcode缓存与项目构建文件

Xcode的缓存经常会导致奇怪的编译问题,执行以下步骤彻底清理:

  • 关闭Xcode
  • 删除Xcode的DerivedData缓存:
    rm -rf ~/Library/Developer/Xcode/DerivedData
    
  • 回到项目根目录,清理iOS构建文件:
    rm -rf ios/build
    
  • 再次执行Pod重置:
    pod deintegrate && rm Podfile.lock && pod install
    
  • 打开.xcworkspace,先执行Product > Clean Build Folder,再尝试编译

5. 检查RN与Expo版本兼容性

最后确认你的React Native版本和Expo SDK版本是兼容的,比如Expo SDK 49对应RN 0.72.x,版本不匹配会导致大量链接错误。可以在Expo官方文档中查看版本对应表,必要时升级或降级对应依赖。


内容的提问来源于stack exchange,提问作者Ben Owen

火山引擎 最新活动