sinaweibosdk / weibo_ios_sdk

新浪微博 IOS SDK
http://weibo.com
Other
1.45k stars 566 forks source link

注册微博sdk的时候发生crash #357

Closed 0linatan0 closed 4 years ago

0linatan0 commented 6 years ago

注册微博sdk的时候发生crash

crash

urmyfaith commented 6 years ago

same problem.

urmyfaith commented 6 years ago

just add -ObjC in other-link-flag .

see http://blog.csdn.net/u012371575/article/details/78652718

clang --help | grep "\-ObjC"
0linatan0 commented 6 years ago

we already added -ObjC in other-link-flag , but the problem still exists.

SolaWing commented 6 years ago

同样的崩溃日志, 用otool查看是 advertisingIdentifier为00000000-0000-0000-0000-000000000000, 触发assert异常崩溃的.

取不到advertisingIdentifier时不能跳到idfv吗? 为什么直接就assert崩溃?

huakucha commented 6 years ago

@SolaWing 你这个能稳定的重现吗 我把广告追踪去除之后 也无法稳定复现...

SolaWing commented 6 years ago

@huakucha 正常复现不了. 只有线上的崩溃日志. 但通过替换系统advertisingIdentifier返回000可以复现. 我反汇编后替换实现, 把Assert换成默认值后, 线上没再出现类似的崩溃.

+ (NSString*)fix_weibo_getUniqueStrByUUID {
    ASIdentifierManager *m = [ASIdentifierManager sharedManager];
    NSString *identifier = nil;
    if ([m isAdvertisingTrackingEnabled]) {
        identifier = [[m advertisingIdentifier] UUIDString];
        if ([identifier isEqualToString:@"00000000-0000-0000-0000-000000000000"]) {
            DDLogError(@"empty idfa when tracking enable!");
            identifier = nil;
        }
    }
    if (!identifier) {
        identifier = [[[self currentDevice] identifierForVendor] UUIDString];
        if ([identifier isEqualToString:@"00000000-0000-0000-0000-000000000000"]) {
            DDLogError(@"empty idfv when tracking enable!");
            identifier = nil;
        }
    }
    if (!identifier) {
        // 该方法必须返回一个值, 不然weibo会崩溃
        identifier = [NSUUID UUID].UUIDString;
    }
    if (!identifier) {
        // 实在取不到了, 返回一个空字符串吧
        identifier = @"";
    }
    return identifier;
}
huakucha commented 6 years ago

@SolaWing fix_weibo_getUniqueStrByUUID 这个方法 要aop到哪个位置

SolaWing commented 6 years ago

@huakucha 程序启动, 调用weibo前就行.

        Class c = [UIDevice class];
        method_exchangeImplementations(class_getClassMethod(c, @selector(fix_weibo_getUniqueStrByUUID)),
                                       class_getClassMethod(c, @selector(getUniqueStrByUUID)));
huakucha commented 6 years ago

@SolaWing 我用msgsend稳定复现了 已经解决 谢谢了...

chatwyn commented 5 years ago

same issue

sinaweibosdk commented 4 years ago

请使用最新sdk