├── .DS_Store
├── SULoggerDemo.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── SULoggerDemo
├── ViewController.h
├── AppDelegate.h
├── main.m
├── ViewController.m
├── AppDelegate.m
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Info.plist
└── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── SULogger
├── SULogboard.h
├── SULogger.h
├── SULogboard.m
└── SULogger.m
├── SULogger.podspec
├── LICENSE
├── .gitignore
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DaMingShen/SULogger/HEAD/.DS_Store
--------------------------------------------------------------------------------
/SULoggerDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SULoggerDemo/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // SULoggerDemo
4 | //
5 | // Created by KevinSu on 16/3/5.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/SULogger/SULogboard.h:
--------------------------------------------------------------------------------
1 | //
2 | // SULogboard.h
3 | // SUMusic
4 | //
5 | // Created by 万众科技 on 16/3/4.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SULogboard : UIView
12 |
13 | /*
14 | * 更新显示的log
15 | */
16 | - (void)updateLog:(NSString *)logText;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/SULoggerDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // SULoggerDemo
4 | //
5 | // Created by KevinSu on 16/3/5.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 |
16 | @end
17 |
18 |
--------------------------------------------------------------------------------
/SULoggerDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // SULoggerDemo
4 | //
5 | // Created by KevinSu on 16/3/5.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "AppDelegate.h"
11 |
12 | int main(int argc, char * argv[]) {
13 | @autoreleasepool {
14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/SULogger/SULogger.h:
--------------------------------------------------------------------------------
1 | //
2 | // SULogboard.h
3 | // SUMusic
4 | //
5 | // Created by 万众科技 on 16/3/4.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SULogger : NSObject
12 |
13 | /**
14 | * 描述:初始化Logger
15 | */
16 | + (void)start;
17 |
18 | /**
19 | * 描述:改变Log面板状态(隐藏->显示 or 显示->隐藏)
20 | */
21 | + (void)visibleChange;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/SULogger.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'SULogger'
3 | s.version = '1.0'
4 | s.license = "MIT"
5 | s.summary = 'show log on real mechine debugging'
6 | s.homepage = 'https://github.com/DaMingShen/SULogger.git'
7 | s.author = { 'DaMingShen' => '446135517@qq.com' }
8 | s.source = { :git => 'https://github.com/DaMingShen/SULogger.git', :tag => "1.0" }
9 | s.platform = :ios
10 | s.source_files = "SULogger/*.{h,m}"
11 | s.framework = 'UIKit'
12 | s.requires_arc = true
13 | end
14 |
--------------------------------------------------------------------------------
/SULoggerDemo/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // SULoggerDemo
4 | //
5 | // Created by KevinSu on 16/3/5.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 |
11 | @interface ViewController () {
12 | int _count;
13 | }
14 |
15 | @end
16 |
17 | @implementation ViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 |
22 | _count = 0;
23 | [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(giveLog) userInfo:nil repeats:YES];
24 | }
25 |
26 | - (void)giveLog {
27 | NSLog(@"This is NO.%d log",_count);
28 | _count ++;
29 | }
30 |
31 | @end
32 |
--------------------------------------------------------------------------------
/SULoggerDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // SULoggerDemo
4 | //
5 | // Created by KevinSu on 16/3/5.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 | #import "SULogger.h"
11 |
12 | @interface AppDelegate ()
13 |
14 | @end
15 |
16 | @implementation AppDelegate
17 |
18 |
19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
20 |
21 | [SULogger start];
22 |
23 | return YES;
24 | }
25 |
26 | - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
27 | if (event.type == UIEventSubtypeMotionShake) {
28 | [SULogger visibleChange];
29 | }
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 KevinSu
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata
19 |
20 | ## Other
21 | *.xccheckout
22 | *.moved-aside
23 | *.xcuserstate
24 | *.xcscmblueprint
25 |
26 | ## Obj-C/Swift specific
27 | *.hmap
28 | *.ipa
29 |
30 | # CocoaPods
31 | #
32 | # We recommend against adding the Pods directory to your .gitignore. However
33 | # you should judge for yourself, the pros and cons are mentioned at:
34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
35 | #
36 | # Pods/
37 |
38 | # Carthage
39 | #
40 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
41 | # Carthage/Checkouts
42 |
43 | Carthage/Build
44 |
45 | # fastlane
46 | #
47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48 | # screenshots whenever they are needed.
49 | # For more information about the recommended setup visit:
50 | # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md
51 |
52 | fastlane/report.xml
53 | fastlane/screenshots
54 |
--------------------------------------------------------------------------------
/SULoggerDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/SULogger/SULogboard.m:
--------------------------------------------------------------------------------
1 | //
2 | // SULogboard.m
3 | // SUMusic
4 | //
5 | // Created by 万众科技 on 16/3/4.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import "SULogboard.h"
10 |
11 | @interface SULogboard ()
12 |
13 | @property (nonatomic, strong) UITextView * logTextView;
14 |
15 | @end
16 |
17 | @implementation SULogboard
18 |
19 | - (instancetype)initWithFrame:(CGRect)frame {
20 | if (self = [super initWithFrame:frame]) {
21 | [self configUI];
22 | }
23 | return self;
24 | }
25 |
26 | - (void)configUI {
27 | self.backgroundColor = [UIColor clearColor];
28 |
29 | self.logTextView = [[UITextView alloc]initWithFrame:self.bounds];
30 | self.logTextView.backgroundColor = [UIColor darkGrayColor];
31 | self.logTextView.textColor = [UIColor whiteColor];
32 | self.logTextView.font = [UIFont systemFontOfSize:15.0];
33 | self.logTextView.editable = NO;
34 | self.logTextView.layoutManager.allowsNonContiguousLayout = NO; //default is YES will reset scoll contentoffset
35 | [self addSubview:self.logTextView];
36 | }
37 |
38 | - (void)updateLog:(NSString *)logText {
39 | if (self.logTextView.contentSize.height - (self.logTextView.contentOffset.y + CGRectGetHeight(self.bounds)) <= 30 ) {
40 | self.logTextView.text = logText;
41 | [self.logTextView scrollRangeToVisible:NSMakeRange(self.logTextView.text.length, 1)];
42 | }else {
43 | self.logTextView.text = logText;
44 | }
45 | }
46 |
47 |
48 | @end
49 |
--------------------------------------------------------------------------------
/SULoggerDemo/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ####前言
2 | debug对于咋们程序员来说家常便饭,但有时候我们会遇到一种情况:开发某个功能时,需要在某个特定场景下进行调试,而这个场景并没有MacBook来进行连接debug,偏偏我们需要获得调试时的一些信息,怎么办?
3 |
4 | 方法有很多,这里提供一个轻量级工具SULogger来实时显示Log日志在手机屏幕上。
5 |
6 |
7 |
8 | ####SULogger是什么
9 | 用法简单的iOS真机调试实时可视化显示Log日志工具
10 |
11 | 1、实时显示log输出日志
12 |
13 | 2、随时切换和隐藏面板
14 |
15 | 3、能滚动查看历史log信息,能对信息进行拷贝
16 |
17 | 4、用法简单:只需两句代码
18 |
19 |
20 |
21 |
22 | ####如何导入SULogger
23 | cocoapods导入:```pod 'SULogger'```
24 | 手动导入:
25 | 将SULogger文件夹中的所有文件拽入项目中
26 | ```
27 | SULogger.h SULogboard.h
28 | SULogger.m SULogboard.m
29 | ```
30 |
31 | ####如何使用SULogger
32 | 1、导入主头文件:
33 | ```
34 | #import "SULogger.h"
35 | ```
36 | 2、启动保存日志功能:```[SULogger start]```
37 | ```
38 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
39 | [SULogger start];
40 | return YES;
41 | }
42 | ```
43 | 3、在你需要的时候切换log面板的显示/隐藏状态(demo是在摇一摇的时候切换):``` [SULogger visibleChange]```
44 | ```
45 | - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
46 | if (event.type == UIEventSubtypeMotionShake) {
47 | [SULogger visibleChange];
48 | }
49 | }
50 | ```
51 |
52 | ####效果图
53 |
54 | GIF图加载较慢,请稍等
55 |
56 | 实时显示log输出日志
57 |
58 | 
59 |
60 | 能滚动查看历史log信息,期间将停止自动滚动到最新日志
61 |
62 | 
63 |
64 |
65 | ####提醒
66 | 本工具纯ARC,兼容iOS7.0以上系统
67 |
68 | 本工具提供的demo需要在真机上运行,否则log面板将不输出任何日志
69 |
70 |
71 |
72 |
73 | ####期待
74 | 1、大牛们能提供建议(包括优化和完善功能)
75 |
76 | 2、体验中遇到BUG,请联系我,谢谢
77 |
78 | 3、小伙伴能睡出代码,Pull Requests我
79 |
80 | 4、本工具能帮助到大家 ^_^
81 |
--------------------------------------------------------------------------------
/SULoggerDemo/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/SULogger/SULogger.m:
--------------------------------------------------------------------------------
1 | //
2 | // SULogboard.m
3 | // SUMusic
4 | //
5 | // Created by 万众科技 on 16/3/4.
6 | // Copyright © 2016年 KevinSu. All rights reserved.
7 | //
8 |
9 | #import "SULogger.h"
10 | #import "SULogboard.h"
11 |
12 | #define LogFileName @"SULogger.log"
13 |
14 | @interface SULogger ()
15 |
16 | @property (nonatomic, strong) SULogboard * logboard;
17 | @property (nonatomic, strong) NSTimer * timer;
18 |
19 | @end
20 |
21 | @implementation SULogger
22 |
23 | + (instancetype)logger {
24 | static SULogger * logger = nil;
25 | static dispatch_once_t onceToken;
26 | dispatch_once(&onceToken, ^{
27 | logger = [[SULogger alloc]init];
28 | });
29 | return logger;
30 | }
31 |
32 | - (void)startSaveLog {
33 |
34 | //file path
35 | NSString * documentDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
36 | NSString * logPath = [documentDirPath stringByAppendingPathComponent:LogFileName];
37 | //delete exisist file
38 | [[NSFileManager defaultManager]removeItemAtPath:logPath error:nil];
39 |
40 | #if TARGET_IPHONE_SIMULATOR
41 | NSLog(@"SIMULATOR DEVICE");
42 | #else
43 | //export log to file
44 | freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout); //c printf
45 | freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr); //oc NSLog
46 | #endif
47 |
48 | }
49 |
50 | - (void)loadLog {
51 | //file path
52 | NSString * documentDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
53 | NSString * logPath = [documentDirPath stringByAppendingPathComponent:LogFileName];
54 | //load data
55 | NSData * logData = [NSData dataWithContentsOfFile:logPath];
56 | NSString * logText = [[NSString alloc]initWithData:logData encoding:NSUTF8StringEncoding];
57 | //update text
58 | [self.logboard updateLog:logText];
59 | }
60 |
61 |
62 | - (void)show {
63 | //create logboard
64 | self.logboard = [[SULogboard alloc]initWithFrame:[UIScreen mainScreen].bounds];
65 | self.logboard.alpha = 0.f;
66 | [[UIApplication sharedApplication].keyWindow addSubview:self.logboard];
67 | //animation show
68 | [UIView animateWithDuration:0.2 animations:^{
69 | self.logboard.alpha = 1.0;
70 | }];
71 | //add timer to update log
72 | [self loadLog];
73 | self.timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(loadLog) userInfo:nil repeats:YES];
74 | }
75 |
76 | - (void)hide {
77 | //animation hide
78 | [UIView animateWithDuration:0.2 animations:^{
79 | self.logboard.alpha = 0.f;
80 | } completion:^(BOOL finished) {
81 | [self.logboard removeFromSuperview];
82 | self.logboard = nil;
83 | }];
84 | //release timer
85 | [self.timer invalidate];
86 | self.timer = nil;
87 | }
88 |
89 | + (void)start {
90 | [[SULogger logger] startSaveLog];
91 | }
92 |
93 | + (void)visibleChange {
94 | SULogger * logger = [SULogger logger];
95 | logger.timer ? [logger hide] : [logger show];
96 | }
97 |
98 | @end
99 |
--------------------------------------------------------------------------------
/SULoggerDemo/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/SULoggerDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2B55D0DA1C8A0312009E3F01 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B55D0D91C8A0312009E3F01 /* main.m */; };
11 | 2B55D0DD1C8A0312009E3F01 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B55D0DC1C8A0312009E3F01 /* AppDelegate.m */; };
12 | 2B55D0E01C8A0312009E3F01 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B55D0DF1C8A0312009E3F01 /* ViewController.m */; };
13 | 2B55D0E31C8A0312009E3F01 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2B55D0E11C8A0312009E3F01 /* Main.storyboard */; };
14 | 2B55D0E51C8A0312009E3F01 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2B55D0E41C8A0312009E3F01 /* Assets.xcassets */; };
15 | 2B55D0E81C8A0312009E3F01 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2B55D0E61C8A0312009E3F01 /* LaunchScreen.storyboard */; };
16 | 2B55D0F41C8A0327009E3F01 /* SULogboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B55D0F11C8A0327009E3F01 /* SULogboard.m */; settings = {ASSET_TAGS = (); }; };
17 | 2B55D0F51C8A0327009E3F01 /* SULogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B55D0F31C8A0327009E3F01 /* SULogger.m */; settings = {ASSET_TAGS = (); }; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXFileReference section */
21 | 2B55D0D51C8A0312009E3F01 /* SULoggerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SULoggerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
22 | 2B55D0D91C8A0312009E3F01 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
23 | 2B55D0DB1C8A0312009E3F01 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
24 | 2B55D0DC1C8A0312009E3F01 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
25 | 2B55D0DE1C8A0312009E3F01 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
26 | 2B55D0DF1C8A0312009E3F01 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
27 | 2B55D0E21C8A0312009E3F01 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
28 | 2B55D0E41C8A0312009E3F01 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
29 | 2B55D0E71C8A0312009E3F01 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
30 | 2B55D0E91C8A0312009E3F01 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
31 | 2B55D0F01C8A0327009E3F01 /* SULogboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SULogboard.h; sourceTree = ""; };
32 | 2B55D0F11C8A0327009E3F01 /* SULogboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SULogboard.m; sourceTree = ""; };
33 | 2B55D0F21C8A0327009E3F01 /* SULogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SULogger.h; sourceTree = ""; };
34 | 2B55D0F31C8A0327009E3F01 /* SULogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SULogger.m; sourceTree = ""; };
35 | /* End PBXFileReference section */
36 |
37 | /* Begin PBXFrameworksBuildPhase section */
38 | 2B55D0D21C8A0312009E3F01 /* Frameworks */ = {
39 | isa = PBXFrameworksBuildPhase;
40 | buildActionMask = 2147483647;
41 | files = (
42 | );
43 | runOnlyForDeploymentPostprocessing = 0;
44 | };
45 | /* End PBXFrameworksBuildPhase section */
46 |
47 | /* Begin PBXGroup section */
48 | 2B55D0CC1C8A0312009E3F01 = {
49 | isa = PBXGroup;
50 | children = (
51 | 2B55D0D71C8A0312009E3F01 /* SULoggerDemo */,
52 | 2B55D0D61C8A0312009E3F01 /* Products */,
53 | );
54 | sourceTree = "";
55 | };
56 | 2B55D0D61C8A0312009E3F01 /* Products */ = {
57 | isa = PBXGroup;
58 | children = (
59 | 2B55D0D51C8A0312009E3F01 /* SULoggerDemo.app */,
60 | );
61 | name = Products;
62 | sourceTree = "";
63 | };
64 | 2B55D0D71C8A0312009E3F01 /* SULoggerDemo */ = {
65 | isa = PBXGroup;
66 | children = (
67 | 2B55D0EF1C8A0327009E3F01 /* SULogger */,
68 | 2B55D0DB1C8A0312009E3F01 /* AppDelegate.h */,
69 | 2B55D0DC1C8A0312009E3F01 /* AppDelegate.m */,
70 | 2B55D0DE1C8A0312009E3F01 /* ViewController.h */,
71 | 2B55D0DF1C8A0312009E3F01 /* ViewController.m */,
72 | 2B55D0E11C8A0312009E3F01 /* Main.storyboard */,
73 | 2B55D0E41C8A0312009E3F01 /* Assets.xcassets */,
74 | 2B55D0E61C8A0312009E3F01 /* LaunchScreen.storyboard */,
75 | 2B55D0E91C8A0312009E3F01 /* Info.plist */,
76 | 2B55D0D81C8A0312009E3F01 /* Supporting Files */,
77 | );
78 | path = SULoggerDemo;
79 | sourceTree = "";
80 | };
81 | 2B55D0D81C8A0312009E3F01 /* Supporting Files */ = {
82 | isa = PBXGroup;
83 | children = (
84 | 2B55D0D91C8A0312009E3F01 /* main.m */,
85 | );
86 | name = "Supporting Files";
87 | sourceTree = "";
88 | };
89 | 2B55D0EF1C8A0327009E3F01 /* SULogger */ = {
90 | isa = PBXGroup;
91 | children = (
92 | 2B55D0F01C8A0327009E3F01 /* SULogboard.h */,
93 | 2B55D0F11C8A0327009E3F01 /* SULogboard.m */,
94 | 2B55D0F21C8A0327009E3F01 /* SULogger.h */,
95 | 2B55D0F31C8A0327009E3F01 /* SULogger.m */,
96 | );
97 | name = SULogger;
98 | path = ../SULogger;
99 | sourceTree = "";
100 | };
101 | /* End PBXGroup section */
102 |
103 | /* Begin PBXNativeTarget section */
104 | 2B55D0D41C8A0312009E3F01 /* SULoggerDemo */ = {
105 | isa = PBXNativeTarget;
106 | buildConfigurationList = 2B55D0EC1C8A0312009E3F01 /* Build configuration list for PBXNativeTarget "SULoggerDemo" */;
107 | buildPhases = (
108 | 2B55D0D11C8A0312009E3F01 /* Sources */,
109 | 2B55D0D21C8A0312009E3F01 /* Frameworks */,
110 | 2B55D0D31C8A0312009E3F01 /* Resources */,
111 | );
112 | buildRules = (
113 | );
114 | dependencies = (
115 | );
116 | name = SULoggerDemo;
117 | productName = SULoggerDemo;
118 | productReference = 2B55D0D51C8A0312009E3F01 /* SULoggerDemo.app */;
119 | productType = "com.apple.product-type.application";
120 | };
121 | /* End PBXNativeTarget section */
122 |
123 | /* Begin PBXProject section */
124 | 2B55D0CD1C8A0312009E3F01 /* Project object */ = {
125 | isa = PBXProject;
126 | attributes = {
127 | LastUpgradeCheck = 0700;
128 | ORGANIZATIONNAME = KevinSu;
129 | TargetAttributes = {
130 | 2B55D0D41C8A0312009E3F01 = {
131 | CreatedOnToolsVersion = 7.0;
132 | };
133 | };
134 | };
135 | buildConfigurationList = 2B55D0D01C8A0312009E3F01 /* Build configuration list for PBXProject "SULoggerDemo" */;
136 | compatibilityVersion = "Xcode 3.2";
137 | developmentRegion = English;
138 | hasScannedForEncodings = 0;
139 | knownRegions = (
140 | en,
141 | Base,
142 | );
143 | mainGroup = 2B55D0CC1C8A0312009E3F01;
144 | productRefGroup = 2B55D0D61C8A0312009E3F01 /* Products */;
145 | projectDirPath = "";
146 | projectRoot = "";
147 | targets = (
148 | 2B55D0D41C8A0312009E3F01 /* SULoggerDemo */,
149 | );
150 | };
151 | /* End PBXProject section */
152 |
153 | /* Begin PBXResourcesBuildPhase section */
154 | 2B55D0D31C8A0312009E3F01 /* Resources */ = {
155 | isa = PBXResourcesBuildPhase;
156 | buildActionMask = 2147483647;
157 | files = (
158 | 2B55D0E81C8A0312009E3F01 /* LaunchScreen.storyboard in Resources */,
159 | 2B55D0E51C8A0312009E3F01 /* Assets.xcassets in Resources */,
160 | 2B55D0E31C8A0312009E3F01 /* Main.storyboard in Resources */,
161 | );
162 | runOnlyForDeploymentPostprocessing = 0;
163 | };
164 | /* End PBXResourcesBuildPhase section */
165 |
166 | /* Begin PBXSourcesBuildPhase section */
167 | 2B55D0D11C8A0312009E3F01 /* Sources */ = {
168 | isa = PBXSourcesBuildPhase;
169 | buildActionMask = 2147483647;
170 | files = (
171 | 2B55D0E01C8A0312009E3F01 /* ViewController.m in Sources */,
172 | 2B55D0F51C8A0327009E3F01 /* SULogger.m in Sources */,
173 | 2B55D0F41C8A0327009E3F01 /* SULogboard.m in Sources */,
174 | 2B55D0DD1C8A0312009E3F01 /* AppDelegate.m in Sources */,
175 | 2B55D0DA1C8A0312009E3F01 /* main.m in Sources */,
176 | );
177 | runOnlyForDeploymentPostprocessing = 0;
178 | };
179 | /* End PBXSourcesBuildPhase section */
180 |
181 | /* Begin PBXVariantGroup section */
182 | 2B55D0E11C8A0312009E3F01 /* Main.storyboard */ = {
183 | isa = PBXVariantGroup;
184 | children = (
185 | 2B55D0E21C8A0312009E3F01 /* Base */,
186 | );
187 | name = Main.storyboard;
188 | sourceTree = "";
189 | };
190 | 2B55D0E61C8A0312009E3F01 /* LaunchScreen.storyboard */ = {
191 | isa = PBXVariantGroup;
192 | children = (
193 | 2B55D0E71C8A0312009E3F01 /* Base */,
194 | );
195 | name = LaunchScreen.storyboard;
196 | sourceTree = "";
197 | };
198 | /* End PBXVariantGroup section */
199 |
200 | /* Begin XCBuildConfiguration section */
201 | 2B55D0EA1C8A0312009E3F01 /* Debug */ = {
202 | isa = XCBuildConfiguration;
203 | buildSettings = {
204 | ALWAYS_SEARCH_USER_PATHS = NO;
205 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
206 | CLANG_CXX_LIBRARY = "libc++";
207 | CLANG_ENABLE_MODULES = YES;
208 | CLANG_ENABLE_OBJC_ARC = YES;
209 | CLANG_WARN_BOOL_CONVERSION = YES;
210 | CLANG_WARN_CONSTANT_CONVERSION = YES;
211 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
212 | CLANG_WARN_EMPTY_BODY = YES;
213 | CLANG_WARN_ENUM_CONVERSION = YES;
214 | CLANG_WARN_INT_CONVERSION = YES;
215 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
216 | CLANG_WARN_UNREACHABLE_CODE = YES;
217 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
218 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
219 | COPY_PHASE_STRIP = NO;
220 | DEBUG_INFORMATION_FORMAT = dwarf;
221 | ENABLE_STRICT_OBJC_MSGSEND = YES;
222 | ENABLE_TESTABILITY = YES;
223 | GCC_C_LANGUAGE_STANDARD = gnu99;
224 | GCC_DYNAMIC_NO_PIC = NO;
225 | GCC_NO_COMMON_BLOCKS = YES;
226 | GCC_OPTIMIZATION_LEVEL = 0;
227 | GCC_PREPROCESSOR_DEFINITIONS = (
228 | "DEBUG=1",
229 | "$(inherited)",
230 | );
231 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
232 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
233 | GCC_WARN_UNDECLARED_SELECTOR = YES;
234 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
235 | GCC_WARN_UNUSED_FUNCTION = YES;
236 | GCC_WARN_UNUSED_VARIABLE = YES;
237 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
238 | MTL_ENABLE_DEBUG_INFO = YES;
239 | ONLY_ACTIVE_ARCH = YES;
240 | SDKROOT = iphoneos;
241 | TARGETED_DEVICE_FAMILY = "1,2";
242 | };
243 | name = Debug;
244 | };
245 | 2B55D0EB1C8A0312009E3F01 /* Release */ = {
246 | isa = XCBuildConfiguration;
247 | buildSettings = {
248 | ALWAYS_SEARCH_USER_PATHS = NO;
249 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
250 | CLANG_CXX_LIBRARY = "libc++";
251 | CLANG_ENABLE_MODULES = YES;
252 | CLANG_ENABLE_OBJC_ARC = YES;
253 | CLANG_WARN_BOOL_CONVERSION = YES;
254 | CLANG_WARN_CONSTANT_CONVERSION = YES;
255 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
256 | CLANG_WARN_EMPTY_BODY = YES;
257 | CLANG_WARN_ENUM_CONVERSION = YES;
258 | CLANG_WARN_INT_CONVERSION = YES;
259 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
260 | CLANG_WARN_UNREACHABLE_CODE = YES;
261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
263 | COPY_PHASE_STRIP = NO;
264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
265 | ENABLE_NS_ASSERTIONS = NO;
266 | ENABLE_STRICT_OBJC_MSGSEND = YES;
267 | GCC_C_LANGUAGE_STANDARD = gnu99;
268 | GCC_NO_COMMON_BLOCKS = YES;
269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
271 | GCC_WARN_UNDECLARED_SELECTOR = YES;
272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
273 | GCC_WARN_UNUSED_FUNCTION = YES;
274 | GCC_WARN_UNUSED_VARIABLE = YES;
275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
276 | MTL_ENABLE_DEBUG_INFO = NO;
277 | SDKROOT = iphoneos;
278 | TARGETED_DEVICE_FAMILY = "1,2";
279 | VALIDATE_PRODUCT = YES;
280 | };
281 | name = Release;
282 | };
283 | 2B55D0ED1C8A0312009E3F01 /* Debug */ = {
284 | isa = XCBuildConfiguration;
285 | buildSettings = {
286 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
287 | INFOPLIST_FILE = SULoggerDemo/Info.plist;
288 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
289 | PRODUCT_BUNDLE_IDENTIFIER = com.kevinSu.SULoggerDemo;
290 | PRODUCT_NAME = "$(TARGET_NAME)";
291 | };
292 | name = Debug;
293 | };
294 | 2B55D0EE1C8A0312009E3F01 /* Release */ = {
295 | isa = XCBuildConfiguration;
296 | buildSettings = {
297 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
298 | INFOPLIST_FILE = SULoggerDemo/Info.plist;
299 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
300 | PRODUCT_BUNDLE_IDENTIFIER = com.kevinSu.SULoggerDemo;
301 | PRODUCT_NAME = "$(TARGET_NAME)";
302 | };
303 | name = Release;
304 | };
305 | /* End XCBuildConfiguration section */
306 |
307 | /* Begin XCConfigurationList section */
308 | 2B55D0D01C8A0312009E3F01 /* Build configuration list for PBXProject "SULoggerDemo" */ = {
309 | isa = XCConfigurationList;
310 | buildConfigurations = (
311 | 2B55D0EA1C8A0312009E3F01 /* Debug */,
312 | 2B55D0EB1C8A0312009E3F01 /* Release */,
313 | );
314 | defaultConfigurationIsVisible = 0;
315 | defaultConfigurationName = Release;
316 | };
317 | 2B55D0EC1C8A0312009E3F01 /* Build configuration list for PBXNativeTarget "SULoggerDemo" */ = {
318 | isa = XCConfigurationList;
319 | buildConfigurations = (
320 | 2B55D0ED1C8A0312009E3F01 /* Debug */,
321 | 2B55D0EE1C8A0312009E3F01 /* Release */,
322 | );
323 | defaultConfigurationIsVisible = 0;
324 | defaultConfigurationName = Release;
325 | };
326 | /* End XCConfigurationList section */
327 | };
328 | rootObject = 2B55D0CD1C8A0312009E3F01 /* Project object */;
329 | }
330 |
--------------------------------------------------------------------------------