iOS将log日志写入文件并开放社交app分享log文件接口
1.
HKWriteLogManager.h文件
// // HKWriteLogManager.h // HKiOSDemo // // Created by liuhuakun on 2020/3/31. // Copyright © 2020 liuhuakun. All rights reserved. // /* 头文件中引入这个重写NSLog宏,更有助于查找问题 /// 重写NSLog,Debug模式下打印日志和当前行数 #if DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", __FUNCTION__, __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #else #define NSLog(FORMAT, ...) nil #endif */ #import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface HKWriteLogManager : NSObject /** * 单例 * @return 单例对象 */ + (HKWriteLogManager *)writeLog_shareManager; /** * 开启写入Log日志 */ - (void)writeLog_startWriteLogToFile; /** * 获取log文件路径用于上传或者分享 * @return log文件路径 */ - (NSString *)writeLog_logFilePath; /** * 通过社交平台分享log文件 */ - (void)writeLog_shareLogFile; @end NS_ASSUME_NONNULL_END
2.
HKWriteLogManager.m文件
// // HKWriteLogManager.m // HKiOSDemo // // Created by liuhuakun on 2020/3/31. // Copyright © 2020 liuhuakun. All rights reserved. // #import "HKWriteLogManager.h" #import <UIKit/UIKit.h> @implementation HKWriteLogManager #pragma mark - Instance + (HKWriteLogManager *)writeLog_shareManager { static HKWriteLogManager *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[HKWriteLogManager alloc] init]; }); return instance; } #pragma mark _Publish - (void)writeLog_startWriteLogToFile { /// 子线程中操作 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ /// log文件路径 NSString *logFilePath = [self writeLog_logFilePath]; /// 删除已经存在的文件 NSFileManager *defaultManager = [NSFileManager defaultManager]; if ([defaultManager fileExistsAtPath:logFilePath]) { [defaultManager removeItemAtPath:logFilePath error:nil]; } freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout); freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr); /// 获取手机设备信息 [self writeLog_iPhoneMessage]; }); } /// 获取log文件路径 - (NSString *)writeLog_logFilePath { NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentDirectory = [paths objectAtIndex:0]; NSString *fileName = [NSString stringWithFormat:@"HKiOSDemo.log"]; NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName]; return logFilePath; } /// 通过社交app分享log文件 - (void)writeLog_shareLogFile { NSURL *fileURL = [NSURL fileURLWithPath:[self writeLog_logFilePath]]; NSArray *activityItems = @[fileURL]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; /// 根视图中显示分享界面 [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:activityVC animated:YES completion:nil]; } #pragma mark - Method /// 当前手机设备信息 - (void)writeLog_iPhoneMessage { UIDevice *device = [UIDevice currentDevice]; NSDictionary *iPhoneMessageDict = @{ @"name" : device.name, @"model" : device.model, @"localizedModel" : device.localizedModel, @"systemName" : device.systemName, @"systemVersion" : device.systemVersion, @"identifierForVendor" : device.identifierForVendor}; NSLog(@"device info = %@", iPhoneMessageDict); } @end