美文网首页
错误日志/奔溃日志上传功能

错误日志/奔溃日志上传功能

作者: ZZ_军哥 | 来源:发表于2020-05-19 16:24 被阅读0次

    奔溃日志上传:

    注意点:需要自己补充上传后台的内容.奔溃日志会在下次打开APP时自动将日志文件传给后台

    错误日志上传功能:非代码性bug导致的显示问题,大部分都是后台数据异常导致界面显示异常,对关键代码处,添加解释说明的功能,及时反馈,便于测试和后台纠正

    由于服务器不同,需要自己补充上传功能.该功能隔2天后自动上传,可自己修改时间

    #import "BSFeedBackDataInfo.h"

    #define lastSaveTime  @"lastSaveTime"

    @implementation BSFeedBackDataInfo

    + (instancetype)sharedFeedBackDataInfo

    {

        staticBSFeedBackDataInfo*instance =nil;

        staticdispatch_once_tonceToken;

        dispatch_once(&onceToken, ^{

            instance = [[BSFeedBackDataInfoalloc]init];

        });

        returninstance;

    }

    - (void)uploadDataInfoPram:(NSString*)dataInfoStr

    {

        dataInfoStr = [NSStringstringWithFormat:@"%@\n",dataInfoStr];

        NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

        NSString *filePath = [documentPath stringByAppendingPathComponent:@"feedBackDataInfoPram.txt"];

        ///1.检查沙盒中是否存在feedBackDataInfoPram.txt文件

        NSFileManager *manager = [NSFileManager defaultManager];

        BOOLexisFile = [managerfileExistsAtPath:filePath];

        ///2.1如果有,则写入,并判断当前年月是否超过2日,如果超过,则上传,否则啥也不干

        if(exisFile) {

            ///a.写入文件

            [selfkeepWriteContent:dataInfoStrfilePath:filePath];

            ///b.判断当前存储时间是否超过两日

            BOOLbeyondTwoDays = [selfjudgeCurrentDayBeyondTwoData];

            if(beyondTwoDays) {

                [selfupLoadTxtFile:filePath];

                [selfdeleteTxtFile:filePath];

            }

        }else{///2.2如果没有,则创建文件,并且用年月标记日期

            [managercreateFileAtPath:filePath contents:nil attributes:nil];

            [self keepWriteContent:[self inputConfigureInfo] filePath:filePath];

            [selfkeepWriteContent:dataInfoStrfilePath:filePath];

            NSDate*date = [NSDatedate];

            NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

            formatter.dateFormat=@"yyyy-MM-dd";

            NSString*dateStr = [formatterstringFromDate:date];

            [[NSUserDefaults standardUserDefaults] setValue:dateStr forKey:lastSaveTime];

        }

    }

    - (BOOL)judgeCurrentDayBeyondTwoData

    {

        ///1.当前日期

        NSDate*date = [NSDatedate];

        NSTimeInterval currentDateNum = [date timeIntervalSince1970];

        ///2.之前保存的日期

        NSString *lastDateStr = [[NSUserDefaults standardUserDefaults] valueForKey:lastSaveTime];

        NSDateFormatter *format = [[NSDateFormatter alloc]init];

        format.dateFormat=@"yyyy-MM-dd";

        NSDate*lastDate = [formatdateFromString:lastDateStr];

        NSTimeInterval lastDateNum = [lastDate timeIntervalSince1970];

        if(currentDateNum-lastDateNum>2*24*3600) {

            returnYES;

        }else{

            returnNO;

        }

    }

    - (NSString *)inputConfigureInfo

    {

        NSString*accoutStr = [BSAccPasTkgetAcc];

        NSString *systemVersion = [UIDevice currentDevice].systemVersion;

        NSString*finallyStr = [NSStringstringWithFormat:@"账号:%@ 系统版本:%@\n",accoutStr,systemVersion];

        returnfinallyStr;

    }

    ///持续的往Txt文件中写入内容

    - (void)keepWriteContent:(NSString*)dataStrfilePath:(NSString*)filePath

    {

        NSDate*date = [NSDatedate];

        NSDateFormatter *dateForma = [[NSDateFormatter alloc]init];

        dateForma.dateFormat=@"yyyyMMdd";

        NSString*canlendStr = [dateFormastringFromDate:date];

        dataStr = [NSStringstringWithFormat:@"%@:%@",canlendStr,dataStr];

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            NSLog(@"当前线程:%@",[NSThread currentThread]);

            NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];

            if(fileHandle ==nil) {

                return;

            }

            [fileHandleseekToEndOfFile];

            NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];

            [fileHandlewriteData:data];

            [fileHandlecloseFile];

        });

    }

    ///上传错误数据日志文件

    - (void)upLoadTxtFile:(NSString*)filePath

    {

    }

    ///删除错误数据日志文件

    - (void)deleteTxtFile:(NSString*)filePath

    {

        NSFileManager *manager = [NSFileManager defaultManager];

        [managerremoveItemAtPath:filePatherror:nil];

    }

    @end

    获取曲线上点的类

    #import "UIBezierPath+curved.h"

    // Based on code from Erica Sadun

    voidgetPointsFromBezier(void*info,constCGPathElement*element);

    NSArray *pointsFromBezierPath(UIBezierPath *bpath);

    #define VALUE(_INDEX_) [NSValue valueWithCGPoint:points[_INDEX_]]

    #define POINT(_INDEX_) [(NSValue *)[points objectAtIndex:_INDEX_] CGPointValue]

    @implementation UIBezierPath (curved)

    // Get points from Bezier Curve

    voidgetPointsFromBezier(void*info,constCGPathElement*element)

    {

        NSMutableArray*bezierPoints = (__bridgeNSMutableArray*)info;

        // Retrieve the path element type and its points

        CGPathElementTypetype = element->type;

        CGPoint*points = element->points;

        // Add the points if they're available (per type)

        if (type != kCGPathElementCloseSubpath)

        {

            [bezierPointsaddObject:VALUE(0)];

            if ((type != kCGPathElementAddLineToPoint) &&

                (type !=kCGPathElementMoveToPoint))

                [bezierPointsaddObject:VALUE(1)];

        }

        if (type == kCGPathElementAddCurveToPoint)

            [bezierPointsaddObject:VALUE(2)];

    }

    NSArray *pointsFromBezierPath(UIBezierPath *bpath)

    {

        NSMutableArray *points = [NSMutableArray array];

        CGPathApply(bpath.CGPath, (__bridgevoid*)points,getPointsFromBezier);

        returnpoints;

    }

    #pragma mark— ************************** 接口方法 ****************************

    - (NSMutableArray *)pointsFromBezierPathA {

        return [pointsFromBezierPath(self) mutableCopy];

    }

    - (UIBezierPath*)smoothedPathWithGranularity:(NSInteger)granularity;

    {

        NSMutableArray *points = [pointsFromBezierPath(self) mutableCopy];

        if(points.count<4)return[selfcopy];

        // Add control points to make the math make sense

        [pointsinsertObject:[points objectAtIndex:0] atIndex:0];

        [pointsaddObject:[pointslastObject]];

        UIBezierPath*smoothedPath = [selfcopy];

        [smoothedPathremoveAllPoints];

        [smoothedPathmoveToPoint:POINT(0)];

        for(NSUIntegerindex =1; index < points.count-2; index++)

        {

            CGPointp0 =POINT(index -1);

            CGPointp1 =POINT(index);

            CGPointp2 =POINT(index +1);

            CGPointp3 =POINT(index +2);

            // now add n points starting at p1 + dx/dy up until p2 using Catmull-Rom splines

            for(inti =1; i < granularity; i++)

            {

                floatt = (float) i * (1.0f/ (float) granularity);

                floattt = t * t;

                floatttt = tt * t;

                CGPoint pi; // intermediate point

                pi.x=0.5* (2*p1.x+(p2.x-p0.x)*t + (2*p0.x-5*p1.x+4*p2.x-p3.x)*tt + (3*p1.x-p0.x-3*p2.x+p3.x)*ttt);

                pi.y=0.5* (2*p1.y+(p2.y-p0.y)*t + (2*p0.y-5*p1.y+4*p2.y-p3.y)*tt + (3*p1.y-p0.y-3*p2.y+p3.y)*ttt);

                [smoothedPathaddLineToPoint:pi];

            }

            // Now add p2

            [smoothedPathaddLineToPoint:p2];

        }

        // finish by adding the last point

        [smoothedPathaddLineToPoint:POINT(points.count -1)];

        returnsmoothedPath;

    }

    @end

    相关文章

      网友评论

          本文标题:错误日志/奔溃日志上传功能

          本文链接:https://www.haomeiwen.com/subject/qvfdyttx.html