2019-07-02 16:23:05.163526+0800 PCAuto[11680:2784550] [IMFBase] 捕捉到应用崩溃日志:[Application Receive SIGPIPE Signal]
(
"0 libsystem_platform.dylib 0x00000001fdfb59e0 <redacted> + 40",
"1 libsystem_kernel.dylib 0x00000001fdf3337c mach_msg + 72",
"2 CoreFoundation 0x00000001fe339ad8 <redacted> + 236",
"3 CoreFoundation 0x00000001fe334974 <redacted> + 1396",
"4 CoreFoundation 0x00000001fe3340e0 CFRunLoopRunSpecific + 436",
"5 GraphicsServices 0x00000002005ad584 GSEventRunModal + 100",
"6 UIKitCore 0x000000022b584c00 UIApplicationMain + 212",
"7 PCAuto 0x0000000100fcca88 main + 124",
"8 libdyld.dylib 0x00000001fddf2bb4 <redacted> + 4"
)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误日志和问题描述,崩溃的原因可能与iOS应用在后台运行时的资源管理机制有关。以下是详细分析和解决方案:
SIGPIPE信号导致崩溃
错误日志中显示[Application Receive SIGPIPE Signal]
,这表明应用尝试向一个已经关闭的管道(socket)写入数据,从而触发了系统发送的SIGPIPE
信号。
SIGPIPE
信号,进而导致崩溃。后台处理未正确配置
iOS SDK默认仅支持前台处理。如果未对后台模式进行配置,应用进入后台后可能会暂停录音或网络连接,导致语音识别服务中断。
NIsDemo同样崩溃
您提到官方示例工程NIsDemo
也出现了同样的问题,这进一步表明问题可能与SDK的默认配置或iOS系统的后台限制有关。
为了支持语音识别在后台运行,需要对iOS工程进行以下配置:
- 步骤1:添加后台模式权限
在Info.plist
文件中添加Required background modes
配置,并设置以下值:
- App plays audio or streams audio/video using AirPlay
这允许应用在后台继续播放音频或处理音频流。
NLSVoiceRecorder.m
文件中的_appResignActive
接口,确保在该接口中不调用停止录音的方法。为了避免因SIGPIPE
信号导致的崩溃,可以在应用启动时忽略该信号:
- 代码示例
在AppDelegate.m
的application:didFinishLaunchingWithOptions:
方法中添加以下代码:
#import <signal.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 忽略SIGPIPE信号
signal(SIGPIPE, SIG_IGN);
return YES;
}
这样可以防止因向已关闭的连接写入数据而导致的崩溃。
在应用从后台返回前台时,建议检查语音识别服务的连接状态,并在必要时重新初始化SDK:
- 代码示例
- (void)applicationWillEnterForeground:(UIApplication *)application {
// 检查语音识别连接状态
if ([_nui isInitialized]) {
[_nui nui_release];
}
// 重新初始化SDK
NSString *initParam = [self genInitParams];
[_nui nui_initialize:[initParam UTF8String] logLevel:LOG_LEVEL_VERBOSE saveLog:NO];
}
这可以确保语音识别服务在应用返回前台时处于正常状态。
完成上述修改后,请按照以下步骤验证问题是否解决:
1. 将应用推到后台并保持一段时间(如10分钟)。
2. 重新进入语音识别界面,观察是否仍然发生崩溃。
3. 如果问题仍未解决,请检查是否有其他后台任务或资源占用导致冲突。
app_key
、ak_id
、ak_secret
等敏感信息,以免造成资费损失或安全风险。通过以上步骤,您可以有效解决因后台运行导致的语音识别崩溃问题。如果仍有疑问或需要进一步支持,请随时联系阿里云技术支持团队。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。