Expo44: expo build ios成功但eas build ios报AppDelegate.m重复声明
Expo 44 iOS端构建与安装异常修复方案
问题1:expo build ios 构建产物上传TestFlight后安装失败,提示“the requested app is not available or doesn't exist”
按以下优先级排查修复:
- 核对构建配置的Bundle ID与App Store Connect中对应应用的Bundle ID完全一致,多环境、多应用切换配置时极易出现ID错配问题
- 确认构建版本状态:刚上传TestFlight的构建包会有10-30分钟的后台处理窗口期,状态未变为「可供测试」时点击安装必然触发该报错,等待状态更新后重试即可
- 校验分发证书类型:构建时如果误用Ad Hoc分发证书而非App Store分发证书,生成的包无法通过TestFlight正常分发,需要重新选择App Store类型的证书与匹配的描述文件重新构建
- 确认测试权限:内部测试人员需要提前被加入App Store Connect的内部测试组,外部测试包需要先通过苹果TestFlight审核,未授权的设备点击安装也会出现该提示
问题2:eas build -p ios 编译阶段报AppDelegate.m重复方法声明错误
根因
AppDelegate.m文件中重复实现了application:openURL:options:方法,Objective-C不允许同一个类中存在两个相同签名的实例方法,因此编译直接失败。该问题一般是配置深度链接、第三方原生SDK时自动注入代码,和Expo默认模板自带的方法冲突导致,即使没有手动修改过该文件也可能出现。
修复方式
- 打开项目路径下的
ios/kimxyfrontendapp/AppDelegate.m文件,删除文件末尾重复的方法实现:
// 需要删除的重复代码段 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { return [RCTLinkingManager application:application openURL:url options:options]; }
- 保留文件中已有的Linking API处理方法即可,该实现已经覆盖了系统跳转、RCTLinkingManager的回调逻辑,无需重复定义:
// Linking API - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]; }
- 如果是Expo托管项目,不想手动修改原生文件,可以先执行
expo prebuild --clean清理原生构建目录,备份好必要的原生配置后重新触发EAS构建即可。
构建日志中出现的watchOS扩展点缺失、字体访问权限相关提示属于Xcode常规警告,不是本次构建失败的诱因,无需额外处理。
内容的提问来源于stack exchange,提问作者Jin-Hwan Kim
相关产品推荐
相关产品推荐

