gpt4 book ai didi

ios - Crashlytics 在 iOS 键盘扩展中不起作用

转载 作者:行者123 更新时间:2023-11-29 12:19:25 25 4
gpt4 key购买 nike

我正在使用最新版本的 FabricFabric/Crashlytics cocoapods(因此,根据调试器输出,版本 3.0.8)将 Crashlytics 集成到一个iOS 键盘扩展。最近,它只是停止报告键盘扩展的崩溃。我已经检查了初始化 Crashlytics 的代码和项目的 Crashlytics 脚本构建阶段,两者都已执行(并且构建阶段在我的键盘扩展的目标中)。

很难判断这是否相关,但当我运行应用程序时,我看到 Crashlytics 尝试提交崩溃,

[Crashlytics:Crash:Reports] 提交异步/var/mobile/Containers/Data/PluginKitPlugin/[some-numbers]/Library/Caches/com.crashlytics.data/com.myCompnay.myApp.extension/v3/prepared/[some-more-numbers-idk-if-they're-supposed-to-be-secret].multipartmime

然后是相应数量的消息阅读

2015-06-25 09:22:33.063 com.myCompany.myApp.extension[5975:1649412] 试图在已失效的 session 中创建任务

让我相信这是 Crashlytics 中的错误。最新版本的变更日志提到了后台任务的问题

修复了在扩展中错误地默认启用 NSURLSession 后台上传的问题

这有关系吗?有没有人遇到并解决了这个问题?

最佳答案

发布这篇文章几分钟后,我突然想到要在 [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:] 上设置符号断点,而不是在我过去尝试过的方法上设置。在 Crashlytics 代码中遇到了断点。

为了解决这个问题,我用一个返回默认配置的方法调配了 backgroundSessionConfigurationWithIdentifer:。实现如下:

static Class URLSessionClass;

@implementation NSURLSessionConfiguration (FixCrashlyticsBug)

+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
URLSessionClass = object_getClass((id)self);
});
}

+ (NSURLSessionConfiguration *)defaultSessionConfigurationWithIdentifier:(NSString *)__unused identifer {
return [self defaultSessionConfiguration];
}

@end

@implementation CrashlyticsInterfaceManager

+ (void)startCrashlyticsFromExtension {
//Do the swizzle here instead of in load, so we don't do it in the container app as well
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
SEL originalSelector = @selector(defaultSessionConfigurationWithIdentifier:);
SEL swizzledSelector = @selector(backgroundSessionConfigurationWithIdentifier:);
Class class = URLSessionClass;
Method swizzledMethod = class_getClassMethod(class, swizzledSelector);
Method originalMethod = class_getClassMethod(class, originalSelector);
BOOL didAddMethod = class_addMethod(class,
originalSelector,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
swizzledSelector,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
[Crashlytics startWithAPIKey:@"MyAPIKey"];
});
}

@end

关于ios - Crashlytics 在 iOS 键盘扩展中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com