我正在将 Expo 应用程序从 React Native 0.63 升级到 0.71,并在我的 AppDelegate.m 文件中遇到此错误。
// Linking API
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// error below
return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
}
// Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
}
@end
我对 Objective C 不太熟悉,所以我不确定如何解决这个问题。错误发生在注释“error below”下方的行,错误如下
No visible @interface for 'EXAppDelegateWrapper' declares the selector 'application:openURL:options:'
您是否尝试过在 xcode 中将 AppDelegate.m(一个“m”)文件重命名为 AppDelegate.mm(两个“m”)?
从 React Native 0.68.2 升级到 0.70.8 以及从 Expo 46 升级到 47 时,我遇到了类似的错误:
no visible @interface for 'EXAppDelegateWrapper' declares the selector 'application:didFinishLaunchingWithOptions:'
将我的 AppDelegate.m 文件重命名为 .mm 就成功了。
两个文件扩展名之间的主要区别是 AppDelegate.mm 允许您包含 Objective-C、C++ 或 Objective-C++,但 AppDelegate.m 只允许 Objective-C 代码。
很可能
EXAppDelegateWrapper
(来自 expo-modules-core)已更新为包含 C++ 或 ObjectiveC++,这就是在我的情况下使用 AppDelegate.m 文件构建失败的原因。