Repository: Coneboy-k/KKLog
Branch: master
Commit: 6954cfce6f24
Files: 19
Total size: 46.7 KB
Directory structure:
gitextract_kkap6s41/
├── .gitignore
├── KKLog/
│ ├── KKLog/
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.xib
│ │ │ └── Main.storyboard
│ │ ├── Images.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Info.plist
│ │ ├── KKLog/
│ │ │ ├── KKLog.h
│ │ │ └── KKLog.m
│ │ ├── ViewController.h
│ │ ├── ViewController.m
│ │ └── main.m
│ ├── KKLog.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ └── contents.xcworkspacedata
│ └── KKLogTests/
│ ├── Info.plist
│ └── KKLogTests.m
├── KKLog.podspec
├── LICENSE
└── README.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
#Pods/
================================================
FILE: KKLog/KKLog/AppDelegate.h
================================================
//
// AppDelegate.h
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
================================================
FILE: KKLog/KKLog/AppDelegate.m
================================================
//
// AppDelegate.m
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import "AppDelegate.h"
#import "KKLog.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
/// 程序Crash后的处理函数
void uncaughtExceptionHandler(NSException *exception)
{
[KKLog logCrash:exception];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//注册程序 Crash后的处理函数
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
//KKLog 初始化函数
[KKLog logIntial];
for (int i=0; i<10; i++) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(void) {
for (int i=0; i<100; i++) {
[KKLog logI:@"info"];
[KKLog logE:@"error"];
[KKLog logW:@"worring"];
KKLogI(@"info");
KKLogD(@"DDDD");
}
});
}
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end
================================================
FILE: KKLog/KKLog/Base.lproj/LaunchScreen.xib
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6214" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6207"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015年 Coneboy_K. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
<rect key="frame" x="20" y="439" width="441" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="KKLog" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
<rect key="frame" x="20" y="140" width="441" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="548" y="455"/>
</view>
</objects>
</document>
================================================
FILE: KKLog/KKLog/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="vXZ-lx-hvc">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="ufC-wZ-h7g">
<objects>
<viewController id="vXZ-lx-hvc" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
<viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
================================================
FILE: KKLog/KKLog/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: KKLog/KKLog/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>com.coneboy.app.$(PRODUCT_NAME:rfc1034identifier)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
================================================
FILE: KKLog/KKLog/KKLog/KKLog.h
================================================
//
// KKLog.h
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import <Foundation/Foundation.h>
//Debug
#define KKLogD(desStr) [KKLog logD:[NSString stringWithFormat:@"Function:%s Line:%d Des:%@",__func__,__LINE__,desStr],@""];
//Info
#define KKLogI(desStr) [KKLog logI:[NSString stringWithFormat:@"Function:%s Line:%d Des:%@",__func__,__LINE__,desStr],@""];
//Warning
#define KKLogW(desStr) [KKLog logW:[NSString stringWithFormat:@"Function:%s Line:%d Des:%@",__func__,__LINE__,desStr],@""];
//Error
#define KKLogE(desStr) [KKLog logE:[NSString stringWithFormat:@"Function:%s Line:%d Des:%@",__func__,__LINE__,desStr],@""];
//日志等级
typedef enum
{
LOGLEVELV = 0, //wend
LOGLEVELD = 1, //Debug
LOGLEVELI = 2, //Info
LOGLEVELW = 3, //Warning
LOGLEVELE = 4, //Error
} KKLogLevel;
@interface KKLog : NSObject
/**
* log初始化函数,在系统启动时调用
*/
+ (void)logIntial;
/**
* 设置要记录的log级别
*
* @param level level 要设置的log级别
*/
+ (void)setLogLevel:(KKLogLevel)level;
/**
* 记录系统crash的Log函数
*
* @param exception 系统异常
*/
+ (void)logCrash:(NSException*)exception;
/**
* log记录函数
*
* @param level log所属的等级
* @param format 具体记录log的格式以及内容
*/
+ (void)logLevel:(KKLogLevel)level LogInfo:(NSString*)format,... NS_FORMAT_FUNCTION(2,3);
/**
* LOGLEVELV级Log记录函数
*
* @param format format 具体记录log的格式以及内容
*/
+ (void)logV:(NSString*)format,... NS_FORMAT_FUNCTION(1,2);
/**
* LOGLEVELD级Log记录函数
*
* @param format 具体记录log的格式以及内容
*/
+ (void)logD:(NSString*)format,... NS_FORMAT_FUNCTION(1,2);
/**
* LOGLEVELI级Log记录函数
*
* @param format 具体记录log的格式以及内容
*/
+ (void)logI:(NSString*)format,... NS_FORMAT_FUNCTION(1,2);
/**
* LOGLEVELW级Log记录函数
*
* @param format 具体记录log的格式以及内容
*/
+ (void)logW:(NSString*)format,... NS_FORMAT_FUNCTION(1,2);
/**
* LOGLEVELE级Log记录函数
*
* @param format 具体记录log的格式以及内容
*/
+ (void)logE:(NSString*)format,... NS_FORMAT_FUNCTION(1,2);
@end
================================================
FILE: KKLog/KKLog/KKLog/KKLog.m
================================================
//
// KKLog.m
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import "KKLog.h"
#import <UIKit/UIKit.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#ifdef DEBUG
//Debug默认记录的日志等级为LOGLEVELD。
static KKLogLevel LogLevel = LOGLEVELD;
#else
//正常模式默认记录的日志等级为LOGLEVELI。
static KKLogLevel LogLevel = LOGLEVELI;
#endif
static NSString *logFilePath = nil;
static NSString *logDic = nil;
static NSString *crashDic = nil;
// 定义删除几天前的日志
const int k_preDaysToDelLog = 3;
// 打印队列
static dispatch_once_t logQueueCreatOnce;
static dispatch_queue_t k_operationQueue;
@interface KKLog(privatedMethod)
+ (void)logvLevel:(KKLogLevel)level Format:(NSString*)format VaList:(va_list)args;
+ (NSString*)KKStringFromLogLevel:(KKLogLevel)logLevel;
+ (NSString*)KKLogFormatPrefix:(KKLogLevel)logLevel;
@end
@implementation KKLog
+ (NSDate *)nowBeijingTime
{
NSTimeZone *AA = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"];
NSInteger seconds = [AA secondsFromGMTForDate: [NSDate date]];
return [NSDate dateWithTimeInterval: seconds sinceDate: [NSDate date]];
}
+ (NSString*)KKStringFromLogLevel:(KKLogLevel)logLevel
{
switch (logLevel)
{
case LOGLEVELV: return @"VEND";
case LOGLEVELD: return @"DEBUG";
case LOGLEVELI: return @"INFO";
case LOGLEVELW: return @"WARNING";
case LOGLEVELE: return @"ERROR";
}
return @"";
}
+ (NSString*)KKLogFormatPrefix:(KKLogLevel)logLevel
{
return [NSString stringWithFormat:@"[%@] ", [KKLog KKStringFromLogLevel:logLevel]];
}
+ (void)logIntial
{
if (!logFilePath)
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *logDirectory = [documentsDirectory stringByAppendingString:@"/log/"];
NSString *crashDirectory = [documentsDirectory stringByAppendingString:@"/log/"];
if (![[NSFileManager defaultManager] fileExistsAtPath:logDirectory]) {
[[NSFileManager defaultManager] createDirectoryAtPath:logDirectory
withIntermediateDirectories:YES
attributes:nil
error:nil];
}
if (![[NSFileManager defaultManager] fileExistsAtPath:crashDirectory]) {
[[NSFileManager defaultManager] createDirectoryAtPath:crashDirectory
withIntermediateDirectories:YES
attributes:nil
error:nil];
}
logDic = logDirectory;
crashDic = crashDirectory;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"];;
NSString *fileNamePrefix = [dateFormatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"KK_log_%@.logtraces.txt", fileNamePrefix];
NSString *filePath = [logDirectory stringByAppendingPathComponent:fileName];
logFilePath = filePath;
#if DEBUG
NSLog(@"LogPath: %@", logFilePath);
#endif
//create file if it doesn't exist
if(![[NSFileManager defaultManager] fileExistsAtPath:filePath])
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
//删除过期的日志
NSDate *prevDate = [[NSDate date] dateByAddingTimeInterval:-60*60*24*k_preDaysToDelLog];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:prevDate];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
//要删除三天以前的日志(0点开始)
NSDate *delDate = [[NSCalendar currentCalendar] dateFromComponents:components];
NSArray *logFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:logDic error:nil];
for (NSString *file in logFiles)
{
NSString *fileName = [file stringByReplacingOccurrencesOfString:@".logtraces.txt" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"KK_log_" withString:@""];
NSDate *fileDate = [dateFormatter dateFromString:fileName];
if (nil == fileDate)
{
continue;
}
if (NSOrderedAscending == [fileDate compare:delDate])
{
[[NSFileManager defaultManager] removeItemAtPath:[logDic stringByAppendingString:file] error:nil];
}
}
}
dispatch_once(&logQueueCreatOnce, ^{
k_operationQueue = dispatch_queue_create("com.coneboy.app.operationqueue", DISPATCH_QUEUE_SERIAL);
});
}
+ (void)setLogLevel:(KKLogLevel)level
{
LogLevel = level;
}
+ (void)logvLevel:(KKLogLevel)level Format:(NSString *)format VaList:(va_list)args
{
__block NSString *formatTmp = format;
dispatch_async(k_operationQueue, ^{
if (level >= LogLevel)
{
formatTmp = [[KKLog KKLogFormatPrefix:level] stringByAppendingString:formatTmp];
NSString *contentStr = [[NSString alloc] initWithFormat:formatTmp arguments:args];
NSString *contentN = [contentStr stringByAppendingString:@"\n"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *content = [NSString stringWithFormat:@"%@ %@", [dateFormatter stringFromDate:[KKLog nowBeijingTime]], contentN];
//append text to file (you'll probably want to add a newline every write)
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:logFilePath];
[file seekToEndOfFile];
[file writeData:[content dataUsingEncoding:NSUTF8StringEncoding]];
[file closeFile];
#ifdef DEBUG
NSLog(@"%@", content);
#endif
formatTmp = nil;
}
});
}
+ (void)logCrash:(NSException *)exception
{
if (nil == exception)
{
return;
}
#ifdef DEBUG
NSLog(@"CRASH: %@", exception);
NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
#endif
// Internal error reporting
if (!crashDic) {
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *crashDirectory = [documentsDirectory stringByAppendingString:@"/log/"];
crashDic = crashDirectory;
}
NSString *fileName = [NSString stringWithFormat:@"CRASH_%@.log", [[KKLog nowBeijingTime] description]];
NSString *filePath = [crashDic stringByAppendingString:fileName];
NSString *content = [[NSString stringWithFormat:@"CRASH: %@\n", exception] stringByAppendingString:[NSString stringWithFormat:@"Stack Trace: %@\n", [exception callStackSymbols]]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *phoneLanguage = [languages objectAtIndex:0];
content = [content stringByAppendingString:[NSString stringWithFormat:@"iPhone:%@ iOS Version:%@ Language:%@",[KKLog platformString], [[UIDevice currentDevice] systemVersion],phoneLanguage]];
NSError *error = nil;
[content writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error) {
#if DEBUG
NSLog(@"error is %@",error);
#endif
[KKLog logE:@"CRASH LOG CREAT ERR INFO IS %@",error];
}
}
+ (void)logLevel:(KKLogLevel)level LogInfo:(NSString *)format, ...
{
va_list args;
va_start(args, format);
[KKLog logvLevel:level Format:format VaList:args];
va_end(args);
}
+ (void)logV:(NSString *)format, ...
{
va_list args;
va_start(args, format);
[KKLog logvLevel:LOGLEVELV Format:format VaList:args];
va_end(args);
}
+ (void)logD:(NSString *)format, ...
{
va_list args;
va_start(args, format);
[KKLog logvLevel:LOGLEVELD Format:format VaList:args];
va_end(args);
}
+ (void)logI:(NSString *)format, ...
{
va_list args;
va_start(args, format);
[KKLog logvLevel:LOGLEVELI Format:format VaList:args];
va_end(args);
}
+ (void)logW:(NSString *)format, ...
{
va_list args;
va_start(args, format);
[KKLog logvLevel:LOGLEVELW Format:format VaList:args];
va_end(args);
}
+ (void)logE:(NSString *)format, ...
{
va_list args;
va_start(args, format);
[KKLog logvLevel:LOGLEVELE Format:format VaList:args];
va_end(args);
}
+ (NSDate *)getLogTime:(NSString *)logName
{
NSString *fileName = [logName stringByReplacingOccurrencesOfString:@".logtraces.txt" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"KK_log_" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@".log" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"KK_FileTransport_" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"CRASH_" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"KK_Conference_" withString:@""];
NSRange rangeConf = [fileName rangeOfString:@"["];
if (rangeConf.location != NSNotFound)
{
fileName = [fileName substringToIndex:rangeConf.location];
}
NSRange rangeCrash = [fileName rangeOfString:@" "];
if (rangeCrash.location != NSNotFound)
{
fileName = [fileName substringToIndex:rangeCrash.location];
}
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+0800"];
NSDate *fileDate = [dateFormatter dateFromString:fileName];
return fileDate;
}
+ (NSString *)platform
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithUTF8String:machine];
free(machine);
return platform;
}
+ (NSString *)platformString
{
NSString *platform = [KKLog platform];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4 (GSM)";
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4 (GSM Rev A)";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (CDMA)";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (GSM)";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
if ([platform isEqualToString:@"i386"]) return @"Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"Simulator";
return platform;
}
@end
================================================
FILE: KKLog/KKLog/ViewController.h
================================================
//
// ViewController.h
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
================================================
FILE: KKLog/KKLog/ViewController.m
================================================
//
// ViewController.m
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
================================================
FILE: KKLog/KKLog/main.m
================================================
//
// main.m
// KKLog
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
================================================
FILE: KKLog/KKLog.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
E1CC67111AD66E0A00DCBD75 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CC67101AD66E0A00DCBD75 /* main.m */; };
E1CC67141AD66E0A00DCBD75 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CC67131AD66E0A00DCBD75 /* AppDelegate.m */; };
E1CC67171AD66E0A00DCBD75 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CC67161AD66E0A00DCBD75 /* ViewController.m */; };
E1CC671A1AD66E0A00DCBD75 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E1CC67181AD66E0A00DCBD75 /* Main.storyboard */; };
E1CC671C1AD66E0A00DCBD75 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E1CC671B1AD66E0A00DCBD75 /* Images.xcassets */; };
E1CC671F1AD66E0A00DCBD75 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = E1CC671D1AD66E0A00DCBD75 /* LaunchScreen.xib */; };
E1CC672B1AD66E0A00DCBD75 /* KKLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CC672A1AD66E0A00DCBD75 /* KKLogTests.m */; };
E1CC67391AD6700F00DCBD75 /* KKLog.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CC67381AD6700F00DCBD75 /* KKLog.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
E1CC67251AD66E0A00DCBD75 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = E1CC67031AD66E0A00DCBD75 /* Project object */;
proxyType = 1;
remoteGlobalIDString = E1CC670A1AD66E0A00DCBD75;
remoteInfo = KKLog;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
E1CC670B1AD66E0A00DCBD75 /* KKLog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = KKLog.app; sourceTree = BUILT_PRODUCTS_DIR; };
E1CC670F1AD66E0A00DCBD75 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E1CC67101AD66E0A00DCBD75 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
E1CC67121AD66E0A00DCBD75 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
E1CC67131AD66E0A00DCBD75 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
E1CC67151AD66E0A00DCBD75 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
E1CC67161AD66E0A00DCBD75 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
E1CC67191AD66E0A00DCBD75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
E1CC671B1AD66E0A00DCBD75 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
E1CC671E1AD66E0A00DCBD75 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
E1CC67241AD66E0A00DCBD75 /* KKLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = KKLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
E1CC67291AD66E0A00DCBD75 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E1CC672A1AD66E0A00DCBD75 /* KKLogTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KKLogTests.m; sourceTree = "<group>"; };
E1CC67371AD6700F00DCBD75 /* KKLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KKLog.h; path = KKLog/KKLog.h; sourceTree = "<group>"; };
E1CC67381AD6700F00DCBD75 /* KKLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = KKLog.m; path = KKLog/KKLog.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
E1CC67081AD66E0A00DCBD75 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
E1CC67211AD66E0A00DCBD75 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
E1CC67021AD66E0A00DCBD75 = {
isa = PBXGroup;
children = (
E1CC670D1AD66E0A00DCBD75 /* KKLog */,
E1CC67271AD66E0A00DCBD75 /* KKLogTests */,
E1CC670C1AD66E0A00DCBD75 /* Products */,
);
sourceTree = "<group>";
};
E1CC670C1AD66E0A00DCBD75 /* Products */ = {
isa = PBXGroup;
children = (
E1CC670B1AD66E0A00DCBD75 /* KKLog.app */,
E1CC67241AD66E0A00DCBD75 /* KKLogTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
E1CC670D1AD66E0A00DCBD75 /* KKLog */ = {
isa = PBXGroup;
children = (
E1CC67371AD6700F00DCBD75 /* KKLog.h */,
E1CC67381AD6700F00DCBD75 /* KKLog.m */,
E1CC67121AD66E0A00DCBD75 /* AppDelegate.h */,
E1CC67131AD66E0A00DCBD75 /* AppDelegate.m */,
E1CC67151AD66E0A00DCBD75 /* ViewController.h */,
E1CC67161AD66E0A00DCBD75 /* ViewController.m */,
E1CC67181AD66E0A00DCBD75 /* Main.storyboard */,
E1CC671B1AD66E0A00DCBD75 /* Images.xcassets */,
E1CC671D1AD66E0A00DCBD75 /* LaunchScreen.xib */,
E1CC670E1AD66E0A00DCBD75 /* Supporting Files */,
);
path = KKLog;
sourceTree = "<group>";
};
E1CC670E1AD66E0A00DCBD75 /* Supporting Files */ = {
isa = PBXGroup;
children = (
E1CC670F1AD66E0A00DCBD75 /* Info.plist */,
E1CC67101AD66E0A00DCBD75 /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
E1CC67271AD66E0A00DCBD75 /* KKLogTests */ = {
isa = PBXGroup;
children = (
E1CC672A1AD66E0A00DCBD75 /* KKLogTests.m */,
E1CC67281AD66E0A00DCBD75 /* Supporting Files */,
);
path = KKLogTests;
sourceTree = "<group>";
};
E1CC67281AD66E0A00DCBD75 /* Supporting Files */ = {
isa = PBXGroup;
children = (
E1CC67291AD66E0A00DCBD75 /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
E1CC670A1AD66E0A00DCBD75 /* KKLog */ = {
isa = PBXNativeTarget;
buildConfigurationList = E1CC672E1AD66E0A00DCBD75 /* Build configuration list for PBXNativeTarget "KKLog" */;
buildPhases = (
E1CC67071AD66E0A00DCBD75 /* Sources */,
E1CC67081AD66E0A00DCBD75 /* Frameworks */,
E1CC67091AD66E0A00DCBD75 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = KKLog;
productName = KKLog;
productReference = E1CC670B1AD66E0A00DCBD75 /* KKLog.app */;
productType = "com.apple.product-type.application";
};
E1CC67231AD66E0A00DCBD75 /* KKLogTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = E1CC67311AD66E0A00DCBD75 /* Build configuration list for PBXNativeTarget "KKLogTests" */;
buildPhases = (
E1CC67201AD66E0A00DCBD75 /* Sources */,
E1CC67211AD66E0A00DCBD75 /* Frameworks */,
E1CC67221AD66E0A00DCBD75 /* Resources */,
);
buildRules = (
);
dependencies = (
E1CC67261AD66E0A00DCBD75 /* PBXTargetDependency */,
);
name = KKLogTests;
productName = KKLogTests;
productReference = E1CC67241AD66E0A00DCBD75 /* KKLogTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
E1CC67031AD66E0A00DCBD75 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0620;
ORGANIZATIONNAME = Coneboy_K;
TargetAttributes = {
E1CC670A1AD66E0A00DCBD75 = {
CreatedOnToolsVersion = 6.2;
};
E1CC67231AD66E0A00DCBD75 = {
CreatedOnToolsVersion = 6.2;
TestTargetID = E1CC670A1AD66E0A00DCBD75;
};
};
};
buildConfigurationList = E1CC67061AD66E0A00DCBD75 /* Build configuration list for PBXProject "KKLog" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = E1CC67021AD66E0A00DCBD75;
productRefGroup = E1CC670C1AD66E0A00DCBD75 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
E1CC670A1AD66E0A00DCBD75 /* KKLog */,
E1CC67231AD66E0A00DCBD75 /* KKLogTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
E1CC67091AD66E0A00DCBD75 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E1CC671A1AD66E0A00DCBD75 /* Main.storyboard in Resources */,
E1CC671F1AD66E0A00DCBD75 /* LaunchScreen.xib in Resources */,
E1CC671C1AD66E0A00DCBD75 /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
E1CC67221AD66E0A00DCBD75 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
E1CC67071AD66E0A00DCBD75 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E1CC67171AD66E0A00DCBD75 /* ViewController.m in Sources */,
E1CC67141AD66E0A00DCBD75 /* AppDelegate.m in Sources */,
E1CC67391AD6700F00DCBD75 /* KKLog.m in Sources */,
E1CC67111AD66E0A00DCBD75 /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
E1CC67201AD66E0A00DCBD75 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E1CC672B1AD66E0A00DCBD75 /* KKLogTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
E1CC67261AD66E0A00DCBD75 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = E1CC670A1AD66E0A00DCBD75 /* KKLog */;
targetProxy = E1CC67251AD66E0A00DCBD75 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
E1CC67181AD66E0A00DCBD75 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
E1CC67191AD66E0A00DCBD75 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
E1CC671D1AD66E0A00DCBD75 /* LaunchScreen.xib */ = {
isa = PBXVariantGroup;
children = (
E1CC671E1AD66E0A00DCBD75 /* Base */,
);
name = LaunchScreen.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
E1CC672C1AD66E0A00DCBD75 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
E1CC672D1AD66E0A00DCBD75 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
E1CC672F1AD66E0A00DCBD75 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = KKLog/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
E1CC67301AD66E0A00DCBD75 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = KKLog/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
E1CC67321AD66E0A00DCBD75 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = KKLogTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KKLog.app/KKLog";
};
name = Debug;
};
E1CC67331AD66E0A00DCBD75 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
);
INFOPLIST_FILE = KKLogTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KKLog.app/KKLog";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
E1CC67061AD66E0A00DCBD75 /* Build configuration list for PBXProject "KKLog" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E1CC672C1AD66E0A00DCBD75 /* Debug */,
E1CC672D1AD66E0A00DCBD75 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
E1CC672E1AD66E0A00DCBD75 /* Build configuration list for PBXNativeTarget "KKLog" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E1CC672F1AD66E0A00DCBD75 /* Debug */,
E1CC67301AD66E0A00DCBD75 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
E1CC67311AD66E0A00DCBD75 /* Build configuration list for PBXNativeTarget "KKLogTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E1CC67321AD66E0A00DCBD75 /* Debug */,
E1CC67331AD66E0A00DCBD75 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = E1CC67031AD66E0A00DCBD75 /* Project object */;
}
================================================
FILE: KKLog/KKLog.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:KKLog.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: KKLog/KKLogTests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>com.coneboy.app.$(PRODUCT_NAME:rfc1034identifier)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
================================================
FILE: KKLog/KKLogTests/KKLogTests.m
================================================
//
// KKLogTests.m
// KKLogTests
//
// Created by JackSun on 15/4/9.
// Copyright (c) 2015年 Coneboy_K. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
@interface KKLogTests : XCTestCase
@end
@implementation KKLogTests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
XCTAssert(YES, @"Pass");
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
}];
}
@end
================================================
FILE: KKLog.podspec
================================================
Pod::Spec.new do |s|
s.name = "KKLog"
s.version = "1.0.0"
s.license = { :type => 'BSD' }
s.homepage = "http://coneboy.com"
s.summary = "KKLog is an Objective-C library for iOS developers."
s.author = { "Coneboy_K" => "iconeboy@gmail.com" }
s.platform = :ios, '6.0'
s.source = { :git => "https://github.com/Coneboy-k/KKLog.git", :tag => "1.0.0" }
s.source_files = "KKLog", "KKLog/KKLog/KKLog/KKLog.{h,m}"
s.requires_arc = true
end
================================================
FILE: LICENSE
================================================
Copyright (c) 2015, Coneboy_k
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: README.md
================================================
# KKLog
A Open source Log System for OC
## Requirements
KKLog works on any iOS version. Only ARC.
## Adding KKLog to your project
Include KKLog wherever you need it with `#import "KKLog.h"` .
### Source files
Alternatively you can directly add the `KKLog.h`& `KKLog.m` source files to your project.
OR USE POD
`pod 'KKLog'`
## Usage
1.Startup
void uncaughtExceptionHandler(NSException *exception)
{
[KKLog logCrash:exception];
}
`- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions `
// signExceptionHandler
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
// install KKlog
[KKLog logIntial];
// set logLevel
[KKLog setLogLevel:LOGLEVELD];
2.U can use This method
[KKLog logI:@"info"];
[KKLog logE:@"error"];
[KKLog logW:@"worring"];...
KKLogI(@"info");
KKLogD(@"DDDD");...
3.Have fun!
gitextract_kkap6s41/ ├── .gitignore ├── KKLog/ │ ├── KKLog/ │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Base.lproj/ │ │ │ ├── LaunchScreen.xib │ │ │ └── Main.storyboard │ │ ├── Images.xcassets/ │ │ │ └── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── KKLog/ │ │ │ ├── KKLog.h │ │ │ └── KKLog.m │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m │ ├── KKLog.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ └── contents.xcworkspacedata │ └── KKLogTests/ │ ├── Info.plist │ └── KKLogTests.m ├── KKLog.podspec ├── LICENSE └── README.md
SYMBOL INDEX (1 symbols across 1 files) FILE: KKLog/KKLog/KKLog/KKLog.h type KKLogLevel (line 23) | typedef enum
Condensed preview — 19 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (53K chars).
[
{
"path": ".gitignore",
"chars": 494,
"preview": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!defau"
},
{
"path": "KKLog/KKLog/AppDelegate.h",
"chars": 271,
"preview": "//\n// AppDelegate.h\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights reserv"
},
{
"path": "KKLog/KKLog/AppDelegate.m",
"chars": 2751,
"preview": "//\n// AppDelegate.m\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights reserv"
},
{
"path": "KKLog/KKLog/Base.lproj/LaunchScreen.xib",
"chars": 3700,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
},
{
"path": "KKLog/KKLog/Base.lproj/Main.storyboard",
"chars": 1574,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "KKLog/KKLog/Images.xcassets/AppIcon.appiconset/Contents.json",
"chars": 585,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"iphone\",\n \"size\" : \"29x29\",\n \"scale\" : \"2x\"\n },\n {\n \"idiom\""
},
{
"path": "KKLog/KKLog/Info.plist",
"chars": 1226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "KKLog/KKLog/KKLog/KKLog.h",
"chars": 1966,
"preview": "//\n// KKLog.h\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights reserved.\n//"
},
{
"path": "KKLog/KKLog/KKLog/KKLog.m",
"chars": 13199,
"preview": "//\n// KKLog.m\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights reserved.\n//"
},
{
"path": "KKLog/KKLog/ViewController.h",
"chars": 209,
"preview": "//\n// ViewController.h\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights res"
},
{
"path": "KKLog/KKLog/ViewController.m",
"chars": 488,
"preview": "//\n// ViewController.m\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights res"
},
{
"path": "KKLog/KKLog/main.m",
"chars": 328,
"preview": "//\n// main.m\n// KKLog\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights reserved.\n//\n"
},
{
"path": "KKLog/KKLog.xcodeproj/project.pbxproj",
"chars": 16482,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "KKLog/KKLog.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 150,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:KKLog.xcodeproj"
},
{
"path": "KKLog/KKLogTests/Info.plist",
"chars": 754,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "KKLog/KKLogTests/KKLogTests.m",
"chars": 847,
"preview": "//\n// KKLogTests.m\n// KKLogTests\n//\n// Created by JackSun on 15/4/9.\n// Copyright (c) 2015年 Coneboy_K. All rights re"
},
{
"path": "KKLog.podspec",
"chars": 490,
"preview": "Pod::Spec.new do |s|\n s.name = \"KKLog\"\n s.version = \"1.0.0\"\n s.license = { :type => 'BSD' }\n s.hom"
},
{
"path": "LICENSE",
"chars": 1293,
"preview": "Copyright (c) 2015, Coneboy_k\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nm"
},
{
"path": "README.md",
"chars": 975,
"preview": "# KKLog\nA Open source Log System for OC\n\n## Requirements\nKKLog works on any iOS version. Only ARC.\n\n## Adding KKLog to y"
}
]
About this extraction
This page contains the full source code of the Coneboy-k/KKLog GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 19 files (46.7 KB), approximately 14.6k tokens, and a symbol index with 1 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.