无法识别的选择器 +[AFAnalytics sharedAnalytics]?
Unrecognised selector +[AFAnalytics sharedAnalytics]?
我目前正在为 iOS 12 准备我的应用程序,但是每当我点击任何 UITextField
或 UITextView
应用程序崩溃并且我收到此无法识别的选择器错误。
我试过的
- 他们的代表链接到文件所有者(是的,我知道 - 旧术语)但不喜欢所有内容并停止在
UIViewController
中引用它,但仍然收到相同的崩溃和错误消息。
- 添加了一个全新的
UITextView
/UITextField
但同样的崩溃错误。
- 网上到处找,没有什么有用的。
- 仅在 iOS 12 时崩溃。 iOS 11 岁及以下工作完美,没有问题。
- App使用了Firebase、Crashlytics/Fabric等第三方库,都使用了最新的SDK/API版本。
我发现的最接近的东西是 AFAnalytics.h
是 AssistantServices.framework
的一部分,我在 Xcode 10 Beta 6 和 public 中都找不到Xcode9??
老实说,我开始 运行 没有想法了,所以任何帮助尝试解决这个问题的帮助都是巨大的。
我正在写Objective-C。
完整堆栈跟踪:http://crashes.to/s/dd22fb06f7b
更新 - 2/09/2018
- 奇怪的是,在界面生成器中将 Keyboard Type
设置为 E-mail Address
该字段工作得很好。将其设置为任何其他值会使应用程序崩溃。
更新 - 2018 年 9 月 14 日
另一个崩溃日志似乎表明错误围绕 [UIDictationConnection analytics]
?
这对任何人都有意义吗? - 这是来自 Apple 的崩溃报告。
更新 - 2/10/2018
我发现了这个错误信息:
Class AFAnalytics is implemented in both /Users/ashleyrichards/Library/Developer/CoreSimulator/Devices/C155EF28-3C0B-4AFF-9EF6-0235295A26DC/data/Containers/Bundle/Application/562B100D-F657-424E-8B77-99D0325F6035/Social Dummy.app/Social Dummy (0x10a33d610) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AssistantServices.framework/AssistantServices (0x13654d178). One of the two will be used. Which one is undefined.
我搜索了我的整个项目,但没有找到任何与 AFAnalytics
有关的 class。
作为记录,我不想使用 AFAnalytics
。我什至不知道它的作用。我该如何摆脱它?
我找到了防止崩溃的解决方法。我们可以使用 iOS 运行时来调整 class 方法。主要思想是将消息从 +[AFAnalytics sharedAnalytics]
重定向到 +[iOS12AFAnalyticsBug newSharedAnalytics]
。 Class 方法 "newSharedAnalytics" 故意 returns nil 和消息到 nil 不会导致崩溃。但请谨慎使用此解决方法,因为您应用中的某些代码出于某些目的使用了 AFAnalytics。
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[iOS12AFAnalyticsBug fix];
//your code
}
iOS12AFAnalyticsBug.h
@interface iOS12AFAnalyticsBug : NSObject
+ (void)fix;
@end
iOS12AFAnalyticsBug.m
#import "iOS12AFAnalyticsBug.h"
#include <objc/message.h>
void SwizzleClassMethod(Class originClass, SEL originSelector, Class destClass, SEL newSelector) {
Method originMethod = class_getClassMethod(originClass, originSelector);
Method newMethod = class_getClassMethod(destClass, newSelector);
originClass = object_getClass((id)originClass);
if (class_addMethod(originClass, originSelector, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) {
class_replaceMethod(originClass, newSelector, method_getImplementation(originMethod), method_getTypeEncoding(originMethod));
} else {
method_exchangeImplementations(originMethod, newMethod);
}
}
@implementation iOS12AFAnalyticsBug
+ (instancetype)newSharedAnalytics {
return nil; //All messages to nil won't cause a crash
}
+ (void)fix {
Class originClass = NSClassFromString(@"AFAnalytics");
SEL originSelector = NSSelectorFromString(@"sharedAnalytics");
SwizzleClassMethod(originClass, originSelector, self.class, @selector(newSharedAnalytics));
}
@end
我目前正在为 iOS 12 准备我的应用程序,但是每当我点击任何 UITextField
或 UITextView
应用程序崩溃并且我收到此无法识别的选择器错误。
我试过的
- 他们的代表链接到文件所有者(是的,我知道 - 旧术语)但不喜欢所有内容并停止在
UIViewController
中引用它,但仍然收到相同的崩溃和错误消息。 - 添加了一个全新的
UITextView
/UITextField
但同样的崩溃错误。 - 网上到处找,没有什么有用的。
- 仅在 iOS 12 时崩溃。 iOS 11 岁及以下工作完美,没有问题。
- App使用了Firebase、Crashlytics/Fabric等第三方库,都使用了最新的SDK/API版本。
我发现的最接近的东西是 AFAnalytics.h
是 AssistantServices.framework
的一部分,我在 Xcode 10 Beta 6 和 public 中都找不到Xcode9??
老实说,我开始 运行 没有想法了,所以任何帮助尝试解决这个问题的帮助都是巨大的。
我正在写Objective-C。
完整堆栈跟踪:http://crashes.to/s/dd22fb06f7b
更新 - 2/09/2018
- 奇怪的是,在界面生成器中将 Keyboard Type
设置为 E-mail Address
该字段工作得很好。将其设置为任何其他值会使应用程序崩溃。
更新 - 2018 年 9 月 14 日
另一个崩溃日志似乎表明错误围绕 [UIDictationConnection analytics]
?
这对任何人都有意义吗? - 这是来自 Apple 的崩溃报告。
更新 - 2/10/2018 我发现了这个错误信息:
Class AFAnalytics is implemented in both /Users/ashleyrichards/Library/Developer/CoreSimulator/Devices/C155EF28-3C0B-4AFF-9EF6-0235295A26DC/data/Containers/Bundle/Application/562B100D-F657-424E-8B77-99D0325F6035/Social Dummy.app/Social Dummy (0x10a33d610) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/AssistantServices.framework/AssistantServices (0x13654d178). One of the two will be used. Which one is undefined.
我搜索了我的整个项目,但没有找到任何与 AFAnalytics
有关的 class。
作为记录,我不想使用 AFAnalytics
。我什至不知道它的作用。我该如何摆脱它?
我找到了防止崩溃的解决方法。我们可以使用 iOS 运行时来调整 class 方法。主要思想是将消息从 +[AFAnalytics sharedAnalytics]
重定向到 +[iOS12AFAnalyticsBug newSharedAnalytics]
。 Class 方法 "newSharedAnalytics" 故意 returns nil 和消息到 nil 不会导致崩溃。但请谨慎使用此解决方法,因为您应用中的某些代码出于某些目的使用了 AFAnalytics。
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[iOS12AFAnalyticsBug fix];
//your code
}
iOS12AFAnalyticsBug.h
@interface iOS12AFAnalyticsBug : NSObject
+ (void)fix;
@end
iOS12AFAnalyticsBug.m
#import "iOS12AFAnalyticsBug.h"
#include <objc/message.h>
void SwizzleClassMethod(Class originClass, SEL originSelector, Class destClass, SEL newSelector) {
Method originMethod = class_getClassMethod(originClass, originSelector);
Method newMethod = class_getClassMethod(destClass, newSelector);
originClass = object_getClass((id)originClass);
if (class_addMethod(originClass, originSelector, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) {
class_replaceMethod(originClass, newSelector, method_getImplementation(originMethod), method_getTypeEncoding(originMethod));
} else {
method_exchangeImplementations(originMethod, newMethod);
}
}
@implementation iOS12AFAnalyticsBug
+ (instancetype)newSharedAnalytics {
return nil; //All messages to nil won't cause a crash
}
+ (void)fix {
Class originClass = NSClassFromString(@"AFAnalytics");
SEL originSelector = NSSelectorFromString(@"sharedAnalytics");
SwizzleClassMethod(originClass, originSelector, self.class, @selector(newSharedAnalytics));
}
@end