React Native iOS 构建失败“无法执行命令:分段错误:11”

Posted

技术标签:

【中文标题】React Native iOS 构建失败“无法执行命令:分段错误:11”【英文标题】:React Native iOS build failing "unable to execute command: Segmentation fault: 11" 【发布时间】:2017-04-10 20:41:59 【问题描述】:

我是一名 Web 开发人员,我是第一次构建 React Native 应用程序。 在我添加了对推送通知的 FCM 支持之前,该应用程序一直在运行和编译。

我按照React-Native-FCM 的所有说明使用 CocoaPods。

现在通过构建 xCode 失败并出现以下错误:

clang: error: unable to execute command: Segmentation fault: 11
clang: error: linker command failed due to signal (use -v to see invocation)

我的 AppDelegate 文件如下所示:

// // 版权所有 (c) 2016 Google Inc. // // 根据 Apache 许可证 2.0 版(“许可证”)获得许可; // 除非遵守许可证,否则您不得使用此文件。 // 您可以在以下网址获取许可证副本 // // http://www.apache.org/licenses/LICENSE-2.0 // // 除非适用法律要求或书面同意,否则软件 //根据许可分发是在“原样”基础上分发的, // 不提供任何明示或暗示的保证或条件。 // 请参阅许可证以了解特定语言的管理权限和 // 许可证下的限制。 // #import "AppDelegate.h" #import "RCTBundleURLProvider.h" #import "RCTRootView.h" #import "RNFIRMessaging.h" // 从 Apple 的标头中复制,以防在某些情况下(例如 Xcode 8 之前的版本)丢失。 #ifndef NSFoundationVersionNumber_ios_9_x_Max #define NSFoundationVersionNumber_iOS_9_x_Max 1299 #万一 @implementation AppDelegate - (BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NSURL *jsCodeLocation; jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 模块名称:@“妈妈” 初始属性:无 启动选项:启动选项]; rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UIViewController *rootViewController = [UIViewController new]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; [FIRApp 配置]; #如果定义(__IPHONE_10_0)&& __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self]; #万一 返回是; #如果定义(__IPHONE_10_0)&& __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler [[NSNotificationCenter defaultCenter] postNotificationName:FCMNotificationReceived object:self userInfo:notification.request.content.userInfo]; if([[notification.request.content.userInfo valueForKey:@"show_in_foreground"] isEqual:@YES]) 完成处理程序(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound); 别的 完成处理程序(UNNotificationPresentationOptionNone); - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler NSDictionary* userInfo = [[NSMutableDictionary alloc] initWithDictionary: response.notification.request.content.userInfo]; [userInfo setValue:@YES forKey:@"opened_from_tray"]; [[NSNotificationCenter defaultCenter] postNotificationName:FCMNotificationReceived object:self userInfo:userInfo]; #别的 //如果不想使用本地通知可以跳过这个方法 -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification [[NSNotificationCenter defaultCenter] postNotificationName:FCMNotificationReceived object:self userInfo:notification.userInfo]; #万一 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler [[NSNotificationCenter defaultCenter] postNotificationName:FCMNotificationReceived object:self userInfo:userInfo]; 完成处理程序(UIBackgroundFetchResultNoData); @结尾

我的 PodFile 是这样的:

目标“应用程序”做 使用_frameworks! # 应用程序的 Pod 吊舱“火力基地/核心” pod 'Firebase/消息传递' 目标“AppTests”做 继承! :search_paths # 用于测试的 Pod 结尾 结尾

有人遇到过这样的问题吗?我什至无法理解是什么原因造成的(因为错误消息的描述性不是很好)

【问题讨论】:

【参考方案1】:

使用一般的错误消息,您可能只会得到一般的答案。

试试:

a) 删除 #define NSFoundationVersionNumber_iOS_9_x_Max 1299 以获得提示,就好像您的工具链是否正确。

b) 关闭 Xcode 8.1(完全关闭,如使用 cmd+q),删除 DerivedData 文件夹,清空垃圾箱。并且只有在最后一步之后重新打开 Xcode,才能正确地重新构建缓存。

c) 确保您使用的是 CocoaPods 1.1.1。毫无疑问,您也可以更新其他工具。示例:sudo gem update -n /usr/local/bin --system && sudo gem update -n /usr/local/bin

d) use_frameworks!target 之前,因为我们通常这样做

e) pod deintegrate && pod install,重新正确集成 pod

f) 最后,克隆您的项目,并尝试从克隆的 repo 构建:如果可行,请删除旧 repo 并使用新 repo :)。如果它仍然失败,那么您可以开始删除代码片段,以尝试使用最少的测试用例获取配置,您可以在 CocoaPods 问题跟踪器上共享以进行调查。

【讨论】:

以上是关于React Native iOS 构建失败“无法执行命令:分段错误:11”的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac M1 上 React Native ios 构建失败

React Native ios 构建突然失败

构建失败:如何解决 React Native iOS 虚拟设备应用构建失败、CompileSwift 和 CompileC 失败?

React Native 和 RNFirebase iOS 版本构建失败

React Native iOS 构建失败“无法执行命令:分段错误:11”

RNAppAuth,iOS 构建失败,未知类型名称“命名空间”,react-native-app-auth