Commit 26548f2f08a9decba01b756a117a5a80b653dfbb

Authored by phong
1 parent 920357ae44
Exists in master

add notice to Home screen

Showing 12 changed files with 639 additions and 451 deletions Inline Diff

LifeLog/LifeLog.xcodeproj/project.pbxproj
1 // !$*UTF8*$! 1 // !$*UTF8*$!
2 { 2 {
3 archiveVersion = 1; 3 archiveVersion = 1;
4 classes = { 4 classes = {
5 }; 5 };
6 objectVersion = 46; 6 objectVersion = 46;
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
10 011799F0F2B47D80472673CE /* Pods_LifeLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */; }; 10 011799F0F2B47D80472673CE /* Pods_LifeLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */; };
11 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CED11F2E39DB0029891F /* LoginViewController.m */; }; 11 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CED11F2E39DB0029891F /* LoginViewController.m */; };
12 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E18CED21F2E39DB0029891F /* LoginViewController.xib */; }; 12 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E18CED21F2E39DB0029891F /* LoginViewController.xib */; };
13 6E18CED81F2E3C840029891F /* ServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CED71F2E3C840029891F /* ServerAPI.m */; }; 13 6E18CED81F2E3C840029891F /* ServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CED71F2E3C840029891F /* ServerAPI.m */; };
14 6E18CEDC1F2E40F50029891F /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CEDB1F2E40F50029891F /* User.m */; }; 14 6E18CEDC1F2E40F50029891F /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CEDB1F2E40F50029891F /* User.m */; };
15 6E27A74A1F9E41B400C390B3 /* HomeObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E27A7491F9E41B400C390B3 /* HomeObject.m */; };
16 6E27A74D1F9E432900C390B3 /* NoticeInfor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E27A74C1F9E432900C390B3 /* NoticeInfor.m */; };
15 6E48AF0D1F2F9D3300C1D184 /* CustomTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */; }; 17 6E48AF0D1F2F9D3300C1D184 /* CustomTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */; };
16 6E7F93421F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F933B1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m */; }; 18 6E7F93421F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F933B1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m */; };
17 6E7F93431F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F933D1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m */; }; 19 6E7F93431F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F933D1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m */; };
18 6E7F93441F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F933F1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m */; }; 20 6E7F93441F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F933F1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m */; };
19 6E7F93451F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F93411F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m */; }; 21 6E7F93451F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E7F93411F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m */; };
20 6E84E3761F27A701001EB88E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3751F27A701001EB88E /* main.m */; }; 22 6E84E3761F27A701001EB88E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3751F27A701001EB88E /* main.m */; };
21 6E84E3791F27A701001EB88E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3781F27A701001EB88E /* AppDelegate.m */; }; 23 6E84E3791F27A701001EB88E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3781F27A701001EB88E /* AppDelegate.m */; };
22 6E84E3811F27A701001EB88E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3801F27A701001EB88E /* Assets.xcassets */; }; 24 6E84E3811F27A701001EB88E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3801F27A701001EB88E /* Assets.xcassets */; };
23 6E84E3841F27A701001EB88E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */; }; 25 6E84E3841F27A701001EB88E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */; };
24 6E84E38F1F27A703001EB88E /* LifeLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E38E1F27A703001EB88E /* LifeLogTests.m */; }; 26 6E84E38F1F27A703001EB88E /* LifeLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E38E1F27A703001EB88E /* LifeLogTests.m */; };
25 6E84E39A1F27A703001EB88E /* LifeLogUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3991F27A703001EB88E /* LifeLogUITests.m */; }; 27 6E84E39A1F27A703001EB88E /* LifeLogUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3991F27A703001EB88E /* LifeLogUITests.m */; };
26 6E84E3B01F27A975001EB88E /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3AE1F27A975001EB88E /* HomeViewController.m */; }; 28 6E84E3B01F27A975001EB88E /* HomeViewConb troller.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3AE1F27A975001EB88E /* HomeViewConb troller.m */; };
27 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */; }; 29 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */; };
28 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */; }; 30 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */; };
29 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */; }; 31 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */; };
30 6E84E3BA1F27A9A0001EB88E /* RankingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */; }; 32 6E84E3BA1F27A9A0001EB88E /* RankingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */; };
31 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */; }; 33 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */; };
32 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */; }; 34 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */; };
33 6E84E3C01F27A9B1001EB88E /* SNSViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */; }; 35 6E84E3C01F27A9B1001EB88E /* SNSViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */; };
34 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3C31F27ACAE001EB88E /* MapViewController.m */; }; 36 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3C31F27ACAE001EB88E /* MapViewController.m */; };
35 6E84E3C61F27ACAE001EB88E /* MapViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */; }; 37 6E84E3C61F27ACAE001EB88E /* MapViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */; };
36 6E8DA0F71F2BAC3400CCE941 /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */; }; 38 6E8DA0F71F2BAC3400CCE941 /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */; };
37 6E8DA0F81F2BAC3500CCE941 /* TodayViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */; }; 39 6E8DA0F81F2BAC3500CCE941 /* TodayViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */; };
38 6EA4AF311F40BB7A00F52CFE /* StepObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA4AF2C1F40BB7A00F52CFE /* StepObject.m */; }; 40 6EA4AF311F40BB7A00F52CFE /* StepObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA4AF2C1F40BB7A00F52CFE /* StepObject.m */; };
39 6EA4AF321F40BB7A00F52CFE /* TargetInfor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA4AF2E1F40BB7A00F52CFE /* TargetInfor.m */; }; 41 6EA4AF321F40BB7A00F52CFE /* TargetInfor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA4AF2E1F40BB7A00F52CFE /* TargetInfor.m */; };
40 6EA4AF331F40BB7A00F52CFE /* TopObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA4AF301F40BB7A00F52CFE /* TopObject.m */; }; 42 6EA4AF331F40BB7A00F52CFE /* TopObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA4AF301F40BB7A00F52CFE /* TopObject.m */; };
41 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */; }; 43 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */; };
42 6EDC8BEE1F2C2FB800765ACC /* Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDC8BED1F2C2FB800765ACC /* Utilities.m */; }; 44 6EDC8BEE1F2C2FB800765ACC /* Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDC8BED1F2C2FB800765ACC /* Utilities.m */; };
43 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */; }; 45 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */; };
44 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6EF163091F29069300DA306C /* Localizable.strings */; }; 46 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6EF163091F29069300DA306C /* Localizable.strings */; };
45 9CA8AEEA1F31BB4600C5FC74 /* ConfirmForgetPassViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA8AEE81F31BB4600C5FC74 /* ConfirmForgetPassViewController.m */; }; 47 9CA8AEEA1F31BB4600C5FC74 /* ConfirmForgetPassViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA8AEE81F31BB4600C5FC74 /* ConfirmForgetPassViewController.m */; };
46 9CA8AEEB1F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CA8AEE91F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib */; }; 48 9CA8AEEB1F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CA8AEE91F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib */; };
47 9CBDA0FA1F2ECE2C0055DED1 /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */; }; 49 9CBDA0FA1F2ECE2C0055DED1 /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */; };
48 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */; }; 50 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */; };
49 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */; }; 51 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */; };
50 E933E66B1F3E04A6002926F5 /* SearchGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E6691F3E04A6002926F5 /* SearchGroupViewController.m */; }; 52 E933E66B1F3E04A6002926F5 /* SearchGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E6691F3E04A6002926F5 /* SearchGroupViewController.m */; };
51 E933E66C1F3E04A6002926F5 /* SearchGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E933E66A1F3E04A6002926F5 /* SearchGroupViewController.xib */; }; 53 E933E66C1F3E04A6002926F5 /* SearchGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E933E66A1F3E04A6002926F5 /* SearchGroupViewController.xib */; };
52 E933E6701F3E09B6002926F5 /* SearchGroupTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E66E1F3E09B6002926F5 /* SearchGroupTableViewCell.m */; }; 54 E933E6701F3E09B6002926F5 /* SearchGroupTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E66E1F3E09B6002926F5 /* SearchGroupTableViewCell.m */; };
53 E933E6711F3E09B6002926F5 /* SearchGroupTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E933E66F1F3E09B6002926F5 /* SearchGroupTableViewCell.xib */; }; 55 E933E6711F3E09B6002926F5 /* SearchGroupTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E933E66F1F3E09B6002926F5 /* SearchGroupTableViewCell.xib */; };
54 E933E6741F3E0E4E002926F5 /* GroupObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E6731F3E0E4E002926F5 /* GroupObject.m */; }; 56 E933E6741F3E0E4E002926F5 /* GroupObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E6731F3E0E4E002926F5 /* GroupObject.m */; };
55 E933E6791F40513C002926F5 /* GroupDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E6771F40513C002926F5 /* GroupDetailViewController.m */; }; 57 E933E6791F40513C002926F5 /* GroupDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E933E6771F40513C002926F5 /* GroupDetailViewController.m */; };
56 E933E67A1F40513C002926F5 /* GroupDetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E933E6781F40513C002926F5 /* GroupDetailViewController.xib */; }; 58 E933E67A1F40513C002926F5 /* GroupDetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E933E6781F40513C002926F5 /* GroupDetailViewController.xib */; };
57 E9373E471F3596940059355A /* AutoTransLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E461F3596940059355A /* AutoTransLabel.m */; }; 59 E9373E471F3596940059355A /* AutoTransLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E461F3596940059355A /* AutoTransLabel.m */; };
58 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E491F35AA180059355A /* HistoryObject.m */; }; 60 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E491F35AA180059355A /* HistoryObject.m */; };
59 E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9497FD41F46EC1100E6AF8D /* MemberObject.m */; }; 61 E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9497FD41F46EC1100E6AF8D /* MemberObject.m */; };
60 E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */; }; 62 E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */; };
61 E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */; }; 63 E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */; };
62 E95F4CF31F48B39200D27E80 /* MyGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */; }; 64 E95F4CF31F48B39200D27E80 /* MyGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */; };
63 E95F4CF41F48B39200D27E80 /* MyGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */; }; 65 E95F4CF41F48B39200D27E80 /* MyGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */; };
64 E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */; }; 66 E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */; };
65 E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */; }; 67 E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */; };
66 E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E96855091F3C444900317CEF /* AutoTransButton.m */; }; 68 E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E96855091F3C444900317CEF /* AutoTransButton.m */; };
67 E96855111F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E968550F1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m */; }; 69 E96855111F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E968550F1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m */; };
68 E96855121F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E96855101F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib */; }; 70 E96855121F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E96855101F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib */; };
69 E97588FC1F513BAD00782484 /* RankingObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E97588FB1F513BAD00782484 /* RankingObject.m */; }; 71 E97588FC1F513BAD00782484 /* RankingObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E97588FB1F513BAD00782484 /* RankingObject.m */; };
70 E997E0261F3AB66500709FB1 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E997E0251F3AB66500709FB1 /* Social.framework */; }; 72 E997E0261F3AB66500709FB1 /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E997E0251F3AB66500709FB1 /* Social.framework */; };
71 E99E13AB1F336F3600C78787 /* CollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E99E13AA1F336F3600C78787 /* CollectionView.m */; }; 73 E99E13AB1F336F3600C78787 /* CollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E99E13AA1F336F3600C78787 /* CollectionView.m */; };
72 E99E13AD1F336F4500C78787 /* CollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E99E13AC1F336F4500C78787 /* CollectionView.xib */; }; 74 E99E13AD1F336F4500C78787 /* CollectionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = E99E13AC1F336F4500C78787 /* CollectionView.xib */; };
73 E99E13B11F33720600C78787 /* LabelCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E99E13AF1F33720600C78787 /* LabelCollectionViewCell.m */; }; 75 E99E13B11F33720600C78787 /* LabelCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E99E13AF1F33720600C78787 /* LabelCollectionViewCell.m */; };
74 E99E13B21F33720600C78787 /* LabelCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E99E13B01F33720600C78787 /* LabelCollectionViewCell.xib */; }; 76 E99E13B21F33720600C78787 /* LabelCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E99E13B01F33720600C78787 /* LabelCollectionViewCell.xib */; };
75 E9D909211F3D559D004CF99F /* TweetObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D909201F3D559D004CF99F /* TweetObject.m */; }; 77 E9D909211F3D559D004CF99F /* TweetObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D909201F3D559D004CF99F /* TweetObject.m */; };
76 E9D909241F3D6E8C004CF99F /* BaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D909231F3D6E8C004CF99F /* BaseTableViewController.m */; }; 78 E9D909241F3D6E8C004CF99F /* BaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9D909231F3D6E8C004CF99F /* BaseTableViewController.m */; };
77 E9F73DCC1F338A0F004A3A6F /* HistoryListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F73DCA1F338A0F004A3A6F /* HistoryListTableViewCell.m */; }; 79 E9F73DCC1F338A0F004A3A6F /* HistoryListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F73DCA1F338A0F004A3A6F /* HistoryListTableViewCell.m */; };
78 E9F73DCD1F338A0F004A3A6F /* HistoryListTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9F73DCB1F338A0F004A3A6F /* HistoryListTableViewCell.xib */; }; 80 E9F73DCD1F338A0F004A3A6F /* HistoryListTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9F73DCB1F338A0F004A3A6F /* HistoryListTableViewCell.xib */; };
79 /* End PBXBuildFile section */ 81 /* End PBXBuildFile section */
80 82
81 /* Begin PBXContainerItemProxy section */ 83 /* Begin PBXContainerItemProxy section */
82 6E84E38B1F27A703001EB88E /* PBXContainerItemProxy */ = { 84 6E84E38B1F27A703001EB88E /* PBXContainerItemProxy */ = {
83 isa = PBXContainerItemProxy; 85 isa = PBXContainerItemProxy;
84 containerPortal = 6E84E3691F27A700001EB88E /* Project object */; 86 containerPortal = 6E84E3691F27A700001EB88E /* Project object */;
85 proxyType = 1; 87 proxyType = 1;
86 remoteGlobalIDString = 6E84E3701F27A700001EB88E; 88 remoteGlobalIDString = 6E84E3701F27A700001EB88E;
87 remoteInfo = LifeLog; 89 remoteInfo = LifeLog;
88 }; 90 };
89 6E84E3961F27A703001EB88E /* PBXContainerItemProxy */ = { 91 6E84E3961F27A703001EB88E /* PBXContainerItemProxy */ = {
90 isa = PBXContainerItemProxy; 92 isa = PBXContainerItemProxy;
91 containerPortal = 6E84E3691F27A700001EB88E /* Project object */; 93 containerPortal = 6E84E3691F27A700001EB88E /* Project object */;
92 proxyType = 1; 94 proxyType = 1;
93 remoteGlobalIDString = 6E84E3701F27A700001EB88E; 95 remoteGlobalIDString = 6E84E3701F27A700001EB88E;
94 remoteInfo = LifeLog; 96 remoteInfo = LifeLog;
95 }; 97 };
96 /* End PBXContainerItemProxy section */ 98 /* End PBXContainerItemProxy section */
97 99
98 /* Begin PBXFileReference section */ 100 /* Begin PBXFileReference section */
99 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LifeLog.debug.xcconfig"; path = "Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.debug.xcconfig"; sourceTree = "<group>"; }; 101 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LifeLog.debug.xcconfig"; path = "Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.debug.xcconfig"; sourceTree = "<group>"; };
100 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LifeLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 102 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LifeLog.framework; sourceTree = BUILT_PRODUCTS_DIR; };
101 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LifeLog.release.xcconfig"; path = "Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.release.xcconfig"; sourceTree = "<group>"; }; 103 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LifeLog.release.xcconfig"; path = "Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.release.xcconfig"; sourceTree = "<group>"; };
102 6E18CED01F2E39DB0029891F /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = "<group>"; }; 104 6E18CED01F2E39DB0029891F /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = "<group>"; };
103 6E18CED11F2E39DB0029891F /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; }; 105 6E18CED11F2E39DB0029891F /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = "<group>"; };
104 6E18CED21F2E39DB0029891F /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = "<group>"; }; 106 6E18CED21F2E39DB0029891F /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = "<group>"; };
105 6E18CED61F2E3C840029891F /* ServerAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerAPI.h; sourceTree = "<group>"; }; 107 6E18CED61F2E3C840029891F /* ServerAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerAPI.h; sourceTree = "<group>"; };
106 6E18CED71F2E3C840029891F /* ServerAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServerAPI.m; sourceTree = "<group>"; }; 108 6E18CED71F2E3C840029891F /* ServerAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServerAPI.m; sourceTree = "<group>"; };
107 6E18CEDA1F2E40F50029891F /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = "<group>"; }; 109 6E18CEDA1F2E40F50029891F /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = "<group>"; };
108 6E18CEDB1F2E40F50029891F /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = "<group>"; }; 110 6E18CEDB1F2E40F50029891F /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = "<group>"; };
109 6E18CEDD1F2E46570029891F /* Entities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Entities.h; sourceTree = "<group>"; }; 111 6E18CEDD1F2E46570029891F /* Entities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Entities.h; sourceTree = "<group>"; };
112 6E27A7481F9E41B300C390B3 /* HomeObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HomeObject.h; sourceTree = "<group>"; };
113 6E27A7491F9E41B400C390B3 /* HomeObject.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HomeObject.m; sourceTree = "<group>"; };
114 6E27A74B1F9E432900C390B3 /* NoticeInfor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NoticeInfor.h; sourceTree = "<group>"; };
115 6E27A74C1F9E432900C390B3 /* NoticeInfor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NoticeInfor.m; sourceTree = "<group>"; };
110 6E48AF0B1F2F9D3200C1D184 /* CustomTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTextField.h; sourceTree = "<group>"; }; 116 6E48AF0B1F2F9D3200C1D184 /* CustomTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTextField.h; sourceTree = "<group>"; };
111 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTextField.m; sourceTree = "<group>"; }; 117 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTextField.m; sourceTree = "<group>"; };
112 6E7F933A1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPKeyboardAvoidingCollectionView.h; sourceTree = "<group>"; }; 118 6E7F933A1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPKeyboardAvoidingCollectionView.h; sourceTree = "<group>"; };
113 6E7F933B1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TPKeyboardAvoidingCollectionView.m; sourceTree = "<group>"; }; 119 6E7F933B1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TPKeyboardAvoidingCollectionView.m; sourceTree = "<group>"; };
114 6E7F933C1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPKeyboardAvoidingScrollView.h; sourceTree = "<group>"; }; 120 6E7F933C1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPKeyboardAvoidingScrollView.h; sourceTree = "<group>"; };
115 6E7F933D1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TPKeyboardAvoidingScrollView.m; sourceTree = "<group>"; }; 121 6E7F933D1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TPKeyboardAvoidingScrollView.m; sourceTree = "<group>"; };
116 6E7F933E1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPKeyboardAvoidingTableView.h; sourceTree = "<group>"; }; 122 6E7F933E1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPKeyboardAvoidingTableView.h; sourceTree = "<group>"; };
117 6E7F933F1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TPKeyboardAvoidingTableView.m; sourceTree = "<group>"; }; 123 6E7F933F1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TPKeyboardAvoidingTableView.m; sourceTree = "<group>"; };
118 6E7F93401F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+TPKeyboardAvoidingAdditions.h"; sourceTree = "<group>"; }; 124 6E7F93401F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+TPKeyboardAvoidingAdditions.h"; sourceTree = "<group>"; };
119 6E7F93411F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+TPKeyboardAvoidingAdditions.m"; sourceTree = "<group>"; }; 125 6E7F93411F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+TPKeyboardAvoidingAdditions.m"; sourceTree = "<group>"; };
120 6E84E3711F27A700001EB88E /* LifeLog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LifeLog.app; sourceTree = BUILT_PRODUCTS_DIR; }; 126 6E84E3711F27A700001EB88E /* LifeLog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LifeLog.app; sourceTree = BUILT_PRODUCTS_DIR; };
121 6E84E3751F27A701001EB88E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; 127 6E84E3751F27A701001EB88E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
122 6E84E3771F27A701001EB88E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; 128 6E84E3771F27A701001EB88E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
123 6E84E3781F27A701001EB88E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; 129 6E84E3781F27A701001EB88E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
124 6E84E3801F27A701001EB88E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 130 6E84E3801F27A701001EB88E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
125 6E84E3831F27A701001EB88E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 131 6E84E3831F27A701001EB88E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
126 6E84E3851F27A701001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 132 6E84E3851F27A701001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
127 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LifeLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 133 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LifeLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
128 6E84E38E1F27A703001EB88E /* LifeLogTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LifeLogTests.m; sourceTree = "<group>"; }; 134 6E84E38E1F27A703001EB88E /* LifeLogTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LifeLogTests.m; sourceTree = "<group>"; };
129 6E84E3901F27A703001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 135 6E84E3901F27A703001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
130 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LifeLogUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 136 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LifeLogUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
131 6E84E3991F27A703001EB88E /* LifeLogUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LifeLogUITests.m; sourceTree = "<group>"; }; 137 6E84E3991F27A703001EB88E /* LifeLogUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LifeLogUITests.m; sourceTree = "<group>"; };
132 6E84E39B1F27A703001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 138 6E84E39B1F27A703001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
133 6E84E3AD1F27A975001EB88E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; }; 139 6E84E3AD1F27A975001EB88E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
134 6E84E3AE1F27A975001EB88E /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; }; 140 6E84E3AE1F27A975001EB88E /* HomeViewConb troller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "HomeViewConb troller.m"; sourceTree = "<group>"; };
135 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeViewController.xib; sourceTree = "<group>"; }; 141 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeViewController.xib; sourceTree = "<group>"; };
136 6E84E3B21F27A98B001EB88E /* HistoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryViewController.h; sourceTree = "<group>"; }; 142 6E84E3B21F27A98B001EB88E /* HistoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryViewController.h; sourceTree = "<group>"; };
137 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryViewController.m; sourceTree = "<group>"; }; 143 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryViewController.m; sourceTree = "<group>"; };
138 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryViewController.xib; sourceTree = "<group>"; }; 144 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryViewController.xib; sourceTree = "<group>"; };
139 6E84E3B71F27A9A0001EB88E /* RankingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingViewController.h; sourceTree = "<group>"; }; 145 6E84E3B71F27A9A0001EB88E /* RankingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingViewController.h; sourceTree = "<group>"; };
140 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingViewController.m; sourceTree = "<group>"; }; 146 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingViewController.m; sourceTree = "<group>"; };
141 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingViewController.xib; sourceTree = "<group>"; }; 147 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingViewController.xib; sourceTree = "<group>"; };
142 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNSViewController.h; sourceTree = "<group>"; }; 148 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNSViewController.h; sourceTree = "<group>"; };
143 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SNSViewController.m; sourceTree = "<group>"; }; 149 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SNSViewController.m; sourceTree = "<group>"; };
144 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SNSViewController.xib; sourceTree = "<group>"; }; 150 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SNSViewController.xib; sourceTree = "<group>"; };
145 6E84E3C21F27ACAE001EB88E /* MapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapViewController.h; sourceTree = "<group>"; }; 151 6E84E3C21F27ACAE001EB88E /* MapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapViewController.h; sourceTree = "<group>"; };
146 6E84E3C31F27ACAE001EB88E /* MapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapViewController.m; sourceTree = "<group>"; }; 152 6E84E3C31F27ACAE001EB88E /* MapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapViewController.m; sourceTree = "<group>"; };
147 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MapViewController.xib; sourceTree = "<group>"; }; 153 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MapViewController.xib; sourceTree = "<group>"; };
148 6E8DA0F41F2BAC3400CCE941 /* TodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = "<group>"; }; 154 6E8DA0F41F2BAC3400CCE941 /* TodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = "<group>"; };
149 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = "<group>"; }; 155 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = "<group>"; };
150 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TodayViewController.xib; sourceTree = "<group>"; }; 156 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TodayViewController.xib; sourceTree = "<group>"; };
151 6EA4AF2B1F40BB7A00F52CFE /* StepObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StepObject.h; sourceTree = "<group>"; }; 157 6EA4AF2B1F40BB7A00F52CFE /* StepObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StepObject.h; sourceTree = "<group>"; };
152 6EA4AF2C1F40BB7A00F52CFE /* StepObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StepObject.m; sourceTree = "<group>"; }; 158 6EA4AF2C1F40BB7A00F52CFE /* StepObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StepObject.m; sourceTree = "<group>"; };
153 6EA4AF2D1F40BB7A00F52CFE /* TargetInfor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TargetInfor.h; sourceTree = "<group>"; }; 159 6EA4AF2D1F40BB7A00F52CFE /* TargetInfor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TargetInfor.h; sourceTree = "<group>"; };
154 6EA4AF2E1F40BB7A00F52CFE /* TargetInfor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TargetInfor.m; sourceTree = "<group>"; }; 160 6EA4AF2E1F40BB7A00F52CFE /* TargetInfor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TargetInfor.m; sourceTree = "<group>"; };
155 6EA4AF2F1F40BB7A00F52CFE /* TopObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopObject.h; sourceTree = "<group>"; }; 161 6EA4AF2F1F40BB7A00F52CFE /* TopObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopObject.h; sourceTree = "<group>"; };
156 6EA4AF301F40BB7A00F52CFE /* TopObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopObject.m; sourceTree = "<group>"; }; 162 6EA4AF301F40BB7A00F52CFE /* TopObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopObject.m; sourceTree = "<group>"; };
157 6ECC406F1F2A5FEB00AAEB97 /* NSDate+helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+helper.h"; sourceTree = "<group>"; }; 163 6ECC406F1F2A5FEB00AAEB97 /* NSDate+helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+helper.h"; sourceTree = "<group>"; };
158 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+helper.m"; sourceTree = "<group>"; }; 164 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+helper.m"; sourceTree = "<group>"; };
159 6EDC8BEC1F2C2FB800765ACC /* Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utilities.h; sourceTree = "<group>"; }; 165 6EDC8BEC1F2C2FB800765ACC /* Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utilities.h; sourceTree = "<group>"; };
160 6EDC8BED1F2C2FB800765ACC /* Utilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utilities.m; sourceTree = "<group>"; }; 166 6EDC8BED1F2C2FB800765ACC /* Utilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utilities.m; sourceTree = "<group>"; };
161 6EDC8BF21F2C68D700765ACC /* CMMotionActivityExtra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CMMotionActivityExtra.h; sourceTree = "<group>"; }; 167 6EDC8BF21F2C68D700765ACC /* CMMotionActivityExtra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CMMotionActivityExtra.h; sourceTree = "<group>"; };
162 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CMMotionActivityExtra.m; sourceTree = "<group>"; }; 168 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CMMotionActivityExtra.m; sourceTree = "<group>"; };
163 6EF163091F29069300DA306C /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; }; 169 6EF163091F29069300DA306C /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = "<group>"; };
164 9CA8AEE71F31BB4600C5FC74 /* ConfirmForgetPassViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfirmForgetPassViewController.h; sourceTree = "<group>"; }; 170 9CA8AEE71F31BB4600C5FC74 /* ConfirmForgetPassViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfirmForgetPassViewController.h; sourceTree = "<group>"; };
165 9CA8AEE81F31BB4600C5FC74 /* ConfirmForgetPassViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConfirmForgetPassViewController.m; sourceTree = "<group>"; }; 171 9CA8AEE81F31BB4600C5FC74 /* ConfirmForgetPassViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConfirmForgetPassViewController.m; sourceTree = "<group>"; };
166 9CA8AEE91F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConfirmForgetPassViewController.xib; sourceTree = "<group>"; }; 172 9CA8AEE91F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConfirmForgetPassViewController.xib; sourceTree = "<group>"; };
167 9CBDA0F81F2ECE2C0055DED1 /* BaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseViewController.h; sourceTree = "<group>"; }; 173 9CBDA0F81F2ECE2C0055DED1 /* BaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseViewController.h; sourceTree = "<group>"; };
168 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseViewController.m; sourceTree = "<group>"; }; 174 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseViewController.m; sourceTree = "<group>"; };
169 9CBDA0FC1F2F03810055DED1 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = "<group>"; }; 175 9CBDA0FC1F2F03810055DED1 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = "<group>"; };
170 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = "<group>"; }; 176 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = "<group>"; };
171 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RegisterViewController.xib; sourceTree = "<group>"; }; 177 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RegisterViewController.xib; sourceTree = "<group>"; };
172 E933E6681F3E04A6002926F5 /* SearchGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchGroupViewController.h; sourceTree = "<group>"; }; 178 E933E6681F3E04A6002926F5 /* SearchGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchGroupViewController.h; sourceTree = "<group>"; };
173 E933E6691F3E04A6002926F5 /* SearchGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchGroupViewController.m; sourceTree = "<group>"; }; 179 E933E6691F3E04A6002926F5 /* SearchGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchGroupViewController.m; sourceTree = "<group>"; };
174 E933E66A1F3E04A6002926F5 /* SearchGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchGroupViewController.xib; sourceTree = "<group>"; }; 180 E933E66A1F3E04A6002926F5 /* SearchGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchGroupViewController.xib; sourceTree = "<group>"; };
175 E933E66D1F3E09B6002926F5 /* SearchGroupTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchGroupTableViewCell.h; sourceTree = "<group>"; }; 181 E933E66D1F3E09B6002926F5 /* SearchGroupTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchGroupTableViewCell.h; sourceTree = "<group>"; };
176 E933E66E1F3E09B6002926F5 /* SearchGroupTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchGroupTableViewCell.m; sourceTree = "<group>"; }; 182 E933E66E1F3E09B6002926F5 /* SearchGroupTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchGroupTableViewCell.m; sourceTree = "<group>"; };
177 E933E66F1F3E09B6002926F5 /* SearchGroupTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchGroupTableViewCell.xib; sourceTree = "<group>"; }; 183 E933E66F1F3E09B6002926F5 /* SearchGroupTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchGroupTableViewCell.xib; sourceTree = "<group>"; };
178 E933E6721F3E0E4E002926F5 /* GroupObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupObject.h; sourceTree = "<group>"; }; 184 E933E6721F3E0E4E002926F5 /* GroupObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupObject.h; sourceTree = "<group>"; };
179 E933E6731F3E0E4E002926F5 /* GroupObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupObject.m; sourceTree = "<group>"; }; 185 E933E6731F3E0E4E002926F5 /* GroupObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupObject.m; sourceTree = "<group>"; };
180 E933E6761F40513C002926F5 /* GroupDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupDetailViewController.h; sourceTree = "<group>"; }; 186 E933E6761F40513C002926F5 /* GroupDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupDetailViewController.h; sourceTree = "<group>"; };
181 E933E6771F40513C002926F5 /* GroupDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupDetailViewController.m; sourceTree = "<group>"; }; 187 E933E6771F40513C002926F5 /* GroupDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupDetailViewController.m; sourceTree = "<group>"; };
182 E933E6781F40513C002926F5 /* GroupDetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GroupDetailViewController.xib; sourceTree = "<group>"; }; 188 E933E6781F40513C002926F5 /* GroupDetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GroupDetailViewController.xib; sourceTree = "<group>"; };
183 E9373E451F3596940059355A /* AutoTransLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoTransLabel.h; sourceTree = "<group>"; }; 189 E9373E451F3596940059355A /* AutoTransLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoTransLabel.h; sourceTree = "<group>"; };
184 E9373E461F3596940059355A /* AutoTransLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutoTransLabel.m; sourceTree = "<group>"; }; 190 E9373E461F3596940059355A /* AutoTransLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutoTransLabel.m; sourceTree = "<group>"; };
185 E9373E481F35AA180059355A /* HistoryObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryObject.h; sourceTree = "<group>"; }; 191 E9373E481F35AA180059355A /* HistoryObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryObject.h; sourceTree = "<group>"; };
186 E9373E491F35AA180059355A /* HistoryObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryObject.m; sourceTree = "<group>"; }; 192 E9373E491F35AA180059355A /* HistoryObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryObject.m; sourceTree = "<group>"; };
187 E9497FD31F46EC1100E6AF8D /* MemberObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemberObject.h; sourceTree = "<group>"; }; 193 E9497FD31F46EC1100E6AF8D /* MemberObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemberObject.h; sourceTree = "<group>"; };
188 E9497FD41F46EC1100E6AF8D /* MemberObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemberObject.m; sourceTree = "<group>"; }; 194 E9497FD41F46EC1100E6AF8D /* MemberObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemberObject.m; sourceTree = "<group>"; };
189 E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateGroupViewController.h; sourceTree = "<group>"; }; 195 E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateGroupViewController.h; sourceTree = "<group>"; };
190 E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreateGroupViewController.m; sourceTree = "<group>"; }; 196 E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreateGroupViewController.m; sourceTree = "<group>"; };
191 E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CreateGroupViewController.xib; sourceTree = "<group>"; }; 197 E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CreateGroupViewController.xib; sourceTree = "<group>"; };
192 E95F4CF01F48B39200D27E80 /* MyGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyGroupViewController.h; sourceTree = "<group>"; }; 198 E95F4CF01F48B39200D27E80 /* MyGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyGroupViewController.h; sourceTree = "<group>"; };
193 E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyGroupViewController.m; sourceTree = "<group>"; }; 199 E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyGroupViewController.m; sourceTree = "<group>"; };
194 E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyGroupViewController.xib; sourceTree = "<group>"; }; 200 E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyGroupViewController.xib; sourceTree = "<group>"; };
195 E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingTableViewCell.h; sourceTree = "<group>"; }; 201 E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingTableViewCell.h; sourceTree = "<group>"; };
196 E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingTableViewCell.m; sourceTree = "<group>"; }; 202 E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingTableViewCell.m; sourceTree = "<group>"; };
197 E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingTableViewCell.xib; sourceTree = "<group>"; }; 203 E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingTableViewCell.xib; sourceTree = "<group>"; };
198 E96855081F3C444900317CEF /* AutoTransButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoTransButton.h; sourceTree = "<group>"; }; 204 E96855081F3C444900317CEF /* AutoTransButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AutoTransButton.h; sourceTree = "<group>"; };
199 E96855091F3C444900317CEF /* AutoTransButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutoTransButton.m; sourceTree = "<group>"; }; 205 E96855091F3C444900317CEF /* AutoTransButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AutoTransButton.m; sourceTree = "<group>"; };
200 E968550E1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNSRecentTopicTableViewCell.h; sourceTree = "<group>"; }; 206 E968550E1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNSRecentTopicTableViewCell.h; sourceTree = "<group>"; };
201 E968550F1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SNSRecentTopicTableViewCell.m; sourceTree = "<group>"; }; 207 E968550F1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SNSRecentTopicTableViewCell.m; sourceTree = "<group>"; };
202 E96855101F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SNSRecentTopicTableViewCell.xib; sourceTree = "<group>"; }; 208 E96855101F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SNSRecentTopicTableViewCell.xib; sourceTree = "<group>"; };
203 E97588FA1F513BAD00782484 /* RankingObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingObject.h; sourceTree = "<group>"; }; 209 E97588FA1F513BAD00782484 /* RankingObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingObject.h; sourceTree = "<group>"; };
204 E97588FB1F513BAD00782484 /* RankingObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingObject.m; sourceTree = "<group>"; }; 210 E97588FB1F513BAD00782484 /* RankingObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingObject.m; sourceTree = "<group>"; };
205 E997E0251F3AB66500709FB1 /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; }; 211 E997E0251F3AB66500709FB1 /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; };
206 E99E13A91F336F3600C78787 /* CollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionView.h; sourceTree = "<group>"; }; 212 E99E13A91F336F3600C78787 /* CollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionView.h; sourceTree = "<group>"; };
207 E99E13AA1F336F3600C78787 /* CollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionView.m; sourceTree = "<group>"; }; 213 E99E13AA1F336F3600C78787 /* CollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CollectionView.m; sourceTree = "<group>"; };
208 E99E13AC1F336F4500C78787 /* CollectionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CollectionView.xib; sourceTree = "<group>"; }; 214 E99E13AC1F336F4500C78787 /* CollectionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CollectionView.xib; sourceTree = "<group>"; };
209 E99E13AE1F33720600C78787 /* LabelCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelCollectionViewCell.h; sourceTree = "<group>"; }; 215 E99E13AE1F33720600C78787 /* LabelCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelCollectionViewCell.h; sourceTree = "<group>"; };
210 E99E13AF1F33720600C78787 /* LabelCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelCollectionViewCell.m; sourceTree = "<group>"; }; 216 E99E13AF1F33720600C78787 /* LabelCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelCollectionViewCell.m; sourceTree = "<group>"; };
211 E99E13B01F33720600C78787 /* LabelCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LabelCollectionViewCell.xib; sourceTree = "<group>"; }; 217 E99E13B01F33720600C78787 /* LabelCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LabelCollectionViewCell.xib; sourceTree = "<group>"; };
212 E9D9091F1F3D559D004CF99F /* TweetObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TweetObject.h; sourceTree = "<group>"; }; 218 E9D9091F1F3D559D004CF99F /* TweetObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TweetObject.h; sourceTree = "<group>"; };
213 E9D909201F3D559D004CF99F /* TweetObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TweetObject.m; sourceTree = "<group>"; }; 219 E9D909201F3D559D004CF99F /* TweetObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TweetObject.m; sourceTree = "<group>"; };
214 E9D909221F3D6E8C004CF99F /* BaseTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseTableViewController.h; sourceTree = "<group>"; }; 220 E9D909221F3D6E8C004CF99F /* BaseTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseTableViewController.h; sourceTree = "<group>"; };
215 E9D909231F3D6E8C004CF99F /* BaseTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseTableViewController.m; sourceTree = "<group>"; }; 221 E9D909231F3D6E8C004CF99F /* BaseTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseTableViewController.m; sourceTree = "<group>"; };
216 E9F73DC91F338A0F004A3A6F /* HistoryListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryListTableViewCell.h; sourceTree = "<group>"; }; 222 E9F73DC91F338A0F004A3A6F /* HistoryListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryListTableViewCell.h; sourceTree = "<group>"; };
217 E9F73DCA1F338A0F004A3A6F /* HistoryListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryListTableViewCell.m; sourceTree = "<group>"; }; 223 E9F73DCA1F338A0F004A3A6F /* HistoryListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryListTableViewCell.m; sourceTree = "<group>"; };
218 E9F73DCB1F338A0F004A3A6F /* HistoryListTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryListTableViewCell.xib; sourceTree = "<group>"; }; 224 E9F73DCB1F338A0F004A3A6F /* HistoryListTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryListTableViewCell.xib; sourceTree = "<group>"; };
219 /* End PBXFileReference section */ 225 /* End PBXFileReference section */
220 226
221 /* Begin PBXFrameworksBuildPhase section */ 227 /* Begin PBXFrameworksBuildPhase section */
222 6E84E36E1F27A700001EB88E /* Frameworks */ = { 228 6E84E36E1F27A700001EB88E /* Frameworks */ = {
223 isa = PBXFrameworksBuildPhase; 229 isa = PBXFrameworksBuildPhase;
224 buildActionMask = 2147483647; 230 buildActionMask = 2147483647;
225 files = ( 231 files = (
226 E997E0261F3AB66500709FB1 /* Social.framework in Frameworks */, 232 E997E0261F3AB66500709FB1 /* Social.framework in Frameworks */,
227 011799F0F2B47D80472673CE /* Pods_LifeLog.framework in Frameworks */, 233 011799F0F2B47D80472673CE /* Pods_LifeLog.framework in Frameworks */,
228 ); 234 );
229 runOnlyForDeploymentPostprocessing = 0; 235 runOnlyForDeploymentPostprocessing = 0;
230 }; 236 };
231 6E84E3871F27A703001EB88E /* Frameworks */ = { 237 6E84E3871F27A703001EB88E /* Frameworks */ = {
232 isa = PBXFrameworksBuildPhase; 238 isa = PBXFrameworksBuildPhase;
233 buildActionMask = 2147483647; 239 buildActionMask = 2147483647;
234 files = ( 240 files = (
235 ); 241 );
236 runOnlyForDeploymentPostprocessing = 0; 242 runOnlyForDeploymentPostprocessing = 0;
237 }; 243 };
238 6E84E3921F27A703001EB88E /* Frameworks */ = { 244 6E84E3921F27A703001EB88E /* Frameworks */ = {
239 isa = PBXFrameworksBuildPhase; 245 isa = PBXFrameworksBuildPhase;
240 buildActionMask = 2147483647; 246 buildActionMask = 2147483647;
241 files = ( 247 files = (
242 ); 248 );
243 runOnlyForDeploymentPostprocessing = 0; 249 runOnlyForDeploymentPostprocessing = 0;
244 }; 250 };
245 /* End PBXFrameworksBuildPhase section */ 251 /* End PBXFrameworksBuildPhase section */
246 252
247 /* Begin PBXGroup section */ 253 /* Begin PBXGroup section */
248 020C1721B642EF36F31E1BB4 /* Frameworks */ = { 254 020C1721B642EF36F31E1BB4 /* Frameworks */ = {
249 isa = PBXGroup; 255 isa = PBXGroup;
250 children = ( 256 children = (
251 E997E0251F3AB66500709FB1 /* Social.framework */, 257 E997E0251F3AB66500709FB1 /* Social.framework */,
252 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */, 258 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */,
253 ); 259 );
254 name = Frameworks; 260 name = Frameworks;
255 sourceTree = "<group>"; 261 sourceTree = "<group>";
256 }; 262 };
257 6E18CECF1F2E398C0029891F /* Login */ = { 263 6E18CECF1F2E398C0029891F /* Login */ = {
258 isa = PBXGroup; 264 isa = PBXGroup;
259 children = ( 265 children = (
260 9CA8AEE61F31BB1200C5FC74 /* ConfirmForgetPass */, 266 9CA8AEE61F31BB1200C5FC74 /* ConfirmForgetPass */,
261 6E18CED01F2E39DB0029891F /* LoginViewController.h */, 267 6E18CED01F2E39DB0029891F /* LoginViewController.h */,
262 6E18CED11F2E39DB0029891F /* LoginViewController.m */, 268 6E18CED11F2E39DB0029891F /* LoginViewController.m */,
263 6E18CED21F2E39DB0029891F /* LoginViewController.xib */, 269 6E18CED21F2E39DB0029891F /* LoginViewController.xib */,
264 ); 270 );
265 name = Login; 271 name = Login;
266 sourceTree = "<group>"; 272 sourceTree = "<group>";
267 }; 273 };
268 6E18CED51F2E3C0E0029891F /* ServerAPI */ = { 274 6E18CED51F2E3C0E0029891F /* ServerAPI */ = {
269 isa = PBXGroup; 275 isa = PBXGroup;
270 children = ( 276 children = (
271 6E18CED61F2E3C840029891F /* ServerAPI.h */, 277 6E18CED61F2E3C840029891F /* ServerAPI.h */,
272 6E18CED71F2E3C840029891F /* ServerAPI.m */, 278 6E18CED71F2E3C840029891F /* ServerAPI.m */,
273 ); 279 );
274 name = ServerAPI; 280 name = ServerAPI;
275 sourceTree = "<group>"; 281 sourceTree = "<group>";
276 }; 282 };
277 6E18CED91F2E40AE0029891F /* Model */ = { 283 6E18CED91F2E40AE0029891F /* Model */ = {
278 isa = PBXGroup; 284 isa = PBXGroup;
279 children = ( 285 children = (
280 6E18CEDD1F2E46570029891F /* Entities.h */, 286 6E18CEDD1F2E46570029891F /* Entities.h */,
281 6EA4AF2B1F40BB7A00F52CFE /* StepObject.h */, 287 6EA4AF2B1F40BB7A00F52CFE /* StepObject.h */,
282 6EA4AF2C1F40BB7A00F52CFE /* StepObject.m */, 288 6EA4AF2C1F40BB7A00F52CFE /* StepObject.m */,
283 6EA4AF2D1F40BB7A00F52CFE /* TargetInfor.h */, 289 6EA4AF2D1F40BB7A00F52CFE /* TargetInfor.h */,
284 6EA4AF2E1F40BB7A00F52CFE /* TargetInfor.m */, 290 6EA4AF2E1F40BB7A00F52CFE /* TargetInfor.m */,
285 6EA4AF2F1F40BB7A00F52CFE /* TopObject.h */, 291 6EA4AF2F1F40BB7A00F52CFE /* TopObject.h */,
286 6EA4AF301F40BB7A00F52CFE /* TopObject.m */, 292 6EA4AF301F40BB7A00F52CFE /* TopObject.m */,
287 6E18CEDA1F2E40F50029891F /* User.h */, 293 6E18CEDA1F2E40F50029891F /* User.h */,
288 6E18CEDB1F2E40F50029891F /* User.m */, 294 6E18CEDB1F2E40F50029891F /* User.m */,
289 E9373E481F35AA180059355A /* HistoryObject.h */, 295 E9373E481F35AA180059355A /* HistoryObject.h */,
290 E9373E491F35AA180059355A /* HistoryObject.m */, 296 E9373E491F35AA180059355A /* HistoryObject.m */,
291 E9D9091F1F3D559D004CF99F /* TweetObject.h */, 297 E9D9091F1F3D559D004CF99F /* TweetObject.h */,
292 E9D909201F3D559D004CF99F /* TweetObject.m */, 298 E9D909201F3D559D004CF99F /* TweetObject.m */,
293 E933E6721F3E0E4E002926F5 /* GroupObject.h */, 299 E933E6721F3E0E4E002926F5 /* GroupObject.h */,
294 E933E6731F3E0E4E002926F5 /* GroupObject.m */, 300 E933E6731F3E0E4E002926F5 /* GroupObject.m */,
295 E9497FD31F46EC1100E6AF8D /* MemberObject.h */, 301 E9497FD31F46EC1100E6AF8D /* MemberObject.h */,
296 E9497FD41F46EC1100E6AF8D /* MemberObject.m */, 302 E9497FD41F46EC1100E6AF8D /* MemberObject.m */,
297 E97588FA1F513BAD00782484 /* RankingObject.h */, 303 E97588FA1F513BAD00782484 /* RankingObject.h */,
298 E97588FB1F513BAD00782484 /* RankingObject.m */, 304 E97588FB1F513BAD00782484 /* RankingObject.m */,
305 6E27A7481F9E41B300C390B3 /* HomeObject.h */,
306 6E27A7491F9E41B400C390B3 /* HomeObject.m */,
307 6E27A74B1F9E432900C390B3 /* NoticeInfor.h */,
308 6E27A74C1F9E432900C390B3 /* NoticeInfor.m */,
299 ); 309 );
300 name = Model; 310 name = Model;
301 sourceTree = "<group>"; 311 sourceTree = "<group>";
302 }; 312 };
303 6E7F93391F35870F00EFBC71 /* TPKeyboardAvoiding */ = { 313 6E7F93391F35870F00EFBC71 /* TPKeyboardAvoiding */ = {
304 isa = PBXGroup; 314 isa = PBXGroup;
305 children = ( 315 children = (
306 6E7F933A1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.h */, 316 6E7F933A1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.h */,
307 6E7F933B1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m */, 317 6E7F933B1F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m */,
308 6E7F933C1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.h */, 318 6E7F933C1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.h */,
309 6E7F933D1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m */, 319 6E7F933D1F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m */,
310 6E7F933E1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.h */, 320 6E7F933E1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.h */,
311 6E7F933F1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m */, 321 6E7F933F1F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m */,
312 6E7F93401F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.h */, 322 6E7F93401F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.h */,
313 6E7F93411F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m */, 323 6E7F93411F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m */,
314 ); 324 );
315 name = TPKeyboardAvoiding; 325 name = TPKeyboardAvoiding;
316 sourceTree = "<group>"; 326 sourceTree = "<group>";
317 }; 327 };
318 6E84E3681F27A700001EB88E = { 328 6E84E3681F27A700001EB88E = {
319 isa = PBXGroup; 329 isa = PBXGroup;
320 children = ( 330 children = (
321 6E84E3731F27A700001EB88E /* LifeLog */, 331 6E84E3731F27A700001EB88E /* LifeLog */,
322 6E84E38D1F27A703001EB88E /* LifeLogTests */, 332 6E84E38D1F27A703001EB88E /* LifeLogTests */,
323 6E84E3981F27A703001EB88E /* LifeLogUITests */, 333 6E84E3981F27A703001EB88E /* LifeLogUITests */,
324 DE8269E957EA47CD771BAB33 /* Pods */, 334 DE8269E957EA47CD771BAB33 /* Pods */,
325 020C1721B642EF36F31E1BB4 /* Frameworks */, 335 020C1721B642EF36F31E1BB4 /* Frameworks */,
326 783929CF869F5081762B3DCA /* Products */, 336 783929CF869F5081762B3DCA /* Products */,
327 ); 337 );
328 sourceTree = "<group>"; 338 sourceTree = "<group>";
329 }; 339 };
330 6E84E3721F27A700001EB88E /* Products */ = { 340 6E84E3721F27A700001EB88E /* Products */ = {
331 isa = PBXGroup; 341 isa = PBXGroup;
332 children = ( 342 children = (
333 6E84E3711F27A700001EB88E /* LifeLog.app */, 343 6E84E3711F27A700001EB88E /* LifeLog.app */,
334 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */, 344 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */,
335 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */, 345 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */,
336 ); 346 );
337 name = Products; 347 name = Products;
338 sourceTree = "<group>"; 348 sourceTree = "<group>";
339 }; 349 };
340 6E84E3731F27A700001EB88E /* LifeLog */ = { 350 6E84E3731F27A700001EB88E /* LifeLog */ = {
341 isa = PBXGroup; 351 isa = PBXGroup;
342 children = ( 352 children = (
343 6E18CED91F2E40AE0029891F /* Model */, 353 6E18CED91F2E40AE0029891F /* Model */,
344 6E18CED51F2E3C0E0029891F /* ServerAPI */, 354 6E18CED51F2E3C0E0029891F /* ServerAPI */,
345 6EDC8BEB1F2C2F3300765ACC /* Common */, 355 6EDC8BEB1F2C2F3300765ACC /* Common */,
346 6ECC406D1F2A5FA500AAEB97 /* Library */, 356 6ECC406D1F2A5FA500AAEB97 /* Library */,
347 E99E13A71F336F0C00C78787 /* CustomView */, 357 E99E13A71F336F0C00C78787 /* CustomView */,
348 6E84E3A81F27A8A9001EB88E /* ViewControllers */, 358 6E84E3A81F27A8A9001EB88E /* ViewControllers */,
349 6E84E3A71F27A887001EB88E /* AppDelegate */, 359 6E84E3A71F27A887001EB88E /* AppDelegate */,
350 6E84E3801F27A701001EB88E /* Assets.xcassets */, 360 6E84E3801F27A701001EB88E /* Assets.xcassets */,
351 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */, 361 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */,
352 6E84E3851F27A701001EB88E /* Info.plist */, 362 6E84E3851F27A701001EB88E /* Info.plist */,
353 6E84E3741F27A701001EB88E /* Supporting Files */, 363 6E84E3741F27A701001EB88E /* Supporting Files */,
354 ); 364 );
355 path = LifeLog; 365 path = LifeLog;
356 sourceTree = "<group>"; 366 sourceTree = "<group>";
357 }; 367 };
358 6E84E3741F27A701001EB88E /* Supporting Files */ = { 368 6E84E3741F27A701001EB88E /* Supporting Files */ = {
359 isa = PBXGroup; 369 isa = PBXGroup;
360 children = ( 370 children = (
361 6E84E3751F27A701001EB88E /* main.m */, 371 6E84E3751F27A701001EB88E /* main.m */,
362 6EF163091F29069300DA306C /* Localizable.strings */, 372 6EF163091F29069300DA306C /* Localizable.strings */,
363 ); 373 );
364 name = "Supporting Files"; 374 name = "Supporting Files";
365 sourceTree = "<group>"; 375 sourceTree = "<group>";
366 }; 376 };
367 6E84E38D1F27A703001EB88E /* LifeLogTests */ = { 377 6E84E38D1F27A703001EB88E /* LifeLogTests */ = {
368 isa = PBXGroup; 378 isa = PBXGroup;
369 children = ( 379 children = (
370 6E84E38E1F27A703001EB88E /* LifeLogTests.m */, 380 6E84E38E1F27A703001EB88E /* LifeLogTests.m */,
371 6E84E3901F27A703001EB88E /* Info.plist */, 381 6E84E3901F27A703001EB88E /* Info.plist */,
372 ); 382 );
373 path = LifeLogTests; 383 path = LifeLogTests;
374 sourceTree = "<group>"; 384 sourceTree = "<group>";
375 }; 385 };
376 6E84E3981F27A703001EB88E /* LifeLogUITests */ = { 386 6E84E3981F27A703001EB88E /* LifeLogUITests */ = {
377 isa = PBXGroup; 387 isa = PBXGroup;
378 children = ( 388 children = (
379 6E84E3991F27A703001EB88E /* LifeLogUITests.m */, 389 6E84E3991F27A703001EB88E /* LifeLogUITests.m */,
380 6E84E39B1F27A703001EB88E /* Info.plist */, 390 6E84E39B1F27A703001EB88E /* Info.plist */,
381 ); 391 );
382 path = LifeLogUITests; 392 path = LifeLogUITests;
383 sourceTree = "<group>"; 393 sourceTree = "<group>";
384 }; 394 };
385 6E84E3A71F27A887001EB88E /* AppDelegate */ = { 395 6E84E3A71F27A887001EB88E /* AppDelegate */ = {
386 isa = PBXGroup; 396 isa = PBXGroup;
387 children = ( 397 children = (
388 6E84E3771F27A701001EB88E /* AppDelegate.h */, 398 6E84E3771F27A701001EB88E /* AppDelegate.h */,
389 6E84E3781F27A701001EB88E /* AppDelegate.m */, 399 6E84E3781F27A701001EB88E /* AppDelegate.m */,
390 ); 400 );
391 name = AppDelegate; 401 name = AppDelegate;
392 sourceTree = "<group>"; 402 sourceTree = "<group>";
393 }; 403 };
394 6E84E3A81F27A8A9001EB88E /* ViewControllers */ = { 404 6E84E3A81F27A8A9001EB88E /* ViewControllers */ = {
395 isa = PBXGroup; 405 isa = PBXGroup;
396 children = ( 406 children = (
397 9CBDA0F71F2ECDFD0055DED1 /* BaseViewController */, 407 9CBDA0F71F2ECDFD0055DED1 /* BaseViewController */,
398 9CBDA0FB1F2F03490055DED1 /* Register */, 408 9CBDA0FB1F2F03490055DED1 /* Register */,
399 6E18CECF1F2E398C0029891F /* Login */, 409 6E18CECF1F2E398C0029891F /* Login */,
400 6E84E3AC1F27A954001EB88E /* SNS */, 410 6E84E3AC1F27A954001EB88E /* SNS */,
401 6E84E3C11F27AC89001EB88E /* Map */, 411 6E84E3C11F27AC89001EB88E /* Map */,
402 6E84E3AB1F27A946001EB88E /* Ranking */, 412 6E84E3AB1F27A946001EB88E /* Ranking */,
403 6E84E3AA1F27A924001EB88E /* History */, 413 6E84E3AA1F27A924001EB88E /* History */,
404 6E84E3A91F27A915001EB88E /* Home */, 414 6E84E3A91F27A915001EB88E /* Home */,
405 ); 415 );
406 name = ViewControllers; 416 name = ViewControllers;
407 sourceTree = "<group>"; 417 sourceTree = "<group>";
408 }; 418 };
409 6E84E3A91F27A915001EB88E /* Home */ = { 419 6E84E3A91F27A915001EB88E /* Home */ = {
410 isa = PBXGroup; 420 isa = PBXGroup;
411 children = ( 421 children = (
412 6E8DA0F31F2BAC0800CCE941 /* Today */, 422 6E8DA0F31F2BAC0800CCE941 /* Today */,
413 6E84E3AD1F27A975001EB88E /* HomeViewController.h */, 423 6E84E3AD1F27A975001EB88E /* HomeViewController.h */,
414 6E84E3AE1F27A975001EB88E /* HomeViewController.m */, 424 6E84E3AE1F27A975001EB88E /* HomeViewConb troller.m */,
415 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */, 425 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */,
416 ); 426 );
417 name = Home; 427 name = Home;
418 sourceTree = "<group>"; 428 sourceTree = "<group>";
419 }; 429 };
420 6E84E3AA1F27A924001EB88E /* History */ = { 430 6E84E3AA1F27A924001EB88E /* History */ = {
421 isa = PBXGroup; 431 isa = PBXGroup;
422 children = ( 432 children = (
423 6E84E3B21F27A98B001EB88E /* HistoryViewController.h */, 433 6E84E3B21F27A98B001EB88E /* HistoryViewController.h */,
424 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */, 434 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */,
425 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */, 435 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */,
426 E9F73DC91F338A0F004A3A6F /* HistoryListTableViewCell.h */, 436 E9F73DC91F338A0F004A3A6F /* HistoryListTableViewCell.h */,
427 E9F73DCA1F338A0F004A3A6F /* HistoryListTableViewCell.m */, 437 E9F73DCA1F338A0F004A3A6F /* HistoryListTableViewCell.m */,
428 E9F73DCB1F338A0F004A3A6F /* HistoryListTableViewCell.xib */, 438 E9F73DCB1F338A0F004A3A6F /* HistoryListTableViewCell.xib */,
429 ); 439 );
430 name = History; 440 name = History;
431 sourceTree = "<group>"; 441 sourceTree = "<group>";
432 }; 442 };
433 6E84E3AB1F27A946001EB88E /* Ranking */ = { 443 6E84E3AB1F27A946001EB88E /* Ranking */ = {
434 isa = PBXGroup; 444 isa = PBXGroup;
435 children = ( 445 children = (
436 6E84E3B71F27A9A0001EB88E /* RankingViewController.h */, 446 6E84E3B71F27A9A0001EB88E /* RankingViewController.h */,
437 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */, 447 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */,
438 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */, 448 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */,
439 E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */, 449 E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */,
440 E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */, 450 E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */,
441 E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */, 451 E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */,
442 ); 452 );
443 name = Ranking; 453 name = Ranking;
444 sourceTree = "<group>"; 454 sourceTree = "<group>";
445 }; 455 };
446 6E84E3AC1F27A954001EB88E /* SNS */ = { 456 6E84E3AC1F27A954001EB88E /* SNS */ = {
447 isa = PBXGroup; 457 isa = PBXGroup;
448 children = ( 458 children = (
449 E95F4CEF1F48B37100D27E80 /* MyGroup */, 459 E95F4CEF1F48B37100D27E80 /* MyGroup */,
450 E95F4CE91F475C4B00D27E80 /* CreateGroup */, 460 E95F4CE91F475C4B00D27E80 /* CreateGroup */,
451 E933E6751F4050E6002926F5 /* GroupDetail */, 461 E933E6751F4050E6002926F5 /* GroupDetail */,
452 E933E6671F3E0479002926F5 /* SeachGroup */, 462 E933E6671F3E0479002926F5 /* SeachGroup */,
453 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */, 463 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */,
454 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */, 464 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */,
455 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */, 465 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */,
456 E968550E1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.h */, 466 E968550E1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.h */,
457 E968550F1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m */, 467 E968550F1F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m */,
458 E96855101F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib */, 468 E96855101F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib */,
459 ); 469 );
460 name = SNS; 470 name = SNS;
461 sourceTree = "<group>"; 471 sourceTree = "<group>";
462 }; 472 };
463 6E84E3C11F27AC89001EB88E /* Map */ = { 473 6E84E3C11F27AC89001EB88E /* Map */ = {
464 isa = PBXGroup; 474 isa = PBXGroup;
465 children = ( 475 children = (
466 6E84E3C21F27ACAE001EB88E /* MapViewController.h */, 476 6E84E3C21F27ACAE001EB88E /* MapViewController.h */,
467 6E84E3C31F27ACAE001EB88E /* MapViewController.m */, 477 6E84E3C31F27ACAE001EB88E /* MapViewController.m */,
468 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */, 478 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */,
469 ); 479 );
470 name = Map; 480 name = Map;
471 sourceTree = "<group>"; 481 sourceTree = "<group>";
472 }; 482 };
473 6E8DA0F31F2BAC0800CCE941 /* Today */ = { 483 6E8DA0F31F2BAC0800CCE941 /* Today */ = {
474 isa = PBXGroup; 484 isa = PBXGroup;
475 children = ( 485 children = (
476 6E8DA0F41F2BAC3400CCE941 /* TodayViewController.h */, 486 6E8DA0F41F2BAC3400CCE941 /* TodayViewController.h */,
477 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */, 487 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */,
478 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */, 488 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */,
479 ); 489 );
480 name = Today; 490 name = Today;
481 sourceTree = "<group>"; 491 sourceTree = "<group>";
482 }; 492 };
483 6ECC406D1F2A5FA500AAEB97 /* Library */ = { 493 6ECC406D1F2A5FA500AAEB97 /* Library */ = {
484 isa = PBXGroup; 494 isa = PBXGroup;
485 children = ( 495 children = (
486 6E7F93391F35870F00EFBC71 /* TPKeyboardAvoiding */, 496 6E7F93391F35870F00EFBC71 /* TPKeyboardAvoiding */,
487 6ECC406E1F2A5FB200AAEB97 /* Category */, 497 6ECC406E1F2A5FB200AAEB97 /* Category */,
488 ); 498 );
489 name = Library; 499 name = Library;
490 sourceTree = "<group>"; 500 sourceTree = "<group>";
491 }; 501 };
492 6ECC406E1F2A5FB200AAEB97 /* Category */ = { 502 6ECC406E1F2A5FB200AAEB97 /* Category */ = {
493 isa = PBXGroup; 503 isa = PBXGroup;
494 children = ( 504 children = (
495 6ECC406F1F2A5FEB00AAEB97 /* NSDate+helper.h */, 505 6ECC406F1F2A5FEB00AAEB97 /* NSDate+helper.h */,
496 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */, 506 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */,
497 ); 507 );
498 name = Category; 508 name = Category;
499 sourceTree = "<group>"; 509 sourceTree = "<group>";
500 }; 510 };
501 6EDC8BEB1F2C2F3300765ACC /* Common */ = { 511 6EDC8BEB1F2C2F3300765ACC /* Common */ = {
502 isa = PBXGroup; 512 isa = PBXGroup;
503 children = ( 513 children = (
504 6EDC8BEC1F2C2FB800765ACC /* Utilities.h */, 514 6EDC8BEC1F2C2FB800765ACC /* Utilities.h */,
505 6EDC8BED1F2C2FB800765ACC /* Utilities.m */, 515 6EDC8BED1F2C2FB800765ACC /* Utilities.m */,
506 6EDC8BF21F2C68D700765ACC /* CMMotionActivityExtra.h */, 516 6EDC8BF21F2C68D700765ACC /* CMMotionActivityExtra.h */,
507 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */, 517 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */,
508 ); 518 );
509 name = Common; 519 name = Common;
510 sourceTree = "<group>"; 520 sourceTree = "<group>";
511 }; 521 };
512 783929CF869F5081762B3DCA /* Products */ = { 522 783929CF869F5081762B3DCA /* Products */ = {
513 isa = PBXGroup; 523 isa = PBXGroup;
514 children = ( 524 children = (
515 ); 525 );
516 name = Products; 526 name = Products;
517 sourceTree = "<group>"; 527 sourceTree = "<group>";
518 }; 528 };
519 9CA8AEE61F31BB1200C5FC74 /* ConfirmForgetPass */ = { 529 9CA8AEE61F31BB1200C5FC74 /* ConfirmForgetPass */ = {
520 isa = PBXGroup; 530 isa = PBXGroup;
521 children = ( 531 children = (
522 9CA8AEE71F31BB4600C5FC74 /* ConfirmForgetPassViewController.h */, 532 9CA8AEE71F31BB4600C5FC74 /* ConfirmForgetPassViewController.h */,
523 9CA8AEE81F31BB4600C5FC74 /* ConfirmForgetPassViewController.m */, 533 9CA8AEE81F31BB4600C5FC74 /* ConfirmForgetPassViewController.m */,
524 9CA8AEE91F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib */, 534 9CA8AEE91F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib */,
525 ); 535 );
526 name = ConfirmForgetPass; 536 name = ConfirmForgetPass;
527 sourceTree = "<group>"; 537 sourceTree = "<group>";
528 }; 538 };
529 9CBDA0F71F2ECDFD0055DED1 /* BaseViewController */ = { 539 9CBDA0F71F2ECDFD0055DED1 /* BaseViewController */ = {
530 isa = PBXGroup; 540 isa = PBXGroup;
531 children = ( 541 children = (
532 9CBDA0F81F2ECE2C0055DED1 /* BaseViewController.h */, 542 9CBDA0F81F2ECE2C0055DED1 /* BaseViewController.h */,
533 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */, 543 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */,
534 6E48AF0B1F2F9D3200C1D184 /* CustomTextField.h */, 544 6E48AF0B1F2F9D3200C1D184 /* CustomTextField.h */,
535 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */, 545 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */,
536 E9D909221F3D6E8C004CF99F /* BaseTableViewController.h */, 546 E9D909221F3D6E8C004CF99F /* BaseTableViewController.h */,
537 E9D909231F3D6E8C004CF99F /* BaseTableViewController.m */, 547 E9D909231F3D6E8C004CF99F /* BaseTableViewController.m */,
538 ); 548 );
539 name = BaseViewController; 549 name = BaseViewController;
540 sourceTree = "<group>"; 550 sourceTree = "<group>";
541 }; 551 };
542 9CBDA0FB1F2F03490055DED1 /* Register */ = { 552 9CBDA0FB1F2F03490055DED1 /* Register */ = {
543 isa = PBXGroup; 553 isa = PBXGroup;
544 children = ( 554 children = (
545 9CBDA0FC1F2F03810055DED1 /* RegisterViewController.h */, 555 9CBDA0FC1F2F03810055DED1 /* RegisterViewController.h */,
546 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */, 556 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */,
547 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */, 557 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */,
548 ); 558 );
549 name = Register; 559 name = Register;
550 sourceTree = "<group>"; 560 sourceTree = "<group>";
551 }; 561 };
552 DE8269E957EA47CD771BAB33 /* Pods */ = { 562 DE8269E957EA47CD771BAB33 /* Pods */ = {
553 isa = PBXGroup; 563 isa = PBXGroup;
554 children = ( 564 children = (
555 6E84E3721F27A700001EB88E /* Products */, 565 6E84E3721F27A700001EB88E /* Products */,
556 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */, 566 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */,
557 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */, 567 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */,
558 ); 568 );
559 name = Pods; 569 name = Pods;
560 sourceTree = "<group>"; 570 sourceTree = "<group>";
561 }; 571 };
562 E933E6671F3E0479002926F5 /* SeachGroup */ = { 572 E933E6671F3E0479002926F5 /* SeachGroup */ = {
563 isa = PBXGroup; 573 isa = PBXGroup;
564 children = ( 574 children = (
565 E933E6681F3E04A6002926F5 /* SearchGroupViewController.h */, 575 E933E6681F3E04A6002926F5 /* SearchGroupViewController.h */,
566 E933E6691F3E04A6002926F5 /* SearchGroupViewController.m */, 576 E933E6691F3E04A6002926F5 /* SearchGroupViewController.m */,
567 E933E66A1F3E04A6002926F5 /* SearchGroupViewController.xib */, 577 E933E66A1F3E04A6002926F5 /* SearchGroupViewController.xib */,
568 E933E66D1F3E09B6002926F5 /* SearchGroupTableViewCell.h */, 578 E933E66D1F3E09B6002926F5 /* SearchGroupTableViewCell.h */,
569 E933E66E1F3E09B6002926F5 /* SearchGroupTableViewCell.m */, 579 E933E66E1F3E09B6002926F5 /* SearchGroupTableViewCell.m */,
570 E933E66F1F3E09B6002926F5 /* SearchGroupTableViewCell.xib */, 580 E933E66F1F3E09B6002926F5 /* SearchGroupTableViewCell.xib */,
571 ); 581 );
572 name = SeachGroup; 582 name = SeachGroup;
573 sourceTree = "<group>"; 583 sourceTree = "<group>";
574 }; 584 };
575 E933E6751F4050E6002926F5 /* GroupDetail */ = { 585 E933E6751F4050E6002926F5 /* GroupDetail */ = {
576 isa = PBXGroup; 586 isa = PBXGroup;
577 children = ( 587 children = (
578 E933E6761F40513C002926F5 /* GroupDetailViewController.h */, 588 E933E6761F40513C002926F5 /* GroupDetailViewController.h */,
579 E933E6771F40513C002926F5 /* GroupDetailViewController.m */, 589 E933E6771F40513C002926F5 /* GroupDetailViewController.m */,
580 E933E6781F40513C002926F5 /* GroupDetailViewController.xib */, 590 E933E6781F40513C002926F5 /* GroupDetailViewController.xib */,
581 ); 591 );
582 name = GroupDetail; 592 name = GroupDetail;
583 sourceTree = "<group>"; 593 sourceTree = "<group>";
584 }; 594 };
585 E9373E441F35966D0059355A /* AutoTranslateView */ = { 595 E9373E441F35966D0059355A /* AutoTranslateView */ = {
586 isa = PBXGroup; 596 isa = PBXGroup;
587 children = ( 597 children = (
588 E9373E451F3596940059355A /* AutoTransLabel.h */, 598 E9373E451F3596940059355A /* AutoTransLabel.h */,
589 E9373E461F3596940059355A /* AutoTransLabel.m */, 599 E9373E461F3596940059355A /* AutoTransLabel.m */,
590 E96855081F3C444900317CEF /* AutoTransButton.h */, 600 E96855081F3C444900317CEF /* AutoTransButton.h */,
591 E96855091F3C444900317CEF /* AutoTransButton.m */, 601 E96855091F3C444900317CEF /* AutoTransButton.m */,
592 ); 602 );
593 name = AutoTranslateView; 603 name = AutoTranslateView;
594 sourceTree = "<group>"; 604 sourceTree = "<group>";
595 }; 605 };
596 E95F4CE91F475C4B00D27E80 /* CreateGroup */ = { 606 E95F4CE91F475C4B00D27E80 /* CreateGroup */ = {
597 isa = PBXGroup; 607 isa = PBXGroup;
598 children = ( 608 children = (
599 E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */, 609 E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */,
600 E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */, 610 E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */,
601 E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */, 611 E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */,
602 ); 612 );
603 name = CreateGroup; 613 name = CreateGroup;
604 sourceTree = "<group>"; 614 sourceTree = "<group>";
605 }; 615 };
606 E95F4CEF1F48B37100D27E80 /* MyGroup */ = { 616 E95F4CEF1F48B37100D27E80 /* MyGroup */ = {
607 isa = PBXGroup; 617 isa = PBXGroup;
608 children = ( 618 children = (
609 E95F4CF01F48B39200D27E80 /* MyGroupViewController.h */, 619 E95F4CF01F48B39200D27E80 /* MyGroupViewController.h */,
610 E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */, 620 E95F4CF11F48B39200D27E80 /* MyGroupViewController.m */,
611 E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */, 621 E95F4CF21F48B39200D27E80 /* MyGroupViewController.xib */,
612 ); 622 );
613 name = MyGroup; 623 name = MyGroup;
614 sourceTree = "<group>"; 624 sourceTree = "<group>";
615 }; 625 };
616 E99E13A71F336F0C00C78787 /* CustomView */ = { 626 E99E13A71F336F0C00C78787 /* CustomView */ = {
617 isa = PBXGroup; 627 isa = PBXGroup;
618 children = ( 628 children = (
619 E9373E441F35966D0059355A /* AutoTranslateView */, 629 E9373E441F35966D0059355A /* AutoTranslateView */,
620 E99E13A81F336F1700C78787 /* CollectionView */, 630 E99E13A81F336F1700C78787 /* CollectionView */,
621 ); 631 );
622 name = CustomView; 632 name = CustomView;
623 sourceTree = "<group>"; 633 sourceTree = "<group>";
624 }; 634 };
625 E99E13A81F336F1700C78787 /* CollectionView */ = { 635 E99E13A81F336F1700C78787 /* CollectionView */ = {
626 isa = PBXGroup; 636 isa = PBXGroup;
627 children = ( 637 children = (
628 E99E13AE1F33720600C78787 /* LabelCollectionViewCell.h */, 638 E99E13AE1F33720600C78787 /* LabelCollectionViewCell.h */,
629 E99E13AF1F33720600C78787 /* LabelCollectionViewCell.m */, 639 E99E13AF1F33720600C78787 /* LabelCollectionViewCell.m */,
630 E99E13B01F33720600C78787 /* LabelCollectionViewCell.xib */, 640 E99E13B01F33720600C78787 /* LabelCollectionViewCell.xib */,
631 E99E13A91F336F3600C78787 /* CollectionView.h */, 641 E99E13A91F336F3600C78787 /* CollectionView.h */,
632 E99E13AA1F336F3600C78787 /* CollectionView.m */, 642 E99E13AA1F336F3600C78787 /* CollectionView.m */,
633 E99E13AC1F336F4500C78787 /* CollectionView.xib */, 643 E99E13AC1F336F4500C78787 /* CollectionView.xib */,
634 ); 644 );
635 name = CollectionView; 645 name = CollectionView;
636 sourceTree = "<group>"; 646 sourceTree = "<group>";
637 }; 647 };
638 /* End PBXGroup section */ 648 /* End PBXGroup section */
639 649
640 /* Begin PBXNativeTarget section */ 650 /* Begin PBXNativeTarget section */
641 6E84E3701F27A700001EB88E /* LifeLog */ = { 651 6E84E3701F27A700001EB88E /* LifeLog */ = {
642 isa = PBXNativeTarget; 652 isa = PBXNativeTarget;
643 buildConfigurationList = 6E84E39E1F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLog" */; 653 buildConfigurationList = 6E84E39E1F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLog" */;
644 buildPhases = ( 654 buildPhases = (
645 2BB22CAEC0728AA1E086BCE3 /* [CP] Check Pods Manifest.lock */, 655 2BB22CAEC0728AA1E086BCE3 /* [CP] Check Pods Manifest.lock */,
646 6E84E36D1F27A700001EB88E /* Sources */, 656 6E84E36D1F27A700001EB88E /* Sources */,
647 6E84E36E1F27A700001EB88E /* Frameworks */, 657 6E84E36E1F27A700001EB88E /* Frameworks */,
648 6E84E36F1F27A700001EB88E /* Resources */, 658 6E84E36F1F27A700001EB88E /* Resources */,
649 22F89B11794CEB4E265996AC /* [CP] Embed Pods Frameworks */, 659 22F89B11794CEB4E265996AC /* [CP] Embed Pods Frameworks */,
650 96653BDB2C24A87C2866C897 /* [CP] Copy Pods Resources */, 660 96653BDB2C24A87C2866C897 /* [CP] Copy Pods Resources */,
651 ); 661 );
652 buildRules = ( 662 buildRules = (
653 ); 663 );
654 dependencies = ( 664 dependencies = (
655 ); 665 );
656 name = LifeLog; 666 name = LifeLog;
657 productName = LifeLog; 667 productName = LifeLog;
658 productReference = 6E84E3711F27A700001EB88E /* LifeLog.app */; 668 productReference = 6E84E3711F27A700001EB88E /* LifeLog.app */;
659 productType = "com.apple.product-type.application"; 669 productType = "com.apple.product-type.application";
660 }; 670 };
661 6E84E3891F27A703001EB88E /* LifeLogTests */ = { 671 6E84E3891F27A703001EB88E /* LifeLogTests */ = {
662 isa = PBXNativeTarget; 672 isa = PBXNativeTarget;
663 buildConfigurationList = 6E84E3A11F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogTests" */; 673 buildConfigurationList = 6E84E3A11F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogTests" */;
664 buildPhases = ( 674 buildPhases = (
665 6E84E3861F27A703001EB88E /* Sources */, 675 6E84E3861F27A703001EB88E /* Sources */,
666 6E84E3871F27A703001EB88E /* Frameworks */, 676 6E84E3871F27A703001EB88E /* Frameworks */,
667 6E84E3881F27A703001EB88E /* Resources */, 677 6E84E3881F27A703001EB88E /* Resources */,
668 ); 678 );
669 buildRules = ( 679 buildRules = (
670 ); 680 );
671 dependencies = ( 681 dependencies = (
672 6E84E38C1F27A703001EB88E /* PBXTargetDependency */, 682 6E84E38C1F27A703001EB88E /* PBXTargetDependency */,
673 ); 683 );
674 name = LifeLogTests; 684 name = LifeLogTests;
675 productName = LifeLogTests; 685 productName = LifeLogTests;
676 productReference = 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */; 686 productReference = 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */;
677 productType = "com.apple.product-type.bundle.unit-test"; 687 productType = "com.apple.product-type.bundle.unit-test";
678 }; 688 };
679 6E84E3941F27A703001EB88E /* LifeLogUITests */ = { 689 6E84E3941F27A703001EB88E /* LifeLogUITests */ = {
680 isa = PBXNativeTarget; 690 isa = PBXNativeTarget;
681 buildConfigurationList = 6E84E3A41F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogUITests" */; 691 buildConfigurationList = 6E84E3A41F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogUITests" */;
682 buildPhases = ( 692 buildPhases = (
683 6E84E3911F27A703001EB88E /* Sources */, 693 6E84E3911F27A703001EB88E /* Sources */,
684 6E84E3921F27A703001EB88E /* Frameworks */, 694 6E84E3921F27A703001EB88E /* Frameworks */,
685 6E84E3931F27A703001EB88E /* Resources */, 695 6E84E3931F27A703001EB88E /* Resources */,
686 ); 696 );
687 buildRules = ( 697 buildRules = (
688 ); 698 );
689 dependencies = ( 699 dependencies = (
690 6E84E3971F27A703001EB88E /* PBXTargetDependency */, 700 6E84E3971F27A703001EB88E /* PBXTargetDependency */,
691 ); 701 );
692 name = LifeLogUITests; 702 name = LifeLogUITests;
693 productName = LifeLogUITests; 703 productName = LifeLogUITests;
694 productReference = 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */; 704 productReference = 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */;
695 productType = "com.apple.product-type.bundle.ui-testing"; 705 productType = "com.apple.product-type.bundle.ui-testing";
696 }; 706 };
697 /* End PBXNativeTarget section */ 707 /* End PBXNativeTarget section */
698 708
699 /* Begin PBXProject section */ 709 /* Begin PBXProject section */
700 6E84E3691F27A700001EB88E /* Project object */ = { 710 6E84E3691F27A700001EB88E /* Project object */ = {
701 isa = PBXProject; 711 isa = PBXProject;
702 attributes = { 712 attributes = {
703 LastUpgradeCheck = 0830; 713 LastUpgradeCheck = 0830;
704 ORGANIZATIONNAME = PhongNV; 714 ORGANIZATIONNAME = PhongNV;
705 TargetAttributes = { 715 TargetAttributes = {
706 6E84E3701F27A700001EB88E = { 716 6E84E3701F27A700001EB88E = {
707 CreatedOnToolsVersion = 8.3.3; 717 CreatedOnToolsVersion = 8.3.3;
708 DevelopmentTeam = UXU4V3VUN4; 718 DevelopmentTeam = UXU4V3VUN4;
709 ProvisioningStyle = Automatic; 719 ProvisioningStyle = Automatic;
710 }; 720 };
711 6E84E3891F27A703001EB88E = { 721 6E84E3891F27A703001EB88E = {
712 CreatedOnToolsVersion = 8.3.3; 722 CreatedOnToolsVersion = 8.3.3;
713 ProvisioningStyle = Automatic; 723 ProvisioningStyle = Automatic;
714 TestTargetID = 6E84E3701F27A700001EB88E; 724 TestTargetID = 6E84E3701F27A700001EB88E;
715 }; 725 };
716 6E84E3941F27A703001EB88E = { 726 6E84E3941F27A703001EB88E = {
717 CreatedOnToolsVersion = 8.3.3; 727 CreatedOnToolsVersion = 8.3.3;
718 ProvisioningStyle = Automatic; 728 ProvisioningStyle = Automatic;
719 TestTargetID = 6E84E3701F27A700001EB88E; 729 TestTargetID = 6E84E3701F27A700001EB88E;
720 }; 730 };
721 }; 731 };
722 }; 732 };
723 buildConfigurationList = 6E84E36C1F27A700001EB88E /* Build configuration list for PBXProject "LifeLog" */; 733 buildConfigurationList = 6E84E36C1F27A700001EB88E /* Build configuration list for PBXProject "LifeLog" */;
724 compatibilityVersion = "Xcode 3.2"; 734 compatibilityVersion = "Xcode 3.2";
725 developmentRegion = English; 735 developmentRegion = English;
726 hasScannedForEncodings = 0; 736 hasScannedForEncodings = 0;
727 knownRegions = ( 737 knownRegions = (
728 en, 738 en,
729 Base, 739 Base,
730 ); 740 );
731 mainGroup = 6E84E3681F27A700001EB88E; 741 mainGroup = 6E84E3681F27A700001EB88E;
732 productRefGroup = 783929CF869F5081762B3DCA /* Products */; 742 productRefGroup = 783929CF869F5081762B3DCA /* Products */;
733 projectDirPath = ""; 743 projectDirPath = "";
734 projectRoot = ""; 744 projectRoot = "";
735 targets = ( 745 targets = (
736 6E84E3701F27A700001EB88E /* LifeLog */, 746 6E84E3701F27A700001EB88E /* LifeLog */,
737 6E84E3891F27A703001EB88E /* LifeLogTests */, 747 6E84E3891F27A703001EB88E /* LifeLogTests */,
738 6E84E3941F27A703001EB88E /* LifeLogUITests */, 748 6E84E3941F27A703001EB88E /* LifeLogUITests */,
739 ); 749 );
740 }; 750 };
741 /* End PBXProject section */ 751 /* End PBXProject section */
742 752
743 /* Begin PBXResourcesBuildPhase section */ 753 /* Begin PBXResourcesBuildPhase section */
744 6E84E36F1F27A700001EB88E /* Resources */ = { 754 6E84E36F1F27A700001EB88E /* Resources */ = {
745 isa = PBXResourcesBuildPhase; 755 isa = PBXResourcesBuildPhase;
746 buildActionMask = 2147483647; 756 buildActionMask = 2147483647;
747 files = ( 757 files = (
748 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */, 758 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */,
749 E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */, 759 E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */,
750 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */, 760 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */,
751 E99E13AD1F336F4500C78787 /* CollectionView.xib in Resources */, 761 E99E13AD1F336F4500C78787 /* CollectionView.xib in Resources */,
752 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */, 762 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */,
753 9CA8AEEB1F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib in Resources */, 763 9CA8AEEB1F31BB4600C5FC74 /* ConfirmForgetPassViewController.xib in Resources */,
754 6E84E3C01F27A9B1001EB88E /* SNSViewController.xib in Resources */, 764 6E84E3C01F27A9B1001EB88E /* SNSViewController.xib in Resources */,
755 E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */, 765 E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */,
756 E933E6711F3E09B6002926F5 /* SearchGroupTableViewCell.xib in Resources */, 766 E933E6711F3E09B6002926F5 /* SearchGroupTableViewCell.xib in Resources */,
757 6E8DA0F81F2BAC3500CCE941 /* TodayViewController.xib in Resources */, 767 6E8DA0F81F2BAC3500CCE941 /* TodayViewController.xib in Resources */,
758 6E84E3841F27A701001EB88E /* LaunchScreen.storyboard in Resources */, 768 6E84E3841F27A701001EB88E /* LaunchScreen.storyboard in Resources */,
759 6E84E3811F27A701001EB88E /* Assets.xcassets in Resources */, 769 6E84E3811F27A701001EB88E /* Assets.xcassets in Resources */,
760 6E84E3C61F27ACAE001EB88E /* MapViewController.xib in Resources */, 770 6E84E3C61F27ACAE001EB88E /* MapViewController.xib in Resources */,
761 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */, 771 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */,
762 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */, 772 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */,
763 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */, 773 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */,
764 E95F4CF41F48B39200D27E80 /* MyGroupViewController.xib in Resources */, 774 E95F4CF41F48B39200D27E80 /* MyGroupViewController.xib in Resources */,
765 E933E66C1F3E04A6002926F5 /* SearchGroupViewController.xib in Resources */, 775 E933E66C1F3E04A6002926F5 /* SearchGroupViewController.xib in Resources */,
766 E96855121F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib in Resources */, 776 E96855121F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.xib in Resources */,
767 E933E67A1F40513C002926F5 /* GroupDetailViewController.xib in Resources */, 777 E933E67A1F40513C002926F5 /* GroupDetailViewController.xib in Resources */,
768 E99E13B21F33720600C78787 /* LabelCollectionViewCell.xib in Resources */, 778 E99E13B21F33720600C78787 /* LabelCollectionViewCell.xib in Resources */,
769 E9F73DCD1F338A0F004A3A6F /* HistoryListTableViewCell.xib in Resources */, 779 E9F73DCD1F338A0F004A3A6F /* HistoryListTableViewCell.xib in Resources */,
770 ); 780 );
771 runOnlyForDeploymentPostprocessing = 0; 781 runOnlyForDeploymentPostprocessing = 0;
772 }; 782 };
773 6E84E3881F27A703001EB88E /* Resources */ = { 783 6E84E3881F27A703001EB88E /* Resources */ = {
774 isa = PBXResourcesBuildPhase; 784 isa = PBXResourcesBuildPhase;
775 buildActionMask = 2147483647; 785 buildActionMask = 2147483647;
776 files = ( 786 files = (
777 ); 787 );
778 runOnlyForDeploymentPostprocessing = 0; 788 runOnlyForDeploymentPostprocessing = 0;
779 }; 789 };
780 6E84E3931F27A703001EB88E /* Resources */ = { 790 6E84E3931F27A703001EB88E /* Resources */ = {
781 isa = PBXResourcesBuildPhase; 791 isa = PBXResourcesBuildPhase;
782 buildActionMask = 2147483647; 792 buildActionMask = 2147483647;
783 files = ( 793 files = (
784 ); 794 );
785 runOnlyForDeploymentPostprocessing = 0; 795 runOnlyForDeploymentPostprocessing = 0;
786 }; 796 };
787 /* End PBXResourcesBuildPhase section */ 797 /* End PBXResourcesBuildPhase section */
788 798
789 /* Begin PBXShellScriptBuildPhase section */ 799 /* Begin PBXShellScriptBuildPhase section */
790 22F89B11794CEB4E265996AC /* [CP] Embed Pods Frameworks */ = { 800 22F89B11794CEB4E265996AC /* [CP] Embed Pods Frameworks */ = {
791 isa = PBXShellScriptBuildPhase; 801 isa = PBXShellScriptBuildPhase;
792 buildActionMask = 2147483647; 802 buildActionMask = 2147483647;
793 files = ( 803 files = (
794 ); 804 );
795 inputPaths = ( 805 inputPaths = (
796 ); 806 );
797 name = "[CP] Embed Pods Frameworks"; 807 name = "[CP] Embed Pods Frameworks";
798 outputPaths = ( 808 outputPaths = (
799 ); 809 );
800 runOnlyForDeploymentPostprocessing = 0; 810 runOnlyForDeploymentPostprocessing = 0;
801 shellPath = /bin/sh; 811 shellPath = /bin/sh;
802 shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-frameworks.sh\"\n"; 812 shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-frameworks.sh\"\n";
803 showEnvVarsInLog = 0; 813 showEnvVarsInLog = 0;
804 }; 814 };
805 2BB22CAEC0728AA1E086BCE3 /* [CP] Check Pods Manifest.lock */ = { 815 2BB22CAEC0728AA1E086BCE3 /* [CP] Check Pods Manifest.lock */ = {
806 isa = PBXShellScriptBuildPhase; 816 isa = PBXShellScriptBuildPhase;
807 buildActionMask = 2147483647; 817 buildActionMask = 2147483647;
808 files = ( 818 files = (
809 ); 819 );
810 inputPaths = ( 820 inputPaths = (
811 ); 821 );
812 name = "[CP] Check Pods Manifest.lock"; 822 name = "[CP] Check Pods Manifest.lock";
813 outputPaths = ( 823 outputPaths = (
814 ); 824 );
815 runOnlyForDeploymentPostprocessing = 0; 825 runOnlyForDeploymentPostprocessing = 0;
816 shellPath = /bin/sh; 826 shellPath = /bin/sh;
817 shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 827 shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
818 showEnvVarsInLog = 0; 828 showEnvVarsInLog = 0;
819 }; 829 };
820 96653BDB2C24A87C2866C897 /* [CP] Copy Pods Resources */ = { 830 96653BDB2C24A87C2866C897 /* [CP] Copy Pods Resources */ = {
821 isa = PBXShellScriptBuildPhase; 831 isa = PBXShellScriptBuildPhase;
822 buildActionMask = 2147483647; 832 buildActionMask = 2147483647;
823 files = ( 833 files = (
824 ); 834 );
825 inputPaths = ( 835 inputPaths = (
826 ); 836 );
827 name = "[CP] Copy Pods Resources"; 837 name = "[CP] Copy Pods Resources";
828 outputPaths = ( 838 outputPaths = (
829 ); 839 );
830 runOnlyForDeploymentPostprocessing = 0; 840 runOnlyForDeploymentPostprocessing = 0;
831 shellPath = /bin/sh; 841 shellPath = /bin/sh;
832 shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-resources.sh\"\n"; 842 shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-resources.sh\"\n";
833 showEnvVarsInLog = 0; 843 showEnvVarsInLog = 0;
834 }; 844 };
835 /* End PBXShellScriptBuildPhase section */ 845 /* End PBXShellScriptBuildPhase section */
836 846
837 /* Begin PBXSourcesBuildPhase section */ 847 /* Begin PBXSourcesBuildPhase section */
838 6E84E36D1F27A700001EB88E /* Sources */ = { 848 6E84E36D1F27A700001EB88E /* Sources */ = {
839 isa = PBXSourcesBuildPhase; 849 isa = PBXSourcesBuildPhase;
840 buildActionMask = 2147483647; 850 buildActionMask = 2147483647;
841 files = ( 851 files = (
842 6E18CED81F2E3C840029891F /* ServerAPI.m in Sources */, 852 6E18CED81F2E3C840029891F /* ServerAPI.m in Sources */,
843 6E7F93431F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m in Sources */, 853 6E7F93431F35872B00EFBC71 /* TPKeyboardAvoidingScrollView.m in Sources */,
844 6E7F93421F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m in Sources */, 854 6E7F93421F35872B00EFBC71 /* TPKeyboardAvoidingCollectionView.m in Sources */,
845 E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */, 855 E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */,
846 6EA4AF321F40BB7A00F52CFE /* TargetInfor.m in Sources */, 856 6EA4AF321F40BB7A00F52CFE /* TargetInfor.m in Sources */,
847 E933E6741F3E0E4E002926F5 /* GroupObject.m in Sources */, 857 E933E6741F3E0E4E002926F5 /* GroupObject.m in Sources */,
858 6E27A74D1F9E432900C390B3 /* NoticeInfor.m in Sources */,
848 9CBDA0FA1F2ECE2C0055DED1 /* BaseViewController.m in Sources */, 859 9CBDA0FA1F2ECE2C0055DED1 /* BaseViewController.m in Sources */,
849 6E8DA0F71F2BAC3400CCE941 /* TodayViewController.m in Sources */, 860 6E8DA0F71F2BAC3400CCE941 /* TodayViewController.m in Sources */,
850 6E7F93451F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */, 861 6E7F93451F35872B00EFBC71 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */,
851 E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */, 862 E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */,
852 E9D909211F3D559D004CF99F /* TweetObject.m in Sources */, 863 E9D909211F3D559D004CF99F /* TweetObject.m in Sources */,
853 6E48AF0D1F2F9D3300C1D184 /* CustomTextField.m in Sources */, 864 6E48AF0D1F2F9D3300C1D184 /* CustomTextField.m in Sources */,
854 E99E13AB1F336F3600C78787 /* CollectionView.m in Sources */, 865 E99E13AB1F336F3600C78787 /* CollectionView.m in Sources */,
855 6E84E3B01F27A975001EB88E /* HomeViewController.m in Sources */, 866 6E84E3B01F27A975001EB88E /* HomeViewConb troller.m in Sources */,
856 E9373E471F3596940059355A /* AutoTransLabel.m in Sources */, 867 E9373E471F3596940059355A /* AutoTransLabel.m in Sources */,
868 6E27A74A1F9E41B400C390B3 /* HomeObject.m in Sources */,
857 6E84E3791F27A701001EB88E /* AppDelegate.m in Sources */, 869 6E84E3791F27A701001EB88E /* AppDelegate.m in Sources */,
858 6E84E3BA1F27A9A0001EB88E /* RankingViewController.m in Sources */, 870 6E84E3BA1F27A9A0001EB88E /* RankingViewController.m in Sources */,
859 6E7F93441F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m in Sources */, 871 6E7F93441F35872B00EFBC71 /* TPKeyboardAvoidingTableView.m in Sources */,
860 E9F73DCC1F338A0F004A3A6F /* HistoryListTableViewCell.m in Sources */, 872 E9F73DCC1F338A0F004A3A6F /* HistoryListTableViewCell.m in Sources */,
861 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */, 873 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */,
862 E933E6791F40513C002926F5 /* GroupDetailViewController.m in Sources */, 874 E933E6791F40513C002926F5 /* GroupDetailViewController.m in Sources */,
863 6EA4AF311F40BB7A00F52CFE /* StepObject.m in Sources */, 875 6EA4AF311F40BB7A00F52CFE /* StepObject.m in Sources */,
864 E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */, 876 E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */,
865 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */, 877 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */,
866 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */, 878 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */,
867 9CA8AEEA1F31BB4600C5FC74 /* ConfirmForgetPassViewController.m in Sources */, 879 9CA8AEEA1F31BB4600C5FC74 /* ConfirmForgetPassViewController.m in Sources */,
868 E99E13B11F33720600C78787 /* LabelCollectionViewCell.m in Sources */, 880 E99E13B11F33720600C78787 /* LabelCollectionViewCell.m in Sources */,
869 6EDC8BEE1F2C2FB800765ACC /* Utilities.m in Sources */, 881 6EDC8BEE1F2C2FB800765ACC /* Utilities.m in Sources */,
870 E97588FC1F513BAD00782484 /* RankingObject.m in Sources */, 882 E97588FC1F513BAD00782484 /* RankingObject.m in Sources */,
871 E96855111F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m in Sources */, 883 E96855111F3C5D9A00317CEF /* SNSRecentTopicTableViewCell.m in Sources */,
872 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */, 884 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */,
873 6E18CEDC1F2E40F50029891F /* User.m in Sources */, 885 6E18CEDC1F2E40F50029891F /* User.m in Sources */,
874 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */, 886 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */,
875 E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */, 887 E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */,
876 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */, 888 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */,
877 6EA4AF331F40BB7A00F52CFE /* TopObject.m in Sources */, 889 6EA4AF331F40BB7A00F52CFE /* TopObject.m in Sources */,
878 E9D909241F3D6E8C004CF99F /* BaseTableViewController.m in Sources */, 890 E9D909241F3D6E8C004CF99F /* BaseTableViewController.m in Sources */,
879 6E84E3761F27A701001EB88E /* main.m in Sources */, 891 6E84E3761F27A701001EB88E /* main.m in Sources */,
880 E933E6701F3E09B6002926F5 /* SearchGroupTableViewCell.m in Sources */, 892 E933E6701F3E09B6002926F5 /* SearchGroupTableViewCell.m in Sources */,
881 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */, 893 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */,
882 E95F4CF31F48B39200D27E80 /* MyGroupViewController.m in Sources */, 894 E95F4CF31F48B39200D27E80 /* MyGroupViewController.m in Sources */,
883 E933E66B1F3E04A6002926F5 /* SearchGroupViewController.m in Sources */, 895 E933E66B1F3E04A6002926F5 /* SearchGroupViewController.m in Sources */,
884 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */, 896 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */,
885 ); 897 );
886 runOnlyForDeploymentPostprocessing = 0; 898 runOnlyForDeploymentPostprocessing = 0;
887 }; 899 };
888 6E84E3861F27A703001EB88E /* Sources */ = { 900 6E84E3861F27A703001EB88E /* Sources */ = {
889 isa = PBXSourcesBuildPhase; 901 isa = PBXSourcesBuildPhase;
890 buildActionMask = 2147483647; 902 buildActionMask = 2147483647;
891 files = ( 903 files = (
892 6E84E38F1F27A703001EB88E /* LifeLogTests.m in Sources */, 904 6E84E38F1F27A703001EB88E /* LifeLogTests.m in Sources */,
893 ); 905 );
894 runOnlyForDeploymentPostprocessing = 0; 906 runOnlyForDeploymentPostprocessing = 0;
895 }; 907 };
896 6E84E3911F27A703001EB88E /* Sources */ = { 908 6E84E3911F27A703001EB88E /* Sources */ = {
897 isa = PBXSourcesBuildPhase; 909 isa = PBXSourcesBuildPhase;
898 buildActionMask = 2147483647; 910 buildActionMask = 2147483647;
899 files = ( 911 files = (
900 6E84E39A1F27A703001EB88E /* LifeLogUITests.m in Sources */, 912 6E84E39A1F27A703001EB88E /* LifeLogUITests.m in Sources */,
901 ); 913 );
902 runOnlyForDeploymentPostprocessing = 0; 914 runOnlyForDeploymentPostprocessing = 0;
903 }; 915 };
904 /* End PBXSourcesBuildPhase section */ 916 /* End PBXSourcesBuildPhase section */
905 917
906 /* Begin PBXTargetDependency section */ 918 /* Begin PBXTargetDependency section */
907 6E84E38C1F27A703001EB88E /* PBXTargetDependency */ = { 919 6E84E38C1F27A703001EB88E /* PBXTargetDependency */ = {
908 isa = PBXTargetDependency; 920 isa = PBXTargetDependency;
909 target = 6E84E3701F27A700001EB88E /* LifeLog */; 921 target = 6E84E3701F27A700001EB88E /* LifeLog */;
910 targetProxy = 6E84E38B1F27A703001EB88E /* PBXContainerItemProxy */; 922 targetProxy = 6E84E38B1F27A703001EB88E /* PBXContainerItemProxy */;
911 }; 923 };
912 6E84E3971F27A703001EB88E /* PBXTargetDependency */ = { 924 6E84E3971F27A703001EB88E /* PBXTargetDependency */ = {
913 isa = PBXTargetDependency; 925 isa = PBXTargetDependency;
914 target = 6E84E3701F27A700001EB88E /* LifeLog */; 926 target = 6E84E3701F27A700001EB88E /* LifeLog */;
915 targetProxy = 6E84E3961F27A703001EB88E /* PBXContainerItemProxy */; 927 targetProxy = 6E84E3961F27A703001EB88E /* PBXContainerItemProxy */;
916 }; 928 };
917 /* End PBXTargetDependency section */ 929 /* End PBXTargetDependency section */
918 930
919 /* Begin PBXVariantGroup section */ 931 /* Begin PBXVariantGroup section */
920 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */ = { 932 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */ = {
921 isa = PBXVariantGroup; 933 isa = PBXVariantGroup;
922 children = ( 934 children = (
923 6E84E3831F27A701001EB88E /* Base */, 935 6E84E3831F27A701001EB88E /* Base */,
924 ); 936 );
925 name = LaunchScreen.storyboard; 937 name = LaunchScreen.storyboard;
926 sourceTree = "<group>"; 938 sourceTree = "<group>";
927 }; 939 };
928 /* End PBXVariantGroup section */ 940 /* End PBXVariantGroup section */
929 941
930 /* Begin XCBuildConfiguration section */ 942 /* Begin XCBuildConfiguration section */
931 6E84E39C1F27A703001EB88E /* Debug */ = { 943 6E84E39C1F27A703001EB88E /* Debug */ = {
932 isa = XCBuildConfiguration; 944 isa = XCBuildConfiguration;
933 buildSettings = { 945 buildSettings = {
934 ALWAYS_SEARCH_USER_PATHS = NO; 946 ALWAYS_SEARCH_USER_PATHS = NO;
935 CLANG_ANALYZER_NONNULL = YES; 947 CLANG_ANALYZER_NONNULL = YES;
936 CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 948 CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
937 CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 949 CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
938 CLANG_CXX_LIBRARY = "libc++"; 950 CLANG_CXX_LIBRARY = "libc++";
939 CLANG_ENABLE_MODULES = YES; 951 CLANG_ENABLE_MODULES = YES;
940 CLANG_ENABLE_OBJC_ARC = YES; 952 CLANG_ENABLE_OBJC_ARC = YES;
941 CLANG_WARN_BOOL_CONVERSION = YES; 953 CLANG_WARN_BOOL_CONVERSION = YES;
942 CLANG_WARN_CONSTANT_CONVERSION = YES; 954 CLANG_WARN_CONSTANT_CONVERSION = YES;
943 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 955 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
944 CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 956 CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
945 CLANG_WARN_EMPTY_BODY = YES; 957 CLANG_WARN_EMPTY_BODY = YES;
946 CLANG_WARN_ENUM_CONVERSION = YES; 958 CLANG_WARN_ENUM_CONVERSION = YES;
947 CLANG_WARN_INFINITE_RECURSION = YES; 959 CLANG_WARN_INFINITE_RECURSION = YES;
948 CLANG_WARN_INT_CONVERSION = YES; 960 CLANG_WARN_INT_CONVERSION = YES;
949 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 961 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
950 CLANG_WARN_SUSPICIOUS_MOVE = YES; 962 CLANG_WARN_SUSPICIOUS_MOVE = YES;
951 CLANG_WARN_UNREACHABLE_CODE = YES; 963 CLANG_WARN_UNREACHABLE_CODE = YES;
952 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 964 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
953 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 965 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
954 COPY_PHASE_STRIP = NO; 966 COPY_PHASE_STRIP = NO;
955 DEBUG_INFORMATION_FORMAT = dwarf; 967 DEBUG_INFORMATION_FORMAT = dwarf;
956 ENABLE_STRICT_OBJC_MSGSEND = YES; 968 ENABLE_STRICT_OBJC_MSGSEND = YES;
957 ENABLE_TESTABILITY = YES; 969 ENABLE_TESTABILITY = YES;
958 GCC_C_LANGUAGE_STANDARD = gnu99; 970 GCC_C_LANGUAGE_STANDARD = gnu99;
959 GCC_DYNAMIC_NO_PIC = NO; 971 GCC_DYNAMIC_NO_PIC = NO;
960 GCC_NO_COMMON_BLOCKS = YES; 972 GCC_NO_COMMON_BLOCKS = YES;
961 GCC_OPTIMIZATION_LEVEL = 0; 973 GCC_OPTIMIZATION_LEVEL = 0;
962 GCC_PREPROCESSOR_DEFINITIONS = ( 974 GCC_PREPROCESSOR_DEFINITIONS = (
963 "DEBUG=1", 975 "DEBUG=1",
964 "$(inherited)", 976 "$(inherited)",
965 ); 977 );
966 GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 978 GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
967 GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 979 GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
968 GCC_WARN_UNDECLARED_SELECTOR = YES; 980 GCC_WARN_UNDECLARED_SELECTOR = YES;
969 GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 981 GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
970 GCC_WARN_UNUSED_FUNCTION = YES; 982 GCC_WARN_UNUSED_FUNCTION = YES;
971 GCC_WARN_UNUSED_VARIABLE = YES; 983 GCC_WARN_UNUSED_VARIABLE = YES;
972 IPHONEOS_DEPLOYMENT_TARGET = 10.3; 984 IPHONEOS_DEPLOYMENT_TARGET = 10.3;
973 MTL_ENABLE_DEBUG_INFO = YES; 985 MTL_ENABLE_DEBUG_INFO = YES;
974 ONLY_ACTIVE_ARCH = YES; 986 ONLY_ACTIVE_ARCH = YES;
975 SDKROOT = iphoneos; 987 SDKROOT = iphoneos;
976 TARGETED_DEVICE_FAMILY = "1,2"; 988 TARGETED_DEVICE_FAMILY = "1,2";
977 }; 989 };
978 name = Debug; 990 name = Debug;
979 }; 991 };
980 6E84E39D1F27A703001EB88E /* Release */ = { 992 6E84E39D1F27A703001EB88E /* Release */ = {
981 isa = XCBuildConfiguration; 993 isa = XCBuildConfiguration;
982 buildSettings = { 994 buildSettings = {
983 ALWAYS_SEARCH_USER_PATHS = NO; 995 ALWAYS_SEARCH_USER_PATHS = NO;
984 CLANG_ANALYZER_NONNULL = YES; 996 CLANG_ANALYZER_NONNULL = YES;
985 CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 997 CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
986 CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 998 CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
987 CLANG_CXX_LIBRARY = "libc++"; 999 CLANG_CXX_LIBRARY = "libc++";
988 CLANG_ENABLE_MODULES = YES; 1000 CLANG_ENABLE_MODULES = YES;
989 CLANG_ENABLE_OBJC_ARC = YES; 1001 CLANG_ENABLE_OBJC_ARC = YES;
990 CLANG_WARN_BOOL_CONVERSION = YES; 1002 CLANG_WARN_BOOL_CONVERSION = YES;
991 CLANG_WARN_CONSTANT_CONVERSION = YES; 1003 CLANG_WARN_CONSTANT_CONVERSION = YES;
992 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1004 CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
993 CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1005 CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
994 CLANG_WARN_EMPTY_BODY = YES; 1006 CLANG_WARN_EMPTY_BODY = YES;
995 CLANG_WARN_ENUM_CONVERSION = YES; 1007 CLANG_WARN_ENUM_CONVERSION = YES;
996 CLANG_WARN_INFINITE_RECURSION = YES; 1008 CLANG_WARN_INFINITE_RECURSION = YES;
997 CLANG_WARN_INT_CONVERSION = YES; 1009 CLANG_WARN_INT_CONVERSION = YES;
998 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1010 CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
999 CLANG_WARN_SUSPICIOUS_MOVE = YES; 1011 CLANG_WARN_SUSPICIOUS_MOVE = YES;
1000 CLANG_WARN_UNREACHABLE_CODE = YES; 1012 CLANG_WARN_UNREACHABLE_CODE = YES;
1001 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1013 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1002 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1014 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1003 COPY_PHASE_STRIP = NO; 1015 COPY_PHASE_STRIP = NO;
1004 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1016 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1005 ENABLE_NS_ASSERTIONS = NO; 1017 ENABLE_NS_ASSERTIONS = NO;
1006 ENABLE_STRICT_OBJC_MSGSEND = YES; 1018 ENABLE_STRICT_OBJC_MSGSEND = YES;
1007 GCC_C_LANGUAGE_STANDARD = gnu99; 1019 GCC_C_LANGUAGE_STANDARD = gnu99;
1008 GCC_NO_COMMON_BLOCKS = YES; 1020 GCC_NO_COMMON_BLOCKS = YES;
1009 GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1021 GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1010 GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1022 GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1011 GCC_WARN_UNDECLARED_SELECTOR = YES; 1023 GCC_WARN_UNDECLARED_SELECTOR = YES;
1012 GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1024 GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1013 GCC_WARN_UNUSED_FUNCTION = YES; 1025 GCC_WARN_UNUSED_FUNCTION = YES;
1014 GCC_WARN_UNUSED_VARIABLE = YES; 1026 GCC_WARN_UNUSED_VARIABLE = YES;
1015 IPHONEOS_DEPLOYMENT_TARGET = 10.3; 1027 IPHONEOS_DEPLOYMENT_TARGET = 10.3;
1016 MTL_ENABLE_DEBUG_INFO = NO; 1028 MTL_ENABLE_DEBUG_INFO = NO;
1017 SDKROOT = iphoneos; 1029 SDKROOT = iphoneos;
1018 TARGETED_DEVICE_FAMILY = "1,2"; 1030 TARGETED_DEVICE_FAMILY = "1,2";
1019 VALIDATE_PRODUCT = YES; 1031 VALIDATE_PRODUCT = YES;
1020 }; 1032 };
1021 name = Release; 1033 name = Release;
1022 }; 1034 };
1023 6E84E39F1F27A703001EB88E /* Debug */ = { 1035 6E84E39F1F27A703001EB88E /* Debug */ = {
1024 isa = XCBuildConfiguration; 1036 isa = XCBuildConfiguration;
1025 baseConfigurationReference = 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */; 1037 baseConfigurationReference = 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */;
1026 buildSettings = { 1038 buildSettings = {
1027 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1039 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1040 CODE_SIGN_IDENTITY = "iPhone Distribution";
1028 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1041 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1029 DEVELOPMENT_TEAM = ""; 1042 CODE_SIGN_STYLE = Automatic;
1043 DEVELOPMENT_TEAM = UXU4V3VUN4;
1030 INFOPLIST_FILE = LifeLog/Info.plist; 1044 INFOPLIST_FILE = LifeLog/Info.plist;
1031 IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1045 IPHONEOS_DEPLOYMENT_TARGET = 9.0;
1032 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1046 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1033 OTHER_LDFLAGS = ( 1047 OTHER_LDFLAGS = (
1034 "$(inherited)", 1048 "$(inherited)",
1035 "-framework", 1049 "-framework",
1036 "\"CircleProgressBar\"", 1050 "\"CircleProgressBar\"",
1037 "-all_load", 1051 "-all_load",
1038 "-ObjC", 1052 "-ObjC",
1039 ); 1053 );
1040 PRODUCT_BUNDLE_IDENTIFIER = mobileworld.jp.lifelog; 1054 PRODUCT_BUNDLE_IDENTIFIER = mobileworld.jp.lifelog;
1041 PRODUCT_NAME = "$(TARGET_NAME)"; 1055 PRODUCT_NAME = "$(TARGET_NAME)";
1042 PROVISIONING_PROFILE = ""; 1056 PROVISIONING_PROFILE = "";
1043 PROVISIONING_PROFILE_SPECIFIER = ""; 1057 PROVISIONING_PROFILE_SPECIFIER = "";
1044 }; 1058 };
1045 name = Debug; 1059 name = Debug;
1046 }; 1060 };
1047 6E84E3A01F27A703001EB88E /* Release */ = { 1061 6E84E3A01F27A703001EB88E /* Release */ = {
1048 isa = XCBuildConfiguration; 1062 isa = XCBuildConfiguration;
1049 baseConfigurationReference = 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */; 1063 baseConfigurationReference = 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */;
1050 buildSettings = { 1064 buildSettings = {
1051 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1065 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1066 CODE_SIGN_IDENTITY = "iPhone Distribution";
1052 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1067 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1053 DEVELOPMENT_TEAM = ""; 1068 CODE_SIGN_STYLE = Automatic;
1069 DEVELOPMENT_TEAM = UXU4V3VUN4;
1054 INFOPLIST_FILE = LifeLog/Info.plist; 1070 INFOPLIST_FILE = LifeLog/Info.plist;
1055 IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1071 IPHONEOS_DEPLOYMENT_TARGET = 9.0;
1056 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1072 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1057 OTHER_LDFLAGS = ( 1073 OTHER_LDFLAGS = (
1058 "$(inherited)", 1074 "$(inherited)",
1059 "-framework", 1075 "-framework",
1060 "\"CircleProgressBar\"", 1076 "\"CircleProgressBar\"",
1061 "-all_load", 1077 "-all_load",
1062 "-ObjC", 1078 "-ObjC",
1063 ); 1079 );
1064 PRODUCT_BUNDLE_IDENTIFIER = mobileworld.jp.lifelog; 1080 PRODUCT_BUNDLE_IDENTIFIER = mobileworld.jp.lifelog;
1065 PRODUCT_NAME = "$(TARGET_NAME)"; 1081 PRODUCT_NAME = "$(TARGET_NAME)";
1066 PROVISIONING_PROFILE = ""; 1082 PROVISIONING_PROFILE = "";
1067 PROVISIONING_PROFILE_SPECIFIER = ""; 1083 PROVISIONING_PROFILE_SPECIFIER = "";
1068 }; 1084 };
1069 name = Release; 1085 name = Release;
1070 }; 1086 };
1071 6E84E3A21F27A703001EB88E /* Debug */ = { 1087 6E84E3A21F27A703001EB88E /* Debug */ = {
1072 isa = XCBuildConfiguration; 1088 isa = XCBuildConfiguration;
1073 buildSettings = { 1089 buildSettings = {
1074 BUNDLE_LOADER = "$(TEST_HOST)"; 1090 BUNDLE_LOADER = "$(TEST_HOST)";
1075 INFOPLIST_FILE = LifeLogTests/Info.plist; 1091 INFOPLIST_FILE = LifeLogTests/Info.plist;
1076 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1092 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1077 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogTests; 1093 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogTests;
1078 PRODUCT_NAME = "$(TARGET_NAME)"; 1094 PRODUCT_NAME = "$(TARGET_NAME)";
1079 TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LifeLog.app/LifeLog"; 1095 TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LifeLog.app/LifeLog";
1080 }; 1096 };
1081 name = Debug; 1097 name = Debug;
1082 }; 1098 };
1083 6E84E3A31F27A703001EB88E /* Release */ = { 1099 6E84E3A31F27A703001EB88E /* Release */ = {
1084 isa = XCBuildConfiguration; 1100 isa = XCBuildConfiguration;
1085 buildSettings = { 1101 buildSettings = {
1086 BUNDLE_LOADER = "$(TEST_HOST)"; 1102 BUNDLE_LOADER = "$(TEST_HOST)";
1087 INFOPLIST_FILE = LifeLogTests/Info.plist; 1103 INFOPLIST_FILE = LifeLogTests/Info.plist;
1088 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1104 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1089 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogTests; 1105 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogTests;
1090 PRODUCT_NAME = "$(TARGET_NAME)"; 1106 PRODUCT_NAME = "$(TARGET_NAME)";
1091 TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LifeLog.app/LifeLog"; 1107 TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LifeLog.app/LifeLog";
1092 }; 1108 };
1093 name = Release; 1109 name = Release;
1094 }; 1110 };
1095 6E84E3A51F27A703001EB88E /* Debug */ = { 1111 6E84E3A51F27A703001EB88E /* Debug */ = {
1096 isa = XCBuildConfiguration; 1112 isa = XCBuildConfiguration;
1097 buildSettings = { 1113 buildSettings = {
1098 INFOPLIST_FILE = LifeLogUITests/Info.plist; 1114 INFOPLIST_FILE = LifeLogUITests/Info.plist;
1099 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1115 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1100 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogUITests; 1116 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogUITests;
1101 PRODUCT_NAME = "$(TARGET_NAME)"; 1117 PRODUCT_NAME = "$(TARGET_NAME)";
1102 TEST_TARGET_NAME = LifeLog; 1118 TEST_TARGET_NAME = LifeLog;
1103 }; 1119 };
1104 name = Debug; 1120 name = Debug;
1105 }; 1121 };
1106 6E84E3A61F27A703001EB88E /* Release */ = { 1122 6E84E3A61F27A703001EB88E /* Release */ = {
1107 isa = XCBuildConfiguration; 1123 isa = XCBuildConfiguration;
1108 buildSettings = { 1124 buildSettings = {
1109 INFOPLIST_FILE = LifeLogUITests/Info.plist; 1125 INFOPLIST_FILE = LifeLogUITests/Info.plist;
1110 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1126 LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1111 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogUITests; 1127 PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogUITests;
1112 PRODUCT_NAME = "$(TARGET_NAME)"; 1128 PRODUCT_NAME = "$(TARGET_NAME)";
1113 TEST_TARGET_NAME = LifeLog; 1129 TEST_TARGET_NAME = LifeLog;
1114 }; 1130 };
1115 name = Release; 1131 name = Release;
1116 }; 1132 };
1117 /* End XCBuildConfiguration section */ 1133 /* End XCBuildConfiguration section */
1118 1134
1119 /* Begin XCConfigurationList section */ 1135 /* Begin XCConfigurationList section */
1120 6E84E36C1F27A700001EB88E /* Build configuration list for PBXProject "LifeLog" */ = { 1136 6E84E36C1F27A700001EB88E /* Build configuration list for PBXProject "LifeLog" */ = {
1121 isa = XCConfigurationList; 1137 isa = XCConfigurationList;
1122 buildConfigurations = ( 1138 buildConfigurations = (
1123 6E84E39C1F27A703001EB88E /* Debug */, 1139 6E84E39C1F27A703001EB88E /* Debug */,
1124 6E84E39D1F27A703001EB88E /* Release */, 1140 6E84E39D1F27A703001EB88E /* Release */,
1125 ); 1141 );
1126 defaultConfigurationIsVisible = 0; 1142 defaultConfigurationIsVisible = 0;
1127 defaultConfigurationName = Release; 1143 defaultConfigurationName = Release;
1128 }; 1144 };
1129 6E84E39E1F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLog" */ = { 1145 6E84E39E1F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLog" */ = {
1130 isa = XCConfigurationList; 1146 isa = XCConfigurationList;
1131 buildConfigurations = ( 1147 buildConfigurations = (
1132 6E84E39F1F27A703001EB88E /* Debug */, 1148 6E84E39F1F27A703001EB88E /* Debug */,
1133 6E84E3A01F27A703001EB88E /* Release */, 1149 6E84E3A01F27A703001EB88E /* Release */,
1134 ); 1150 );
1135 defaultConfigurationIsVisible = 0; 1151 defaultConfigurationIsVisible = 0;
1136 defaultConfigurationName = Release; 1152 defaultConfigurationName = Release;
1137 }; 1153 };
1138 6E84E3A11F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogTests" */ = { 1154 6E84E3A11F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogTests" */ = {
1139 isa = XCConfigurationList; 1155 isa = XCConfigurationList;
1140 buildConfigurations = ( 1156 buildConfigurations = (
1141 6E84E3A21F27A703001EB88E /* Debug */, 1157 6E84E3A21F27A703001EB88E /* Debug */,
1142 6E84E3A31F27A703001EB88E /* Release */, 1158 6E84E3A31F27A703001EB88E /* Release */,
1143 ); 1159 );
1144 defaultConfigurationIsVisible = 0; 1160 defaultConfigurationIsVisible = 0;
1145 defaultConfigurationName = Release; 1161 defaultConfigurationName = Release;
1146 }; 1162 };
1147 6E84E3A41F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogUITests" */ = { 1163 6E84E3A41F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogUITests" */ = {
1148 isa = XCConfigurationList; 1164 isa = XCConfigurationList;
1149 buildConfigurations = ( 1165 buildConfigurations = (
1150 6E84E3A51F27A703001EB88E /* Debug */, 1166 6E84E3A51F27A703001EB88E /* Debug */,
1151 6E84E3A61F27A703001EB88E /* Release */, 1167 6E84E3A61F27A703001EB88E /* Release */,
1152 ); 1168 );
1153 defaultConfigurationIsVisible = 0; 1169 defaultConfigurationIsVisible = 0;
1154 defaultConfigurationName = Release; 1170 defaultConfigurationName = Release;
1155 }; 1171 };
1156 /* End XCConfigurationList section */ 1172 /* End XCConfigurationList section */
1157 }; 1173 };
1158 rootObject = 6E84E3691F27A700001EB88E /* Project object */; 1174 rootObject = 6E84E3691F27A700001EB88E /* Project object */;
1159 } 1175 }
1160 1176
LifeLog/LifeLog/Entities.h
1 // 1 //
2 // Entities.h 2 // Entities.h
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/30/17. 5 // Created by Nguyen Van Phong on 7/30/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved. 6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #ifndef Entities_h 9 #ifndef Entities_h
10 #define Entities_h 10 #define Entities_h
11 11
12 #import <MBProgressHUD/MBProgressHUD.h> 12 #import <MBProgressHUD/MBProgressHUD.h>
13 13
14 #import "MemberObject.h" 14 #import "MemberObject.h"
15 #import "GroupObject.h" 15 #import "GroupObject.h"
16 #import "TweetObject.h" 16 #import "TweetObject.h"
17 #import "HistoryObject.h" 17 #import "HistoryObject.h"
18 #import "User.h" 18 #import "User.h"
19 #import "TopObject.h"
20 #import "RankingObject.h" 19 #import "RankingObject.h"
20 #import "HomeObject.h"
21 21
22 #endif /* Entities_h */ 22 #endif /* Entities_h */
LifeLog/LifeLog/HomeObject.h
File was created 1 //
2 // HomeObject.h
3 // LifeLog
4 //
5 // Created by Nguyen Van Phong on 10/23/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10 #import "TopObject.h"
11 #import "NoticeInfor.h"
12
13 @interface HomeObject : NSObject
14 @property (nonatomic, strong) TargetInfor *targetInfor;
15 @property (nonatomic, strong) NSMutableArray *listNotice;
16 @end
17
LifeLog/LifeLog/HomeObject.m
File was created 1 //
2 // HomeObject.m
3 // LifeLog
4 //
5 // Created by Nguyen Van Phong on 10/23/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 //
8
9 #import "HomeObject.h"
10
11 @implementation HomeObject
12
13 @end
14
LifeLog/LifeLog/HomeViewConb troller.m
File was created 1 //
2 // HomeViewController.m
3 // LifeLog
4 //
5 // Created by Nguyen Van Phong on 7/25/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 //
8
9 #import "HomeViewController.h"
10 #import "NSDate+helper.h"
11 #import <CoreMotion/CoreMotion.h>
12 #import "CMMotionActivityExtra.h"
13 #import "TodayViewController.h"
14 #import "Utilities.h"
15 #import <MBProgressHUD/MBProgressHUD.h>
16 #import "ServerAPI.h"
17
18 static NSInteger maxRequest = 20;
19 static NSInteger numberTotal = 10000;
20
21 @interface HomeViewController ()
22 {
23 MBProgressHUD *progressHud;
24 NSInteger targetStep;
25 }
26 @property (nonatomic, weak) IBOutlet UILabel *lblTitle;
27 @property (nonatomic, weak) IBOutlet UIImageView *avatar;
28 @property (nonatomic, weak) IBOutlet UILabel *lblDateCurrent;
29 @property (nonatomic, weak) IBOutlet UILabel *lblValueStep;
30 @property (nonatomic, weak) IBOutlet UILabel *lblUnitStep;
31 @property (nonatomic, weak) IBOutlet UILabel *lblValueStepOther;
32 @property (nonatomic, weak) IBOutlet UILabel *lblPercent;
33 @property (nonatomic, weak) IBOutlet UILabel *lblNotice;
34 @property (weak, nonatomic) IBOutlet UISegmentedControl *segmentHome;
35 @property (weak, nonatomic) IBOutlet UITextView *tvNotice;
36
37 @property (nonatomic, strong) CMPedometer *pedometer;
38 @property (nonatomic, strong) CMMotionActivityManager *motionActivityManager;
39 @property (nonatomic, strong) NSOperationQueue *operationQueue;
40 @property (nonatomic, strong) NSTimer *timer;
41 @property (nonatomic, assign) NSInteger bike;
42 @property (nonatomic, assign) NSInteger walking;
43 @property (nonatomic, assign) NSInteger running;
44 @property (nonatomic, strong) NSDate *dateCurrent;
45
46 @property (nonatomic, assign) int totalRequest;
47 @property (nonatomic, assign) int countComplete;
48 @property (nonatomic, assign) int currentIndex;
49
50 @end
51
52 @implementation HomeViewController
53
54 - (void)viewDidLoad {
55 [super viewDidLoad];
56
57 self.lblTitle.text = NSLocalizedString(@"lifelog.home.title", nil);
58
59 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.lblTitle attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
60
61 self.avatar.backgroundColor = [UIColor whiteColor];
62 self.avatar.layer.borderWidth = 2.0f;
63 self.avatar.layer.borderColor = [[UIColor whiteColor] CGColor];
64 self.avatar.layer.cornerRadius = self.avatar.frame.size.width/2.0f;
65 self.avatar.layer.masksToBounds = YES;
66 NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kUser];
67 User *user = (User *)[NSKeyedUnarchiver unarchiveObjectWithData:data];
68 if (user != nil) {
69 NSString *linkImage = [NSString stringWithFormat:@"%@%@", kServerAddress, user.profile_image];
70 NSURL *urlImage = [NSURL URLWithString:linkImage];
71 NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
72 sessionConfig.timeoutIntervalForRequest = 30.0;
73 sessionConfig.timeoutIntervalForResource = 60.0;
74 sessionConfig.HTTPMaximumConnectionsPerHost = 20;
75 sessionConfig.allowsCellularAccess = YES;
76 HomeViewController __weak *weakSelf = self;
77 NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig];
78 NSURLSessionDataTask *downloadPhotoTask = [session
79 dataTaskWithURL:urlImage completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
80 if (weakSelf == nil)
81 {
82 return;
83 }
84 if (error == nil) {
85 UIImage *image = [[UIImage alloc] initWithData:data];
86 [[NSOperationQueue mainQueue] addOperationWithBlock:^{
87 weakSelf.avatar.image = image;
88 }];
89 }
90 }];
91 [downloadPhotoTask resume];
92 }
93
94 self.lblNotice.text = NSLocalizedString(@"lifelog.home.notice", nil);
95
96 _dateCurrent = [NSDate date];
97 self.lblDateCurrent.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[_dateCurrent getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[_dateCurrent getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[_dateCurrent getDay], NSLocalizedString(@"lifelog.common.day", nil)];
98
99 self.lblUnitStep.text = NSLocalizedString(@"lifelog.home.unit.step", nil);
100
101 if ([CMPedometer isStepCountingAvailable]) {
102 _pedometer = [[CMPedometer alloc] init];
103 }
104 if ([CMMotionActivityManager isActivityAvailable]) {
105 _motionActivityManager = [[CMMotionActivityManager alloc] init];
106 }
107 _operationQueue = [[NSOperationQueue alloc] init];
108 _bike = 0;
109 _walking = 0;
110 _running = 0;
111 _segmentHome.selectedSegmentIndex = 1;
112 _totalRequest = 0;
113 _countComplete = 0;
114
115 progressHud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
116 progressHud.mode = MBProgressHUDModeIndeterminate;
117 progressHud.detailsLabel.text = NSLocalizedString(@"lifelog.home.progressHud.title", nil);
118 // [self saveDataStep7LastDay];
119 targetStep = numberTotal;
120 }
121
122 - (void)viewWillAppear:(BOOL)animated {
123 [super viewWillAppear:animated];
124 NSDate *dateNow = [NSDate date];
125 [self saveStepForDay:dateNow];
126 }
127
128 - (void)requestTopByDate:(NSDate *)date {
129 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
130 [dateFormatter setDateFormat:@"yyyy-MM-dd"];
131 NSString *dateString = [dateFormatter stringFromDate:date];
132 [progressHud showAnimated:YES];
133 [progressHud setHidden:NO];
134 HomeViewController __weak *weakSelf = self;
135 int mode = 1;
136 switch (_segmentHome.selectedSegmentIndex) {
137 case 0:
138 mode = 3;
139 break;
140
141 case 1:
142 mode = 1;
143 break;
144
145 case 2:
146 mode = 2;
147 break;
148
149 default:
150 break;
151 }
152 [[ServerAPI server] requestTopWithMode:mode andDate:dateString CompletionHandler:^(TopObject *topObject, NSError *error) {
153 if(weakSelf == nil) {
154 return ;
155 }
156 if (error == nil) {
157 NSLog(@"TopObject: %@", topObject);
158 dispatch_async(dispatch_get_main_queue(), ^{
159 [weakSelf updateStepUI:topObject.targetInfor];
160 });
161 }
162 else {
163 dispatch_async(dispatch_get_main_queue(), ^{
164 NSString *message = [error.userInfo objectForKey:@"message"];
165 [Utilities showErrorMessage:message withViewController:weakSelf];
166 });
167 }
168 dispatch_async(dispatch_get_main_queue(), ^{
169 [progressHud setHidden:YES];
170 });
171 }];
172 [[ServerAPI server] requestHomeWithMode:mode andDate:dateString CompletionHandler:^(HomeObject *homeObject, NSError *error) {
173 if(weakSelf == nil) {
174 return ;
175 }
176 if (error == nil) {
177 NSLog(@"List Notices: %@", homeObject.listNotice);
178 for (NoticeInfor *noticeInfor in homeObject.listNotice) {
179 NSLog(@"noticeInfor: %@", noticeInfor.notice_content);
180 }
181 dispatch_async(dispatch_get_main_queue(), ^{
182 [weakSelf updateNoticeUI:homeObject];
183 });
184 }
185 else {
186 dispatch_async(dispatch_get_main_queue(), ^{
187 NSString *message = [error.userInfo objectForKey:@"message"];
188 [Utilities showErrorMessage:message withViewController:weakSelf];
189 });
190 }
191 dispatch_async(dispatch_get_main_queue(), ^{
192 [progressHud setHidden:YES];
193 });
194 }];
195 }
196
197 - (void)viewWillDisappear:(BOOL)animated {
198 [super viewWillDisappear:animated];
199 }
200
201 - (void)didReceiveMemoryWarning {
202 [super didReceiveMemoryWarning];
203 // Dispose of any resources that can be recreated.
204 }
205
206 #pragma mark - IBAction
207 - (IBAction)menuButtonTouchUpInside:(id)sender
208 {
209
210 }
211
212 - (IBAction)todayButtonTouchUpInside:(id)sender
213 {
214 TodayViewController *todayVC = [[TodayViewController alloc] initWithNibName:@"TodayViewController" bundle:nil];
215 todayVC.targetStep = targetStep;
216 [self.navigationController pushViewController:todayVC animated:YES];
217 }
218
219 - (IBAction)leftButtonTouchUpInside:(id)sender
220 {
221 self.dateCurrent = [self.dateCurrent dateByAddingTimeInterval:-(24*60*60)];
222 self.lblDateCurrent.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[_dateCurrent getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[_dateCurrent getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[_dateCurrent getDay], NSLocalizedString(@"lifelog.common.day", nil)];
223 [self resetStepUI];
224 [self saveStepForDay:self.dateCurrent];
225 }
226
227 - (IBAction)rightButtonTouchUpInside:(id)sender
228 {
229 self.dateCurrent = [self.dateCurrent dateByAddingTimeInterval:24*60*60];
230 self.lblDateCurrent.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[_dateCurrent getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[_dateCurrent getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[_dateCurrent getDay], NSLocalizedString(@"lifelog.common.day", nil)];
231 [self resetStepUI];
232 //[self saveStepForDay:self.dateCurrent];
233 [self requestTopByDate:self.dateCurrent];
234 }
235
236 - (IBAction)segmentValueChange:(id)sender {
237 [self resetStepUI];
238 [self requestTopByDate:self.dateCurrent];
239 }
240
241 #pragma mark - Functions Private
242 - (void)saveStepForDay:(NSDate *)date
243 {
244 if ([CMMotionActivityManager isActivityAvailable]) {
245 [progressHud showAnimated:YES];
246 [progressHud setHidden:NO];
247 self.bike = 0;
248 self.walking = 0;
249 self.running = 0;
250 NSDate *startDate = [date beginningAtMidnightOfDay];
251 NSDate *endDate = [startDate dateByAddingTimeInterval:(24*60*60 - 1)];
252
253 HomeViewController __weak *weakSelf = self;
254 dispatch_queue_t myQueue = dispatch_queue_create("mobileworld.jp.lifelog.forDay", NULL);
255 dispatch_async(myQueue, ^{
256 if (weakSelf == nil) {
257 return ;
258 }
259
260 [weakSelf.motionActivityManager queryActivityStartingFromDate:startDate toDate:endDate toQueue:_operationQueue withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {
261 if (error || activities.count <= 0) {
262 dispatch_async(dispatch_get_main_queue(), ^{
263 [weakSelf updateStepUI];
264 });
265 return ;
266 }
267 // set EndDate
268 NSMutableArray *arrayActivities = [[NSMutableArray alloc] init];
269 for (int i = 0; i < activities.count; i++) {
270 CMMotionActivity *activity = [activities objectAtIndex:i];
271 CMMotionActivityExtra *activityExtra = [[CMMotionActivityExtra alloc] init];
272 activityExtra.activity = activity;
273 if (i == activities.count - 1) {
274 activityExtra.endDate = endDate;
275 }
276 else {
277 CMMotionActivity *activityNext = [activities objectAtIndex:i+1];
278 // activityExtra.endDate = [activityNext.startDate dateByAddingTimeInterval:-1];
279 activityExtra.endDate = activityNext.startDate;
280 }
281 [arrayActivities addObject:activityExtra];
282 }
283 // PhongNV
284 weakSelf.currentIndex = 0;
285 [weakSelf save20objectOfActivityExtras:arrayActivities];
286 }];
287 });
288 }
289 }
290
291 - (void)complete20Request:(NSArray *)activities {
292 if (self.totalRequest == self.countComplete) {
293 self.totalRequest = 0;
294 self.countComplete = 0;
295 self.currentIndex++;
296 [self save20objectOfActivityExtras:activities];
297 }
298 }
299 - (void)save20objectOfActivityExtras:(NSArray *)activities
300 {
301 int result = floor(activities.count / maxRequest);
302 if (activities.count <= 0 || self.currentIndex > result) {
303 self.totalRequest = 0;
304 self.countComplete = 0;
305 self.currentIndex = 0;
306 dispatch_async(dispatch_get_main_queue(), ^{
307 [self updateStepUI];
308 });
309 return;
310 }
311
312 HomeViewController __weak *weakSelf = self;
313 for (NSInteger index = self.currentIndex*maxRequest; index < self.currentIndex*maxRequest + maxRequest; index++) {
314 if ((self.currentIndex*maxRequest + maxRequest) >= activities.count) {
315 self.totalRequest = (int)(activities.count - self.currentIndex*maxRequest);
316 if (self.totalRequest <= 0) {
317 [weakSelf complete20Request:activities];
318 }
319 }
320 else {
321 self.totalRequest = (int)maxRequest;
322 }
323 if (index < activities.count) {
324 CMMotionActivityExtra *activityExtra = [activities objectAtIndex:index];
325 [self.pedometer queryPedometerDataFromDate:activityExtra.activity.startDate toDate:activityExtra.endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
326 if (weakSelf == nil) {
327 return ;
328 }
329 NSInteger numberStep = [pedometerData.numberOfSteps integerValue];
330 int mode = 1;
331 if (activityExtra.activity.cycling) {
332 mode = 3;
333 }
334 else if (activityExtra.activity.walking) {
335 mode = 1;
336 }
337 else if (activityExtra.activity.running) {
338 mode = 2;
339 }
340 else {
341 // unknown
342 }
343 // save step to server
344 if (numberStep > 0) {
345 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
346 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
347 NSString *dateBegin = [dateFormatter stringFromDate:activityExtra.activity.startDate];
348 NSString *dateEnd = [dateFormatter stringFromDate:activityExtra.endDate];
349 NSLog(@"dateBegin: %@ | dateEnd: %@ | numberStep: %li", dateBegin, dateEnd, numberStep);
350 [[ServerAPI server] requestCreateLog:mode withStep:(int)numberStep startDate:dateBegin endDate:dateEnd CompletionHandler:^(NSError *error) {
351 if (error) {
352 NSLog(@"Error: %@", error);
353 }
354 weakSelf.countComplete++;
355 [weakSelf complete20Request:activities];
356 }];
357 }
358 else {
359 weakSelf.countComplete++;
360 [weakSelf complete20Request:activities];
361 }
362 }];
363 }
364 }
365 }
366
367 - (void)updateStepUI
368 {
369 [self requestTopByDate:self.dateCurrent];
370 }
371
372 - (void)saveDataStep7LastDay
373 {
374 NSDate *dateNow = [NSDate date];
375 for (int index = 0; index < 7; index++) {
376 dateNow = [dateNow dateByAddingTimeInterval:-(24*60*60)];
377 [self saveStepByDate:dateNow];
378 }
379 }
380
381 - (void)saveStepByDate:(NSDate *)date
382 {
383 if ([CMMotionActivityManager isActivityAvailable]) {
384 NSDate *startDate = [date beginningAtMidnightOfDay];
385 NSDate *endDate = [startDate dateByAddingTimeInterval:(24*60*60 - 1)];
386
387 HomeViewController __weak *weakSelf = self;
388 dispatch_queue_t myQueue = dispatch_queue_create("mobileworld.jp.lifelog.7lastday", NULL);
389 dispatch_async(myQueue, ^{
390 if (weakSelf == nil) {
391 return ;
392 }
393
394 [weakSelf.motionActivityManager queryActivityStartingFromDate:startDate toDate:endDate toQueue:_operationQueue withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {
395 if (error || activities.count <= 0) {
396 return ;
397 }
398 // set EndDate
399 NSMutableArray *arrayActivities = [[NSMutableArray alloc] init];
400 for (int i = 0; i < activities.count; i++) {
401 CMMotionActivity *activity = [activities objectAtIndex:i];
402 CMMotionActivityExtra *activityExtra = [[CMMotionActivityExtra alloc] init];
403 activityExtra.activity = activity;
404 if (i == activities.count - 1) {
405 activityExtra.endDate = endDate;
406 }
407 else {
408 CMMotionActivity *activityNext = [activities objectAtIndex:i+1];
409 activityExtra.endDate = [activityNext.startDate dateByAddingTimeInterval:-1];
410 }
411 [arrayActivities addObject:activityExtra];
412 }
413
414 for (CMMotionActivityExtra *activityExtra in arrayActivities) {
415 [weakSelf.pedometer queryPedometerDataFromDate:activityExtra.activity.startDate toDate:activityExtra.endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
416 NSInteger numberStep = [pedometerData.numberOfSteps integerValue];
417 int mode = 1;
418 if (activityExtra.activity.cycling) {
419 mode = 3;
420 }
421 else if (activityExtra.activity.walking) {
422 mode = 1;
423 }
424 else if (activityExtra.activity.running) {
425 mode = 2;
426 }
427 else {
428 // unknown
429 }
430
431 // save step to server
432 if (numberStep > 0) {
433 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
434 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
435 NSString *dateBegin = [dateFormatter stringFromDate:activityExtra.activity.startDate];
436 NSString *dateEnd = [dateFormatter stringFromDate:activityExtra.endDate];
437 [[ServerAPI server] requestCreateLog:mode withStep:(int)numberStep startDate:dateBegin endDate:dateEnd CompletionHandler:^(NSError *error) {
438 if (error) {
439 NSLog(@"Error: %@", error);
440 }
441 }];
442 }
443 }];
444 }
445 }];
446 });
447 }
448 }
449
450 - (void)updateStepUI:(TargetInfor *)targetInfor
451 {
452 NSString *stringTargetStep = [targetInfor.target_step stringByReplacingOccurrencesOfString:@"," withString:@""];
453 targetStep = [stringTargetStep integerValue];
454 self.lblValueStep.text = targetInfor.num_step;
455 self.lblValueStepOther.text = [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"lifelog.today.remaining.other", nil), targetInfor.remaining_step];
456 self.lblPercent.text = [NSString stringWithFormat:@"%@ %i%@", NSLocalizedString(@"lifelog.today.text.percent", nil), [targetInfor.complete_percent intValue], NSLocalizedString(@"lifelog.today.percent", nil)];
457 }
458
459 - (void)updateNoticeUI:(HomeObject *)homeObject
460 {
461 NSString *stringNotice = @"";
462 for (NoticeInfor *notice in homeObject.listNotice) {
463 NSString *noticeString = [NSString stringWithFormat:@"%@\n", notice.notice_content];
464 stringNotice = [stringNotice stringByAppendingString:noticeString];
465 }
466 _tvNotice.text = stringNotice;
467 }
468
469 - (void)resetStepUI
470 {
471 self.lblValueStep.text = @"";
472 self.lblValueStepOther.text = @"";
473 self.lblPercent.text = @"";
474 }
475
476 @end
477
LifeLog/LifeLog/HomeViewController.m
1 // File was deleted
2 // HomeViewController.m
3 // LifeLog
4 //
5 // Created by Nguyen Van Phong on 7/25/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 //
8
9 #import "HomeViewController.h"
10 #import "NSDate+helper.h"
11 #import <CoreMotion/CoreMotion.h>
12 #import "CMMotionActivityExtra.h"
13 #import "TodayViewController.h"
14 #import "Utilities.h"
15 #import <MBProgressHUD/MBProgressHUD.h>
16 #import "ServerAPI.h"
17
18 static NSInteger maxRequest = 20;
19 static NSInteger numberTotal = 10000;
20
21 @interface HomeViewController ()
22 {
23 MBProgressHUD *progressHud;
24 NSInteger targetStep;
25 }
26 @property (nonatomic, weak) IBOutlet UILabel *lblTitle;
27 @property (nonatomic, weak) IBOutlet UIImageView *avatar;
28 @property (nonatomic, weak) IBOutlet UILabel *lblDateCurrent;
29 @property (nonatomic, weak) IBOutlet UILabel *lblValueStep;
30 @property (nonatomic, weak) IBOutlet UILabel *lblUnitStep;
31 @property (nonatomic, weak) IBOutlet UILabel *lblValueStepOther;
32 @property (nonatomic, weak) IBOutlet UILabel *lblPercent;
33 @property (nonatomic, weak) IBOutlet UILabel *lblNotice;
34 @property (weak, nonatomic) IBOutlet UISegmentedControl *segmentHome;
35
36 @property (nonatomic, strong) CMPedometer *pedometer;
37 @property (nonatomic, strong) CMMotionActivityManager *motionActivityManager;
38 @property (nonatomic, strong) NSOperationQueue *operationQueue;
39 @property (nonatomic, strong) NSTimer *timer;
40 @property (nonatomic, assign) NSInteger bike;
41 @property (nonatomic, assign) NSInteger walking;
42 @property (nonatomic, assign) NSInteger running;
43 @property (nonatomic, strong) NSDate *dateCurrent;
44
45 @property (nonatomic, assign) int totalRequest;
46 @property (nonatomic, assign) int countComplete;
47 @property (nonatomic, assign) int currentIndex;
48
49 @end
50
51 @implementation HomeViewController
52
53 - (void)viewDidLoad {
54 [super viewDidLoad];
55
56 self.lblTitle.text = NSLocalizedString(@"lifelog.home.title", nil);
57
58 [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.lblTitle attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
59
60 self.avatar.backgroundColor = [UIColor whiteColor];
61 self.avatar.layer.borderWidth = 2.0f;
62 self.avatar.layer.borderColor = [[UIColor whiteColor] CGColor];
63 self.avatar.layer.cornerRadius = self.avatar.frame.size.width/2.0f;
64 self.avatar.layer.masksToBounds = YES;
65 NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kUser];
66 User *user = (User *)[NSKeyedUnarchiver unarchiveObjectWithData:data];
67 if (user != nil) {
68 NSString *linkImage = [NSString stringWithFormat:@"%@%@", kServerAddress, user.profile_image];
69 NSURL *urlImage = [NSURL URLWithString:linkImage];
70 NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
71 sessionConfig.timeoutIntervalForRequest = 30.0;
72 sessionConfig.timeoutIntervalForResource = 60.0;
73 sessionConfig.HTTPMaximumConnectionsPerHost = 20;
74 sessionConfig.allowsCellularAccess = YES;
75 HomeViewController __weak *weakSelf = self;
76 NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig];
77 NSURLSessionDataTask *downloadPhotoTask = [session
78 dataTaskWithURL:urlImage completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
79 if (weakSelf == nil)
80 {
81 return;
82 }
83 if (error == nil) {
84 UIImage *image = [[UIImage alloc] initWithData:data];
85 [[NSOperationQueue mainQueue] addOperationWithBlock:^{
86 weakSelf.avatar.image = image;
87 }];
88 }
89 }];
90 [downloadPhotoTask resume];
91 }
92
93 self.lblNotice.text = NSLocalizedString(@"lifelog.home.notice", nil);
94
95 _dateCurrent = [NSDate date];
96 self.lblDateCurrent.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[_dateCurrent getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[_dateCurrent getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[_dateCurrent getDay], NSLocalizedString(@"lifelog.common.day", nil)];
97
98 self.lblUnitStep.text = NSLocalizedString(@"lifelog.home.unit.step", nil);
99
100 if ([CMPedometer isStepCountingAvailable]) {
101 _pedometer = [[CMPedometer alloc] init];
102 }
103 if ([CMMotionActivityManager isActivityAvailable]) {
104 _motionActivityManager = [[CMMotionActivityManager alloc] init];
105 }
106 _operationQueue = [[NSOperationQueue alloc] init];
107 _bike = 0;
108 _walking = 0;
109 _running = 0;
110 _segmentHome.selectedSegmentIndex = 1;
111 _totalRequest = 0;
112 _countComplete = 0;
113
114 progressHud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
115 progressHud.mode = MBProgressHUDModeIndeterminate;
116 progressHud.detailsLabel.text = NSLocalizedString(@"lifelog.home.progressHud.title", nil);
117 // [self saveDataStep7LastDay];
118 targetStep = numberTotal;
119 }
120
121 - (void)viewWillAppear:(BOOL)animated {
122 [super viewWillAppear:animated];
123 NSDate *dateNow = [NSDate date];
124 [self saveStepForDay:dateNow];
125 }
126
127 - (void)requestTopByDate:(NSDate *)date {
128 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
129 [dateFormatter setDateFormat:@"yyyy-MM-dd"];
130 NSString *dateString = [dateFormatter stringFromDate:date];
131 [progressHud showAnimated:YES];
132 [progressHud setHidden:NO];
133 HomeViewController __weak *weakSelf = self;
134 int mode = 1;
135 switch (_segmentHome.selectedSegmentIndex) {
136 case 0:
137 mode = 3;
138 break;
139
140 case 1:
141 mode = 1;
142 break;
143
144 case 2:
145 mode = 2;
146 break;
147
148 default:
149 break;
150 }
151 [[ServerAPI server] requestTopWithMode:mode andDate:dateString CompletionHandler:^(TopObject *topObject, NSError *error) {
152 if(weakSelf == nil) {
153 return ;
154 }
155 if (error == nil) {
156 NSLog(@"TopObject: %@", topObject);
157 dispatch_async(dispatch_get_main_queue(), ^{
158 [weakSelf updateStepUI:topObject.targetInfor];
159 });
160 }
161 else {
162 dispatch_async(dispatch_get_main_queue(), ^{
163 NSString *message = [error.userInfo objectForKey:@"message"];
164 [Utilities showErrorMessage:message withViewController:weakSelf];
165 });
166 }
167 dispatch_async(dispatch_get_main_queue(), ^{
168 [progressHud setHidden:YES];
169 });
170 }];
171 }
172
173 - (void)viewWillDisappear:(BOOL)animated {
174 [super viewWillDisappear:animated];
175 }
176
177 - (void)didReceiveMemoryWarning {
178 [super didReceiveMemoryWarning];
179 // Dispose of any resources that can be recreated.
180 }
181
182 #pragma mark - IBAction
183 - (IBAction)menuButtonTouchUpInside:(id)sender
184 {
185
186 }
187
188 - (IBAction)todayButtonTouchUpInside:(id)sender
189 {
190 TodayViewController *todayVC = [[TodayViewController alloc] initWithNibName:@"TodayViewController" bundle:nil];
191 todayVC.targetStep = targetStep;
192 [self.navigationController pushViewController:todayVC animated:YES];
193 }
194
195 - (IBAction)leftButtonTouchUpInside:(id)sender
196 {
197 self.dateCurrent = [self.dateCurrent dateByAddingTimeInterval:-(24*60*60)];
198 self.lblDateCurrent.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[_dateCurrent getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[_dateCurrent getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[_dateCurrent getDay], NSLocalizedString(@"lifelog.common.day", nil)];
199 [self resetStepUI];
200 [self saveStepForDay:self.dateCurrent];
201 }
202
203 - (IBAction)rightButtonTouchUpInside:(id)sender
204 {
205 self.dateCurrent = [self.dateCurrent dateByAddingTimeInterval:24*60*60];
206 self.lblDateCurrent.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[_dateCurrent getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[_dateCurrent getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[_dateCurrent getDay], NSLocalizedString(@"lifelog.common.day", nil)];
207 [self resetStepUI];
208 //[self saveStepForDay:self.dateCurrent];
209 [self requestTopByDate:self.dateCurrent];
210 }
211
212 - (IBAction)segmentValueChange:(id)sender {
213 [self resetStepUI];
214 [self requestTopByDate:self.dateCurrent];
215 }
216
217 #pragma mark - Functions Private
218 - (void)saveStepForDay:(NSDate *)date
219 {
220 if ([CMMotionActivityManager isActivityAvailable]) {
221 [progressHud showAnimated:YES];
222 [progressHud setHidden:NO];
223 self.bike = 0;
224 self.walking = 0;
225 self.running = 0;
226 NSDate *startDate = [date beginningAtMidnightOfDay];
227 NSDate *endDate = [startDate dateByAddingTimeInterval:(24*60*60 - 1)];
228
229 HomeViewController __weak *weakSelf = self;
230 dispatch_queue_t myQueue = dispatch_queue_create("mobileworld.jp.lifelog.forDay", NULL);
231 dispatch_async(myQueue, ^{
232 if (weakSelf == nil) {
233 return ;
234 }
235
236 [weakSelf.motionActivityManager queryActivityStartingFromDate:startDate toDate:endDate toQueue:_operationQueue withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {
237 if (error || activities.count <= 0) {
238 dispatch_async(dispatch_get_main_queue(), ^{
239 [weakSelf updateStepUI];
240 });
241 return ;
242 }
243 // set EndDate
244 NSMutableArray *arrayActivities = [[NSMutableArray alloc] init];
245 for (int i = 0; i < activities.count; i++) {
246 CMMotionActivity *activity = [activities objectAtIndex:i];
247 CMMotionActivityExtra *activityExtra = [[CMMotionActivityExtra alloc] init];
248 activityExtra.activity = activity;
249 if (i == activities.count - 1) {
250 activityExtra.endDate = endDate;
251 }
252 else {
253 CMMotionActivity *activityNext = [activities objectAtIndex:i+1];
254 activityExtra.endDate = activityNext.startDate;
255 }
256 [arrayActivities addObject:activityExtra];
257 }
258 // PhongNV
259 weakSelf.currentIndex = 0;
260 [weakSelf save20objectOfActivityExtras:arrayActivities];
261 }];
262 });
263 }
264 }
265
266 - (void)complete20Request:(NSArray *)activities {
267 if (self.totalRequest == self.countComplete) {
268 self.totalRequest = 0;
269 self.countComplete = 0;
270 self.currentIndex++;
271 [self save20objectOfActivityExtras:activities];
272 }
273 }
274 - (void)save20objectOfActivityExtras:(NSArray *)activities
275 {
276 int result = floor(activities.count / maxRequest);
277 if (activities.count <= 0 || self.currentIndex > result) {
278 self.totalRequest = 0;
279 self.countComplete = 0;
280 self.currentIndex = 0;
281 dispatch_async(dispatch_get_main_queue(), ^{
282 [self updateStepUI];
283 });
284 return;
285 }
286
287 HomeViewController __weak *weakSelf = self;
288 for (NSInteger index = self.currentIndex*maxRequest; index < self.currentIndex*maxRequest + maxRequest; index++) {
289 if ((self.currentIndex*maxRequest + maxRequest) >= activities.count) {
290 self.totalRequest = (int)(activities.count - self.currentIndex*maxRequest);
291 if (self.totalRequest <= 0) {
292 [weakSelf complete20Request:activities];
293 }
294 }
295 else {
296 self.totalRequest = (int)maxRequest;
297 }
298 if (index < activities.count) {
299 CMMotionActivityExtra *activityExtra = [activities objectAtIndex:index];
300 [self.pedometer queryPedometerDataFromDate:activityExtra.activity.startDate toDate:activityExtra.endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
301 if (weakSelf == nil) {
302 return ;
303 }
304 NSInteger numberStep = [pedometerData.numberOfSteps integerValue];
305 int mode = 1;
306 if (activityExtra.activity.cycling) {
307 mode = 3;
308 }
309 else if (activityExtra.activity.walking) {
310 mode = 1;
311 }
312 else if (activityExtra.activity.running) {
313 mode = 2;
314 }
315 else {
316 // unknown
317 }
318 // save step to server
319 if (numberStep > 0) {
320 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
321 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
322 NSString *dateBegin = [dateFormatter stringFromDate:activityExtra.activity.startDate];
323 NSString *dateEnd = [dateFormatter stringFromDate:activityExtra.endDate];
324 [[ServerAPI server] requestCreateLog:mode withStep:(int)numberStep startDate:dateBegin endDate:dateEnd CompletionHandler:^(NSError *error) {
325 if (error) {
326 NSLog(@"Error: %@", error);
327 }
328 weakSelf.countComplete++;
329 [weakSelf complete20Request:activities];
330 }];
331 }
332 else {
333 weakSelf.countComplete++;
334 [weakSelf complete20Request:activities];
335 }
336 }];
337 }
338 }
339 }
340
341 - (void)updateStepUI
342 {
343 [self requestTopByDate:self.dateCurrent];
344 }
345
346 - (void)saveDataStep7LastDay
347 {
348 NSDate *dateNow = [NSDate date];
349 for (int index = 0; index < 7; index++) {
350 dateNow = [dateNow dateByAddingTimeInterval:-(24*60*60)];
351 [self saveStepByDate:dateNow];
352 }
353 }
354
355 - (void)saveStepByDate:(NSDate *)date
356 {
357 if ([CMMotionActivityManager isActivityAvailable]) {
358 NSDate *startDate = [date beginningAtMidnightOfDay];
359 NSDate *endDate = [startDate dateByAddingTimeInterval:(24*60*60 - 1)];
360
361 HomeViewController __weak *weakSelf = self;
362 dispatch_queue_t myQueue = dispatch_queue_create("mobileworld.jp.lifelog.7lastday", NULL);
363 dispatch_async(myQueue, ^{
364 if (weakSelf == nil) {
365 return ;
366 }
367
368 [weakSelf.motionActivityManager queryActivityStartingFromDate:startDate toDate:endDate toQueue:_operationQueue withHandler:^(NSArray<CMMotionActivity *> * _Nullable activities, NSError * _Nullable error) {
369 if (error || activities.count <= 0) {
370 return ;
371 }
372 // set EndDate
373 NSMutableArray *arrayActivities = [[NSMutableArray alloc] init];
374 for (int i = 0; i < activities.count; i++) {
375 CMMotionActivity *activity = [activities objectAtIndex:i];
376 CMMotionActivityExtra *activityExtra = [[CMMotionActivityExtra alloc] init];
377 activityExtra.activity = activity;
378 if (i == activities.count - 1) {
379 activityExtra.endDate = endDate;
380 }
381 else {
382 CMMotionActivity *activityNext = [activities objectAtIndex:i+1];
383 activityExtra.endDate = activityNext.startDate;
384 }
385 [arrayActivities addObject:activityExtra];
386 }
387
388 for (CMMotionActivityExtra *activityExtra in arrayActivities) {
389 [weakSelf.pedometer queryPedometerDataFromDate:activityExtra.activity.startDate toDate:activityExtra.endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
390 NSInteger numberStep = [pedometerData.numberOfSteps integerValue];
391 int mode = 1;
392 if (activityExtra.activity.cycling) {
393 mode = 3;
394 }
395 else if (activityExtra.activity.walking) {
396 mode = 1;
397 }
398 else if (activityExtra.activity.running) {
399 mode = 2;
400 }
401 else {
402 // unknown
403 }
404
405 // save step to server
406 if (numberStep > 0) {
407 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
408 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
409 NSString *dateBegin = [dateFormatter stringFromDate:activityExtra.activity.startDate];
410 NSString *dateEnd = [dateFormatter stringFromDate:activityExtra.endDate];
411 [[ServerAPI server] requestCreateLog:mode withStep:(int)numberStep startDate:dateBegin endDate:dateEnd CompletionHandler:^(NSError *error) {
412 if (error) {
413 NSLog(@"Error: %@", error);
414 }
415 }];
416 }
417 }];
418 }
419 }];
420 });
421 }
422 }
423
424 - (void)updateStepUI:(TargetInfor *)targetInfor
425 {
426 NSString *stringTargetStep = [targetInfor.target_step stringByReplacingOccurrencesOfString:@"," withString:@""];
427 targetStep = [stringTargetStep integerValue];
428 self.lblValueStep.text = targetInfor.num_step;
429 self.lblValueStepOther.text = [NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"lifelog.today.remaining.other", nil), targetInfor.remaining_step];
430 self.lblPercent.text = [NSString stringWithFormat:@"%@ %i%@", NSLocalizedString(@"lifelog.today.text.percent", nil), [targetInfor.complete_percent intValue], NSLocalizedString(@"lifelog.today.percent", nil)];
431 }
432
433 - (void)resetStepUI
434 {
435 self.lblValueStep.text = @"";
436 self.lblValueStepOther.text = @"";
437 self.lblPercent.text = @"";
438 }
439
440 @end
441 1 //
LifeLog/LifeLog/HomeViewController.xib
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES"> 2 <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13196" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
3 <device id="retina4_7" orientation="portrait"> 3 <device id="retina4_7" orientation="portrait">
4 <adaptation id="fullscreen"/> 4 <adaptation id="fullscreen"/>
5 </device> 5 </device>
6 <dependencies> 6 <dependencies>
7 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/> 7 <deployment identifier="iOS"/>
8 <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
8 <capability name="Aspect ratio constraints" minToolsVersion="5.1"/> 9 <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
9 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> 10 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
10 </dependencies> 11 </dependencies>
11 <objects> 12 <objects>
12 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HomeViewController"> 13 <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HomeViewController">
13 <connections> 14 <connections>
14 <outlet property="avatar" destination="J2A-tf-wH0" id="FdR-Zg-4ye"/> 15 <outlet property="avatar" destination="J2A-tf-wH0" id="FdR-Zg-4ye"/>
15 <outlet property="lblDateCurrent" destination="IaR-IO-4RA" id="nVS-KW-X4d"/> 16 <outlet property="lblDateCurrent" destination="IaR-IO-4RA" id="nVS-KW-X4d"/>
16 <outlet property="lblNotice" destination="lnt-4H-Ao8" id="aoM-JS-VHg"/> 17 <outlet property="lblNotice" destination="lnt-4H-Ao8" id="aoM-JS-VHg"/>
17 <outlet property="lblPercent" destination="DuE-Dh-nEe" id="Yz4-VO-P2h"/> 18 <outlet property="lblPercent" destination="DuE-Dh-nEe" id="Yz4-VO-P2h"/>
18 <outlet property="lblTitle" destination="u3S-9u-GMZ" id="7C6-gv-vPu"/> 19 <outlet property="lblTitle" destination="u3S-9u-GMZ" id="7C6-gv-vPu"/>
19 <outlet property="lblUnitStep" destination="wfu-aB-xXm" id="4Ms-pS-D2m"/> 20 <outlet property="lblUnitStep" destination="wfu-aB-xXm" id="4Ms-pS-D2m"/>
20 <outlet property="lblValueStep" destination="TUf-Tp-93t" id="qAh-fl-oW4"/> 21 <outlet property="lblValueStep" destination="TUf-Tp-93t" id="qAh-fl-oW4"/>
21 <outlet property="lblValueStepOther" destination="3Xj-IB-96h" id="yXj-HA-fDR"/> 22 <outlet property="lblValueStepOther" destination="3Xj-IB-96h" id="yXj-HA-fDR"/>
22 <outlet property="segmentHome" destination="ibb-Yl-iqu" id="lE6-pr-GgT"/> 23 <outlet property="segmentHome" destination="ibb-Yl-iqu" id="lE6-pr-GgT"/>
24 <outlet property="tvNotice" destination="kdD-rj-BtX" id="t6k-l8-l2N"/>
23 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> 25 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
24 </connections> 26 </connections>
25 </placeholder> 27 </placeholder>
26 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> 28 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
27 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> 29 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
28 <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> 30 <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
29 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 31 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
30 <subviews> 32 <subviews>
31 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HOME" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u3S-9u-GMZ" userLabel="LabelTitle"> 33 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HOME" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u3S-9u-GMZ" userLabel="LabelTitle">
32 <rect key="frame" x="0.0" y="0.0" width="375" height="44"/> 34 <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
33 <color key="backgroundColor" red="0.098039215686274508" green="0.098039215686274508" blue="0.098039215686274508" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> 35 <color key="backgroundColor" red="0.098039215686274508" green="0.098039215686274508" blue="0.098039215686274508" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
34 <constraints> 36 <constraints>
35 <constraint firstAttribute="height" constant="44" id="8z2-GM-1iE"/> 37 <constraint firstAttribute="height" constant="44" id="8z2-GM-1iE"/>
36 </constraints> 38 </constraints>
37 <fontDescription key="fontDescription" type="system" pointSize="23"/> 39 <fontDescription key="fontDescription" type="system" pointSize="23"/>
38 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 40 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
39 <nil key="highlightedColor"/> 41 <nil key="highlightedColor"/>
40 </label> 42 </label>
41 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LPY-Zl-cOp" userLabel="ButtonMenu"> 43 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LPY-Zl-cOp" userLabel="ButtonMenu">
42 <rect key="frame" x="335" y="7" width="30" height="30"/> 44 <rect key="frame" x="335" y="7" width="30" height="30"/>
43 <constraints> 45 <constraints>
44 <constraint firstAttribute="width" constant="30" id="5Ve-P6-6G7"/> 46 <constraint firstAttribute="width" constant="30" id="5Ve-P6-6G7"/>
45 <constraint firstAttribute="width" secondItem="LPY-Zl-cOp" secondAttribute="height" multiplier="1:1" id="6V0-0o-71r"/> 47 <constraint firstAttribute="width" secondItem="LPY-Zl-cOp" secondAttribute="height" multiplier="1:1" id="6V0-0o-71r"/>
46 </constraints> 48 </constraints>
47 <state key="normal" image="icon_menu"/> 49 <state key="normal" image="icon_menu"/>
48 <connections> 50 <connections>
49 <action selector="menuButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="HrU-er-jwh"/> 51 <action selector="menuButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="HrU-er-jwh"/>
50 </connections> 52 </connections>
51 </button> 53 </button>
52 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar_default" translatesAutoresizingMaskIntoConstraints="NO" id="J2A-tf-wH0" userLabel="avatar"> 54 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="avatar_default" translatesAutoresizingMaskIntoConstraints="NO" id="J2A-tf-wH0" userLabel="avatar">
53 <rect key="frame" x="8" y="54" width="80" height="80"/> 55 <rect key="frame" x="8" y="54" width="80" height="80"/>
54 <constraints> 56 <constraints>
55 <constraint firstAttribute="width" secondItem="J2A-tf-wH0" secondAttribute="height" multiplier="1:1" id="TVn-eB-Jhs"/> 57 <constraint firstAttribute="width" secondItem="J2A-tf-wH0" secondAttribute="height" multiplier="1:1" id="TVn-eB-Jhs"/>
56 <constraint firstAttribute="width" constant="80" id="YGa-LO-1Mu"/> 58 <constraint firstAttribute="width" constant="80" id="YGa-LO-1Mu"/>
57 </constraints> 59 </constraints>
58 </imageView> 60 </imageView>
59 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_left" translatesAutoresizingMaskIntoConstraints="NO" id="vRa-cr-YTe" userLabel="icon_left"> 61 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_left" translatesAutoresizingMaskIntoConstraints="NO" id="vRa-cr-YTe" userLabel="icon_left">
60 <rect key="frame" x="98" y="79" width="30" height="30"/> 62 <rect key="frame" x="98" y="79" width="30" height="30"/>
61 <constraints> 63 <constraints>
62 <constraint firstAttribute="width" constant="30" id="UZi-wZ-The"/> 64 <constraint firstAttribute="width" constant="30" id="UZi-wZ-The"/>
63 <constraint firstAttribute="width" secondItem="vRa-cr-YTe" secondAttribute="height" multiplier="1:1" id="itE-d2-PsT"/> 65 <constraint firstAttribute="width" secondItem="vRa-cr-YTe" secondAttribute="height" multiplier="1:1" id="itE-d2-PsT"/>
64 </constraints> 66 </constraints>
65 </imageView> 67 </imageView>
66 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b6V-Bi-4oz" userLabel="ButtonLeft"> 68 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b6V-Bi-4oz" userLabel="ButtonLeft">
67 <rect key="frame" x="88" y="69" width="50" height="50"/> 69 <rect key="frame" x="88" y="69" width="50" height="50"/>
68 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 70 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
69 <constraints> 71 <constraints>
70 <constraint firstAttribute="width" secondItem="b6V-Bi-4oz" secondAttribute="height" multiplier="1:1" id="GYG-2B-e1R"/> 72 <constraint firstAttribute="width" secondItem="b6V-Bi-4oz" secondAttribute="height" multiplier="1:1" id="GYG-2B-e1R"/>
71 <constraint firstAttribute="width" constant="50" id="bgQ-rD-KZD"/> 73 <constraint firstAttribute="width" constant="50" id="bgQ-rD-KZD"/>
72 </constraints> 74 </constraints>
73 <connections> 75 <connections>
74 <action selector="leftButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="Bzk-y5-Lre"/> 76 <action selector="leftButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="Bzk-y5-Lre"/>
75 </connections> 77 </connections>
76 </button> 78 </button>
77 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_right" translatesAutoresizingMaskIntoConstraints="NO" id="Low-8n-pqa" userLabel="icon_right"> 79 <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_right" translatesAutoresizingMaskIntoConstraints="NO" id="Low-8n-pqa" userLabel="icon_right">
78 <rect key="frame" x="335" y="79" width="30" height="30"/> 80 <rect key="frame" x="335" y="79" width="30" height="30"/>
79 <constraints> 81 <constraints>
80 <constraint firstAttribute="width" constant="30" id="jTd-Xb-RdV"/> 82 <constraint firstAttribute="width" constant="30" id="jTd-Xb-RdV"/>
81 <constraint firstAttribute="width" secondItem="Low-8n-pqa" secondAttribute="height" multiplier="1:1" id="pft-kU-wDw"/> 83 <constraint firstAttribute="width" secondItem="Low-8n-pqa" secondAttribute="height" multiplier="1:1" id="pft-kU-wDw"/>
82 </constraints> 84 </constraints>
83 </imageView> 85 </imageView>
84 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="at8-co-gC4" userLabel="ButtonRight"> 86 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="at8-co-gC4" userLabel="ButtonRight">
85 <rect key="frame" x="325" y="69" width="50" height="50"/> 87 <rect key="frame" x="325" y="69" width="50" height="50"/>
86 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 88 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
87 <constraints> 89 <constraints>
88 <constraint firstAttribute="width" constant="50" id="dpm-ie-7c4"/> 90 <constraint firstAttribute="width" constant="50" id="dpm-ie-7c4"/>
89 <constraint firstAttribute="width" secondItem="at8-co-gC4" secondAttribute="height" multiplier="1:1" id="wDO-Tw-aYK"/> 91 <constraint firstAttribute="width" secondItem="at8-co-gC4" secondAttribute="height" multiplier="1:1" id="wDO-Tw-aYK"/>
90 </constraints> 92 </constraints>
91 <connections> 93 <connections>
92 <action selector="rightButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="0jR-UP-2ia"/> 94 <action selector="rightButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="0jR-UP-2ia"/>
93 </connections> 95 </connections>
94 </button> 96 </button>
95 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2017ๅนด1ๆœˆ1ๆ—ฅ" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IaR-IO-4RA"> 97 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2017ๅนด1ๆœˆ1ๆ—ฅ" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IaR-IO-4RA">
96 <rect key="frame" x="136" y="79" width="191" height="30"/> 98 <rect key="frame" x="136" y="79" width="191" height="30"/>
97 <constraints> 99 <constraints>
98 <constraint firstAttribute="height" constant="30" id="MsO-aD-MZ3"/> 100 <constraint firstAttribute="height" constant="30" id="MsO-aD-MZ3"/>
99 </constraints> 101 </constraints>
100 <fontDescription key="fontDescription" type="system" pointSize="22"/> 102 <fontDescription key="fontDescription" type="system" pointSize="22"/>
101 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 103 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
102 <nil key="highlightedColor"/> 104 <nil key="highlightedColor"/>
103 </label> 105 </label>
104 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TUf-Tp-93t" userLabel="valueStep"> 106 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TUf-Tp-93t" userLabel="valueStep">
105 <rect key="frame" x="20" y="139" width="275" height="40"/> 107 <rect key="frame" x="20" y="139" width="275" height="40"/>
106 <constraints> 108 <constraints>
107 <constraint firstAttribute="height" constant="40" id="6Wd-CK-kPs"/> 109 <constraint firstAttribute="height" constant="40" id="6Wd-CK-kPs"/>
108 </constraints> 110 </constraints>
109 <fontDescription key="fontDescription" type="system" pointSize="45"/> 111 <fontDescription key="fontDescription" type="system" pointSize="45"/>
110 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 112 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
111 <nil key="highlightedColor"/> 113 <nil key="highlightedColor"/>
112 </label> 114 </label>
113 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="step" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wfu-aB-xXm" userLabel="unitStep"> 115 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="step" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wfu-aB-xXm" userLabel="unitStep">
114 <rect key="frame" x="305" y="149" width="50" height="30"/> 116 <rect key="frame" x="305" y="149" width="50" height="30"/>
115 <constraints> 117 <constraints>
116 <constraint firstAttribute="width" constant="50" id="oQw-JM-dmo"/> 118 <constraint firstAttribute="width" constant="50" id="oQw-JM-dmo"/>
117 <constraint firstAttribute="height" constant="30" id="pV2-7i-dZB"/> 119 <constraint firstAttribute="height" constant="30" id="pV2-7i-dZB"/>
118 </constraints> 120 </constraints>
119 <fontDescription key="fontDescription" type="system" pointSize="25"/> 121 <fontDescription key="fontDescription" type="system" pointSize="25"/>
120 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 122 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
121 <nil key="highlightedColor"/> 123 <nil key="highlightedColor"/>
122 </label> 124 </label>
123 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VAz-hq-dvR"> 125 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VAz-hq-dvR">
124 <rect key="frame" x="157" y="525" width="60" height="30"/> 126 <rect key="frame" x="157" y="525" width="60" height="30"/>
125 <constraints> 127 <constraints>
126 <constraint firstAttribute="width" constant="60" id="KzL-jP-qZn"/> 128 <constraint firstAttribute="width" constant="60" id="KzL-jP-qZn"/>
127 <constraint firstAttribute="height" constant="30" id="kdw-th-wDS"/> 129 <constraint firstAttribute="height" constant="30" id="kdw-th-wDS"/>
128 </constraints> 130 </constraints>
129 <state key="normal" title="TODAY"> 131 <state key="normal" title="TODAY">
130 <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 132 <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
131 </state> 133 </state>
132 <connections> 134 <connections>
133 <action selector="todayButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="KoT-el-kxw"/> 135 <action selector="todayButtonTouchUpInside:" destination="-1" eventType="touchUpInside" id="KoT-el-kxw"/>
134 </connections> 136 </connections>
135 </button> 137 </button>
136 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Xj-IB-96h"> 138 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Xj-IB-96h">
137 <rect key="frame" x="8" y="187" width="359" height="30"/> 139 <rect key="frame" x="8" y="187" width="359" height="30"/>
138 <constraints> 140 <constraints>
139 <constraint firstAttribute="height" constant="30" id="B7Z-yO-b6M"/> 141 <constraint firstAttribute="height" constant="30" id="B7Z-yO-b6M"/>
140 </constraints> 142 </constraints>
141 <fontDescription key="fontDescription" type="system" pointSize="20"/> 143 <fontDescription key="fontDescription" type="system" pointSize="20"/>
142 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 144 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
143 <nil key="highlightedColor"/> 145 <nil key="highlightedColor"/>
144 </label> 146 </label>
145 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DuE-Dh-nEe"> 147 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DuE-Dh-nEe">
146 <rect key="frame" x="8" y="225" width="359" height="30"/> 148 <rect key="frame" x="8" y="225" width="359" height="30"/>
147 <constraints> 149 <constraints>
148 <constraint firstAttribute="height" constant="30" id="6YJ-rf-mz3"/> 150 <constraint firstAttribute="height" constant="30" id="6YJ-rf-mz3"/>
149 </constraints> 151 </constraints>
150 <fontDescription key="fontDescription" type="system" pointSize="20"/> 152 <fontDescription key="fontDescription" type="system" pointSize="20"/>
151 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 153 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
152 <nil key="highlightedColor"/> 154 <nil key="highlightedColor"/>
153 </label> 155 </label>
154 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lnt-4H-Ao8"> 156 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ใŠ็Ÿฅใ‚‰ใ›" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lnt-4H-Ao8">
155 <rect key="frame" x="8" y="275" width="359" height="30"/> 157 <rect key="frame" x="8" y="275" width="359" height="30"/>
156 <constraints> 158 <constraints>
157 <constraint firstAttribute="height" constant="30" id="isj-iQ-BcF"/> 159 <constraint firstAttribute="height" constant="30" id="isj-iQ-BcF"/>
158 </constraints> 160 </constraints>
159 <fontDescription key="fontDescription" type="system" pointSize="20"/> 161 <fontDescription key="fontDescription" type="system" pointSize="20"/>
160 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 162 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
161 <nil key="highlightedColor"/> 163 <nil key="highlightedColor"/>
162 </label> 164 </label>
163 <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_other" translatesAutoresizingMaskIntoConstraints="NO" id="BoP-c1-c0q"> 165 <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_other" translatesAutoresizingMaskIntoConstraints="NO" id="BoP-c1-c0q">
164 <rect key="frame" x="20" y="313" width="75" height="67"/> 166 <rect key="frame" x="20" y="313" width="75" height="67"/>
165 <constraints> 167 <constraints>
166 <constraint firstAttribute="width" constant="75" id="lKw-2n-DMo"/> 168 <constraint firstAttribute="width" constant="75" id="lKw-2n-DMo"/>
167 <constraint firstAttribute="height" constant="67" id="m58-CT-3kB"/> 169 <constraint firstAttribute="height" constant="67" id="m58-CT-3kB"/>
168 </constraints> 170 </constraints>
169 </imageView> 171 </imageView>
170 <segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="ibb-Yl-iqu"> 172 <segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="ibb-Yl-iqu">
171 <rect key="frame" x="75" y="575" width="224" height="29"/> 173 <rect key="frame" x="75" y="575" width="224" height="29"/>
172 <segments> 174 <segments>
173 <segment title="BIKE"/> 175 <segment title="BIKE"/>
174 <segment title="WALKING"/> 176 <segment title="WALKING"/>
175 <segment title="RUNNING"/> 177 <segment title="RUNNING"/>
176 </segments> 178 </segments>
177 <color key="tintColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/> 179 <color key="tintColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
178 <connections> 180 <connections>
179 <action selector="segmentValueChange:" destination="-1" eventType="valueChanged" id="kL2-mI-baG"/> 181 <action selector="segmentValueChange:" destination="-1" eventType="valueChanged" id="kL2-mI-baG"/>
180 </connections> 182 </connections>
181 </segmentedControl> 183 </segmentedControl>
184 <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kdD-rj-BtX" userLabel="tvNotice">
185 <rect key="frame" x="103" y="313" width="264" height="204"/>
186 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
187 <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
188 <fontDescription key="fontDescription" type="system" pointSize="14"/>
189 <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
190 </textView>
182 </subviews> 191 </subviews>
183 <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> 192 <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
184 <constraints> 193 <constraints>
185 <constraint firstItem="IaR-IO-4RA" firstAttribute="leading" secondItem="vRa-cr-YTe" secondAttribute="trailing" constant="8" id="010-mM-SLU"/> 194 <constraint firstItem="IaR-IO-4RA" firstAttribute="leading" secondItem="vRa-cr-YTe" secondAttribute="trailing" constant="8" id="010-mM-SLU"/>
186 <constraint firstAttribute="trailing" secondItem="Low-8n-pqa" secondAttribute="trailing" constant="10" id="0OY-h0-Rgg"/> 195 <constraint firstAttribute="trailing" secondItem="Low-8n-pqa" secondAttribute="trailing" constant="10" id="0OY-h0-Rgg"/>
196 <constraint firstAttribute="trailing" secondItem="kdD-rj-BtX" secondAttribute="trailing" constant="8" id="3bP-sY-1pI"/>
187 <constraint firstItem="u3S-9u-GMZ" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="4TN-aJ-vQh"/> 197 <constraint firstItem="u3S-9u-GMZ" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="4TN-aJ-vQh"/>
188 <constraint firstAttribute="trailing" secondItem="u3S-9u-GMZ" secondAttribute="trailing" id="8KH-Mn-IUf"/> 198 <constraint firstAttribute="trailing" secondItem="u3S-9u-GMZ" secondAttribute="trailing" id="8KH-Mn-IUf"/>
189 <constraint firstItem="DuE-Dh-nEe" firstAttribute="top" secondItem="3Xj-IB-96h" secondAttribute="bottom" constant="8" id="9h2-XH-Dd7"/> 199 <constraint firstItem="DuE-Dh-nEe" firstAttribute="top" secondItem="3Xj-IB-96h" secondAttribute="bottom" constant="8" id="9h2-XH-Dd7"/>
200 <constraint firstItem="kdD-rj-BtX" firstAttribute="top" secondItem="lnt-4H-Ao8" secondAttribute="bottom" constant="8" id="BCi-jo-C0A"/>
190 <constraint firstAttribute="trailing" secondItem="LPY-Zl-cOp" secondAttribute="trailing" constant="10" id="CX3-BL-hNh"/> 201 <constraint firstAttribute="trailing" secondItem="LPY-Zl-cOp" secondAttribute="trailing" constant="10" id="CX3-BL-hNh"/>
191 <constraint firstItem="vRa-cr-YTe" firstAttribute="leading" secondItem="J2A-tf-wH0" secondAttribute="trailing" constant="10" id="Cax-pu-Kp7"/> 202 <constraint firstItem="vRa-cr-YTe" firstAttribute="leading" secondItem="J2A-tf-wH0" secondAttribute="trailing" constant="10" id="Cax-pu-Kp7"/>
192 <constraint firstItem="3Xj-IB-96h" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="E8R-qO-PtJ"/> 203 <constraint firstItem="3Xj-IB-96h" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="E8R-qO-PtJ"/>
204 <constraint firstItem="kdD-rj-BtX" firstAttribute="leading" secondItem="BoP-c1-c0q" secondAttribute="trailing" constant="8" id="EE0-bp-sbO"/>
193 <constraint firstItem="b6V-Bi-4oz" firstAttribute="centerX" secondItem="vRa-cr-YTe" secondAttribute="centerX" id="EEt-Ct-vxb"/> 205 <constraint firstItem="b6V-Bi-4oz" firstAttribute="centerX" secondItem="vRa-cr-YTe" secondAttribute="centerX" id="EEt-Ct-vxb"/>
194 <constraint firstItem="u3S-9u-GMZ" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" placeholder="YES" id="GbN-me-UEd"/> 206 <constraint firstItem="u3S-9u-GMZ" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" placeholder="YES" id="GbN-me-UEd"/>
195 <constraint firstItem="b6V-Bi-4oz" firstAttribute="centerY" secondItem="vRa-cr-YTe" secondAttribute="centerY" id="HXS-oH-EPB"/> 207 <constraint firstItem="b6V-Bi-4oz" firstAttribute="centerY" secondItem="vRa-cr-YTe" secondAttribute="centerY" id="HXS-oH-EPB"/>
196 <constraint firstItem="vRa-cr-YTe" firstAttribute="centerY" secondItem="J2A-tf-wH0" secondAttribute="centerY" id="IDF-HZ-fqt"/> 208 <constraint firstItem="vRa-cr-YTe" firstAttribute="centerY" secondItem="J2A-tf-wH0" secondAttribute="centerY" id="IDF-HZ-fqt"/>
197 <constraint firstAttribute="trailing" secondItem="lnt-4H-Ao8" secondAttribute="trailing" constant="8" id="IEA-1V-AZx"/> 209 <constraint firstAttribute="trailing" secondItem="lnt-4H-Ao8" secondAttribute="trailing" constant="8" id="IEA-1V-AZx"/>
198 <constraint firstItem="ibb-Yl-iqu" firstAttribute="top" secondItem="VAz-hq-dvR" secondAttribute="bottom" constant="20" id="Ib2-KY-3A7"/> 210 <constraint firstItem="ibb-Yl-iqu" firstAttribute="top" secondItem="VAz-hq-dvR" secondAttribute="bottom" constant="20" id="Ib2-KY-3A7"/>
199 <constraint firstAttribute="bottom" secondItem="ibb-Yl-iqu" secondAttribute="bottom" constant="64" id="Iv8-Al-1Ff"/> 211 <constraint firstAttribute="bottom" secondItem="ibb-Yl-iqu" secondAttribute="bottom" constant="64" id="Iv8-Al-1Ff"/>
200 <constraint firstItem="BoP-c1-c0q" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="20" id="OVd-PH-Yxx"/> 212 <constraint firstItem="BoP-c1-c0q" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="20" id="OVd-PH-Yxx"/>
201 <constraint firstItem="DuE-Dh-nEe" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="Rum-yc-3Ym"/> 213 <constraint firstItem="DuE-Dh-nEe" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="Rum-yc-3Ym"/>
202 <constraint firstItem="Low-8n-pqa" firstAttribute="centerY" secondItem="J2A-tf-wH0" secondAttribute="centerY" id="W7b-Hb-9ME"/> 214 <constraint firstItem="Low-8n-pqa" firstAttribute="centerY" secondItem="J2A-tf-wH0" secondAttribute="centerY" id="W7b-Hb-9ME"/>
203 <constraint firstItem="IaR-IO-4RA" firstAttribute="centerY" secondItem="J2A-tf-wH0" secondAttribute="centerY" id="b4I-Me-4xZ"/> 215 <constraint firstItem="IaR-IO-4RA" firstAttribute="centerY" secondItem="J2A-tf-wH0" secondAttribute="centerY" id="b4I-Me-4xZ"/>
204 <constraint firstItem="BoP-c1-c0q" firstAttribute="top" secondItem="lnt-4H-Ao8" secondAttribute="bottom" constant="8" id="bAt-3o-b1H"/> 216 <constraint firstItem="BoP-c1-c0q" firstAttribute="top" secondItem="lnt-4H-Ao8" secondAttribute="bottom" constant="8" id="bAt-3o-b1H"/>
205 <constraint firstItem="wfu-aB-xXm" firstAttribute="top" secondItem="IaR-IO-4RA" secondAttribute="bottom" constant="40" id="bH1-l5-YRA"/> 217 <constraint firstItem="wfu-aB-xXm" firstAttribute="top" secondItem="IaR-IO-4RA" secondAttribute="bottom" constant="40" id="bH1-l5-YRA"/>
206 <constraint firstItem="lnt-4H-Ao8" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="ea3-Dx-s4s"/> 218 <constraint firstItem="lnt-4H-Ao8" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="ea3-Dx-s4s"/>
207 <constraint firstItem="at8-co-gC4" firstAttribute="centerX" secondItem="Low-8n-pqa" secondAttribute="centerX" id="h5o-Cj-Z7s"/> 219 <constraint firstItem="at8-co-gC4" firstAttribute="centerX" secondItem="Low-8n-pqa" secondAttribute="centerX" id="h5o-Cj-Z7s"/>
208 <constraint firstAttribute="trailing" secondItem="DuE-Dh-nEe" secondAttribute="trailing" constant="8" id="iyi-TY-Wfe"/> 220 <constraint firstAttribute="trailing" secondItem="DuE-Dh-nEe" secondAttribute="trailing" constant="8" id="iyi-TY-Wfe"/>
209 <constraint firstItem="LPY-Zl-cOp" firstAttribute="centerY" secondItem="u3S-9u-GMZ" secondAttribute="centerY" id="jBf-Ck-YYj"/> 221 <constraint firstItem="LPY-Zl-cOp" firstAttribute="centerY" secondItem="u3S-9u-GMZ" secondAttribute="centerY" id="jBf-Ck-YYj"/>
210 <constraint firstItem="TUf-Tp-93t" firstAttribute="centerY" secondItem="wfu-aB-xXm" secondAttribute="centerY" constant="-5" id="k3n-lY-8K1"/> 222 <constraint firstItem="TUf-Tp-93t" firstAttribute="centerY" secondItem="wfu-aB-xXm" secondAttribute="centerY" constant="-5" id="k3n-lY-8K1"/>
211 <constraint firstItem="J2A-tf-wH0" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="mVQ-bZ-JBW"/> 223 <constraint firstItem="J2A-tf-wH0" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="8" id="mVQ-bZ-JBW"/>
212 <constraint firstAttribute="trailing" secondItem="wfu-aB-xXm" secondAttribute="trailing" constant="20" id="mtA-2Q-ssH"/> 224 <constraint firstAttribute="trailing" secondItem="wfu-aB-xXm" secondAttribute="trailing" constant="20" id="mtA-2Q-ssH"/>
213 <constraint firstItem="ibb-Yl-iqu" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="nOT-Ic-JU1"/> 225 <constraint firstItem="ibb-Yl-iqu" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="nOT-Ic-JU1"/>
214 <constraint firstItem="J2A-tf-wH0" firstAttribute="top" secondItem="u3S-9u-GMZ" secondAttribute="bottom" constant="10" id="nu9-Lj-5xz"/> 226 <constraint firstItem="J2A-tf-wH0" firstAttribute="top" secondItem="u3S-9u-GMZ" secondAttribute="bottom" constant="10" id="nu9-Lj-5xz"/>
215 <constraint firstAttribute="trailing" secondItem="3Xj-IB-96h" secondAttribute="trailing" constant="8" id="pF6-db-UUi"/> 227 <constraint firstAttribute="trailing" secondItem="3Xj-IB-96h" secondAttribute="trailing" constant="8" id="pF6-db-UUi"/>
216 <constraint firstItem="3Xj-IB-96h" firstAttribute="top" secondItem="wfu-aB-xXm" secondAttribute="bottom" constant="8" id="psY-0r-fPJ"/> 228 <constraint firstItem="3Xj-IB-96h" firstAttribute="top" secondItem="wfu-aB-xXm" secondAttribute="bottom" constant="8" id="psY-0r-fPJ"/>
217 <constraint firstItem="TUf-Tp-93t" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="20" id="sC4-Kr-3bN"/> 229 <constraint firstItem="TUf-Tp-93t" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="20" id="sC4-Kr-3bN"/>
218 <constraint firstItem="at8-co-gC4" firstAttribute="centerY" secondItem="Low-8n-pqa" secondAttribute="centerY" id="tav-ge-tCT"/> 230 <constraint firstItem="at8-co-gC4" firstAttribute="centerY" secondItem="Low-8n-pqa" secondAttribute="centerY" id="tav-ge-tCT"/>
231 <constraint firstItem="VAz-hq-dvR" firstAttribute="top" secondItem="kdD-rj-BtX" secondAttribute="bottom" constant="8" id="ujL-1z-cUf"/>
219 <constraint firstItem="lnt-4H-Ao8" firstAttribute="top" secondItem="DuE-Dh-nEe" secondAttribute="bottom" constant="20" id="w4w-Z4-Jzk"/> 232 <constraint firstItem="lnt-4H-Ao8" firstAttribute="top" secondItem="DuE-Dh-nEe" secondAttribute="bottom" constant="20" id="w4w-Z4-Jzk"/>
220 <constraint firstItem="wfu-aB-xXm" firstAttribute="leading" secondItem="TUf-Tp-93t" secondAttribute="trailing" constant="10" id="x51-DA-4Le"/> 233 <constraint firstItem="wfu-aB-xXm" firstAttribute="leading" secondItem="TUf-Tp-93t" secondAttribute="trailing" constant="10" id="x51-DA-4Le"/>
221 <constraint firstItem="VAz-hq-dvR" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="xE7-ro-k8m"/> 234 <constraint firstItem="VAz-hq-dvR" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="xE7-ro-k8m"/>
222 <constraint firstItem="Low-8n-pqa" firstAttribute="leading" secondItem="IaR-IO-4RA" secondAttribute="trailing" constant="8" id="y6e-6A-hjn"/> 235 <constraint firstItem="Low-8n-pqa" firstAttribute="leading" secondItem="IaR-IO-4RA" secondAttribute="trailing" constant="8" id="y6e-6A-hjn"/>
223 </constraints> 236 </constraints>
224 <point key="canvasLocation" x="33.5" y="97.5"/> 237 <point key="canvasLocation" x="33.5" y="97.5"/>
225 </view> 238 </view>
226 </objects> 239 </objects>
227 <resources> 240 <resources>
228 <image name="avatar_default" width="80" height="80"/> 241 <image name="avatar_default" width="80" height="80"/>
229 <image name="icon_left" width="30" height="30"/> 242 <image name="icon_left" width="30" height="30"/>
230 <image name="icon_menu" width="30" height="30"/> 243 <image name="icon_menu" width="30" height="30"/>
231 <image name="icon_other" width="150" height="134"/> 244 <image name="icon_other" width="150" height="134"/>
232 <image name="icon_right" width="30" height="30"/> 245 <image name="icon_right" width="30" height="30"/>
233 </resources> 246 </resources>
234 </document> 247 </document>
235 248
LifeLog/LifeLog/Info.plist
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 <plist version="1.0"> 3 <plist version="1.0">
4 <dict> 4 <dict>
5 <key>CFBundleDevelopmentRegion</key> 5 <key>CFBundleDevelopmentRegion</key>
6 <string>en</string> 6 <string>en</string>
7 <key>CFBundleDisplayName</key> 7 <key>CFBundleDisplayName</key>
8 <string>LIFE_LOG</string> 8 <string>LIFE_LOG</string>
9 <key>CFBundleExecutable</key> 9 <key>CFBundleExecutable</key>
10 <string>$(EXECUTABLE_NAME)</string> 10 <string>$(EXECUTABLE_NAME)</string>
11 <key>CFBundleIdentifier</key> 11 <key>CFBundleIdentifier</key>
12 <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> 12 <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
13 <key>CFBundleInfoDictionaryVersion</key> 13 <key>CFBundleInfoDictionaryVersion</key>
14 <string>6.0</string> 14 <string>6.0</string>
15 <key>CFBundleName</key> 15 <key>CFBundleName</key>
16 <string>$(PRODUCT_NAME)</string> 16 <string>$(PRODUCT_NAME)</string>
17 <key>CFBundlePackageType</key> 17 <key>CFBundlePackageType</key>
18 <string>APPL</string> 18 <string>APPL</string>
19 <key>CFBundleShortVersionString</key> 19 <key>CFBundleShortVersionString</key>
20 <string>1.0</string> 20 <string>1.0</string>
21 <key>CFBundleURLTypes</key> 21 <key>CFBundleURLTypes</key>
22 <array> 22 <array>
23 <dict/> 23 <dict/>
24 </array> 24 </array>
25 <key>CFBundleVersion</key> 25 <key>CFBundleVersion</key>
26 <string>2</string> 26 <string>4</string>
27 <key>LSApplicationQueriesSchemes</key> 27 <key>LSApplicationQueriesSchemes</key>
28 <array> 28 <array>
29 <string>line</string> 29 <string>line</string>
30 </array> 30 </array>
31 <key>LSRequiresIPhoneOS</key> 31 <key>LSRequiresIPhoneOS</key>
32 <true/> 32 <true/>
33 <key>NSAppTransportSecurity</key> 33 <key>NSAppTransportSecurity</key>
34 <dict> 34 <dict>
35 <key>NSAllowsArbitraryLoads</key> 35 <key>NSAllowsArbitraryLoads</key>
36 <true/> 36 <true/>
37 </dict> 37 </dict>
38 <key>NSCameraUsageDescription</key> 38 <key>NSCameraUsageDescription</key>
39 <string>to take photos and video</string> 39 <string>to take photos and video</string>
40 <key>NSLocationAlwaysUsageDescription</key> 40 <key>NSLocationAlwaysUsageDescription</key>
41 <string>This application requires location services to work</string> 41 <string>This application requires location services to work</string>
42 <key>NSLocationWhenInUseUsageDescription</key> 42 <key>NSLocationWhenInUseUsageDescription</key>
43 <string>This application requires location services to work</string> 43 <string>This application requires location services to work</string>
44 <key>NSMotionUsageDescription</key> 44 <key>NSMotionUsageDescription</key>
45 <string>$(PRODUCT_NAME) motion use</string> 45 <string>$(PRODUCT_NAME) motion use</string>
46 <key>NSPhotoLibraryUsageDescription</key> 46 <key>NSPhotoLibraryUsageDescription</key>
47 <string>to save photos and videos</string> 47 <string>to save photos and videos</string>
48 <key>UILaunchStoryboardName</key> 48 <key>UILaunchStoryboardName</key>
49 <string>LaunchScreen</string> 49 <string>LaunchScreen</string>
50 <key>UIRequiredDeviceCapabilities</key> 50 <key>UIRequiredDeviceCapabilities</key>
51 <array> 51 <array>
52 <string>armv7</string> 52 <string>armv7</string>
53 </array> 53 </array>
54 <key>UIStatusBarHidden</key> 54 <key>UIStatusBarHidden</key>
55 <true/> 55 <true/>
56 <key>UISupportedInterfaceOrientations</key> 56 <key>UISupportedInterfaceOrientations</key>
57 <array> 57 <array>
58 <string>UIInterfaceOrientationPortrait</string> 58 <string>UIInterfaceOrientationPortrait</string>
59 </array> 59 </array>
60 <key>UISupportedInterfaceOrientations~ipad</key> 60 <key>UISupportedInterfaceOrientations~ipad</key>
61 <array> 61 <array>
62 <string>UIInterfaceOrientationPortrait</string> 62 <string>UIInterfaceOrientationPortrait</string>
63 <string>UIInterfaceOrientationPortraitUpsideDown</string> 63 <string>UIInterfaceOrientationPortraitUpsideDown</string>
64 <string>UIInterfaceOrientationLandscapeLeft</string> 64 <string>UIInterfaceOrientationLandscapeLeft</string>
65 <string>UIInterfaceOrientationLandscapeRight</string> 65 <string>UIInterfaceOrientationLandscapeRight</string>
66 </array> 66 </array>
67 <key>UIViewControllerBasedStatusBarAppearance</key> 67 <key>UIViewControllerBasedStatusBarAppearance</key>
68 <false/> 68 <false/>
69 </dict> 69 </dict>
70 </plist> 70 </plist>
71 71
LifeLog/LifeLog/NoticeInfor.h
File was created 1 //
2 // NoticeInfor.h
3 // LifeLog
4 //
5 // Created by Nguyen Van Phong on 10/23/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10
11 @interface NoticeInfor : NSObject
12 @property (nonatomic, strong) NSString *notice_id;
13 @property (nonatomic, strong) NSString *notice_content;
14 -(id) initWithData : (NSDictionary *) dict;
15 @end
16
LifeLog/LifeLog/NoticeInfor.m
File was created 1 //
2 // NoticeInfor.m
3 // LifeLog
4 //
5 // Created by Nguyen Van Phong on 10/23/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 //
8
9 #import "NoticeInfor.h"
10
11 @implementation NoticeInfor
12 -(id) initWithData : (NSDictionary *) dict {
13 if([dict objectForKey:@"id"] != nil) {
14 self.notice_id = dict[@"id"];
15 }
16 if([dict objectForKey:@"notice_content"] != nil) {
17 self.notice_content = dict[@"notice_content"];
18 }
19 return self;
20 }
21 @end
22
LifeLog/LifeLog/ServerAPI.h
1 // 1 //
2 // ServerAPI.h 2 // ServerAPI.h
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/30/17. 5 // Created by Nguyen Van Phong on 7/30/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved. 6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import <Foundation/Foundation.h> 9 #import <Foundation/Foundation.h>
10 #import "Entities.h" 10 #import "Entities.h"
11 11
12 extern NSString *const kServerAddress; 12 extern NSString *const kServerAddress;
13 extern NSString *const kUser; 13 extern NSString *const kUser;
14 extern NSString *const kToken; 14 extern NSString *const kToken;
15 extern NSString *const kNotificationToken; 15 extern NSString *const kNotificationToken;
16 16
17 @interface ServerAPI : NSObject 17 @interface ServerAPI : NSObject
18 + (instancetype) server; 18 + (instancetype) server;
19 @property (nonatomic, assign) NSTimeInterval timeOutInterval; 19 @property (nonatomic, assign) NSTimeInterval timeOutInterval;
20 20
21 #pragma mark - Login and Register 21 #pragma mark - Login and Register
22 - (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion; 22 - (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion;
23 - (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion; 23 - (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion;
24 - (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion; 24 - (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion;
25 - (void)forgetPass:(NSString *)email CompletionHandler:(void (^)(NSError *)) completion; 25 - (void)forgetPass:(NSString *)email CompletionHandler:(void (^)(NSError *)) completion;
26 - (void)confirmForgetPass:(NSString *)email withConfirm:(NSString *)confirm CompletionHandler:(void (^)(NSError *)) completion; 26 - (void)confirmForgetPass:(NSString *)email withConfirm:(NSString *)confirm CompletionHandler:(void (^)(NSError *)) completion;
27 27
28 #pragma mark - Home Screen Function 28 #pragma mark - Home Screen Function
29 - (void)requestTopWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(TopObject *, NSError *)) completion; 29 - (void)requestTopWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(TopObject *, NSError *)) completion;
30 - (void)requestCreateLog:(int)mode withStep:(int)numStep startDate:(NSString *)startDate endDate:(NSString *)endDate CompletionHandler:(void (^)(NSError *))completion; 30 - (void)requestCreateLog:(int)mode withStep:(int)numStep startDate:(NSString *)startDate endDate:(NSString *)endDate CompletionHandler:(void (^)(NSError *))completion;
31 - (void)requestHomeWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(HomeObject *, NSError *)) completion;
31 32
32 #pragma mark - History Screen Function 33 #pragma mark - History Screen Function
33 - (void) requestHistory:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 34 - (void) requestHistory:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
34 - (void) requestHistoryList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 35 - (void) requestHistoryList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
35 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion; 36 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion;
36 -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion; 37 -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion;
37 - (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 38 - (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
38 39
39 #pragma mark - SNS Screen Function 40 #pragma mark - SNS Screen Function
40 /* 41 /*
41 Get tweet of group and get recent tweet is same API 42 Get tweet of group and get recent tweet is same API
42 If groupID equal -1, it will request recent tweet. Otherwise will request tweet of group 43 If groupID equal -1, it will request recent tweet. Otherwise will request tweet of group
43 */ 44 */
44 - (void) requestTweetsList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 45 - (void) requestTweetsList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
45 - (void) searchGroup:(NSString *)token withKey:(NSString *)key andPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 46 - (void) searchGroup:(NSString *)token withKey:(NSString *)key andPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
46 47
47 #pragma mark - Group Function 48 #pragma mark - Group Function
48 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion; 49 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion;
49 - (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 50 - (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
50 51
51 #pragma mark - Ranking API 52 #pragma mark - Ranking API
52 - (void) requestRankingList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate mode:(int) mode page:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion; 53 - (void) requestRankingList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate mode:(int) mode page:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
53 54
54 #pragma mark - Common API 55 #pragma mark - Common API
55 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion; 56 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion;
56 @end 57 @end
57 58
LifeLog/LifeLog/ServerAPI.m
1 // 1 //
2 // ServerAPI.m 2 // ServerAPI.m
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/30/17. 5 // Created by Nguyen Van Phong on 7/30/17.
6 // Copyright ยฉ 2017 PhongNV. All rights reserved. 6 // Copyright ยฉ 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import "ServerAPI.h" 9 #import "ServerAPI.h"
10 #import "Utilities.h" 10 #import "Utilities.h"
11 11
12 NSString *const kServerAddress = @"http://clover.timesfun.jp:9001/"; 12 NSString *const kServerAddress = @"http://clover.timesfun.jp:9001/";
13 NSString *const kUser = @"KEY_USER"; 13 NSString *const kUser = @"KEY_USER";
14 NSString *const kToken = @"KEY_TOKEN"; 14 NSString *const kToken = @"KEY_TOKEN";
15 NSString *const kNotificationToken = @"TOKEN_INVALID"; 15 NSString *const kNotificationToken = @"TOKEN_INVALID";
16 16
17 @implementation NSString (NSString_Extended) 17 @implementation NSString (NSString_Extended)
18 - (NSString *)urlencode { 18 - (NSString *)urlencode {
19 NSMutableString *output = [NSMutableString string]; 19 NSMutableString *output = [NSMutableString string];
20 const unsigned char *source = (const unsigned char *)[self UTF8String]; 20 const unsigned char *source = (const unsigned char *)[self UTF8String];
21 int sourceLen = (int)strlen((const char *)source); 21 int sourceLen = (int)strlen((const char *)source);
22 for (int i = 0; i < sourceLen; ++i) { 22 for (int i = 0; i < sourceLen; ++i) {
23 const unsigned char thisChar = source[i]; 23 const unsigned char thisChar = source[i];
24 if (thisChar == ' '){ 24 if (thisChar == ' '){
25 [output appendString:@"+"]; 25 [output appendString:@"+"];
26 } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || 26 } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
27 (thisChar >= 'a' && thisChar <= 'z') || 27 (thisChar >= 'a' && thisChar <= 'z') ||
28 (thisChar >= 'A' && thisChar <= 'Z') || 28 (thisChar >= 'A' && thisChar <= 'Z') ||
29 (thisChar >= '0' && thisChar <= '9')) { 29 (thisChar >= '0' && thisChar <= '9')) {
30 [output appendFormat:@"%c", thisChar]; 30 [output appendFormat:@"%c", thisChar];
31 } else { 31 } else {
32 [output appendFormat:@"%%%02X", thisChar]; 32 [output appendFormat:@"%%%02X", thisChar];
33 } 33 }
34 } 34 }
35 return output; 35 return output;
36 } 36 }
37 @end 37 @end
38 38
39 @implementation ServerAPI 39 @implementation ServerAPI
40 static ServerAPI *_server = nil; 40 static ServerAPI *_server = nil;
41 41
42 NSURLSessionDataTask * searchTask; 42 NSURLSessionDataTask * searchTask;
43 43
44 @synthesize timeOutInterval = _timeOutInterval; 44 @synthesize timeOutInterval = _timeOutInterval;
45 45
46 + (instancetype)server 46 + (instancetype)server
47 { 47 {
48 @synchronized(self) { 48 @synchronized(self) {
49 if (_server == nil) { 49 if (_server == nil) {
50 _server = [[ServerAPI alloc] init]; 50 _server = [[ServerAPI alloc] init];
51 } 51 }
52 } 52 }
53 return _server; 53 return _server;
54 } 54 }
55 55
56 - (instancetype)init 56 - (instancetype)init
57 { 57 {
58 self = [super init]; 58 self = [super init];
59 if (self != nil) { 59 if (self != nil) {
60 self.timeOutInterval = 60; 60 self.timeOutInterval = 60;
61 } 61 }
62 return self; 62 return self;
63 } 63 }
64 64
65 #pragma mark - Login and Register 65 #pragma mark - Login and Register
66 // Login 66 // Login
67 - (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion 67 - (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion
68 { 68 {
69 [self _request:[kServerAddress stringByAppendingFormat: @"login"] method:@"POST" token:@"" paras:@{@"email":email, @"password": password} completion:^(NSData *data, NSError *error) { 69 [self _request:[kServerAddress stringByAppendingFormat: @"login"] method:@"POST" token:@"" paras:@{@"email":email, @"password": password} completion:^(NSData *data, NSError *error) {
70 70
71 if (completion == NULL) { 71 if (completion == NULL) {
72 return ; 72 return ;
73 } 73 }
74 74
75 if (error == nil) 75 if (error == nil)
76 { 76 {
77 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 77 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
78 78
79 int status = [dataResult[@"status"] intValue]; 79 int status = [dataResult[@"status"] intValue];
80 if (status == 1) { // status = 1 success 80 if (status == 1) { // status = 1 success
81 NSString *token = dataResult[@"result"][@"token"]; 81 NSString *token = dataResult[@"result"][@"token"];
82 NSDictionary *dictUser = dataResult[@"result"][@"user"]; 82 NSDictionary *dictUser = dataResult[@"result"][@"user"];
83 User *user = [[User alloc] init]; 83 User *user = [[User alloc] init];
84 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]]; 84 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]];
85 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]]; 85 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]];
86 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]]; 86 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]];
87 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]]; 87 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]];
88 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]]; 88 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]];
89 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]]; 89 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]];
90 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]]; 90 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]];
91 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]]; 91 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]];
92 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue]; 92 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue];
93 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue]; 93 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue];
94 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue]; 94 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue];
95 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]]; 95 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]];
96 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]]; 96 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]];
97 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]]; 97 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]];
98 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]]; 98 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]];
99 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]]; 99 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]];
100 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue]; 100 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue];
101 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue]; 101 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue];
102 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue]; 102 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue];
103 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue]; 103 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue];
104 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue]; 104 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue];
105 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue]; 105 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue];
106 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue]; 106 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue];
107 completion(user, token, nil); 107 completion(user, token, nil);
108 } 108 }
109 else { // status = 0 error 109 else { // status = 0 error
110 NSString *message = dataResult[@"message"]; 110 NSString *message = dataResult[@"message"];
111 if (message == nil) { 111 if (message == nil) {
112 message = @"Unknown error"; 112 message = @"Unknown error";
113 } 113 }
114 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 114 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
115 completion(nil, nil, loginFaild); 115 completion(nil, nil, loginFaild);
116 } 116 }
117 } 117 }
118 else 118 else
119 { 119 {
120 completion(nil, nil, error); 120 completion(nil, nil, error);
121 } 121 }
122 }]; 122 }];
123 } 123 }
124 124
125 // Register 125 // Register
126 - (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion { 126 - (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion {
127 [self _request:[kServerAddress stringByAppendingFormat: @"register"] method:@"POST" token:@"" paras:params completion:^(NSData *data, NSError *error) { 127 [self _request:[kServerAddress stringByAppendingFormat: @"register"] method:@"POST" token:@"" paras:params completion:^(NSData *data, NSError *error) {
128 128
129 if (completion == NULL) { 129 if (completion == NULL) {
130 return ; 130 return ;
131 } 131 }
132 132
133 if (error == nil) 133 if (error == nil)
134 { 134 {
135 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 135 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
136 136
137 int status = [dataResult[@"status"] intValue]; 137 int status = [dataResult[@"status"] intValue];
138 if (status == 1) { // status = 1 success 138 if (status == 1) { // status = 1 success
139 NSString *token = dataResult[@"result"][@"token"]; 139 NSString *token = dataResult[@"result"][@"token"];
140 NSDictionary *dictUser = dataResult[@"result"][@"user"]; 140 NSDictionary *dictUser = dataResult[@"result"][@"user"];
141 User *user = [[User alloc] init]; 141 User *user = [[User alloc] init];
142 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]]; 142 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]];
143 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]]; 143 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]];
144 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]]; 144 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]];
145 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]]; 145 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]];
146 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]]; 146 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]];
147 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]]; 147 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]];
148 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]]; 148 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]];
149 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]]; 149 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]];
150 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue]; 150 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue];
151 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue]; 151 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue];
152 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue]; 152 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue];
153 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]]; 153 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]];
154 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]]; 154 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]];
155 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]]; 155 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]];
156 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]]; 156 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]];
157 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]]; 157 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]];
158 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue]; 158 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue];
159 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue]; 159 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue];
160 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue]; 160 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue];
161 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue]; 161 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue];
162 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue]; 162 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue];
163 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue]; 163 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue];
164 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue]; 164 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue];
165 completion(user, token, nil); 165 completion(user, token, nil);
166 } 166 }
167 else { // status = 0 error 167 else { // status = 0 error
168 NSString *message = dataResult[@"message"]; 168 NSString *message = dataResult[@"message"];
169 if (message == nil) { 169 if (message == nil) {
170 message = @"Unknown error"; 170 message = @"Unknown error";
171 } 171 }
172 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 172 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
173 completion(nil, nil, loginFaild); 173 completion(nil, nil, loginFaild);
174 } 174 }
175 } 175 }
176 else 176 else
177 { 177 {
178 completion(nil, nil, error); 178 completion(nil, nil, error);
179 } 179 }
180 }]; 180 }];
181 } 181 }
182 182
183 - (void)forgetPass:(NSString *)email CompletionHandler:(void (^)(NSError *)) completion { 183 - (void)forgetPass:(NSString *)email CompletionHandler:(void (^)(NSError *)) completion {
184 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass"] method:@"POST" token:@"" paras:@{@"email":email} completion:^(NSData *data, NSError *error) { 184 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass"] method:@"POST" token:@"" paras:@{@"email":email} completion:^(NSData *data, NSError *error) {
185 185
186 if (completion == NULL) { 186 if (completion == NULL) {
187 return ; 187 return ;
188 } 188 }
189 189
190 if (error == nil) 190 if (error == nil)
191 { 191 {
192 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 192 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
193 193
194 int status = [dataResult[@"status"] intValue]; 194 int status = [dataResult[@"status"] intValue];
195 if (status == 1) { // status = 1 success 195 if (status == 1) { // status = 1 success
196 completion(nil); 196 completion(nil);
197 } 197 }
198 else { // status = 0 error 198 else { // status = 0 error
199 NSString *message = dataResult[@"message"]; 199 NSString *message = dataResult[@"message"];
200 if (message == nil) { 200 if (message == nil) {
201 message = @"Unknown error"; 201 message = @"Unknown error";
202 } 202 }
203 NSError *forgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 203 NSError *forgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
204 completion(forgetPass); 204 completion(forgetPass);
205 } 205 }
206 } 206 }
207 else 207 else
208 { 208 {
209 completion(error); 209 completion(error);
210 } 210 }
211 }]; 211 }];
212 } 212 }
213 - (void)confirmForgetPass:(NSString *)email withConfirm:(NSString *)confirm CompletionHandler:(void (^)(NSError *)) completion { 213 - (void)confirmForgetPass:(NSString *)email withConfirm:(NSString *)confirm CompletionHandler:(void (^)(NSError *)) completion {
214 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass/confirm"] method:@"POST" token:@"" paras:@{@"email":email, @"code_confirm": confirm} completion:^(NSData *data, NSError *error) { 214 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass/confirm"] method:@"POST" token:@"" paras:@{@"email":email, @"code_confirm": confirm} completion:^(NSData *data, NSError *error) {
215 215
216 if (completion == NULL) { 216 if (completion == NULL) {
217 return ; 217 return ;
218 } 218 }
219 219
220 if (error == nil) 220 if (error == nil)
221 { 221 {
222 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 222 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
223 223
224 int status = [dataResult[@"status"] intValue]; 224 int status = [dataResult[@"status"] intValue];
225 if (status == 1) { // status = 1 success 225 if (status == 1) { // status = 1 success
226 completion(nil); 226 completion(nil);
227 } 227 }
228 else { // status = 0 error 228 else { // status = 0 error
229 NSString *message = dataResult[@"message"]; 229 NSString *message = dataResult[@"message"];
230 NSError *confirmForgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 230 NSError *confirmForgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
231 completion(confirmForgetPass); 231 completion(confirmForgetPass);
232 } 232 }
233 } 233 }
234 else 234 else
235 { 235 {
236 completion(error); 236 completion(error);
237 } 237 }
238 }]; 238 }];
239 } 239 }
240 240
241 - (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion { 241 - (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion {
242 NSDictionary *dict = nil; 242 NSDictionary *dict = nil;
243 NSString *base64Encoded = [data base64EncodedStringWithOptions:0]; 243 NSString *base64Encoded = [data base64EncodedStringWithOptions:0];
244 if (token != nil) { 244 if (token != nil) {
245 dict = @{@"token":token, @"img": base64Encoded}; 245 dict = @{@"token":token, @"img": base64Encoded};
246 } 246 }
247 else { 247 else {
248 dict = @{@"img": base64Encoded}; 248 dict = @{@"img": base64Encoded};
249 } 249 }
250 [self _request:[kServerAddress stringByAppendingFormat: @"upload-image"] method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) { 250 [self _request:[kServerAddress stringByAppendingFormat: @"upload-image"] method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
251 251
252 if (completion == NULL) { 252 if (completion == NULL) {
253 return ; 253 return ;
254 } 254 }
255 255
256 if (error == nil) 256 if (error == nil)
257 { 257 {
258 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 258 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
259 NSString *image_profile = [NSString stringWithFormat:@"%@", dataResult[@"message"]]; 259 NSString *image_profile = [NSString stringWithFormat:@"%@", dataResult[@"message"]];
260 completion(image_profile, nil); 260 completion(image_profile, nil);
261 } 261 }
262 else 262 else
263 { 263 {
264 completion(nil, error); 264 completion(nil, error);
265 } 265 }
266 }]; 266 }];
267 } 267 }
268 268
269 -(NSString *) convertIntToString : (int) type { 269 -(NSString *) convertIntToString : (int) type {
270 switch (type) { 270 switch (type) {
271 case 1: 271 case 1:
272 return @"week"; 272 return @"week";
273 break; 273 break;
274 case 2: 274 case 2:
275 return @"oneMonth"; 275 return @"oneMonth";
276 break; 276 break;
277 case 3: 277 case 3:
278 return @"threeMonth"; 278 return @"threeMonth";
279 break; 279 break;
280 case 4: 280 case 4:
281 return @"sixMonth"; 281 return @"sixMonth";
282 break; 282 break;
283 default: 283 default:
284 return @"today"; 284 return @"today";
285 break; 285 break;
286 } 286 }
287 } 287 }
288 288
289 #pragma mark - Home Screen Function 289 #pragma mark - Home Screen Function
290 - (void)requestTopWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(TopObject *, NSError *)) completion 290 - (void)requestTopWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(TopObject *, NSError *)) completion
291 { 291 {
292 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 292 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
293 NSString *url = [kServerAddress stringByAppendingFormat:@"api/top/%d/%@", mode, date]; 293 NSString *url = [kServerAddress stringByAppendingFormat:@"api/top/%d/%@", mode, date];
294 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 294 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
295 295
296 if (completion == NULL) { 296 if (completion == NULL) {
297 return ; 297 return ;
298 } 298 }
299 299
300 if (error == nil) 300 if (error == nil)
301 { 301 {
302 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 302 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
303 int status = [dataResult[@"status"] intValue]; 303 int status = [dataResult[@"status"] intValue];
304 if (status == 1) { // status = 1 success 304 if (status == 1) { // status = 1 success
305 if(dataResult[@"result"] != nil) { 305 if(dataResult[@"result"] != nil) {
306 NSDictionary * dictResult = dataResult[@"result"]; 306 NSDictionary * dictResult = dataResult[@"result"];
307 TopObject *topObject = [[TopObject alloc] init]; 307 TopObject *topObject = [[TopObject alloc] init];
308 TargetInfor *targetInfor = [[TargetInfor alloc] initWithData:dictResult[@"targetInf"]]; 308 TargetInfor *targetInfor = [[TargetInfor alloc] initWithData:dictResult[@"targetInf"]];
309 topObject.targetInfor = targetInfor; 309 topObject.targetInfor = targetInfor;
310 topObject.kcal = [[NSString stringWithFormat:@"%@", dictResult[@"kcal"]] intValue]; 310 topObject.kcal = [[NSString stringWithFormat:@"%@", dictResult[@"kcal"]] intValue];
311 topObject.distance = [[NSString stringWithFormat:@"%@", dictResult[@"distance"]] floatValue]; 311 topObject.distance = [[NSString stringWithFormat:@"%@", dictResult[@"distance"]] floatValue];
312 topObject.time = [NSString stringWithFormat:@"%@", dictResult[@"time"]]; 312 topObject.time = [NSString stringWithFormat:@"%@", dictResult[@"time"]];
313 NSMutableArray *arrayStep = [[NSMutableArray alloc] init]; 313 NSMutableArray *arrayStep = [[NSMutableArray alloc] init];
314 NSArray *array = dictResult[@"dataChart"]; 314 NSArray *array = dictResult[@"dataChart"];
315 for(NSDictionary *dict in array) { 315 for(NSDictionary *dict in array) {
316 StepObject *object = [[StepObject alloc] init]; 316 StepObject *object = [[StepObject alloc] init];
317 if([dict objectForKey:@"numStep"] != nil) { 317 if([dict objectForKey:@"numStep"] != nil) {
318 object.step = [dict[@"numStep"] intValue]; 318 object.step = [dict[@"numStep"] intValue];
319 } 319 }
320 if([dict objectForKey:@"hour"] != nil) { 320 if([dict objectForKey:@"hour"] != nil) {
321 object.hour = [dict[@"hour"] intValue]; 321 object.hour = [dict[@"hour"] intValue];
322 } 322 }
323 switch (mode) { 323 switch (mode) {
324 case 1: 324 case 1:
325 object.typeStep = @"walking"; 325 object.typeStep = @"walking";
326 break; 326 break;
327 case 2: 327 case 2:
328 object.typeStep = @"running"; 328 object.typeStep = @"running";
329 break; 329 break;
330 case 3: 330 case 3:
331 object.typeStep = @"bike"; 331 object.typeStep = @"bike";
332 break; 332 break;
333 default: 333 default:
334 break; 334 break;
335 } 335 }
336 [arrayStep addObject:object]; 336 [arrayStep addObject:object];
337 } 337 }
338 topObject.dataChart = [[NSMutableArray alloc] initWithArray:arrayStep]; 338 topObject.dataChart = [[NSMutableArray alloc] initWithArray:arrayStep];
339 completion(topObject, nil); 339 completion(topObject, nil);
340 } 340 }
341 else { 341 else {
342 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 342 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
343 completion(nil, errorObject); 343 completion(nil, errorObject);
344 } 344 }
345 } 345 }
346 else { 346 else {
347 NSString *message = dataResult[@"message"]; 347 NSString *message = dataResult[@"message"];
348 if (message == nil) { 348 if (message == nil) {
349 message = @"Unknown error"; 349 message = @"Unknown error";
350 } 350 }
351 351
352 if ([message isEqualToString:@"Token is invalid"]) { 352 if ([message isEqualToString:@"Token is invalid"]) {
353 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 353 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
354 [self requestTopWithMode:mode andDate:date CompletionHandler:completion]; 354 [self requestTopWithMode:mode andDate:date CompletionHandler:completion];
355 } 355 }
356 else { 356 else {
357 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 357 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
358 completion(nil, errorObject); 358 completion(nil, errorObject);
359 } 359 }
360 } 360 }
361 } 361 }
362 else 362 else
363 { 363 {
364 completion(nil, error); 364 completion(nil, error);
365 } 365 }
366 }]; 366 }];
367 } 367 }
368 368
369 - (void)requestHomeWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(HomeObject *, NSError *)) completion
370 {
371 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
372 NSString *url = [kServerAddress stringByAppendingFormat:@"api/home/%d/%@", mode, date];
373 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
374
375 if (completion == NULL) {
376 return ;
377 }
378
379 if (error == nil)
380 {
381 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
382 int status = [dataResult[@"status"] intValue];
383 if (status == 1) { // status = 1 success
384 if(dataResult[@"result"] != nil) {
385 NSDictionary * dictResult = dataResult[@"result"];
386 HomeObject *homeObject = [[HomeObject alloc] init];
387 TargetInfor *targetInfor = [[TargetInfor alloc] initWithData:dictResult[@"targetInf"]];
388 homeObject.targetInfor = targetInfor;
389 NSMutableArray *arrayNotice = [[NSMutableArray alloc] init];
390 NSArray *array = dictResult[@"listNotice"];
391 for(NSDictionary *dict in array) {
392 NoticeInfor *object = [[NoticeInfor alloc] initWithData:dict];
393 [arrayNotice addObject:object];
394 }
395 homeObject.listNotice = [[NSMutableArray alloc] initWithArray:arrayNotice];
396 completion(homeObject, nil);
397 }
398 else {
399 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
400 completion(nil, errorObject);
401 }
402 }
403 else {
404 NSString *message = dataResult[@"message"];
405 if (message == nil) {
406 message = @"Unknown error";
407 }
408
409 if ([message isEqualToString:@"Token is invalid"]) {
410 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
411 [self requestHomeWithMode:mode andDate:date CompletionHandler:completion];
412 }
413 else {
414 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
415 completion(nil, errorObject);
416 }
417 }
418 }
419 else
420 {
421 completion(nil, error);
422 }
423 }];
424 }
425
369 - (void)requestCreateLog:(int)mode withStep:(int)numStep startDate:(NSString *)startDate endDate:(NSString *)endDate CompletionHandler:(void (^)(NSError *))completion { 426 - (void)requestCreateLog:(int)mode withStep:(int)numStep startDate:(NSString *)startDate endDate:(NSString *)endDate CompletionHandler:(void (^)(NSError *))completion {
370 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 427 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
371 NSString *url = [kServerAddress stringByAppendingFormat:@"api/createLog"]; 428 NSString *url = [kServerAddress stringByAppendingFormat:@"api/createLog"];
372 NSDictionary *dict = @{@"mode": [NSNumber numberWithInt:mode], @"numStep": [NSNumber numberWithInt:numStep], @"startTime": startDate, @"endTime": endDate}; 429 NSDictionary *dict = @{@"mode": [NSNumber numberWithInt:mode], @"numStep": [NSNumber numberWithInt:numStep], @"startTime": startDate, @"endTime": endDate};
373 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) { 430 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
374 431
375 if (completion == NULL) { 432 if (completion == NULL) {
376 return ; 433 return ;
377 } 434 }
378 435
379 if (error == nil) 436 if (error == nil)
380 { 437 {
381 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 438 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
382 int status = [dataResult[@"status"] intValue]; 439 int status = [dataResult[@"status"] intValue];
383 if (status == 1) { // status = 1 success 440 if (status == 1) { // status = 1 success
384 completion(nil); 441 completion(nil);
385 } 442 }
386 else { 443 else {
387 NSString *message = dataResult[@"message"]; 444 NSString *message = dataResult[@"message"];
388 if (message == nil) { 445 if (message == nil) {
389 message = @"Unknown error"; 446 message = @"Unknown error";
390 } 447 }
391 448
392 if ([message isEqualToString:@"Token is invalid"]) { 449 if ([message isEqualToString:@"Token is invalid"]) {
393 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 450 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
394 [self requestCreateLog:mode withStep:numStep startDate:startDate endDate:endDate CompletionHandler:completion]; 451 [self requestCreateLog:mode withStep:numStep startDate:startDate endDate:endDate CompletionHandler:completion];
395 } 452 }
396 else { 453 else {
397 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 454 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
398 completion(errorObject); 455 completion(errorObject);
399 } 456 }
400 } 457 }
401 } 458 }
402 else 459 else
403 { 460 {
404 completion(error); 461 completion(error);
405 } 462 }
406 }]; 463 }];
407 } 464 }
408 465
409 #pragma mark - History Screen Function 466 #pragma mark - History Screen Function
410 - (void) requestHistory:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 467 - (void) requestHistory:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
411 NSString *url = [kServerAddress stringByAppendingFormat:@"api/history/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]]; 468 NSString *url = [kServerAddress stringByAppendingFormat:@"api/history/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]];
412 NSLog(@"requestHistory link %@", url); 469 NSLog(@"requestHistory link %@", url);
413 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 470 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
414 471
415 if (completion == NULL) { 472 if (completion == NULL) {
416 return ; 473 return ;
417 } 474 }
418 475
419 if (error == nil) 476 if (error == nil)
420 { 477 {
421 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 478 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
422 NSLog(@"%@", dataResult); 479 NSLog(@"%@", dataResult);
423 int status = [dataResult[@"status"] intValue]; 480 int status = [dataResult[@"status"] intValue];
424 if (status == 1) { // status = 1 success 481 if (status == 1) { // status = 1 success
425 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init]; 482 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init];
426 NSDictionary * arrResult = dataResult[@"result"]; 483 NSDictionary * arrResult = dataResult[@"result"];
427 if(arrResult != nil) { 484 if(arrResult != nil) {
428 /* mode_1: Data for mode walking 485 /* mode_1: Data for mode walking
429 mode_2: Data for mode running 486 mode_2: Data for mode running
430 mode_3: Data for mode bike */ 487 mode_3: Data for mode bike */
431 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil]; 488 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil];
432 for(NSString * key in arrayKey) { 489 for(NSString * key in arrayKey) {
433 NSDictionary *mode = [arrResult objectForKey:key]; 490 NSDictionary *mode = [arrResult objectForKey:key];
434 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) { 491 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) {
435 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode]; 492 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode];
436 [arrayHistory addObject:objectMode]; 493 [arrayHistory addObject:objectMode];
437 } 494 }
438 else { 495 else {
439 [arrayHistory addObject:[[HistoryObject alloc] init]]; 496 [arrayHistory addObject:[[HistoryObject alloc] init]];
440 } 497 }
441 } 498 }
442 } 499 }
443 completion(arrayHistory, nil); 500 completion(arrayHistory, nil);
444 } 501 }
445 else { 502 else {
446 NSString *message = dataResult[@"message"]; 503 NSString *message = dataResult[@"message"];
447 if (message == nil) { 504 if (message == nil) {
448 message = @"Unknown error"; 505 message = @"Unknown error";
449 } 506 }
450 507
451 if ([message isEqualToString:@"Token is invalid"]) { 508 if ([message isEqualToString:@"Token is invalid"]) {
452 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 509 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
453 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 510 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
454 [self requestHistory:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion]; 511 [self requestHistory:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion];
455 } 512 }
456 else { 513 else {
457 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 514 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
458 completion(nil, errorObject); 515 completion(nil, errorObject);
459 } 516 }
460 } 517 }
461 } 518 }
462 else 519 else
463 { 520 {
464 completion(nil, error); 521 completion(nil, error);
465 } 522 }
466 }]; 523 }];
467 } 524 }
468 525
469 - (void) requestHistoryList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 526 - (void) requestHistoryList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
470 NSString *url = [kServerAddress stringByAppendingFormat:@"api/history/detail/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]]; 527 NSString *url = [kServerAddress stringByAppendingFormat:@"api/history/detail/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]];
471 NSLog(@"requestHistoryList link %@", url); 528 NSLog(@"requestHistoryList link %@", url);
472 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 529 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
473 530
474 if (completion == NULL) { 531 if (completion == NULL) {
475 return ; 532 return ;
476 } 533 }
477 534
478 if (error == nil) 535 if (error == nil)
479 { 536 {
480 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 537 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
481 NSLog(@"%@", dataResult); 538 NSLog(@"%@", dataResult);
482 int status = [dataResult[@"status"] intValue]; 539 int status = [dataResult[@"status"] intValue];
483 if (status == 1) { // status = 1 success 540 if (status == 1) { // status = 1 success
484 if(dataResult[@"result"] != nil) { 541 if(dataResult[@"result"] != nil) {
485 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init]; 542 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init];
486 NSDictionary * arrResult = dataResult[@"result"]; 543 NSDictionary * arrResult = dataResult[@"result"];
487 if(arrResult != nil) { 544 if(arrResult != nil) {
488 /* mode_1: Data for mode walking 545 /* mode_1: Data for mode walking
489 mode_2: Data for mode running 546 mode_2: Data for mode running
490 mode_3: Data for mode bike */ 547 mode_3: Data for mode bike */
491 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil]; 548 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil];
492 for(NSString * key in arrayKey) { 549 for(NSString * key in arrayKey) {
493 NSDictionary *mode = [arrResult objectForKey:key]; 550 NSDictionary *mode = [arrResult objectForKey:key];
494 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) { 551 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) {
495 NSMutableArray *array = [[NSMutableArray alloc] init]; 552 NSMutableArray *array = [[NSMutableArray alloc] init];
496 for(NSString *key in mode.allKeys) { 553 for(NSString *key in mode.allKeys) {
497 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode[key]]; 554 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode[key]];
498 objectMode.date = [Utilities dateFromString:key withFormat:@"yyyy-MM-dd"]; 555 objectMode.date = [Utilities dateFromString:key withFormat:@"yyyy-MM-dd"];
499 [array addObject:objectMode]; 556 [array addObject:objectMode];
500 } 557 }
501 [arrayHistory addObject:array]; 558 [arrayHistory addObject:array];
502 } 559 }
503 else { 560 else {
504 [arrayHistory addObject:[[NSArray alloc] init]]; 561 [arrayHistory addObject:[[NSArray alloc] init]];
505 } 562 }
506 } 563 }
507 } 564 }
508 completion(arrayHistory, nil); 565 completion(arrayHistory, nil);
509 } 566 }
510 else { 567 else {
511 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 568 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
512 completion(nil, errorObject); 569 completion(nil, errorObject);
513 } 570 }
514 } 571 }
515 else { 572 else {
516 NSString *message = dataResult[@"message"]; 573 NSString *message = dataResult[@"message"];
517 if (message == nil) { 574 if (message == nil) {
518 message = @"Unknown error"; 575 message = @"Unknown error";
519 } 576 }
520 577
521 if ([message isEqualToString:@"Token is invalid"]) { 578 if ([message isEqualToString:@"Token is invalid"]) {
522 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 579 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
523 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 580 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
524 [self requestHistoryList:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion]; 581 [self requestHistoryList:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion];
525 } 582 }
526 else { 583 else {
527 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 584 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
528 completion(nil, errorObject); 585 completion(nil, errorObject);
529 } 586 }
530 } 587 }
531 } 588 }
532 else 589 else
533 { 590 {
534 completion(nil, error); 591 completion(nil, error);
535 } 592 }
536 }]; 593 }];
537 } 594 }
538 595
539 #pragma mark - SNS Screen Function 596 #pragma mark - SNS Screen Function
540 - (void) requestTweetsList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 597 - (void) requestTweetsList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
541 NSString *url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?page=%d&record=10", page]; 598 NSString *url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?page=%d&record=10", page];
542 if(groupID > -1) { 599 if(groupID > -1) {
543 url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?group_id=%d&page=%d&record=10", groupID, page]; 600 url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?group_id=%d&page=%d&record=10", groupID, page];
544 } 601 }
545 NSLog(@"requestTweetsList link %@", url); 602 NSLog(@"requestTweetsList link %@", url);
546 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 603 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
547 604
548 if (completion == NULL) { 605 if (completion == NULL) {
549 return ; 606 return ;
550 } 607 }
551 608
552 if (error == nil) 609 if (error == nil)
553 { 610 {
554 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 611 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
555 NSLog(@"%@", dataResult); 612 NSLog(@"%@", dataResult);
556 int status = [dataResult[@"status"] intValue]; 613 int status = [dataResult[@"status"] intValue];
557 if (status == 1) { // status = 1 success 614 if (status == 1) { // status = 1 success
558 if(dataResult[@"result"] != nil) { 615 if(dataResult[@"result"] != nil) {
559 NSArray * array = dataResult[@"result"]; 616 NSArray * array = dataResult[@"result"];
560 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init]; 617 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
561 for(NSDictionary * dict in array) { 618 for(NSDictionary * dict in array) {
562 TweetObject * object = [[TweetObject alloc] initWithData:dict]; 619 TweetObject * object = [[TweetObject alloc] initWithData:dict];
563 [arrayTweets addObject:object]; 620 [arrayTweets addObject:object];
564 } 621 }
565 completion(arrayTweets, nil); 622 completion(arrayTweets, nil);
566 } 623 }
567 else { 624 else {
568 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 625 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
569 completion(nil, errorObject); 626 completion(nil, errorObject);
570 } 627 }
571 } 628 }
572 else { 629 else {
573 NSString *message = dataResult[@"message"]; 630 NSString *message = dataResult[@"message"];
574 if (message == nil) { 631 if (message == nil) {
575 message = @"Unknown error"; 632 message = @"Unknown error";
576 } 633 }
577 634
578 if ([message isEqualToString:@"Token is invalid"]) { 635 if ([message isEqualToString:@"Token is invalid"]) {
579 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 636 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
580 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 637 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
581 [self requestTweetsList:tokenNew groupID:groupID withPage:page CompletionHandler:completion]; 638 [self requestTweetsList:tokenNew groupID:groupID withPage:page CompletionHandler:completion];
582 } 639 }
583 else { 640 else {
584 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 641 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
585 completion(nil, errorObject); 642 completion(nil, errorObject);
586 } 643 }
587 } 644 }
588 } 645 }
589 else 646 else
590 { 647 {
591 completion(nil, error); 648 completion(nil, error);
592 } 649 }
593 }]; 650 }];
594 } 651 }
595 652
596 - (void) searchGroup:(NSString *)token withKey:(NSString *)key andPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 653 - (void) searchGroup:(NSString *)token withKey:(NSString *)key andPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
597 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/search"]; 654 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/search"];
598 NSLog(@"searchGroup link %@ page %d", url, page); 655 NSLog(@"searchGroup link %@ page %d", url, page);
599 if(searchTask != nil) { 656 if(searchTask != nil) {
600 [searchTask cancel]; 657 [searchTask cancel];
601 } 658 }
602 659
603 searchTask = [self _request:url method:@"POST" token:token paras:@{@"keyword":key, @"page": [NSNumber numberWithInt:page]} completion:^(NSData *data, NSError *error) { 660 searchTask = [self _request:url method:@"POST" token:token paras:@{@"keyword":key, @"page": [NSNumber numberWithInt:page]} completion:^(NSData *data, NSError *error) {
604 searchTask = nil; 661 searchTask = nil;
605 if (completion == NULL) { 662 if (completion == NULL) {
606 return ; 663 return ;
607 } 664 }
608 665
609 if (error == nil) 666 if (error == nil)
610 { 667 {
611 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 668 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
612 NSLog(@"%@", dataResult); 669 NSLog(@"%@", dataResult);
613 int status = [dataResult[@"status"] intValue]; 670 int status = [dataResult[@"status"] intValue];
614 if (status == 1) { // status = 1 success 671 if (status == 1) { // status = 1 success
615 if(dataResult[@"result"] != nil) { 672 if(dataResult[@"result"] != nil) {
616 NSArray * array = dataResult[@"result"]; 673 NSArray * array = dataResult[@"result"];
617 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init]; 674 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
618 for(NSDictionary * dict in array) { 675 for(NSDictionary * dict in array) {
619 GroupObject * object = [[GroupObject alloc] initWithData:dict]; 676 GroupObject * object = [[GroupObject alloc] initWithData:dict];
620 [arrayTweets addObject:object]; 677 [arrayTweets addObject:object];
621 } 678 }
622 completion(arrayTweets, nil); 679 completion(arrayTweets, nil);
623 } 680 }
624 else { 681 else {
625 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 682 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
626 completion(nil, errorObject); 683 completion(nil, errorObject);
627 } 684 }
628 } 685 }
629 else { 686 else {
630 NSString *message = dataResult[@"message"]; 687 NSString *message = dataResult[@"message"];
631 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 688 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
632 completion(nil, errorObject); 689 completion(nil, errorObject);
633 } 690 }
634 } 691 }
635 else 692 else
636 { 693 {
637 completion(nil, error); 694 completion(nil, error);
638 } 695 }
639 }]; 696 }];
640 } 697 }
641 698
642 #pragma mark - Group Function 699 #pragma mark - Group Function
643 -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion { 700 -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion {
644 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/newGroup"]; 701 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/newGroup"];
645 NSLog(@"requestCreateGroup link %@", url); 702 NSLog(@"requestCreateGroup link %@", url);
646 NSDictionary * dict = @{@"group_name":group.name, 703 NSDictionary * dict = @{@"group_name":group.name,
647 @"goal":group.goal, 704 @"goal":group.goal,
648 @"walk_mode_active":[NSNumber numberWithBool:group.walkMode], 705 @"walk_mode_active":[NSNumber numberWithBool:group.walkMode],
649 @"run_mode_active":[NSNumber numberWithBool:group.runMode], 706 @"run_mode_active":[NSNumber numberWithBool:group.runMode],
650 @"bike_mode_active":[NSNumber numberWithBool:group.bikeMode], 707 @"bike_mode_active":[NSNumber numberWithBool:group.bikeMode],
651 @"step_mode_active":[NSNumber numberWithBool:group.stepMode], 708 @"step_mode_active":[NSNumber numberWithBool:group.stepMode],
652 @"gym_mode_active":[NSNumber numberWithBool:group.gymMode], 709 @"gym_mode_active":[NSNumber numberWithBool:group.gymMode],
653 @"beginer_mode_active":[NSNumber numberWithBool:group.beginMode], 710 @"beginer_mode_active":[NSNumber numberWithBool:group.beginMode],
654 @"walk_mode_goal":[NSNumber numberWithBool:group.walkGoal], 711 @"walk_mode_goal":[NSNumber numberWithBool:group.walkGoal],
655 @"run_mode_goal":[NSNumber numberWithBool:group.runGoal], 712 @"run_mode_goal":[NSNumber numberWithBool:group.runGoal],
656 @"bike_mode_goal":[NSNumber numberWithBool:group.bikeGoal]}; 713 @"bike_mode_goal":[NSNumber numberWithBool:group.bikeGoal]};
657 714
658 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) { 715 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
659 716
660 if (completion == NULL) { 717 if (completion == NULL) {
661 return ; 718 return ;
662 } 719 }
663 720
664 if (error == nil) 721 if (error == nil)
665 { 722 {
666 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 723 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
667 NSLog(@"%@", dataResult); 724 NSLog(@"%@", dataResult);
668 int status = [dataResult[@"status"] intValue]; 725 int status = [dataResult[@"status"] intValue];
669 if (status == 1) { // status = 1 success 726 if (status == 1) { // status = 1 success
670 if(dataResult[@"result"] != nil) { 727 if(dataResult[@"result"] != nil) {
671 NSDictionary * dict = dataResult[@"result"]; 728 NSDictionary * dict = dataResult[@"result"];
672 group.groupID = [dict[@"group_id"] intValue]; 729 group.groupID = [dict[@"group_id"] intValue];
673 completion(group, nil); 730 completion(group, nil);
674 } 731 }
675 else { 732 else {
676 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 733 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
677 completion(nil, errorObject); 734 completion(nil, errorObject);
678 } 735 }
679 } 736 }
680 else { 737 else {
681 NSString *message = dataResult[@"message"]; 738 NSString *message = dataResult[@"message"];
682 if (message == nil) { 739 if (message == nil) {
683 message = @"Unknown error"; 740 message = @"Unknown error";
684 } 741 }
685 742
686 if ([message isEqualToString:@"Token is invalid"]) { 743 if ([message isEqualToString:@"Token is invalid"]) {
687 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 744 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
688 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 745 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
689 [self requestCreateGroup:tokenNew withGroup:group CompletionHandler:completion]; 746 [self requestCreateGroup:tokenNew withGroup:group CompletionHandler:completion];
690 } 747 }
691 else { 748 else {
692 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 749 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
693 completion(nil, errorObject); 750 completion(nil, errorObject);
694 } 751 }
695 } 752 }
696 } 753 }
697 else 754 else
698 { 755 {
699 completion(nil, error); 756 completion(nil, error);
700 } 757 }
701 }]; 758 }];
702 } 759 }
703 760
704 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion { 761 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion {
705 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/detail/%d", groupID]; 762 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/detail/%d", groupID];
706 NSLog(@"getGroupDetail link %@", url); 763 NSLog(@"getGroupDetail link %@", url);
707 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 764 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
708 765
709 if (completion == NULL) { 766 if (completion == NULL) {
710 return ; 767 return ;
711 } 768 }
712 769
713 if (error == nil) 770 if (error == nil)
714 { 771 {
715 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 772 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
716 NSLog(@"%@", dataResult); 773 NSLog(@"%@", dataResult);
717 int status = [dataResult[@"status"] intValue]; 774 int status = [dataResult[@"status"] intValue];
718 if (status == 1) { // status = 1 success 775 if (status == 1) { // status = 1 success
719 if(dataResult[@"result"] != nil) { 776 if(dataResult[@"result"] != nil) {
720 NSArray * array = dataResult[@"result"]; 777 NSArray * array = dataResult[@"result"];
721 GroupObject * object = [[GroupObject alloc] initWithData:array[0] andGroupID:groupID]; 778 GroupObject * object = [[GroupObject alloc] initWithData:array[0] andGroupID:groupID];
722 completion(object, nil); 779 completion(object, nil);
723 } 780 }
724 else { 781 else {
725 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 782 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
726 completion(nil, errorObject); 783 completion(nil, errorObject);
727 } 784 }
728 } 785 }
729 else { 786 else {
730 NSString *message = dataResult[@"message"]; 787 NSString *message = dataResult[@"message"];
731 if (message == nil) { 788 if (message == nil) {
732 message = @"Unknown error"; 789 message = @"Unknown error";
733 } 790 }
734 791
735 if ([message isEqualToString:@"Token is invalid"]) { 792 if ([message isEqualToString:@"Token is invalid"]) {
736 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 793 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
737 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 794 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
738 [self getGroupDetail:tokenNew withGroupID:groupID CompletionHandler:completion]; 795 [self getGroupDetail:tokenNew withGroupID:groupID CompletionHandler:completion];
739 } 796 }
740 else { 797 else {
741 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 798 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
742 completion(nil, errorObject); 799 completion(nil, errorObject);
743 } 800 }
744 } 801 }
745 } 802 }
746 else 803 else
747 { 804 {
748 completion(nil, error); 805 completion(nil, error);
749 } 806 }
750 }]; 807 }];
751 } 808 }
752 809
753 - (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 810 - (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
754 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/member/%d/%d", groupID, page]; 811 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/member/%d/%d", groupID, page];
755 NSLog(@"requestMemberList link %@ page %d", url, page); 812 NSLog(@"requestMemberList link %@ page %d", url, page);
756 813
757 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 814 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
758 if (completion == NULL) { 815 if (completion == NULL) {
759 return ; 816 return ;
760 } 817 }
761 818
762 if (error == nil) 819 if (error == nil)
763 { 820 {
764 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 821 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
765 NSLog(@"%@", dataResult); 822 NSLog(@"%@", dataResult);
766 int status = [dataResult[@"status"] intValue]; 823 int status = [dataResult[@"status"] intValue];
767 if (status == 1) { // status = 1 success 824 if (status == 1) { // status = 1 success
768 if(dataResult[@"result"] != nil) { 825 if(dataResult[@"result"] != nil) {
769 NSArray * array = dataResult[@"result"]; 826 NSArray * array = dataResult[@"result"];
770 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init]; 827 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
771 for(NSDictionary * dict in array) { 828 for(NSDictionary * dict in array) {
772 MemberObject * object = [[MemberObject alloc] initWithData:dict]; 829 MemberObject * object = [[MemberObject alloc] initWithData:dict];
773 [arrayTweets addObject:object]; 830 [arrayTweets addObject:object];
774 } 831 }
775 completion(arrayTweets, nil); 832 completion(arrayTweets, nil);
776 } 833 }
777 else { 834 else {
778 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 835 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
779 completion(nil, errorObject); 836 completion(nil, errorObject);
780 } 837 }
781 } 838 }
782 else { 839 else {
783 NSString *message = dataResult[@"message"]; 840 NSString *message = dataResult[@"message"];
784 if (message == nil) { 841 if (message == nil) {
785 message = @"Unknown error"; 842 message = @"Unknown error";
786 } 843 }
787 844
788 if ([message isEqualToString:@"Token is invalid"]) { 845 if ([message isEqualToString:@"Token is invalid"]) {
789 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 846 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
790 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 847 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
791 [self requestMemberList:tokenNew groupID:groupID withPage:page CompletionHandler:completion]; 848 [self requestMemberList:tokenNew groupID:groupID withPage:page CompletionHandler:completion];
792 } 849 }
793 else { 850 else {
794 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 851 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
795 completion(nil, errorObject); 852 completion(nil, errorObject);
796 } 853 }
797 } 854 }
798 } 855 }
799 else 856 else
800 { 857 {
801 completion(nil, error); 858 completion(nil, error);
802 } 859 }
803 }]; 860 }];
804 } 861 }
805 862
806 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion { 863 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion {
807 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/join"]; 864 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/join"];
808 NSLog(@"requestJoinGroup link %@", url); 865 NSLog(@"requestJoinGroup link %@", url);
809 866
810 [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) { 867 [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) {
811 if (completion == NULL) { 868 if (completion == NULL) {
812 return ; 869 return ;
813 } 870 }
814 871
815 if (error == nil) 872 if (error == nil)
816 { 873 {
817 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 874 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
818 NSLog(@"%@", dataResult); 875 NSLog(@"%@", dataResult);
819 int status = [dataResult[@"status"] intValue]; 876 int status = [dataResult[@"status"] intValue];
820 if (status == 1) { // status = 1 success 877 if (status == 1) { // status = 1 success
821 if(dataResult[@"result"] != nil) { 878 if(dataResult[@"result"] != nil) {
822 completion(nil); 879 completion(nil);
823 } 880 }
824 else { 881 else {
825 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 882 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
826 completion(errorObject); 883 completion(errorObject);
827 } 884 }
828 } 885 }
829 else { 886 else {
830 NSString *message = dataResult[@"message"]; 887 NSString *message = dataResult[@"message"];
831 if ([message isEqualToString:@"Token is invalid"]) { 888 if ([message isEqualToString:@"Token is invalid"]) {
832 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 889 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
833 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 890 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
834 [self requestJoinGroup:tokenNew groupID:groupID CompletionHandler:completion]; 891 [self requestJoinGroup:tokenNew groupID:groupID CompletionHandler:completion];
835 } 892 }
836 else { 893 else {
837 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 894 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
838 completion(errorObject); 895 completion(errorObject);
839 } 896 }
840 } 897 }
841 } 898 }
842 else 899 else
843 { 900 {
844 completion(error); 901 completion(error);
845 } 902 }
846 }]; 903 }];
847 } 904 }
848 905
849 - (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 906 - (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
850 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/list"]; 907 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/list"];
851 NSLog(@"requestGroupList link %@", url); 908 NSLog(@"requestGroupList link %@", url);
852 909
853 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 910 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
854 if (completion == NULL) { 911 if (completion == NULL) {
855 return ; 912 return ;
856 } 913 }
857 914
858 if (error == nil) 915 if (error == nil)
859 { 916 {
860 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 917 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
861 NSLog(@"%@", dataResult); 918 NSLog(@"%@", dataResult);
862 int status = [dataResult[@"status"] intValue]; 919 int status = [dataResult[@"status"] intValue];
863 if (status == 1) { // status = 1 success 920 if (status == 1) { // status = 1 success
864 if(dataResult[@"result"] != nil) { 921 if(dataResult[@"result"] != nil) {
865 NSArray * array = dataResult[@"result"]; 922 NSArray * array = dataResult[@"result"];
866 NSMutableArray * arrayGroup = [[NSMutableArray alloc] init]; 923 NSMutableArray * arrayGroup = [[NSMutableArray alloc] init];
867 for(NSDictionary * dict in array) { 924 for(NSDictionary * dict in array) {
868 GroupObject * object = [[GroupObject alloc] initWithShortData:dict]; 925 GroupObject * object = [[GroupObject alloc] initWithShortData:dict];
869 [arrayGroup addObject:object]; 926 [arrayGroup addObject:object];
870 } 927 }
871 completion(arrayGroup, nil); 928 completion(arrayGroup, nil);
872 } 929 }
873 else { 930 else {
874 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 931 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
875 completion(nil, errorObject); 932 completion(nil, errorObject);
876 } 933 }
877 } 934 }
878 else { 935 else {
879 NSString *message = dataResult[@"message"]; 936 NSString *message = dataResult[@"message"];
880 if (message == nil) { 937 if (message == nil) {
881 message = @"Unknown error"; 938 message = @"Unknown error";
882 } 939 }
883 940
884 if ([message isEqualToString:@"Token is invalid"]) { 941 if ([message isEqualToString:@"Token is invalid"]) {
885 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 942 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
886 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 943 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
887 [self requestGroupList:tokenNew CompletionHandler:completion]; 944 [self requestGroupList:tokenNew CompletionHandler:completion];
888 } 945 }
889 else { 946 else {
890 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 947 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
891 completion(nil, errorObject); 948 completion(nil, errorObject);
892 } 949 }
893 } 950 }
894 } 951 }
895 else 952 else
896 { 953 {
897 completion(nil, error); 954 completion(nil, error);
898 } 955 }
899 }]; 956 }];
900 } 957 }
901 958
902 #pragma mark - Ranking API 959 #pragma mark - Ranking API
903 - (void) requestRankingList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate mode:(int) mode page:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 960 - (void) requestRankingList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate mode:(int) mode page:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
904 NSString *url = [kServerAddress stringByAppendingFormat:@"api/ranking/%d/%@/%@/%d", mode, [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""], page]; 961 NSString *url = [kServerAddress stringByAppendingFormat:@"api/ranking/%d/%@/%@/%d", mode, [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""], page];
905 NSLog(@"requestRaningList link %@", url); 962 NSLog(@"requestRaningList link %@", url);
906 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 963 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
907 964
908 if (completion == NULL) { 965 if (completion == NULL) {
909 return ; 966 return ;
910 } 967 }
911 968
912 if (error == nil) 969 if (error == nil)
913 { 970 {
914 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 971 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
915 NSLog(@"%@", dataResult); 972 NSLog(@"%@", dataResult);
916 int status = [dataResult[@"status"] intValue]; 973 int status = [dataResult[@"status"] intValue];
917 if (status == 1) { // status = 1 success 974 if (status == 1) { // status = 1 success
918 NSArray * array = dataResult[@"result"]; 975 NSArray * array = dataResult[@"result"];
919 NSMutableArray * arrayRanking = [[NSMutableArray alloc] init]; 976 NSMutableArray * arrayRanking = [[NSMutableArray alloc] init];
920 for(NSDictionary * dict in array) { 977 for(NSDictionary * dict in array) {
921 RankingObject * object = [[RankingObject alloc] initWithData:dict]; 978 RankingObject * object = [[RankingObject alloc] initWithData:dict];
922 [arrayRanking addObject:object]; 979 [arrayRanking addObject:object];
923 } 980 }
924 completion(arrayRanking, nil); 981 completion(arrayRanking, nil);
925 } 982 }
926 else { 983 else {
927 NSString *message = dataResult[@"message"]; 984 NSString *message = dataResult[@"message"];
928 if (message == nil) { 985 if (message == nil) {
929 message = @"Unknown error"; 986 message = @"Unknown error";
930 } 987 }
931 988
932 if ([message isEqualToString:@"Token is invalid"]) { 989 if ([message isEqualToString:@"Token is invalid"]) {
933 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 990 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
934 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 991 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
935 [self requestRankingList:tokenNew startDate:startDate endDate:endDate mode:mode page:page CompletionHandler:completion]; 992 [self requestRankingList:tokenNew startDate:startDate endDate:endDate mode:mode page:page CompletionHandler:completion];
936 } 993 }
937 else { 994 else {
938 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 995 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
939 completion(nil, errorObject); 996 completion(nil, errorObject);
940 } 997 }
941 } 998 }
942 } 999 }
943 else 1000 else
944 { 1001 {
945 completion(nil, error); 1002 completion(nil, error);
946 } 1003 }
947 }]; 1004 }];
948 } 1005 }
949 1006
950 #pragma mark - Common API 1007 #pragma mark - Common API
951 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion { 1008 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion {
952 [self _request:[kServerAddress stringByAppendingFormat: @"refreshToken"] method:@"POST" token:@"" paras:@{@"userId":userID} completion:^(NSData *data, NSError *error) { 1009 [self _request:[kServerAddress stringByAppendingFormat: @"refreshToken"] method:@"POST" token:@"" paras:@{@"userId":userID} completion:^(NSData *data, NSError *error) {
953 1010
954 if (completion == NULL) { 1011 if (completion == NULL) {
955 return ; 1012 return ;
956 } 1013 }
957 1014
958 if (error == nil) 1015 if (error == nil)
959 { 1016 {
960 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 1017 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
961 1018
962 int status = [dataResult[@"status"] intValue]; 1019 int status = [dataResult[@"status"] intValue];
963 if (status == 1) { // status = 1 success 1020 if (status == 1) { // status = 1 success
964 NSArray *arrayResult = dataResult[@"result"]; 1021 NSArray *arrayResult = dataResult[@"result"];
965 if (arrayResult.count > 0) { 1022 if (arrayResult.count > 0) {
966 NSString *token = arrayResult[0]; 1023 NSString *token = arrayResult[0];
967 completion(token, nil); 1024 completion(token, nil);
968 } 1025 }
969 else { 1026 else {
970 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 1027 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
971 completion(nil, errorObject); 1028 completion(nil, errorObject);
972 } 1029 }
973 1030
974 } 1031 }
975 else { // status = 0 error 1032 else { // status = 0 error
976 NSString *message = dataResult[@"message"]; 1033 NSString *message = dataResult[@"message"];
977 if (message == nil) { 1034 if (message == nil) {
978 message = @"Unknown error"; 1035 message = @"Unknown error";
979 } 1036 }
980 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 1037 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
981 completion(nil, loginFaild); 1038 completion(nil, loginFaild);
982 } 1039 }
983 } 1040 }
984 else 1041 else
985 { 1042 {
986 completion(nil, error); 1043 completion(nil, error);
987 } 1044 }
988 }]; 1045 }];
989 } 1046 }
990 1047
991 #pragma mark - Private Function 1048 #pragma mark - Private Function
992 - (void) checkToken { 1049 - (void) checkToken {
993 // [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationToken object:nil]; 1050 // [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationToken object:nil];
994 NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kUser]; 1051 NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kUser];
995 User *user = (User *)[NSKeyedUnarchiver unarchiveObjectWithData:data]; 1052 User *user = (User *)[NSKeyedUnarchiver unarchiveObjectWithData:data];
996 if (user != nil) { 1053 if (user != nil) {
997 [self refreshToken:user.user_id CompletionHandler:^(NSString *token, NSError *error) { 1054 [self refreshToken:user.user_id CompletionHandler:^(NSString *token, NSError *error) {
998 if (error == nil) { 1055 if (error == nil) {
999 [[NSUserDefaults standardUserDefaults] setObject:token forKey:kToken]; 1056 [[NSUserDefaults standardUserDefaults] setObject:token forKey:kToken];
1000 [[NSUserDefaults standardUserDefaults] synchronize]; 1057 [[NSUserDefaults standardUserDefaults] synchronize];
1001 } 1058 }
1002 }]; 1059 }];
1003 } 1060 }
1004 } 1061 }
1005 - (NSData *) _encodeDictionary: (NSDictionary *) dictionary 1062 - (NSData *) _encodeDictionary: (NSDictionary *) dictionary
1006 { 1063 {
1007 NSMutableArray *parts = [[NSMutableArray alloc] init]; 1064 NSMutableArray *parts = [[NSMutableArray alloc] init];
1008 for (id key in dictionary) 1065 for (id key in dictionary)
1009 { 1066 {
1010 NSString *encodedValue = [[dictionary[key] description] urlencode]; 1067 NSString *encodedValue = [[dictionary[key] description] urlencode];
1011 NSString *encodedKey = [[key description] urlencode];//[[key description] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 1068 NSString *encodedKey = [[key description] urlencode];//[[key description] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
1012 NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue]; 1069 NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue];
1013 [parts addObject:part]; 1070 [parts addObject:part];
1014 } 1071 }
1015 NSString *encodedDictionary = [parts componentsJoinedByString:@"&"]; 1072 NSString *encodedDictionary = [parts componentsJoinedByString:@"&"];
1016 return [encodedDictionary dataUsingEncoding: NSUTF8StringEncoding]; 1073 return [encodedDictionary dataUsingEncoding: NSUTF8StringEncoding];
1017 } 1074 }
1018 1075
1019 - (NSURLSessionDataTask *) _request:(NSString *)address method:(NSString *)method token:(NSString *) token paras:(NSDictionary *)paras completion:(void (^)(NSData *data, NSError *error))completion 1076 - (NSURLSessionDataTask *) _request:(NSString *)address method:(NSString *)method token:(NSString *) token paras:(NSDictionary *)paras completion:(void (^)(NSData *data, NSError *error))completion
1020 { 1077 {
1021 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:address]]; 1078 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:address]];
1022 request.HTTPMethod = method; 1079 request.HTTPMethod = method;
1023 [request setValue: @"application/json" forHTTPHeaderField: @"Accept"]; 1080 [request setValue: @"application/json" forHTTPHeaderField: @"Accept"];
1024 [request setValue: @"application/json" forHTTPHeaderField: @"Content-Type"]; 1081 [request setValue: @"application/json" forHTTPHeaderField: @"Content-Type"];
1025 if(token != nil && ![token isEqual: @""]) { 1082 if(token != nil && ![token isEqual: @""]) {
1026 [request setValue: token forHTTPHeaderField: @"token"]; 1083 [request setValue: token forHTTPHeaderField: @"token"];
1027 } 1084 }
1028 [request setTimeoutInterval:self.timeOutInterval]; 1085 [request setTimeoutInterval:self.timeOutInterval];
1029 1086
1030 if (paras != nil) 1087 if (paras != nil)
1031 { 1088 {
1032 NSData *encodedData = [self _encodeDictionary: paras]; 1089 NSData *encodedData = [self _encodeDictionary: paras];
1033 [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long) encodedData.length] forHTTPHeaderField: @"Content-Length"]; 1090 [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long) encodedData.length] forHTTPHeaderField: @"Content-Length"];
1034 [request setValue: @"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField: @"Content-Type"]; 1091 [request setValue: @"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField: @"Content-Type"];
1035 [request setHTTPBody: encodedData]; 1092 [request setHTTPBody: encodedData];
1036 } 1093 }
1037 1094
1038 //NSURLSession *session = [NSURLSession sharedSession]; 1095 //NSURLSession *session = [NSURLSession sharedSession];
1039 NSURLSessionConfiguration *defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 1096 NSURLSessionConfiguration *defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
1040 [defaultConfiguration setHTTPMaximumConnectionsPerHost:20]; 1097 [defaultConfiguration setHTTPMaximumConnectionsPerHost:20];
1041 NSOperationQueue *operationQueue = [NSOperationQueue mainQueue]; 1098 NSOperationQueue *operationQueue = [NSOperationQueue mainQueue];
1042 operationQueue.maxConcurrentOperationCount = 20; 1099 operationQueue.maxConcurrentOperationCount = 20;
1043 NSURLSession *session = [NSURLSession sessionWithConfiguration:defaultConfiguration delegate:nil delegateQueue:operationQueue]; 1100 NSURLSession *session = [NSURLSession sessionWithConfiguration:defaultConfiguration delegate:nil delegateQueue:operationQueue];
1044 NSURLSessionDataTask *task = [session dataTaskWithRequest:request 1101 NSURLSessionDataTask *task = [session dataTaskWithRequest:request
1045 completionHandler: 1102 completionHandler:
1046 ^(NSData *data, NSURLResponse *response, NSError *error) { 1103 ^(NSData *data, NSURLResponse *response, NSError *error) {
1047 if (completion == NULL) { 1104 if (completion == NULL) {
1048 return ; 1105 return ;
1049 } 1106 }
1050 if (error == nil) 1107 if (error == nil)
1051 { 1108 {
1052 completion(data, nil); 1109 completion(data, nil);
1053 } 1110 }
1054 else 1111 else
1055 { 1112 {
1056 completion(nil, error); 1113 completion(nil, error);
1057 } 1114 }
1058 }]; 1115 }];
1059 [task resume]; 1116 [task resume];
1060 return task; 1117 return task;
1061 } 1118 }
1062 1119
1063 -(void)waitUntilDone:(void(^)(void))waitBlock { 1120 -(void)waitUntilDone:(void(^)(void))waitBlock {
1064 //use your statement or call method here 1121 //use your statement or call method here
1065 if(waitBlock){ 1122 if(waitBlock){
1066 waitBlock(); 1123 waitBlock();
1067 } 1124 }
1068 } 1125 }
1069 1126
1070 @end 1127 @end
1071 1128