使用带有 SecKeyGetBlockSize 的 IBM MobileFirst Platform 启动后,应用程序立即失败
Posted
技术标签:
【中文标题】使用带有 SecKeyGetBlockSize 的 IBM MobileFirst Platform 启动后,应用程序立即失败【英文标题】:App fails right after start with IBM MobileFirst Platform with SecKeyGetBlockSize 【发布时间】:2017-05-17 19:39:26 【问题描述】:我们有很多用户,但只有几个有这个问题。该应用程序在启动后立即崩溃。 Bitcode 和 ATS 都被禁用。什么可能导致此问题?谢谢
Hardware Model: iPhone9,3
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Date/Time: 2017-05-16 18:05:01.2852 -0400
Launch Time: 2017-05-16 18:04:57.4399 -0400
OS Version: iPhone OS 10.3.1 (14E304)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [0]
Triggered by Thread: 0
Thread 0 name:
Thread 0 Crashed:
SecKeyGetBlockSize + 0 (SecKey.c:696)
WLCertManager signData:privateKey:] + 276 (WLCertManager.m:525)
[WLDeviceAuthManager signDeviceAuth:entity:isPEnabled:] + 1168 (WLDeviceAuthManager.m:173)
[BaseProvisioningChallengeHandler onDeviceAuthDataReady:] + 172 (BaseProvisioningChallengeHandler.m:162)
[BaseDeviceAuthChallengeHandler getDeviceAuthDataAsync:] + 1308 (BaseDeviceAuthChallengeHandler.m:58)
[BaseProvisioningChallengeHandler handleChallenge:] + 1040 (BaseProvisioningChallengeHandler.m:138)
[WLRequest startHandleChallenges:httpRequest:]_block_invoke + 484 (WLRequest.m:606)
[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:]_block_invoke + 136 (NSDictionary.m:680)
[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 180 (NSDictionary.m:692)
[WLRequest startHandleChallenges:httpRequest:] + 256 (WLRequest.m:598)
[WLRequest requestFailed:error:] + 604 (WLRequest.m:505)
[WLAFHTTPRequestOperationManagerWrapper requestFailed:error:] + 2020 (WLAFHTTPRequestOperationManagerWrapper.m:396)
[WLAFHTTPRequestOperationManagerWrapper start]_block_invoke229 + 112 (WLAFHTTPRequestOperationManagerWrapper.m:340)
[WLAFHTTPRequestOperation setCompletionBlockWithSuccess:failure:]_block_invoke42 + 112 (WLAFHTTPRequestOperation.m:141)
dispatch_call_block_and_release + 24 (init.c:963)
_dispatch_main_queue_callback_4CF + 444 (inline_internal.h:2417)
__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 (CFRunLoop.c:1793)
__CFRunLoopRun + 1572 (CFRunLoop.c:3004)
CFRunLoopRunSpecific + 424 (CFRunLoop.c:3113)
GSEventRunModal + 100 (GSEvent.c:2245)
UIApplicationMain + 208 (UIApplication.m:4089)
main + 200 (main.swift:12)
libdyld.dylib 0x000000018eeb559c start + 4
完整日志在这里https://drive.google.com/open?id=0B1GqBSG2XUgZYmhJVGFRakFtWUU
它看起来就像我们正在做的时候发生的那样
private lazy var client: WLClient = WLClient.sharedInstance()
self.client.wlConnectWithDelegate(SomeDelegate)
MFP 版本 = 7.1-2016/07/11
【问题讨论】:
您能解释一下您正在使用哪个应用程序以及它在做什么吗?应用程序似乎首先失败,然后在错误处理中崩溃。代码的堆栈跟踪显示 MFP 版本 7.1 或更低,但了解 MFP 的确切版本会有所帮助。即使是应用程序执行的线路跟踪也将有助于进一步调试。 MFP 版本 = 7.1-2016/07/11。我可以给你发电子邮件吗?这里没有足够的空间来附加跟踪。谢谢 请上传到文件共享服务并共享链接 我添加了更多有问题的数据。谢谢 【参考方案1】:EXC_BAD_ACCESS
是由空指针引用引起的。我之前在多次调用 wlConnectWithDelegate 时看到过这种情况。
我会尝试像这样使用 Swift 的 dispatch_once_t
单例:
var token: dispatch_once_t = 0
dispatch_once(&token)
//Make sure you register all challenge handlers then connect
WLClient.sharedInstance().wlConnectWithDelegate(SomeDelegate)
【讨论】:
【参考方案2】:异常看起来像 MobileFirst SDK 中的钥匙串访问错误。 MobileFirst 在 7.1 中不支持后台模式。请确保您的应用未尝试从后台运行 MobileFirst 连接 API。此外,请确保在 Targets->Capabilities 中启用“KeyChain Sharing”。
【讨论】:
1. Xcode 7 是否强制要求“钥匙串共享”?我们仍在使用 Xcode 7。文档说它对于 Xcode 8 (mobilefirstplatform.ibmcloud.com/blog/2016/09/16/…) 是强制性的,并且所有崩溃都发生在真实设备中。 2. 启动后立即发生崩溃,大约 4 秒,日志告诉“前台”中的应用程序。 您的日志显示 ios 版本为“iPhone OS 10.3.1”。当您在设备上运行时,钥匙串共享无关紧要。在后台或锁定手机屏幕上的应用程序曾经出现类似错误。我们为此提供了一些修复。在这一点上,我可以建议你跟随。 1. 尝试使用最新的 ifix for MFP 7.1。从今年开始,我们做了一些钥匙串处理修复。 2. 如果 #1 不能解决您的问题,请在 IBM 支持下打开 PMR,让我们知道您是否可以尝试使用调试版本。以便我们进一步帮助您。【参考方案3】:已针对 MobileFirst 7.1 修复并发布该问题
【讨论】:
以上是关于使用带有 SecKeyGetBlockSize 的 IBM MobileFirst Platform 启动后,应用程序立即失败的主要内容,如果未能解决你的问题,请参考以下文章
HBase - 使用带有值列表的一列与使用带有列列表的一列族的优缺点是啥?
使用带有 ajax Rest 调用的 Spring CSRF 和带有 Thymeleaf 的 HTML 页面
如何使用带有或不带有 Appium 的 Robot Framework 集成 WinAppDriver?
如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?