diff --git a/LifeLog/LifeLog.xcodeproj/project.pbxproj b/LifeLog/LifeLog.xcodeproj/project.pbxproj new file mode 100644 index 0000000..81d3ac8 --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/project.pbxproj @@ -0,0 +1,872 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 011799F0F2B47D80472673CE /* Pods_LifeLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */; }; + 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CED11F2E39DB0029891F /* LoginViewController.m */; }; + 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E18CED21F2E39DB0029891F /* LoginViewController.xib */; }; + 6E18CED81F2E3C840029891F /* ServerAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CED71F2E3C840029891F /* ServerAPI.m */; }; + 6E18CEDC1F2E40F50029891F /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E18CEDB1F2E40F50029891F /* User.m */; }; + 6E48AF0D1F2F9D3300C1D184 /* CustomTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */; }; + 6E84E3761F27A701001EB88E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3751F27A701001EB88E /* main.m */; }; + 6E84E3791F27A701001EB88E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3781F27A701001EB88E /* AppDelegate.m */; }; + 6E84E3811F27A701001EB88E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3801F27A701001EB88E /* Assets.xcassets */; }; + 6E84E3841F27A701001EB88E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */; }; + 6E84E38F1F27A703001EB88E /* LifeLogTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E38E1F27A703001EB88E /* LifeLogTests.m */; }; + 6E84E39A1F27A703001EB88E /* LifeLogUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3991F27A703001EB88E /* LifeLogUITests.m */; }; + 6E84E3B01F27A975001EB88E /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3AE1F27A975001EB88E /* HomeViewController.m */; }; + 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */; }; + 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */; }; + 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */; }; + 6E84E3BA1F27A9A0001EB88E /* RankingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */; }; + 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */; }; + 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */; }; + 6E84E3C01F27A9B1001EB88E /* SNSViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */; }; + 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E84E3C31F27ACAE001EB88E /* MapViewController.m */; }; + 6E84E3C61F27ACAE001EB88E /* MapViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */; }; + 6E8DA0F71F2BAC3400CCE941 /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */; }; + 6E8DA0F81F2BAC3500CCE941 /* TodayViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */; }; + 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */; }; + 6EDC8BEE1F2C2FB800765ACC /* Utilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDC8BED1F2C2FB800765ACC /* Utilities.m */; }; + 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */; }; + 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6EF163091F29069300DA306C /* Localizable.strings */; }; + 9CBDA0FA1F2ECE2C0055DED1 /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */; }; + 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */; }; + 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 6E84E38B1F27A703001EB88E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6E84E3691F27A700001EB88E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6E84E3701F27A700001EB88E; + remoteInfo = LifeLog; + }; + 6E84E3961F27A703001EB88E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6E84E3691F27A700001EB88E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6E84E3701F27A700001EB88E; + remoteInfo = LifeLog; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 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 = ""; }; + 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LifeLog.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 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 = ""; }; + 6E18CED01F2E39DB0029891F /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; + 6E18CED11F2E39DB0029891F /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; + 6E18CED21F2E39DB0029891F /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = ""; }; + 6E18CED61F2E3C840029891F /* ServerAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServerAPI.h; sourceTree = ""; }; + 6E18CED71F2E3C840029891F /* ServerAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ServerAPI.m; sourceTree = ""; }; + 6E18CEDA1F2E40F50029891F /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = ""; }; + 6E18CEDB1F2E40F50029891F /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = ""; }; + 6E18CEDD1F2E46570029891F /* Entities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Entities.h; sourceTree = ""; }; + 6E48AF0B1F2F9D3200C1D184 /* CustomTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTextField.h; sourceTree = ""; }; + 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTextField.m; sourceTree = ""; }; + 6E84E3711F27A700001EB88E /* LifeLog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LifeLog.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E84E3751F27A701001EB88E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 6E84E3771F27A701001EB88E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 6E84E3781F27A701001EB88E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 6E84E3801F27A701001EB88E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 6E84E3831F27A701001EB88E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 6E84E3851F27A701001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LifeLogTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E84E38E1F27A703001EB88E /* LifeLogTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LifeLogTests.m; sourceTree = ""; }; + 6E84E3901F27A703001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LifeLogUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6E84E3991F27A703001EB88E /* LifeLogUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LifeLogUITests.m; sourceTree = ""; }; + 6E84E39B1F27A703001EB88E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6E84E3AD1F27A975001EB88E /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; + 6E84E3AE1F27A975001EB88E /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; + 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeViewController.xib; sourceTree = ""; }; + 6E84E3B21F27A98B001EB88E /* HistoryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryViewController.h; sourceTree = ""; }; + 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryViewController.m; sourceTree = ""; }; + 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HistoryViewController.xib; sourceTree = ""; }; + 6E84E3B71F27A9A0001EB88E /* RankingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingViewController.h; sourceTree = ""; }; + 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingViewController.m; sourceTree = ""; }; + 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingViewController.xib; sourceTree = ""; }; + 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNSViewController.h; sourceTree = ""; }; + 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SNSViewController.m; sourceTree = ""; }; + 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SNSViewController.xib; sourceTree = ""; }; + 6E84E3C21F27ACAE001EB88E /* MapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapViewController.h; sourceTree = ""; }; + 6E84E3C31F27ACAE001EB88E /* MapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapViewController.m; sourceTree = ""; }; + 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MapViewController.xib; sourceTree = ""; }; + 6E8DA0F41F2BAC3400CCE941 /* TodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TodayViewController.h; sourceTree = ""; }; + 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TodayViewController.m; sourceTree = ""; }; + 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TodayViewController.xib; sourceTree = ""; }; + 6ECC406F1F2A5FEB00AAEB97 /* NSDate+helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+helper.h"; sourceTree = ""; }; + 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+helper.m"; sourceTree = ""; }; + 6EDC8BEC1F2C2FB800765ACC /* Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utilities.h; sourceTree = ""; }; + 6EDC8BED1F2C2FB800765ACC /* Utilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utilities.m; sourceTree = ""; }; + 6EDC8BF21F2C68D700765ACC /* CMMotionActivityExtra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CMMotionActivityExtra.h; sourceTree = ""; }; + 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CMMotionActivityExtra.m; sourceTree = ""; }; + 6EF163091F29069300DA306C /* Localizable.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; }; + 9CBDA0F81F2ECE2C0055DED1 /* BaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseViewController.h; sourceTree = ""; }; + 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseViewController.m; sourceTree = ""; }; + 9CBDA0FC1F2F03810055DED1 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = ""; }; + 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = ""; }; + 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RegisterViewController.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 6E84E36E1F27A700001EB88E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 011799F0F2B47D80472673CE /* Pods_LifeLog.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E84E3871F27A703001EB88E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E84E3921F27A703001EB88E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 020C1721B642EF36F31E1BB4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2D9F4ED6F06C8F252B9EAF48 /* Pods_LifeLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6E18CECF1F2E398C0029891F /* Login */ = { + isa = PBXGroup; + children = ( + 6E18CED01F2E39DB0029891F /* LoginViewController.h */, + 6E18CED11F2E39DB0029891F /* LoginViewController.m */, + 6E18CED21F2E39DB0029891F /* LoginViewController.xib */, + ); + name = Login; + sourceTree = ""; + }; + 6E18CED51F2E3C0E0029891F /* ServerAPI */ = { + isa = PBXGroup; + children = ( + 6E18CED61F2E3C840029891F /* ServerAPI.h */, + 6E18CED71F2E3C840029891F /* ServerAPI.m */, + ); + name = ServerAPI; + sourceTree = ""; + }; + 6E18CED91F2E40AE0029891F /* Model */ = { + isa = PBXGroup; + children = ( + 6E18CEDA1F2E40F50029891F /* User.h */, + 6E18CEDB1F2E40F50029891F /* User.m */, + 6E18CEDD1F2E46570029891F /* Entities.h */, + ); + name = Model; + sourceTree = ""; + }; + 6E84E3681F27A700001EB88E = { + isa = PBXGroup; + children = ( + 6E84E3731F27A700001EB88E /* LifeLog */, + 6E84E38D1F27A703001EB88E /* LifeLogTests */, + 6E84E3981F27A703001EB88E /* LifeLogUITests */, + 6E84E3721F27A700001EB88E /* Products */, + DE8269E957EA47CD771BAB33 /* Pods */, + 020C1721B642EF36F31E1BB4 /* Frameworks */, + ); + sourceTree = ""; + }; + 6E84E3721F27A700001EB88E /* Products */ = { + isa = PBXGroup; + children = ( + 6E84E3711F27A700001EB88E /* LifeLog.app */, + 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */, + 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 6E84E3731F27A700001EB88E /* LifeLog */ = { + isa = PBXGroup; + children = ( + 6E18CED91F2E40AE0029891F /* Model */, + 6E18CED51F2E3C0E0029891F /* ServerAPI */, + 6EDC8BEB1F2C2F3300765ACC /* Common */, + 6ECC406D1F2A5FA500AAEB97 /* Library */, + 6E84E3A81F27A8A9001EB88E /* ViewControllers */, + 6E84E3A71F27A887001EB88E /* AppDelegate */, + 6E84E3801F27A701001EB88E /* Assets.xcassets */, + 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */, + 6E84E3851F27A701001EB88E /* Info.plist */, + 6E84E3741F27A701001EB88E /* Supporting Files */, + ); + path = LifeLog; + sourceTree = ""; + }; + 6E84E3741F27A701001EB88E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 6E84E3751F27A701001EB88E /* main.m */, + 6EF163091F29069300DA306C /* Localizable.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 6E84E38D1F27A703001EB88E /* LifeLogTests */ = { + isa = PBXGroup; + children = ( + 6E84E38E1F27A703001EB88E /* LifeLogTests.m */, + 6E84E3901F27A703001EB88E /* Info.plist */, + ); + path = LifeLogTests; + sourceTree = ""; + }; + 6E84E3981F27A703001EB88E /* LifeLogUITests */ = { + isa = PBXGroup; + children = ( + 6E84E3991F27A703001EB88E /* LifeLogUITests.m */, + 6E84E39B1F27A703001EB88E /* Info.plist */, + ); + path = LifeLogUITests; + sourceTree = ""; + }; + 6E84E3A71F27A887001EB88E /* AppDelegate */ = { + isa = PBXGroup; + children = ( + 6E84E3771F27A701001EB88E /* AppDelegate.h */, + 6E84E3781F27A701001EB88E /* AppDelegate.m */, + ); + name = AppDelegate; + sourceTree = ""; + }; + 6E84E3A81F27A8A9001EB88E /* ViewControllers */ = { + isa = PBXGroup; + children = ( + 9CBDA0F71F2ECDFD0055DED1 /* BaseViewController */, + 9CBDA0FB1F2F03490055DED1 /* Register */, + 6E18CECF1F2E398C0029891F /* Login */, + 6E84E3AC1F27A954001EB88E /* SNS */, + 6E84E3C11F27AC89001EB88E /* Map */, + 6E84E3AB1F27A946001EB88E /* Ranking */, + 6E84E3AA1F27A924001EB88E /* History */, + 6E84E3A91F27A915001EB88E /* Home */, + ); + name = ViewControllers; + sourceTree = ""; + }; + 6E84E3A91F27A915001EB88E /* Home */ = { + isa = PBXGroup; + children = ( + 6E8DA0F31F2BAC0800CCE941 /* Today */, + 6E84E3AD1F27A975001EB88E /* HomeViewController.h */, + 6E84E3AE1F27A975001EB88E /* HomeViewController.m */, + 6E84E3AF1F27A975001EB88E /* HomeViewController.xib */, + ); + name = Home; + sourceTree = ""; + }; + 6E84E3AA1F27A924001EB88E /* History */ = { + isa = PBXGroup; + children = ( + 6E84E3B21F27A98B001EB88E /* HistoryViewController.h */, + 6E84E3B31F27A98B001EB88E /* HistoryViewController.m */, + 6E84E3B41F27A98B001EB88E /* HistoryViewController.xib */, + ); + name = History; + sourceTree = ""; + }; + 6E84E3AB1F27A946001EB88E /* Ranking */ = { + isa = PBXGroup; + children = ( + 6E84E3B71F27A9A0001EB88E /* RankingViewController.h */, + 6E84E3B81F27A9A0001EB88E /* RankingViewController.m */, + 6E84E3B91F27A9A0001EB88E /* RankingViewController.xib */, + ); + name = Ranking; + sourceTree = ""; + }; + 6E84E3AC1F27A954001EB88E /* SNS */ = { + isa = PBXGroup; + children = ( + 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */, + 6E84E3BD1F27A9B1001EB88E /* SNSViewController.m */, + 6E84E3BE1F27A9B1001EB88E /* SNSViewController.xib */, + ); + name = SNS; + sourceTree = ""; + }; + 6E84E3C11F27AC89001EB88E /* Map */ = { + isa = PBXGroup; + children = ( + 6E84E3C21F27ACAE001EB88E /* MapViewController.h */, + 6E84E3C31F27ACAE001EB88E /* MapViewController.m */, + 6E84E3C41F27ACAE001EB88E /* MapViewController.xib */, + ); + name = Map; + sourceTree = ""; + }; + 6E8DA0F31F2BAC0800CCE941 /* Today */ = { + isa = PBXGroup; + children = ( + 6E8DA0F41F2BAC3400CCE941 /* TodayViewController.h */, + 6E8DA0F51F2BAC3400CCE941 /* TodayViewController.m */, + 6E8DA0F61F2BAC3400CCE941 /* TodayViewController.xib */, + ); + name = Today; + sourceTree = ""; + }; + 6ECC406D1F2A5FA500AAEB97 /* Library */ = { + isa = PBXGroup; + children = ( + 6ECC406E1F2A5FB200AAEB97 /* Category */, + ); + name = Library; + sourceTree = ""; + }; + 6ECC406E1F2A5FB200AAEB97 /* Category */ = { + isa = PBXGroup; + children = ( + 6ECC406F1F2A5FEB00AAEB97 /* NSDate+helper.h */, + 6ECC40701F2A5FEB00AAEB97 /* NSDate+helper.m */, + ); + name = Category; + sourceTree = ""; + }; + 6EDC8BEB1F2C2F3300765ACC /* Common */ = { + isa = PBXGroup; + children = ( + 6EDC8BEC1F2C2FB800765ACC /* Utilities.h */, + 6EDC8BED1F2C2FB800765ACC /* Utilities.m */, + 6EDC8BF21F2C68D700765ACC /* CMMotionActivityExtra.h */, + 6EDC8BF31F2C68D700765ACC /* CMMotionActivityExtra.m */, + ); + name = Common; + sourceTree = ""; + }; + 9CBDA0F71F2ECDFD0055DED1 /* BaseViewController */ = { + isa = PBXGroup; + children = ( + 9CBDA0F81F2ECE2C0055DED1 /* BaseViewController.h */, + 9CBDA0F91F2ECE2C0055DED1 /* BaseViewController.m */, + 6E48AF0B1F2F9D3200C1D184 /* CustomTextField.h */, + 6E48AF0C1F2F9D3200C1D184 /* CustomTextField.m */, + ); + name = BaseViewController; + sourceTree = ""; + }; + 9CBDA0FB1F2F03490055DED1 /* Register */ = { + isa = PBXGroup; + children = ( + 9CBDA0FC1F2F03810055DED1 /* RegisterViewController.h */, + 9CBDA0FD1F2F03810055DED1 /* RegisterViewController.m */, + 9CBDA0FE1F2F03810055DED1 /* RegisterViewController.xib */, + ); + name = Register; + sourceTree = ""; + }; + DE8269E957EA47CD771BAB33 /* Pods */ = { + isa = PBXGroup; + children = ( + 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */, + 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 6E84E3701F27A700001EB88E /* LifeLog */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6E84E39E1F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLog" */; + buildPhases = ( + 2BB22CAEC0728AA1E086BCE3 /* [CP] Check Pods Manifest.lock */, + 6E84E36D1F27A700001EB88E /* Sources */, + 6E84E36E1F27A700001EB88E /* Frameworks */, + 6E84E36F1F27A700001EB88E /* Resources */, + 22F89B11794CEB4E265996AC /* [CP] Embed Pods Frameworks */, + 96653BDB2C24A87C2866C897 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LifeLog; + productName = LifeLog; + productReference = 6E84E3711F27A700001EB88E /* LifeLog.app */; + productType = "com.apple.product-type.application"; + }; + 6E84E3891F27A703001EB88E /* LifeLogTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6E84E3A11F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogTests" */; + buildPhases = ( + 6E84E3861F27A703001EB88E /* Sources */, + 6E84E3871F27A703001EB88E /* Frameworks */, + 6E84E3881F27A703001EB88E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6E84E38C1F27A703001EB88E /* PBXTargetDependency */, + ); + name = LifeLogTests; + productName = LifeLogTests; + productReference = 6E84E38A1F27A703001EB88E /* LifeLogTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 6E84E3941F27A703001EB88E /* LifeLogUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6E84E3A41F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogUITests" */; + buildPhases = ( + 6E84E3911F27A703001EB88E /* Sources */, + 6E84E3921F27A703001EB88E /* Frameworks */, + 6E84E3931F27A703001EB88E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6E84E3971F27A703001EB88E /* PBXTargetDependency */, + ); + name = LifeLogUITests; + productName = LifeLogUITests; + productReference = 6E84E3951F27A703001EB88E /* LifeLogUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6E84E3691F27A700001EB88E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = PhongNV; + TargetAttributes = { + 6E84E3701F27A700001EB88E = { + CreatedOnToolsVersion = 8.3.3; + DevelopmentTeam = UXU4V3VUN4; + ProvisioningStyle = Manual; + }; + 6E84E3891F27A703001EB88E = { + CreatedOnToolsVersion = 8.3.3; + ProvisioningStyle = Automatic; + TestTargetID = 6E84E3701F27A700001EB88E; + }; + 6E84E3941F27A703001EB88E = { + CreatedOnToolsVersion = 8.3.3; + ProvisioningStyle = Automatic; + TestTargetID = 6E84E3701F27A700001EB88E; + }; + }; + }; + buildConfigurationList = 6E84E36C1F27A700001EB88E /* Build configuration list for PBXProject "LifeLog" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 6E84E3681F27A700001EB88E; + productRefGroup = 6E84E3721F27A700001EB88E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 6E84E3701F27A700001EB88E /* LifeLog */, + 6E84E3891F27A703001EB88E /* LifeLogTests */, + 6E84E3941F27A703001EB88E /* LifeLogUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 6E84E36F1F27A700001EB88E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */, + 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */, + 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */, + 6E84E3C01F27A9B1001EB88E /* SNSViewController.xib in Resources */, + 6E8DA0F81F2BAC3500CCE941 /* TodayViewController.xib in Resources */, + 6E84E3841F27A701001EB88E /* LaunchScreen.storyboard in Resources */, + 6E84E3811F27A701001EB88E /* Assets.xcassets in Resources */, + 6E84E3C61F27ACAE001EB88E /* MapViewController.xib in Resources */, + 6EF1630A1F29069300DA306C /* Localizable.strings in Resources */, + 6E84E3B11F27A975001EB88E /* HomeViewController.xib in Resources */, + 6E84E3B61F27A98B001EB88E /* HistoryViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E84E3881F27A703001EB88E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E84E3931F27A703001EB88E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 22F89B11794CEB4E265996AC /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 2BB22CAEC0728AA1E086BCE3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + 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"; + showEnvVarsInLog = 0; + }; + 96653BDB2C24A87C2866C897 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 6E84E36D1F27A700001EB88E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E18CED81F2E3C840029891F /* ServerAPI.m in Sources */, + 9CBDA0FA1F2ECE2C0055DED1 /* BaseViewController.m in Sources */, + 6E8DA0F71F2BAC3400CCE941 /* TodayViewController.m in Sources */, + 6E48AF0D1F2F9D3300C1D184 /* CustomTextField.m in Sources */, + 6E84E3B01F27A975001EB88E /* HomeViewController.m in Sources */, + 6E84E3791F27A701001EB88E /* AppDelegate.m in Sources */, + 6E84E3BA1F27A9A0001EB88E /* RankingViewController.m in Sources */, + 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */, + 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */, + 6EDC8BEE1F2C2FB800765ACC /* Utilities.m in Sources */, + 6E84E3C51F27ACAE001EB88E /* MapViewController.m in Sources */, + 6E18CEDC1F2E40F50029891F /* User.m in Sources */, + 6ECC40711F2A5FEB00AAEB97 /* NSDate+helper.m in Sources */, + 6E18CED31F2E39DB0029891F /* LoginViewController.m in Sources */, + 6E84E3761F27A701001EB88E /* main.m in Sources */, + 6E84E3B51F27A98B001EB88E /* HistoryViewController.m in Sources */, + 6E84E3BF1F27A9B1001EB88E /* SNSViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E84E3861F27A703001EB88E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E84E38F1F27A703001EB88E /* LifeLogTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6E84E3911F27A703001EB88E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E84E39A1F27A703001EB88E /* LifeLogUITests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 6E84E38C1F27A703001EB88E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6E84E3701F27A700001EB88E /* LifeLog */; + targetProxy = 6E84E38B1F27A703001EB88E /* PBXContainerItemProxy */; + }; + 6E84E3971F27A703001EB88E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6E84E3701F27A700001EB88E /* LifeLog */; + targetProxy = 6E84E3961F27A703001EB88E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 6E84E3821F27A701001EB88E /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 6E84E3831F27A701001EB88E /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 6E84E39C1F27A703001EB88E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.3; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6E84E39D1F27A703001EB88E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.3; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6E84E39F1F27A703001EB88E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0FC2D57087AF4571C57FAE08 /* Pods-LifeLog.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = UXU4V3VUN4; + INFOPLIST_FILE = LifeLog/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + "\"CircleProgressBar\"", + "-all_load", + ); + PRODUCT_BUNDLE_IDENTIFIER = mobileworld.jp.lifelog; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "556082e4-d9c1-4ce1-bab1-13515289a7fd"; + PROVISIONING_PROFILE_SPECIFIER = Lifelog_Development; + }; + name = Debug; + }; + 6E84E3A01F27A703001EB88E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4CFDA5714AF852358A1EB515 /* Pods-LifeLog.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + DEVELOPMENT_TEAM = UXU4V3VUN4; + INFOPLIST_FILE = LifeLog/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = ( + "$(inherited)", + "-framework", + "\"CircleProgressBar\"", + "-all_load", + ); + PRODUCT_BUNDLE_IDENTIFIER = mobileworld.jp.lifelog; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = "ffe70c33-5b08-4c2e-b96d-4e1bcb971ccb"; + PROVISIONING_PROFILE_SPECIFIER = Lifelog_Distribution; + }; + name = Release; + }; + 6E84E3A21F27A703001EB88E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = LifeLogTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LifeLog.app/LifeLog"; + }; + name = Debug; + }; + 6E84E3A31F27A703001EB88E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + INFOPLIST_FILE = LifeLogTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LifeLog.app/LifeLog"; + }; + name = Release; + }; + 6E84E3A51F27A703001EB88E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = LifeLogUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = LifeLog; + }; + name = Debug; + }; + 6E84E3A61F27A703001EB88E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = LifeLogUITests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.mav.LifeLogUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_TARGET_NAME = LifeLog; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6E84E36C1F27A700001EB88E /* Build configuration list for PBXProject "LifeLog" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6E84E39C1F27A703001EB88E /* Debug */, + 6E84E39D1F27A703001EB88E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6E84E39E1F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLog" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6E84E39F1F27A703001EB88E /* Debug */, + 6E84E3A01F27A703001EB88E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6E84E3A11F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6E84E3A21F27A703001EB88E /* Debug */, + 6E84E3A31F27A703001EB88E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6E84E3A41F27A703001EB88E /* Build configuration list for PBXNativeTarget "LifeLogUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6E84E3A51F27A703001EB88E /* Debug */, + 6E84E3A61F27A703001EB88E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6E84E3691F27A700001EB88E /* Project object */; +} diff --git a/LifeLog/LifeLog.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/LifeLog/LifeLog.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3dbe212 --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/LifeLog/LifeLog.xcodeproj/project.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/UserInterfaceState.xcuserstate b/LifeLog/LifeLog.xcodeproj/project.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c7cd0c79ff98042c039cc794d6f7dc77a0b25550 GIT binary patch literal 48335 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 Dk0Y>4 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog.xcodeproj/project.xcworkspace/xcuserdata/PhongNV.xcuserdatad/UserInterfaceState.xcuserstate b/LifeLog/LifeLog.xcodeproj/project.xcworkspace/xcuserdata/PhongNV.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..473a31b406d08fdd9bd8da8511f05d8cd3af46ac GIT binary patch literal 24236 zcmdtKcYIUT|1f^fxhoxM(>>DC-DWgNlXUMSZJ>iP$||d*ZCV0tQ`43yaIOpo2#SIz zBD8Eo5ygQbOF?iTpaLR-3>85|1x1|Cxw%c-XweV9=kt5M&+CCdAm^U*KIgs188t19 zw$`?kln)6&K!PMFf+iSIgeY=U{1mIB)n;!V6>qPZWUXy$t%|oeYA4!o^RW0fdy78- z7OdIk2gedDAtC~ZKq81pB4mV|P!LKYnNSgGLPO|@EMf>Tl&BtPam09{j<6Dw2nW$hv=QyZ6kj%fu_hPU2N!H?fC!gLsoTKpZ4a5GRRK#K**G;uGQwae=rS7zsv!Dli(10b{{9Fdo!{yTD9v zH$Y$kxECx0i@;Lw2zU&v1Z%)LunBAh&x04hPVg#t6C3~s!CT-R@F_S8&VkRsd2j(- z1ed_);Ct``xDIZBAHlESHwd5y^n_k800zP!7zU$YG?YO(R6r$6hFX{gb6^29!6H}; zOJFH1gG1mjI0{xlE3AhNa3Zw9b~pu2h11}4csINU-V2w&hv38TargwV!_$|B!zk}byAK-O(1O5X4fPa#Hq(2!z z29iN!Fd0IIk`ZJi8AHaBabyyyBGsgxOeNFE3^J3`x9Mhmw`#FmgCqMUEwF z$Y#<`wvyAx=_E(qLoOwklaG-r$tTG*WCyvP+(2$2pC-4F&yl;x*U8=F9&#`FCV7B- zpFBz)Baf3O$kXH}|1RHI151&8P0C9-$tiR#Hz>TdC)$9n_1|K59Sp z2K6R&fI3XQO?^mxM4g~cQlC)gsB6@B)c4d6)OG3x^&|BYb(8v)`i&-NK#OTV+MkY~ zqv?1$l}@9x=sY@~E}{p}CG>E51U-@-MOV?I=?S!jzKeFyt#ljRPEVny($nba^elQd zeGfgC-bTMb@1S3ychaxZyXpP(8}wWBA^KhVJ^C1ZoIXLHq(7n0(4W!g>Cfpe=qvP9 z`WpQmeS`jyzD55+|3UxBkPO9$7!O9w_%QxV029STGcimo6UW3e2}~lRWAscalg6Yo z8B8XV#S}AUrav=)8O97}Mld6pQA`yxnyF_Rn2Agq)6Ps`rZRJxdCYuf0kf2Ogn5)% z#&j^9%vxp}^Bl9Cd7jzL>|ypY` z%pc63EWvuSV%CTCWust!o6Y91x$FS8ge_&u*dgptwvugNC$ctn z5<8h~WSiJ#*3P!Dcd-t(m2G2ZvvXL)a_s%=BkZH>GIlxp7`uXfoL$SVW7o4A*yq^o z?DOmk?Cb1qc0YTNJ;9!2Pq81fr`faYdG-Q(k^Pdr!T!wNVt;4<5J3?sVnrg6w@57V z6ZwmRMIj>T@c8ET#>Ni_55kl1BD@J-!hd8%rFyb;dh2NXZIK!#Doum zi0mXJgdd{NagoDJJOC#e!|e9P8jGW(b%d?e zR?~@5CK4M^#h~aymR0gR+TYB5@0mL*x>9L_SeK6cPr) zNSKHsBtd@29|fR56oi6N2nt1ETL?2|(g31_C?(2>a$+Fe5{K{?h)^dA;dRnc$ z&f4OzPjXSYny?Uw9mE9GuY;&TQ9O10ibf3UMxvz6+SDp=wVtqb5)H&e6pa#*%mrXF z(M(XaVQ=ojKg4h%d!Oj=2t$@($H*cYp=5ojw`%7h2Z}PQZkj8 zHnyU&$cE+J-fVGTv6xC^x~7>y%=*hTbMQ1tC?T$}`LkX?<`VP9S5yvcZ?j+tc1qV; zVlFRV!W;{Tdod5XJM>JpmRQhxy8DR-iNv+U1H?jN5mKULq*_ZXCYBHnAvG#Q2A)h2 zqj*}XF|o^RZR&0|tDT&|RIIc%;_%H{*Zrkh5`CK?m2Hmp+O~Fw)rIYHVil3Nfq0Bq zK|D@8L98U6L>iQWv`B~aD0Ktz6tUVV@158zrJ;1EoaggKNzmEKHcRbflf9|MVa0-O zZysT3Y{%*xg4gO?-7trxxz&cv4DQ%w#bzm_$k@MooxDN9-v(mry1-$L7}VT2eQ0}g zv#q(o*l4ev+{&B3E<-UC<5?|<#0|Xe@I6Z~1Uz>e?%f4V0$sR0Lu}_s`z*1Icn)Qt zOq8{jc%FEHh)3Bd2Wu$CAqj&jo@T9W=Ov-Id5XVNc@20`S1=Zn~Hqq9I0X93SFg|5kMtyyH zy*0HatyY^Ni2Q5B>m9@{l#B94c4?3xMtg~USX8^DtkT-Hme@<|Co+duRN^1l@i>iR z3U3>AX<5n9>DW%r65Rp+-y)9i{69n-Cf+9AA>Jk4Lq=pmMW`5=QU49Z`@~V=7?D7H zfcZZF4MY`~_k#ug^G?r&tdkhS99HY!nB|LmxdfE&fW?__F%9Ht(cWsdHDU&05*0V| zdQ>M^sBQ^ygKxCf+a1>K5dt*c7huT@qQt$u%*yxH(j&Efkd~#NkE3ipt0DH8=F zAjNH*7Ee09XVPxB#82v)D;;FI)JGcW)nFo7aa49uWE7ywF8EviFSRF4|aL}Wvg(B#da43y&qmV+ES|y%F*i3Xa4d#cp^0s&=_Sx1}{2vQ%5iuS7 z1S4j3bUSLyVt#H{I}hnYPz@#k3*iN7KrN^PSj+t#c6*x;?eM5nIBk4LgSFY#-YP82 zDUj3JgfF2j4qFp;#ee&RrXvD1p}S9j1~3s%U;~rDWIRa?Xa;uBLW~)OOBPP!I-EnkTEVLfo8E$#5nb06jT@Y$4c^AMqd3Oy;Qf;mT|CotG*bdl^GCn|TJdacpdCyB zQ^7Pa9n8RpyKGFkz1BHmd{5jl*wQx9*`vu~Ywl_0<6i78rVXlhjqUk{+EELdhU^Gi za!t3#7L*4slsBqHb{?F%TVuN&xS*l4aQq8qqq~sL2Y>_j;1$os(lvi{&m6;@vm*x< zu~wHAbGjCAAGlvI#yzAF{GD^eV2jPs2_7Ia|D{jBoIiy>AAkq(^ozj~@DQjS<0AX; zq2*O=wkGVMEln+G3YvJEW?2n4)I*{bn&7SEaz9-*C%1*3h;QfM1~c?jlw1MH8RPL@ponRxsCO&HUPr3_e zZw6bcC2{}3kWTP45B)#s>au>%fNj`ufM?O{4)7eB!-rG}f(myfI=8bdE&w~gOFV!V z5$XUhBM!-j4aD;9`uZB!L-?-+yTI#UH@XMSMf28zy;#8aqxo2#xAX2s?lzq>z^cSK zRda*$zujRs&Q@>?=iav~Z2oI|f2+O8+UA%p@aquIufu2o)-a)v0Nw>3;(Q*w2abUE z!BKDw90wnud(nO9e)IrZh!&v-H-eAA32+je!hcVLPtant1Z_mm;J?qJZAd;AM<~`J zOPhr^QDcNPIaiB=;M++fHpFgHTj4AOgt>H}k8e`fx8iBou=Bxrk5L%o`i9jL$KcibgvfLdINW%_!Ib<7sH!qSqHd>5QbxejLkBX!U(Vg_N!`j$~=|@v<9ul=6HRaVUMyi z?ZR6Nx+no-U_1_(U@VM79jLPtCcs3r7Og|_5dt?y2;}Q?emDODRZxv{H8(!|l~HS< z2Bz>f=byXvZPZ;W)$r?+mbqxO3 zVQs`w#S|;{7tf(7PU{Va!b+U%VLk1HL;2bQ_91XMkHZM`Jo0f%M>5j+LRm)ItXVG7 zjE2=j;yO46j)mjkc(en(h+aZ3uY(hy1=he?^a|RI4x+b^d{nu$zN?hPC%WBo+8ry7 z7VJ46OjZrGHB5ANc1<%0+WBcF!$#Nyo6%16DtZm=T8A?fGj!l6w*b@j^{$|MgvDXw zqcB|ivrcu!*h4K-g&eF}67K%B%RpDw+MS`C+ehbcOle%Us&&{}_}UsSx4Ct3Lg#I) zK(!f!ZcVophqK@utntor6hvrGSIPtDV(o_W;C!?fz0srH_rZm|^${+D52Af&KT7DP zTU_B(K`~u4SqhiA4OtE!LvNx3D4~aZc+7KdYX2mB3a<&SLWepCGo~4Dg>aPIYH#ey zdU^7@CRhvCx#fp&Bi!t=VQ>q2$A!@|JVwvLZRlO}eh)^^!x!C__Y!;=y@!tA2o%L#5R>DPt@UBEgSh>@gwwmn@tTwGK?L;eII}a3o;tCU%99%YXhVj*s zlyXaJ8(+w3v|@lgQHwClh!wQXIS`j#ahQnZ4&&_7ZlS1+#V=GSM7ZldzXli2&OuyP z*Z@C+=ivo-5nh6yqfgKo^eH-v&Y{mXz%Sut_!YbYufng)soyhNklYG3b*1I2?r$BHWyP#f)ruVCIJaalB7tQWJnf$j=n%&qRZ$j zbOl}ANP3W-q!;N;ib)^R7k!PsMc<+C(GTcnbc<(fh~SrnqGC^6&^ks49lA=5k~(Xf z#n#B@&B8X%xYpW6TP==tRXFp->AXbfuHxC-)#Qt#r#3Urfq4POoyOVm_C6ngIlns% zBN>Kkk7PLd2Ib*=S*^iZ&}47cSf*fEa#Ys|MFTa?&Kq!HpiLOkj~^0+uKhHu z#MC95gSr;bgGQHjknv=Kn?)mKqyjUMl%wk%q!QiWDdlVJRemig5;hD-4XNuSQ%EiP z5&eX24pEPCVd3cZ>uY;CI^t^xI9gkkfmf9`UCyR0b(t5kQL-0^g0J{IuCh-`(a(F z9$a2hIjp+4sASlnq1Bbe<;A99C4(xe%ZjTo$Ntt~L`h|dvAlRF?j>~jJB;E{gAEmx z-7tEUk)1(AdTM6Z4jVaw=k!PpkSI@J{b<6rrrVE@<47D~bl@CkTL(FT19W$}lB^{s z;-H|9tbv?FPUf=)4lo>Gao&Kjyj?I$w%|~Qyo&>(UePSsMz-_OEC)O};L#JsepvdF zi={KjS-qoJayCrlfEORe_Boep*j(}fY@f+_~)su{|x$B0d#1!r1*|N51d|ugN#043#9~dJBh0w>&WNH7swstiyR2& zfRqCf9Ee;;zD&MC?j&F30G9J;4#aREiI?6mSJI2OcWbPUUe1Ew#5WF@UgNOUbyo@9 zr^ex=Fd8R-I7Odg!)_V}%_T;YrFn|Q8Iku$oS^Odc>UYYfhgoNRHb$4$wBgM-gNCG z50QtRON-?|+*bH1IH2S}G6z%}$V=qs2YtJ-%5gC_3a3E!IbnQ&U6?`XPHhQKmU7eO3ot7dTfFN)1{P~dsTI4g@ zmNrl|*r75{9_AvzE%KKx(i9wZC(R!ec{|CYD2gU`QY;73IFRmSZ&p__L3#FwL)RRX z59Qy7EKmVdATJ9U9LRLaf~$Kd73Ri1DuRl1Z-}On{+(--jFM9dN=YU2T+8M_4hM2M zkk0|FUhX%=DDZOnpXHdM4g<{s)5c9-P7+yrfTpwo_AXL(mx%PSE?djTE9d@>30Z&jtAzUK&0JXR;f-a#R;t4v41B2ZN`Y5%`oqj8*$K4yAq}KjBLCH(h zdTIl;k=n!)6x)@d9H`{LFb)iN+7+i*_GmKo%- z1GG^bsN%rrb<{5Eb!s=YhXZ3cFpdM`IZ*q5-f>U|dA7gBfw7qFQ|sGR7Ncs~s3sRn z-l5*dEWyisk2>O9Vl@XQtfh`p$9R@lI8gKdn**UvQ6Iar^9=Q=d&6hcmzclQdFldn zk-9{EPJO|FIu2MlP|tw|4ou{LZ3A_g`iiPCM5M#Jx; zsav}%D6S=y(t|LA=rX#T9!OVkU=9Zm2ROWWybe0(A@oqXl21ReZJoz~1^;F^`idvx zN{l^)o7+aBw~0D$A2PZS7(J%OB*xVh$|fz{4C^`hSs5U-|m8=(J~#;3D75 z481xfORLpsQ?t@=6r)YYDxH>w+tM7SjUW2qgDD$ zRa=U~MbHFyW=?CbA^dkB}dNI9(eu#dUUP?bgKT0p7 zm(!2YD>#5t`{f+K|9OG~PjcWX4y@roCkNJXU;_s>abODvwsPQE4&dDQc@FI0z)Ku> zg#)kh(>y`1q@Sc$(NEE<={0l*-AS*d*U{_g4fIBO6TO+WIdFjk*jj(Zfp0kQJqK_k@H+M~J4+n< zPI)KxO4I3=1<;S(X`0?wPU;4DmjD_X(g^-YMt-xVDAsweA_6+70wU z0raYBN#PxtwZE4`+`zsgfL(p3VEOIRW&>YDxATE!xo1QiQki@G*C*yEt4D0B-)TP{D1fUkQ+(zS9yv zJ{68vshntSY{5GiZXmxEKtA)ogS{K4t_uLS-Ko^_ryLq>Gx$wZ?BDsbv#q_=_h$j@ z_G*d#j=1DJXXb{nbDM+%FH}ojb3wwa#5)eoJ+s!X6KnY32;MSq9^`J-;KGHq5%1PI zG=uS0Ha@P~)T*%!o@j5jR@$1{ag*JFi{QeSUY#q8%KqN3wQjPeaymYh*o2RQ)j06s zK#lYM%T)eegl2dNzp+)%Ux?uwGy|*_T+QO!aoNP!-qwcCyWpYf-Xv$BK${o;8|Jt- zsTfuO{PLah^6!StZN1(C*qwI@_V0$x4XmF4_O)usmj8Xm4yybYj^Ymg%u2Jp9iM9D z>tcQIv!ZesK0fHcd=!d$Odx{`Nb8s&CYT9fLOFng)!iJx>F(ZjOgJMY5*S<#*vH{B zVg(#{gAZUs2McFQUHi2>z*hb|A}-ba$m~9P-p3I^9B z4{+ch2XNASXdRtt6}>h*qs~!qn+9XYnv`;ZLXShIucu=(aE)WENwX4{_ik2QKk2 zKNnz3Crn;jdZ@UZS;@ofQx2YFRtZ%6k^`4}sF<|*CBGp*3%K{<$2ta| zkGYMuZDF3qkZ?|Mg#%Z4NMAcwr!c*0hdlgiMN^MG6b-OZN9OZ{2pKhnT|{wsGxce+#>~`a;aZOyi;giTc+kh0510=btUf<+;3fxt=D@9W%t_`H z2949GUpVk95Bj(NQIn&5?i}?k^OyMBpAjy*lTV!5mMK7-Q=@ejM zqIc;m3s`(xr*COvSyn_Ou$~;GImqyzJ2w5_$c(bgbbjt&-@g-yYd){!=RP845G#An%h ze{das#s?gPX6I4zHhhj7U-#^86o8m5O}57A_~3hQ0Q})Xe7K0ei}{xsad=YO{3D&a$ReQk=)l3rVvRbO9UmywZX$w;x{yLolBbt##a zdW$aAT345zX-OY$aWti;ju0|~D&e23WW9^J?d)`1?`5a3Q`u=8RB%wq!Q{2<40a}a zHwRT5Ea6}#Z<|u^*%$X?d0j{Na4cEb-o#%h68KkXZQ!qUVw&+c&E1C#YU#S_#9y{@ z|1^xhmEzn8XYV0w>)E;NJa#_2fW4Q4Y7VAxFpGnE95i&FhhZOJ`MoA~A-jlukb@cy zVtb)o%PwIbVjt$9j)Qs*rt(Wq{M%%1E5#uuzL?a8d8GX3jz)X|x6+EQKJmE~z7Fxv zy@ffP$8F;ZMZ%VFEfJjniRizI_!BHXjQV#>Rn~CoF^fpryunnAkYnUTK?Q#k1C%8!Zj3_&0Bs z;tCT5viXT6{6i90XVrXiZWS`-;UzpUqrI{2cw&-F-q)K5T@!Z76g>|jB&$5tniRZ- zkrVOR28@|=EtUMM7RD4pLLyHLPN#P*vQwwPzths)FVm;-jhR{4S1K(j=3O3?re|CX=0+k^U{>6_&xcvcdaInyM z$dG-5eREv*O>O>m&syAcfXKvj=6|`=;w|j;xPL*`yl%+`<~NG7&&OdmV$#t z94y|zE`c@dG4?ndD0PngOdyK2lRbw| zWjc%9(U!JoojzNeD!C#U+)IS5gW%smkqN&q6Sghj6ZQ(dg8iEPhW(bk#(u|s&;Ee6 zaj+b39dNLMgM&FZl!L=KID&(tI5-*`=ALuE>`iCg0}lLemw(vb1i*vtwCLJbncw}O zp9lz`hy1t7jv__?Soz;8jf%Vkki+j3qYuy{5aNY_<5{7^gjGN)^YkL{H#@f z=00W}eunB4bDp`xe8F7C4^I8Y()g(~ACC}^cn`Tpx<`&j zo=1U4k%!r1fJdoErN>y0$sP`mnH~>&tngUxvDM>QkLNs|_t@$2n#b!Ndp!1eeCBb( zGsH9AQ|qbsO!Lg}%<|0f%=0YuEcdMN9PByNbC~A{&rzPOo)3C%^xW@x%=3HC>t5Jq zdU<$xd5OIOy@I_$y~4dByv$zXy_R})cx~}|#%r6`cCVdY`@P=xI^lK3>$=ws?-1{J zZ>_i9JIy=8JIg!AJI}k+yWG3Nd$9LV?_u5}yhnN4y=Qwroc$RpMc#(LC_+jy*;^pEM;`QQ9;w|E5 z#M{K%#k<9O#Cyg2#qWzh6rT{E5`QW_Cq6H}DE`$a(nsN=^3nL{d{TYVeF}WcJ_CG8 zead|*e8%`p@Tu{s^Rf9%_G$95``qKR&}W6uDxcLp9X=a;Hu-Gv+3NGE&l^5ReLnIz z>GQGAS)b2*F8EyXx#>&!diZ+zihcck1AT*iLw(bINBLTPr}@tCz1w%TFY>*|cb@M8 z-}`(Y@LlD*+PA}Zt?zo@jlP?GpZ0ymcbo5a-(9{R`Cjz>MM6uYl6=WfiB&R1vQV;K zvRATS@}}gV0|Ac&EDu-_@I=7cfcFB92mBUD2Py+o0!IYa z2G$2o44fR;6lf28EO1@m#=y;iTLYgBd@k_C!2N-T1K$aJFYx`q6M?4!PY0d}JR9U0 z6dRNsWC}6|4G1a?8W~g{G%;vWP-9SYP)m>_s4Zx2(EOl#gYFMn81!J!lAwo!9tm0# zv^D6hpihEs1_uSl1m^?~2p$q#89Y3AWN=k*O>kXseelHKNx_Z5j|CqL{xPIqh%!VS zk`kg1NejscDGM1EQWY{LWL!vfNMp!dA*~_pAu~em4w)T-Le_;m6Y^@vo{)VZZ-g8Q zc{}9YkRu@{L%t6AG34ivUqXHh6^Dj|hJ{K)BSWJ?Wua-I*`c|i`JtxJ;?Vw~C82{u zM}{_rwuR0LT@|`6^v%%IpBMOOcdrB77!L378({FmJ}urQ--O+ z(!%n?%EAVQ4GJ3)Ru%S0*qX3SVLQTJ3VS8&)v!0h4u>5HI~jI5>`d6%uph%=xL3G1 z+&A1WJRm$GykB^9cx-rlcw)FFynp!6@Uh{xa7TDs_>}Nz;WNVLhR+YbH~jwah2al| zKOKH3{Hm0ailshMi8N9gEsd2XNRy;;sZN?9&64Iw^Q5KHLDC`8O6e%+Xz5t#cxi*Q zMLJ7*k93}NfpnqtLFp3d!_t+~b<*w99nzPiJEgBlUzZ+}o|T@HekQ#jy(axZdP90s zdQ19i1Qp>C;T0i{@QsLwh>3`cNQh8GBuA(tQX;Y=Oc8@4hDVHysEQaLF(INRqAp@e z#GHsl5i28BMXZkKh*%r3K4N3U=7?7!UX9olu_t1G#DR!I5${C27jY>PMEXP~M2?D_ z6gfX~Y2@n2j>xr<>mxTtZjO99@|DO}BX>paiQFG~Ao5V;+mS!^i|SX^Z&AO4{jT-< zt>2$fAc~4&qC`tu9*cTBYGu@_ zsMS#&QEQ`Kk2)N6ChAJm@6o=|k zqW49=8GSJNaP<??s=Bz8w8c^tI^kqpwH*82v{K8{-`#jgiI3V-zvTF?Jam~*i(HZC?h))Z@wEr~6Q z9Tq!0c4TZ_Y(uOqwlUTodspo2*n4B|k6jr1VC<6E6|qmmu8Lg~+Znqqc4zGV*aNYL zV&9JaB=&6V`PhrGpT~Y1`)eE#2ji$Xk2vo*pEyZeLYywHAkG+995*1YEUqGMNZj~1 zOI%%CL)@gernr_kN8Fq^E^cnzg1C3$PQ{&$I}>*ua8fQ&y45d7so#ozchYX z{Mq=c@!!N>i~k`ZE5V#FAfYs2V8XJ5&V;8Eo=w=Eup{B+guMxGBpggQobYbKk%TLW z-igtPS&7EP;=}=orHKO*M<-em>k=ChCnesM*p@goaYo|ZiOUn8Nj#i*BJpJ6sl?NX zUnX8o{3`Kk;*BJbN=ecur6*-2jZC^LX+_fW zNe7aSBz>H8A?fp^%Sl&~ew0BODWhbJ%vTm6OOVNAN|{=wm1WEFWQ8)5%q$xq8zLJf z8!4-j)ytY>EwWbG6xl2plFgMZkliO+CR;9hO!l~JgKVR0lWdFZW!amuw`6b2-jf}b zeIPp_yD0lY_Lb~w*)`b@vKz9WWPi#Pa=koVo+Zzbo8^`AVe;Yfk@5-hCixWkbot%# zIr4kt3+0RD56d5wKPG=%-YH)%-z486e_6g;zEA$9{4Mzr`7!y2@{{t98a6EWaiHRUuLYDMA%eML$K1B3_ZCNL6GgvK4uXLWN0Dtmv;8teB~or?^+~fMSv2 zF~vH?dc_9CCdGEeZpB-Qw-xUxjw(J-oKc)pTu^+jxU9IMxUTp~aZB;5Ql#`%`YVH! zp~@&_tTI6KIJDE$Ko4h!AWpZco`s7W?PbWX0{9^Je$*(29o_sR-Ta~9OL=~zEQ%O}a zm0YDzC9ASjW>tx*Ts25FR5e^RN@Z0|R83YjtL{>@sixrlgSo0Ds?DmSsw=AB)r?xJ z&Q|BC3)M#TK=o+#81-27cy)uiO+8DE)N|Df)c32Gs+Xx(s8_0=Qm;{OR&P~rQ*T%A zQXf_yRezv9q5fF?nfjvo3-wp(tLmTCx75F=f75tqJT+b#u_j!Tq)}*8niP#*ldj3q zm^CGua?K#kP|a}7NKKWdPSd1m(X?vXHTP)dYUXJcXqIT6)U4KYYSwEuX|`xy*6h^0 zrrDh$N(oBomlBf_pOTcKNYUe}d1gvZN`6XV%Gi{al;tVgQVyq_NclMBOv<^G3n`bh zgjTE#*G6iiwQ<@+tz4U|&C=#-3$#XUv37vAR9mhcsjbz{(yr6))*jQI)=@gKPNECY z1?i%7DxF%V(P?$ry8b$cu3a}xH&ZuT$LZ$j?$te@drOR(;(Vf#>(0#7Eth=iFR`IeRX%Reh9YjjpamMv>?R&&<&tle3Av-W2l$QES>Wrt*kWk+Nm&OVWSF8f0E z=h>IDuV&xKzM1_?_HWsL=75}t98=Daoas6D9oc%cm za^A{$JLlb;FLQlzBXWy!2j-5*9hW;Pw>5W4?)2QdbLZsVm%A``aqdI8kK``PeJXcj z?sK`X=N`;GocnI>`?<$+Kgm6tdp`GK?iab2^T<3!US{5eJX@Y4Z%*EQc?sD{8{-Ze{TMQ{3ZEI^Oxm6mj6Wl zllklOpUr~ z4ip?Jc&Fek}=MTRAYrG}M;rwkp2wT2CbO@{4;U50~(4-97v z=L{DNpBpY4zBk-3+%()W{AT#W$QlETkw%44Z%j948FP&V#sS7MV})_BvC=r)INsP` zY%$ID2Tx48gTxwite9G8iTx;B5++^HteAW1-@tE%y=2;FI&J#Ch$)g5>5IyXs*08stt{#++FG=;Xm8OQMF)!x7acA7 zpy))=$3>qM`xMKIjm2ffBZ{kv#}-!?*A!ce8;aYCXBN*c=8ESPFDzbM{BZH3#mkHL z6n|q5Gsl|cX018jTx=d-E;Cn{hnq*4$C$^PCzx&K$>zJvv(59(_n8-(7n_%vSD06t zpE9p8Z#Hi=?=bH(A2PpVK4Ly*K4t#IeAay4e9?TxeBJzO$%K;HlE#u5C0xmUCCf@W zOV*ccDtWr(*^=!gJ4*JIyjgOvql_pMm-&|Yl?9en zmDQI`ESpr;RJNmRU)dXF2g(kW)8+o + + diff --git a/LifeLog/LifeLog.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/LifeLog.xcscheme b/LifeLog/LifeLog.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/LifeLog.xcscheme new file mode 100644 index 0000000..f8d0b97 --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/LifeLog.xcscheme @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/xcschememanagement.plist b/LifeLog/LifeLog.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..6d5df5a --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + LifeLog.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 6E84E3701F27A700001EB88E + + primary + + + 6E84E3891F27A703001EB88E + + primary + + + 6E84E3941F27A703001EB88E + + primary + + + + + diff --git a/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/LifeLog.xcscheme b/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/LifeLog.xcscheme new file mode 100644 index 0000000..f8d0b97 --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/LifeLog.xcscheme @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/xcschememanagement.plist b/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..6d5df5a --- /dev/null +++ b/LifeLog/LifeLog.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + LifeLog.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 6E84E3701F27A700001EB88E + + primary + + + 6E84E3891F27A703001EB88E + + primary + + + 6E84E3941F27A703001EB88E + + primary + + + + + diff --git a/LifeLog/LifeLog.xcworkspace/contents.xcworkspacedata b/LifeLog/LifeLog.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..12d9496 --- /dev/null +++ b/LifeLog/LifeLog.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/LifeLog/LifeLog.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/UserInterfaceState.xcuserstate b/LifeLog/LifeLog.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..52ae2f1021e9f088f045a146fa464f3469d3823b GIT binary patch literal 55142 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 P`M*0g?f-j01IGUW+amq2 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/LifeLog/LifeLog.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..7ba832c --- /dev/null +++ b/LifeLog/LifeLog.xcworkspace/xcuserdata/PRDCV171MAC.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog.xcworkspace/xcuserdata/PhongNV.xcuserdatad/UserInterfaceState.xcuserstate b/LifeLog/LifeLog.xcworkspace/xcuserdata/PhongNV.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..45578a4a73b0cfc19462baed8de69b2d4bbeb107 GIT binary patch literal 66007 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 ljt$8TqYcD{$42Nz + + diff --git a/LifeLog/LifeLog/AppDelegate.h b/LifeLog/LifeLog/AppDelegate.h new file mode 100644 index 0000000..cb5fb87 --- /dev/null +++ b/LifeLog/LifeLog/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; ++ (AppDelegate *)sharedAppDelegate; +- (void)gotoMainMenu; +@end + diff --git a/LifeLog/LifeLog/AppDelegate.m b/LifeLog/LifeLog/AppDelegate.m new file mode 100644 index 0000000..2ceb599 --- /dev/null +++ b/LifeLog/LifeLog/AppDelegate.m @@ -0,0 +1,102 @@ +// +// AppDelegate.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "AppDelegate.h" +#import "LoginViewController.h" +#import "HomeViewController.h" +#import "HistoryViewController.h" +#import "RankingViewController.h" +#import "MapViewController.h" +#import "SNSViewController.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + ++ (AppDelegate *)sharedAppDelegate { + return (AppDelegate *)[UIApplication sharedApplication].delegate; +} + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"User_Login"]) { + [self gotoMainMenu]; + } + else { + LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil]; + UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:loginVC]; + self.window.rootViewController = navigation; + [self.window makeKeyAndVisible]; + } + + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +- (void)gotoMainMenu +{ + UITabBarController *tabBarViewController = [[UITabBarController alloc] init]; + + HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; + UINavigationController *naviToday = [[UINavigationController alloc] initWithRootViewController:homeVC]; + naviToday.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"lifelog.tapbar.today", @"") image:[UIImage imageNamed:@"tapbar_today"] tag:1]; + naviToday.navigationBar.hidden = YES; + + HistoryViewController *historyVC = [[HistoryViewController alloc] initWithNibName:@"HistoryViewController" bundle:nil]; + UINavigationController *naviHistory = [[UINavigationController alloc] initWithRootViewController:historyVC]; + naviHistory.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"lifelog.tapbar.history", @"") image:[UIImage imageNamed:@"tapbar_history"] tag:2]; + + RankingViewController *rankingVC = [[RankingViewController alloc] initWithNibName:@"RankingViewController" bundle:nil]; + UINavigationController *naviRanking = [[UINavigationController alloc] initWithRootViewController:rankingVC]; + naviRanking.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"lifelog.tapbar.ranking", @"") image:[UIImage imageNamed:@"tapbar_ranking"] tag:3]; + + MapViewController *mapVC = [[MapViewController alloc] initWithNibName:@"MapViewController" bundle:nil]; + UINavigationController *naviMap = [[UINavigationController alloc] initWithRootViewController:mapVC]; + naviMap.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"lifelog.tapbar.map", @"") image:[UIImage imageNamed:@"tapbar_map"] tag:4]; + + SNSViewController *snsVC = [[SNSViewController alloc] initWithNibName:@"SNSViewController" bundle:nil]; + UINavigationController *naviSNS = [[UINavigationController alloc] initWithRootViewController:snsVC]; + naviSNS.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"lifelog.tapbar.sns", @"") image:[UIImage imageNamed:@"tapbar_sns"] tag:5]; + + tabBarViewController.viewControllers = [NSArray arrayWithObjects:naviToday, naviHistory, naviRanking, naviMap, naviSNS, nil]; + + self.window.rootViewController = tabBarViewController; + [self.window makeKeyAndVisible]; +} + +@end diff --git a/LifeLog/LifeLog/Assets.xcassets/AppIcon.appiconset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..1d060ed --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,93 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/Contents.json new file mode 100644 index 0000000..f386526 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "avatar_default_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "avatar_default_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "avatar_default_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/avatar_default_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/avatar_default_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..40e15e8c43aec3ff7e6364ba9f205321bb83c22a GIT binary patch literal 3020 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 IH1nYS8>~-OrT_o{ literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/avatar_default_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/avatar_default.imageset/avatar_default_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f53d0079617be852ddd6bfadd70a94bfab45e6d2 GIT binary patch literal 6578 zcma)hcT`i)+HOJ%HCX8p1QkK56d}?C4I&V_bO-{{i;&PuAQY9N{t!f@DIEeLy_0}6 zX`v$_5Kx5B5iv+87tcBOeE0tM&8*oo^X_M!=Y40bS@W*FpBcinIav8v0RRAp&i%W_ zr+x0<#>{m3Oc-{NJnew~#@d>IiXj2Y>4e4izNJ3^z;^y`0|GKKc}@YAZl)GU3w=GP zqmP%AgOkrAXQ?1B-%~UIpb`W<9eOz<9fX3sJiYy)L8`+4LO@T)f6dauLjQswJyeA) z^bLiyeEgh+6r|*(WQ5gNg@lAu{G1*`jqk$#v;1_XD(s3x`a-3p0|Nu40_CK9{9L4E zm6esHWo}B}yeWB#kn|7sMmhvZdi#s~o8DhZqBF5fBDs9RsMzi|7`!! zQIY;D{{J}h?@0e;Jq=ZjRYm&0+or~<*CA>N0C4}*xqHVn2)L2yHefRm++$MBv(AJ0 zBs;e;#l+8!$KoBHaXh1A$S6oHEsgDnkNXf&GE?eqTKgsbx2}0Xs#Qtpbt7Yi0u&#! z4l|>s-n5>Lq9Z^5`V<=v|3DkB=Ggq!o`90T;~%!^!OPjVm!*$X0ynb)e`GGJEC*-% zZ^pg|#}-@U{%>mnmr{PhJjuX5oF_|_FYHM9knTAQ5oOPZcRBbYa(*RD!oVBbCxuwa;hi;ngsGeC?)L)qpS z_P{N4%?RsnD7lZs_snccc?om%I9UNW$lfJ7x$Xj&<~ka>=voucsm|E!aNaZK&i2tR zqGnz9A}B0!T776ibm5T_H&P`__O7zmMVZwk)8keiNVtM{8FvE-qkG(H2n1fEX59>UL@Bj=!!IfE`H)j z{)Uomc;tPp-BDEqJdBs}T~c8_Zc}jD7&ic~;F^2)B^&sxbb8L!n;@IYx8;Hu?BX_Z z9TQExzx9^*ie)kt+GN#c9iec|WOxJjq3u{$xv~FkdcxF9Z*L%17^4)XuPr3P~o`8YpJo^ z#C&`ac?AO3b6c2pt!MO(RmZR`_^!lZsTEN~4Q;TOE7jdPsUwo1sKe>{7aSdQM020t z^%l;+_sFACVBD9oLoVt*{+O~Dh?7iz`H)yU>;Wx9E#5*fHca=~#XHSoenZmxme$DT zI4|xc#46y+M48(L)4rh0QV8kkm{;RyI1^SjP%)Vl{pq2CSCJpKRka$?9=kBi9+1Loxmy3m?fe@)x-P_*{S)?a%L|N|r<%@lJe=t(5UK`AWg}g96}* zB$zvqCd0$qAy`pZ2`sh@#nX6XQzV*W``RzfI_>zew@eF{_r+!zCkv`C z-}MHo=jH|9;!9DBMM(6bQEg%ykg|u^U(j zhd{Qkv-=!mO+5k#UM zF;4A-2C-v5l}e12mQ1oZwubnBOMgTC?*7L{#@5AhcxnO&xgY|Qpb|IHM0_*5*_$Em znzxupCKEr2p5dn}b&2OIz9>iz(kfS1&=ue}(G;N@hz_W#2c7Vvxo}tOIb1~4O-YWr9V~1SptMM z3D1|%^s_#q>x`*(>Opk}Cm~aJjX^4L{<=czfqv=nt3S|_n&&<^@Wj4Rng&;h`=`R| z3+~(iAswMNCi;M=CSH!wh}MojBr<(LlW3?-={f=o(xD%LdbP}{71hb=3 z{o+csUzFOWD0*7|Ky$^Wf9+lSF2!v+to8KilgRaEc)C8Kukih+RBM4Xf5mZ2C9acq}2{9gj;ItBzK=LD+Rb;(LeWw?-9TJ3)5+?t0bk z>pVL~el#hA_5cRr%yH9!y9|~xvbUv945w#1b=UYpQCJCm<(^*Nst;-;Z{y=h#QVxAI zGn8{*4Qo@!TJONktWWu@W};lvve%2sx@Tz~97Jp~2dDMx3yD!7SM#!|_j54vbRh}u zTu#)6b6#M-p94`}U&62C9eej~+6B&>J$PA;Y;xhtC!SF&Z97vH=JYJ!MvwbhcKPJs zU;{PRX8H`0V8oV|nM!dA{VH-3qe}ct@SYvQWSZkA(UXxCKU9-bH@-ba`Duvc!dL7p ztk{$ha(L}jzsWGZcEIQpIXbZBGc?cpsVX5K#WS#WM?79vgtJ) zGgz+X(xZO1QRQRQcccLPN`H>-%*GkH(T)Voz2mExN1&={FUr(eya&4d2tT505g8qe z!)80v_r_Vs9um4>>T#y;SLGZ?pO=v5uJ0(Y9$kx&pt*BgZQQf&v1X@;+ZBZ}FkRMN zQamFfTeU}UBu5}5L~=1o05{eIb@MJq5o)lEq+905)|2VCnZrN4AP~as%P>6hs;9l= zV!>Au1Kj*!8pn;xD2<%3Cmjmb$R|w)rFryCgobl){Q)2QBAl_Wy$tB<fM_i{zLZ(5~SWiusEZJcTX?$m-ti#N5nepA`E9oTwy zxnCyv>E7F5_sF*ZzQGp>h5zg_MX?=0C=%)w=bm zYgT>QDaLO<=nYdMzobW0eA$BB*jgOGAZM{a`)Fk9K#BW}jr+CM#5PpnRkpp>mxaYp zm9t(k)!o(7ZZ-a+8%!QuSW{6@&BLFCEip}E>~TbHZ#@_D{CM#8YW__+DfBonDFXA7 zxO%MhK2y!w@5bZk4}6x#J{PiJ2^6Yxo|zb>4g=TGX;+sEklY-Wc=a4^rh2jmw|kk9yx zbZ?Y0gsT&UXtHCAI`t6u2((Uw{YR*YKD8eC@V&g^}FXCx#`(f8%d2WL4Z;| zSpW6!}itI<2=pGK}e0s&WIq^Hg;|d%CsdK8T!M5Cq}$a$AR_XlhAOVL6`C7iG_oFIu*CUQT3JZ7(;qLrToUjW){6bGs0aySy0Qjv;D=#&{=wWP|j+fdzWsg zdOma#{XPYXxNm=3X^x$1vVvu++ME$v88ga;8sq(a-ni7UFoJhT`&!2VB1w^%|zO1-j&O-WL zJN@xF5|@f_JJZj+QuivzhHWo_zKQ44(C((T#9Fzt@40*h^TWm+C2&F#Fk+xMvk<|3 zjfl8$0rZ(!xo?rADwmhbTAPBA(#6-f{Gz0?Gr<-w%9QDdtal1ooLoFbHTKDSLK@DG z0+FagMqi&w^D2Gr4sn^8u8?Q9s9Nb7JGIysS*Ro7wRRc;62r`M(1ykgqsxZv`oi1U z$e#CmoI%Up@r!7l%jUce$Tkp8RPRxvAQaGlN1J(%C;r<9vBT%>tru+G7PW63c@e#? zU{gm8?aPJ~D2b@oU9DvUHNEPI{&E`cELL7DcmH~OIEV7(`pmxs=i5Ra0=#38f+;4! zW%B}rk*Z;?Kd`3#<4PmZ%*ZrH4;VyIe=2kJ>7lAf4lTSLIHl3V>~{_u|Bmlt%ed~* z3VKT>hDN?%G0p?e(u+5Q77TM_q)|I=Z2Pa&T-%9V?wBI$k`)bI>EpHh=)&kX(cE!E z+ILl!{&4Olb~;fS+O!WE%4n&x6Z>bkwOv^F{3orBmk|=q;#UljT+Y zOE0aufRGHLigB{2XuISJu*;xZ2)NXkruh!~b7l)%e75JtXc7{Kti#yY?H$s#(a%9B?wz!*NokrfUS`H)r1S_0U<5()Mol7*553z z8}->gdLaiEpXw)$m6#lDo@Qu)w@2dvH6QC2!w$v5k^LT|hn9?i#Ey%9B0w|N4uhEk zgXFBFwU!I0PP(H@z}7Xy1^1flq1GZrZ%NoH0<_zaaipM1TLh$rgOO&ou{5Njr=<30<;0Q)CnA zbCD+s)r%qw25j%O8qHAVY956}DBR^U+2r+=#Ks}d9qgwV^oDUOYSjx1*{gm>!fq4u z&v*Mds{tyy?HO{0HXmE>AMBha_%cd1o)ad)yKCDQmDsTLuj%>K+T*`PMu*~hcACY^ z=Z7)0m&frsC7$!b>6|bx!R(349(mB)2%al~t@iB87&mHyucA@|ekXeOk9`)2ZVDsT zK)hMLNly$C=Hbw~TjzBi=K<^B^}P}_SJ!;seNSHD%}+xTgdoWwLQ36k-gc9jVTfn@ zn90XC9l5;s4zcQ0cdM6Du>zQPZ!J0x_c+v?Rm}1O+W>B8XwPy^zO*b$2D_Ht>c%tV#mZP*=Oa( zgYBc&O+g^}FW~}-0$e|rqu^8zM3XHm*jOAiaot7VdFF__L2wSeW9k|Y-j`2LTaG$0 zGQHm;&?ZVN!(=nS0%-vZN{xptMD0Rv+QZ;jSHnMXb#CMx8-F1+#^p{HvIY+eB)#Fq zlksn(hU0&cyKz zTvNI4U@Ffy1ggeOGDYMZp>7npvU3qG%h!wyTwHMT<(Q@OK_|-zfU$e2Ib%D=;Gx*k z{$~MKu~Ex7W-t3hPZ3J>`L#7)-hmh$GQ(tHs-ZLA%|rz~9qvv)3-+Gqk}p%QdJo(o zDgbrNMkSk`y;<7%;of@Yb=rdlfQ{sfyHIR$vtVNBi;k>Hu9iuEvk9Q>M&p(<^huXX zcs-w9BdlY=2{{eo+LOjHH3)7pLZr2MTZiZ%gmNCyT%*D3!B-ORhVBz=bLqXKNV)!2 z>U@?xwq{5Tmm`&Zl`x=u-K(J*x%WV6uYx;~fO$rj*5n|7eARqP-g@&lg|mg|lpVS4 zt4h2uVcORBU#RnkJez=O%qzdy30=^ydIi|axZ1XAwAy+3Re)aX!uQEoqfH$`C1#t! z;;F~ACuusCVGCE>X`P~=TD9Q0u1%#hw! zpa)r;$6Imt)rZe?lL_#j?Tp;c?~yuQ9|t>?T6%XPamv2T$g38Ay1q$@%;j_}$#7Z? z!jc?bH=p%JZ{b7`SAJQI^h$0k3f4-^F~j7!-De0hM5yfbfSbe37Ypg3uy^<^N^$oX zkOZxqYi6xrSbP1r{p8wmQliH~AyeSbCQxQ$*B_Y<9w)wVpoC+cLUL`O76Ic@-B@hGoV+?cJGK7!MU~NsOI!^E(x0)kSSe7I^gXKNp{cB2} z#y&A`wf??f!vS>`5DUH?ppc;9cv3eRNeQ1)M;l<|Bsb8gxrZ_&JI+9ioB~g5=LfKr zMvpP9cG-d3)#nIbEO#^ z5!%d}+#@cqmRaB7&dleZyYd5lTT3d&!@+?xEB&5b#n>}M^Z4%u1J5BoZiq@A-qpDV;ua0oZXf)ja z6!W0Rpj|dJnCc|j@J~gi4N^%r^YY~|nmZ^dz@G69b!UCi%jlj&?wBpB$7P6C&(1~P zk%lwfSns>IXEl!j5$6*lC_d{;vsCgtg1>k%2DD*V5Sir5bOthVU5WpZ^3bMhdS5_P zl=Jw5EXQ$s!gtOezMHHTjBa_#3Z}OXl|S<1Rq-F(t;sAI%Szev`EQ{m6sj_TMZ26O z?>J%M1i>e0$&v8S3#;O$gtkj{(GIP}Gh76GOX#E5{sVK-7Tyo+nMJ!qwf$!~K=L-B zQ=ML^7O-X-xd^di_4););+Sc@-S4aViX1s~qF0u+59?CEu8?K$fsIn34x5CHAR47# zk!mtghXZE>f*L?P{j%mvS(d)VKCnDEG})XMTw1qDwv2z+MF^XRkj{(xQ#er zhFH^Q7DM{SvXC0>y2~l1h4#0UIwNvMDz8hkrAOp2c~Fsuv+&#WA*<-PZ{PT12m{2+ zlprZJ_N9BlRyf9|31`i_D4ShIneRAL5T<;nA@AJ{XqJKA{Z;hB%vBpA-Jr32QG&QT zFfThaLKpW*ugAQ{e}uw^FkQ{3Kj@qrNHgUse$%;(JCNQ06g?OB1e#Ph7PjASid+xP z@)^HsD+(b9+B35Wm7nztyRrP;*ysmWI*e9+MB)}mg>8KDYO@uU8x?zzaL`XTiO!QM zhf>fP#H`&9$2DljoX2erk|R1G`PHNlCU#=S&nO!Svas{`RZ{UuZj!>U2tg;)rH8~j zw}17wLvv^`AQ*80KIvW&(*jcAx2faad%?)=1kDN5&EC3Kf1A?V>KgfHaL6(@#o2b* n%B-#AfBW71e{k&*+b5sp*A}j^IhgRJmLQ6oThF+wF9(pf9P(X=vl&S>jpmZTX1QJoCD7{AoL8^dsA%Fsg z7Dc+0s05G}qzl3?zTbPld+-1E=6O!`oRis^o!Ob$*_lle;<_oAiI<6nh6a4~im?^7 zrTn`XfYfh2+tp{(=3KCqsS!=h2>&YefidWcV=xU3GyA{m98F#U4;8@C+r}Zp;hKfk zoj`wicaOl^Ncjl=ASyHsjZTCX_0}I5;w~KF?-vlP6`?Eo9|$e#{lC`=qQd_H3Gvkx zb-0EQh6mn93aiSi$SaEKF$oI`>)iM7)Uq-*`EPgXldh;&NJx;DfeBk}N z3QC%qnhJ_A1sF_@3LzI984%(gAr}xV_CHAeFFeM`;5+xdgF?Im1BCzKb-x`L8lo#I z`j626e*R~iA>N+H5!|FT78P~qP%3QF>d3jd3n+EwS@TP@4`-bgCtfB5y3bp8YR z|9badIywsfi2pwZ^FN&a=Pi|0JtiH6{}r1alSPlDBMps$=~ZJxn}~B8b4S^i!b8P_ zQk58(FI~c+R&9?T8$9~hX9BzRmuN{4a#Ow zf8)p9aZ@?VbIV7TlDl%J3khdRjx%-|aZD%E=T1iUGW%ulbwW(~T9K<;4bd_u2cLf2 z%#F!Ta9J)mlRpU^_|V0K^g2FuHv;xASa|)-#-U>Qxa^G4P@Mfw)Yvw4(cN%z~>@hRhlijmJVkT9ROd`}| z0j3GIhT8Wkf1`dy`3>75?I3nxnW0EK&-d;|BV8W`Lgalq4Mie|%{d-|v*RQD6D&Fpu(Qq^)(+mOW*-%Hk^!TeS%VT~fyo zqJYh(hY6N<9j8qH^^gi1HAU&n1~BUj5L%kCc{fIwg9iy36KPS%`RL5ytrrFM1etAp zh#;$KpGs@SY$D341k_<^WT{8CY_JJ)5hS#jE#2y|w3rx19WasKF#ze7UAP38bSsNkR-VrFO4 zEHuj1r0K6kgnYE#t}e5-ja$+4`rcHB_U!QCwZ+`YC1K>wf@N0y>~74o3OkH@4A#>? zS`8BOxCwk$sL5j*mao^mu_HT+pUc{(Ul_;Vm(3`wW!(ZhL+d*Q^a=!cPBFw~o{pTE zgFlgn4u{4o?bBti6xI#UVYJ~CuDvhk=+4(#lo@{PaLuV2^w}}!%W#K`ec5;l%T4y2 zJxX)T?1w2TM+CfXQ49>SoibbJYlwlVFen|UlEiT!J%ya3M9MV9?=U1n;#-caK&oN6 zq7@oOxzbJkR#?NU_3(6%WZx6j!)!F&{3O6+Js=w=$lS%P2PtC7or+Sf(iA5Y&G)J` zcCzzC=y5>1!`5>!e8QqQF zRtK-V{JQ@~tx(aSLfC6jn}dvqt4o}-Hc;f{NKIr-IJ+<}5ToK}GW<)TOlZ(dp9%RY zmgP)5BNF*t9iHo(OF62x2pj`gpI>_tcOBMYRhTQ6`56d}H+E;CI;v5TFOQsgY*$Z` z5c_|lHT=K&Jy=kK9Q2da;lQlW+^|ex8CW*V8pceUZxy-#znZ~PN zjtlx}Lt(I(arT>DWugcbAFFi3)IQ(u`Yx6;`3`lC0RpRMmE64$^q!20H%9?(C|FWmiLO>28WCihHU2LffomN<$X3NaxU zwlMX%RTCC7cMo;mUrd8!wp5eKo<&3&1xLoGLwnQ!&ywGCa0P~}YO9Un4DnHXLotw3 zktz#*wm$}SJtLfHky{K~tbwe^Qu&;EzD7&(wmy~>lRQL2&zbzGWSD67YYg|}!R>mF z+wtEn2?4=;20uWPpOf}Th(yr}epZNsGzzN2t)>|6{=xvcScrYtx``qI zNV>SzZ`dC10V~?vNFl~9K0P4<3=5HG{De;_6!8{gzr`YcA-hcPBJcVL#_T>aBv)ND z6)RCBWn6N|RCkD(n~9Boi23T1ot9gL zKS}K+fy$jl=c-lS5k9ct&{q;aa$I;sSjz7iO{}LRk}jx(c5*@sLmgb1C*^oz3-8z^ zortJ#hvi-?D}@)Q``f=zR$yc`UDDq|+Xtc-n_oQNH!I=8~RRq9X zxJE34n2O0FtcZyKWODEE7Pad}E5Dj!?KLt*!-7nc(<_BWPEC8Yjjll;t*qn#TDwmt zJCxR-Ibwa~y7Wul4*?9|xF!KsEGSxZRJyy19foQaE5xong;BmQy8=7qJ2W{S!6Ap4 zI{h8`43nxmFmGQ_h$~AzWM`g3J)dJ?lrba6|j=ezkG(Z|Z9^WBiNM|C(hR zjaZha+aA88HS>v8ca4&vF)5%9OPl8+`kk|UAl)$i>Zx;+GD{Z2#A zWh|CqdZIW>QprWo%gwE65IP>))1JL z#C)R!q@xGQ7|D~?`1;}5J!h>4sv-W?Ne(&HaaDv5W&Da6$Xo2`>63aflP+qMsI0w_v-Z9e&@JZ6n?gJ{$Q=L(5`Y`USXGEt6DW3k= zKO_|0m>OWrzdW$y-at#s{@e;I=!M&*^I2}aIN_bFqU=aH>MXnS5ue?=rmJ#_QBjVA zDb=7(YTnZ@K79X>h9g6RBROhsntmJQ?SZ#`>%ihI;mL=sq4mh#qfT7lXakM!w^>Uq z{;m0OpMiqpxh0auZ@SbMppKHD;0`}2n&pVqo0~=o+YY7MkH%bqf+BVsZOcqvW~wYG zo|nz2iI_B50Bhn^|Aj!h4=?!cINdt%eJK(QExr{fQn?0RGIKAWrL7#q*-z^DU&%e) zxcylmAZBUly3C(F!{>v#1)IM zGEql;t32F`C4!sf6~uv2j&Bz?yc}X(nXqZSk~(|RHXyvboC^nfI>f(dt<`^q_@~wX zV=^%RXqS7|eHD6_GT*bo;uv|rUFLDvGaeJyi`S2E(5R@FJGMb;y%=6=7px(Nrs(~J@Y;@R+!eDo@=toXa_OQO51*sQ|j3Nv;JZhjKsx;U98>-$lt3 z@97b3$)UGOe7i#hG(|rP zod~-J&Y&9W&IsCB&&o)q)R#qvt%258^us_RjTK=SihE!B+fhO=Z+80b+-EYLu;M7L z^4^sRT#$(tqou~qU)5-D~Yvn`RX^>eajQVAXkB&F3wb=F^>D^ z31xpP>@Y#I)!kO|>Oj^9#(`#Ek5i>FE@(64iU|v+%knpYjwL&6ctb(pNZ z9=mU!jh3eun+oOI{(??!GQi`PCK`Nq1F8Q0d3A#4e6agq4{EDSsbMa3q;pb$>@Q#W zsbezHLdU}`*X||dC@m5zKf6@1XZ&x07{SZ?7O*ZbAb;w44KY~p`+V7bzo{6=9!~Bc zcM36M^C}*IfCFPVkkd9VTbq<&n@{qsyKd@SjUXKxqx=PDeNtHP`}HQSG<5DkAA&1P zu7wqJ;?%q`6|0d8E5sN{Ot>7)OZ4wHDlpTC#^Q|4iSDRE^}1H z&S=eO^4tH01kQb-l3B9dL-6i#kn9i8TzT5-2_|`NRY2u+49M^1?fK*Uw7x`X>R!zH zVRA(Iy0+jvyC5UB#vMj^hqHM3wI5L|Vp%PT$)jJZ=v#jo zwo#vt%UB z_8M_dW2R65IoUCPb>h8lhuCiWLT7i~F)vtQsRVz^UL#CN@_F7^-a-!oKoqXH@BaOV z`y|ELf9LCi7cpeD(~kB%%d009lm=2Y4!^Ek=KpZ_6D6JUnPSsY)4kl1Yx`}LJ|~Rl z&_*1^32K;a4n0ABZ#Dwp5o3y$)vN^kkI{E2zx_!l(wvC0_`0`^zaDu7 zsFLYsRa(!djR6|n`=zC*J7?yNT6tX%>4PHL?^ln0RtS5QCv7pyD}&k+y)(e|x_1k+ zz!J+bV>bm`$Yl`Wd(zE?{c}F==2%+AHS3fFmAx4w4zHd}o*fxC7jn&;L3pXFkVkef zHO8nv+OB&jFKU5rfwC>teaTG;8K2%#u6x{v_hyl`w*O{wUP`1XglDJL?aurL=;Zc( zB-BQ&n6(`NZGyG8qXZ_}`)fdYe6Z5vkEvLc7cvYIVJ6VS(I;I}Fc#;1EvM7ox4wg| zQ_+!WMt)+vLnTLVe*u|qQfxQ^=0lYfqpi8JDr5qvrg7n4@R99lQT2`Qi)ES*(W}Mb zI-f>96FXhT7)+@UqcylYHt<4o!+i7+4g6fop5Ncu*EGRRgFIu?uQn9$LmSXLDwi?Y zur(z6%`HG7q_7)nF@Mko@2aM*l^o2%!`xr}Hv!JM_RC+zpS3x0vjG?Ftb=c5FIOF) z(MWIcCUNEe#xo4UJGUC=v7Tp@+unWr*4m&zB_h9=i)OWQwEg0#&bn^y2>xZTgz5p)Nd< zR~7(gV*djhl3B}A%ZN4e0>&tRtq%Je;q~ho)$t)0x0h#;td2BT+9db6^?SGL3yK=5 zgSkWhOd;pRaNXCt+!%o7V_c=XjYaTU&D~iUp%J{ z%I%mKyfwWYr<)UM0oy7hZHV~m2tMu)Yv^y7UQP@uKcE^gGyGw7Hq(z3JH=dVAtN%r z6Jy5gWLTlop?~60UM24*?e<`Mnwr;m2V*8IbN5=~LLsde=-wo_=zww@9A)cN+)4rs zcE6!Ss%x2xS?EMo-gNSx65`K4EO7G z_wj?XcP3O{H>ME5Luo~naVDUErw&aE7nv4EvB?S-kXu_ARt$C=uh}?k4o^8l6Q3n1 zFe?7aqdW`x5Vg!Y_+IP>kn;!Pxb?ilDK3_#6ZVG ztE(CcJPs1wp#zsv?3Y`Rqg9=(W8`=7W=o$be56%`rt^vv0=W4|>AvlLv|2_|AQO^% zi4=ArVJJ}Wq@7YnUwZB_TA*?;;7xjD2q7Rpmcuad&Kq|cDGO-?u;`-4hu$nrSAuUw zgezDdLg>rJa$``Fsz}~*Rq1!SI#KmU#JKA*+Wt(W2rRjMKR9w_nAmX;eTX;=aUefs zKuG}(Dqu0Q){#lF4Q%s#^8&y04sxHP=NkVl>gNhyv(oYGe5YW7?8v3X&yGS49m>_+ zj_y0~AgCdy@X(`Sa_F+r9P(PWJscfj8DSoAL+a5nIU?JmeNk`7Z6-A_C6voa;!B;C zyi9&EL+GK*u}OkR1{#|IX?EWC3ciglzvGiq8KT2WXhGfdjZ><-Kf9J&FwF`GDIVTZ zU=~=ouzn{dS|VEU{YaY->_i;sP^sFw`wWcD<7}S&Cg>2wH(980@$LCx})) z`DQy?a_1nh+*F+GXg6 zKz5&#wnX-4OiGd(84qmlg+(kO_USXx2PSt*>+T~EZ90u}qjaiKHLR)FdZI#acuzco zZ3245VE|voh@V2a-E{UE?(DfjhcWq>9%$WeDNW3~@z6R_mVIy_z+oj`HX7EUU~}K) zf}o98-<-faU*7S4H;t)S?m=ta5FZ7c8k@=C@Z*ekSpCvQ1hLxG(t-)&MrNJ4aU}Gn!qQR1# z;^CH^>NL9v0Pqn7Sz`s?*f23ujm^cNFp#Oa-Qy zD>P%96HwDy`SvV8zWCHCUlx6pgJJ7@1gw~O_4d(hU0ocl$!X6#bn)4-AS z>#4M6tK3HCDt{{pZH~DfMXvrlaz#d}eXSmEb+*k}o9B$t%t*xM1;MJ1YL2M$UK*5{ zD&rdX?gk{{Y=m`;Pz8Hl`n#nvcJTUsL+bsTp3l;Cn^f!@7wQ`_w^qoY;JrH}S8Oa_ zjD(GMNU99$LSp+^3~!8Nw8~dJl$t&j!G%+@{*yj^4|)Zt{48dzB(4H)>TjAZ{#46| zR3Y11`TEHs+rglO#Obvbi)clm8oy4ZXyK5*ZLDMc zp=#Q#A-fJ5Ux{l`#WQLp)ZM5-j_y)^F5TOqKVcC%Hdd^LN3yf6DSiQdEblE8 zOIxpAckSA+3Gy_`BBb$<(5RlFx?Uf}KSBsH3np)i*=I zbIfw>1fMa-irmC|g|(~84c-eR?L!y;=>xi%6Z`3{>y7livCPQtJ@QodJufa|+WGXK zd3?}nHCwsWD@LO4k@rw^Y`Mo-pS49q9vnA?E=&q9S+N21`A;v&uD_r)`P_3VO&l(I zcuWn#VLSOGXpXY$9eX^UH#{#eWoNoBw}{1A?sr|?BPwT?ZEl^YjsZ)%K$TTRF#+3_ zj!*5i1mkVmM_aYS15I3>20n=Ex(tbEm8{Jiv`EG>TFek)`o~o%?phCU5E6#!f9KevwYYC<~6!9Bgvep}kVosLsjYl!oYo-@e?FFs8!Ohv|?5HoQZ)Y|z@MfzS zY@{pWU-yo%zH5tFx^`W=k?rSmRuW#kiLIl?p|_R!$)h(fNzWu}wk!Ka5u>?ASLLC+Ye zesDQD@xXuQ9qH3R+CgNUNoFh!CE8d2^l*V>dZ%KV6XxF32-vFy_5=f!^BjE0O0}(x zBVq2ZsFFy3=-<#Dm+9`LrPQnoiGgNBs@{|R`}>OUY;%5Odv{Irso_8eE0)|f^kska zml-~~2`p>xS*Uc4o#%lT``t0Jnl)@`D=ZGy->le3H4jJ*g<@IER5%% zi4si8?(JgQVzEqk*krj=6FIk41zwb@1{Y zU&o($Ny}P=GJp>%lPC6PW4pxHlMpqE)!^j;~b@%zxO2m=xY76qV))1iV z?)S=`{2pyMCm0Tp16^>)kt%VL9;TKgOolykcNF>_yD3`DwWe zOme7+8LCeGmF7m6X#sWF@@fTGk@VMi$Xp(6qi{Dpv>q6JxJSXIB^84+hsQh%V+x$@ zfMW|!BS*0dtgbA@EL}XOm&=U>0moxbkPXzo>Yp+Wz3Dgb71;C67;>2U`mbdJ6hQpY zHdJ}uW1bHViHqD~3S{Yzi==CVA%qEBU5s7qF{;s0(b75~^vaaSWpK+=iqlF%2PWdT0@z0RoAy~Jw&RHH-NqhkSEzc$sKb_x|EH*cbDDv<6v z9ym7sMR>W{gbCfOszm4h{(&3vskr*$(w*;jNE^5+ocBAam|X5oK_bF$!X#ibmT+r^vKT#&7BLc1WTTLN*^?`Wiw{J*^3LKoov5jL;W(KazKpjj3%ky8 z&2f%XwEvx&;=={@7-)y8jhb>$ela60`jRjgx~h#0np&JAo7)Vzsg|XBeqYPb6Q8L z3CQ--3Do~O=%taBxz_UpK3mH$Tnv5z6zgVrn8SJdNiwa|36I0q$K{{lF$@+7gh0HM%u+RBxN93w!?)v#=lSjf{$c5Fa zz=XT-oo}!}Nh;A< zlQkeN&BM&2-@2|JR#0~jR}p>h<#Ysj-Md%*qJz?Zs2S-)PA`Sj7qbli$eH0MBq6`W z7ArpKp=HugA7RsSg_WC`C81PQz%Z!=f%%Jsp*tcw+V)v`qb1*9zr*WmUffU7T}VXP z6Y%G?286x%s-O13)}2MzwY&R!-uAD2XaZtOpFO^+ZX~8cXyl`2U#FbuW(-zza?0ZT zrhw+TV{S7rNo&3q1qR4mTTTvLd=FMj+o?Eo3|hPMXU#|#yzH!I_q~g=CL?kO#YHf7 zX@&-gUdJ3@$jugmAFjWG4KltRzGR|=7s6M0y)RC8yJP>z#$w5lbgW_$$*QTqG z)xo7Fcr#WdBhy|&g5?GJY1IMdj3Y*?L$pISK`k#pm-losW~hx#OL_rZ7=b~lW~4uz z*zfJ}ktwlvPkA8W;j!a*@172a*g!dGqczg~LW_pYi$O{@M$fdP>O9M1bW&hVuu6ya zN%Ua_V)d1ZPu;==hQOa5PLlzy4C+0vjgY@9s1lAhkm3i?f$HaWJ`z`=^Jbx~g|4|r z7=$cjSAns8`#E-tWlAo~Y2(3nNb1L-Y2vahSjb^UGWFO^l=s}3`Qbv3C5Dj4 z+#?ZUNAEt;(_)EP0Cn-k=$>3ZY#;_-Px;G)g`eZhFe8+pw4%d|miD*cOO5MLOxp#^ zF(qW&A}6Lx+$N=q-RyiI#=Q3pU(3_5p<{!?1Kj;9kjBEu!j9(NY$FL<(by;>aUxYg zCiS|Q2RqnE7tpI8;?Rx~F`7C;u!7)`xD`!L(`_~XdB2%&eKHn-Op?!|0&BU|>$?uV zg;%wq86{?^r)@2T zGXjw4lInmp))@DruxxiZ-CaZn1;P4!gpP2`Y`52xiLs-7A4=-vMg(+yZI@9Qo&&V|#a%O*wbDY0W+z+o!w1-cofkDSwk}l(*Xv2gSg%d302}zEG?R8YF z_1^i0Z8#lARGfH3$X6xvu`zAkFtBK}$~ziL&71`hS3r;BG&K$Vw7yCE2H~}lG|@Ira~O%V3z+K&<*lmE zD(##T2s9V`_T`}*Rz3>ST~XchJC4WC(P16dH97cezV@TD-2re=jnas#`Q#4U)K3h@ z%Bweb{ z)waACGIbj<6!t@nHJqM`aQDWF#@QrAhFWEa?W$oougwSBQtzSf6~dTwN;ugum*S=9 zZ2Wj{Tm%es4ty~4S?ME9WL2YTMgXPFE<+VW;kws3Y6C?vQ_1S;sTvolPT>hP2Df}g z4J&T^E~U`phK~2r+?u$}&~pd_$nXH+_FE~F8+My^iIFXg$5SKLwH5>TH^%WjMQ)s+ zb!~oTBed!F^Cs5&-Hl<5Z zFi}DsH#Qp!pMN_Sb9>4cL|qh$46xzTZf<3NZ6a=Yb$+Hdg1uQE#Jhr3t4_t%AAY8a z;sw+0M^^UJ`@b=pofm8KZpjOT4i{nbhpQ?jN0Y|4rdsTIcrWk&+G*SJrBIF}d+3cI z4gmbhI6d-HgNUIZs7oNv6~9~F`tIGS99>wM!DIpX1MH1eTjpo2kvY`wpq;lZO~pC7 z0!7T?#hu+E`P}_5utma4-0!1P%0!)Zb5Nc0z2rDo*0b#Kf_DGJm!J#iH94qlz$m>th?_GBE!t0x{L_V=!SiM*+^!;qaM$WqNp-J;q` z(S=<`dpCHS=yE;2Hm0kapA}N}L)FqhYdYMcBJjrybrZCkp^(qj54+~J8Kv?yv{Qb! zh1HBzEO*d&H1R{6Gw1C!xwQo=w=&w>DHV`=Vk)I${u9Nk@qF5sDrS3SdYn_Ik)Ceg zIN#pqxIR2Wv(`qB{g;}IX_@IqKWGN+@f*DMk;=|Yal&`%QOuVl6^~^;qtbn(yKB}6 z`QzImP?h@fl*)Z@tO0^ z9L&s%{)bVEuXjBq44H_@{C%{FShbR(%c`aU6tjNZEX2w0$a+l?@C5I_{NFMiTrlWN z4pWK7dHNlv?{M})^{aw_bXRA?Rf;(;ypxt#1 z1}dGGvumVWVyW0mJ1QHO>71-Cz9xUDVLw2R4xv^3hU2mFx#Ws_4jA;iIn`P{E|#ap zpemJVhGErjf2n-f-8ct1^joR_A`6JUG`e^C zV`s*h@BMEV>gaCJWsH8O9u%`H%mjU`uax^gpuw)i>w@6RKz(cg7m=G+nvyR{w|Ftw^bs8~0ua_|v1Dw(VaC}N5y1|?}1`1P4;Es9Ik6Ca&JGs*A1jB5ViU0|Pz*h$B$b@2v2yu+S30Y8@wKra(2#C(f4NtU=qlmzFem6RtIr7}3Cer{{GxPyLrY6bkQqisxQ#zd*q`*i1pgH!(Rg4gi&u1T;f0Gc(1?+|kL@*vZk^%*nvj(9jjgwRCp2G_=yk!V7nB%s3xGDeq!wkCrKY$Q<>xAZJ#CeV+bxbb&4cPq z!R;0&oO<#DphYAP1iGQ}cl7y$G1Ft1qYk^A@9!r;B4q#jT`2 z|Nq-F^ZfbwdwQcF$IKZLlK=kwJbK{JDZc5+O@{OK{#Psb_HOg3^Y`oC{Q3U={lDw} zdFLy>zv)wqQ9W@)ef>U;n95%-KiseXA9&z9zy7`Ynv#ohIj_IV*GrVmsR{b~ntzs- zMn&=87dOxA%N1|>!@kSiFYrX;)R_|*r5{WWy!QA1`}I29$^nYf(%Qz%d+|DEy;r|ppZ@$=t42$sfBb&q untz{MTbh5`U&#L-&&ARGzxgC1iv&aL>771@j_k+=l^LF{elF{r5}E+tvatLB literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_circle.imageset/icon_circle_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_circle.imageset/icon_circle_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5e63a5a708f89b9209ef83a24f8f63db72b591d0 GIT binary patch literal 1427 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE;=WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2cW|hp4h>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR@$jm;~D1`{yA^eYkz^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^7NqJ2 zr55Lx79|5CE=?I^Re_arQEFmIeo;t%ehw@Y12XbU@{2R_3lyA#%@j0z6O%LZKmwXz z9lpL+o_WP3iFwJXo-VdZKr{3*GgGWAEX_@f4b6?soD5tH4PDJ0oh+T5EzKRB4Gi6! zTrACCdR_99OLJ56N?>|Z5PD5;>IEf++ybD@E~!PCWvMA{Mftf3U{70R;&zK6PV=C8 zQ*gV*2&Z0spkwqwQHvDSFd<<20WskT7s!Dp{nR{QdM^Sd>@#{7d>9y*SUp`FLn>}1 z{rUgjp4pU9n0YEAx7oq__5Y0a{Q1yYdGDGs-^O)meL;u*Fgeu!Nl*Fl`~A74i~aB0 z?A>?qjOsTv^?rtBX%nVj{J7`u^}FJ-yLNrQ`rChg{l9;I|KHzVAMoe<|Ni{=fAw|W zpZxsT8~l7MvcEq+a+^+@ zoi?|Gvn)7Ko`${xk6x${ItG*a2wnXRq-`$PYjd%b~Nt)Z)9L#G~u~Z+x~jRJg2@XU#s=*{`vA) zJ@T3D{!+OamFM<383ufNyt(xE`u%&EH+PD>-?yVU|M&0spz8*k?oIo=UT9wZKX0#H z|NcMvwC;NMtIs7H()KF5zuTBv_GXsbnwj(G#r@s1)K>H1)ye7=pFS--J!fVq_bIu( zzyH0G=WDL3{r~Cz$)(NHpHEe(*kAuo!qr}R+mTQ2?y9%RK7Tj+^T&-x4eI`9tku<5 z`}q6(|N1jL^^$QmJ8FVky1yz|&p(nA$U66Vj7^M2mE^~z`+ob!8^!D{j_1i(AaKRO sZ9!wd?wsa*hK5Q0Nj+EAF)=XlFmPo{@z$FePXrZ{p00i_>zopr090u#*#H0l literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_circle.imageset/icon_circle_3x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_circle.imageset/icon_circle_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b54386ccf0ab14712ad75ab66e4ad5022d715210 GIT binary patch literal 1376 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vf$KFlz^NCM7;+1MHoK%2WtOF;xE1B+Du6w0m5JLeE;!AD z>P^Av7Bg3zdi8;h(Fa8>QdGl)fawRsgeP1e2cGm(^ML8S2$--hJgr>Fz`%IP)5S5Q z;#Sh1|Nrd|J20rVF)}sZPjXw%vt2U#+xfj8Kis_deSUq+|BpZamKywh{P}A-f4i2I|F9+>-T5dk=t?J37)yw`CYi<$A`#Di>_EDF}GY6t%OXpin zJM?DX{hR|6TrNEN<-FeS-*TfL1&iL=#C1zXbTQ@qU$!h?aNoK|2_1(rHyWwrWinlO zEVY!uv+TmPg`u9Q4`fmrHa~gvAT4$A)T93+Z@O!9vLvLZCN7-ndcY#(VCKh}v)9L8 zJoRY0dH$Y5nIHf3s{8+0(7ClNyH~iZsr_3xLDAs)HP4@kj4_@Ej{ytoC!L*Ak z(o8(RTp80fI^X+?7e;w)czO81iu2~*FC1=GIrj5!y1JNrX;M;v((bdYhi4haMzX)( zW8-;%@%#PzmUVSOvuXtm(~Krvnw)Tj-(*EcS;?i)pb6=}zrMMCJ6?%rlFj}bad&qA usrh}WPxiI`zx@tdA{WO>R53O%Ff-_f#@z4yz+w(6^E_SsT-G@yGywp|8xBGM literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/Contents.json new file mode 100644 index 0000000..4de0645 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_facebook_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_facebook_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_facebook_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/icon_facebook_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/icon_facebook_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ce9c94206344c2e1c6f75c2b1a1974a6ffa160ef GIT binary patch literal 1966 zcmaJ?X;c$e7#)oj2v{nvSkNJYLV+xVBqS0bB!D>@WJv^rR?GWy><(xgNecO)tqNrcl7ok#-#EGaC8K(11h4kbV$sbP&7 z3Iza+x167hB=eRsB(M@MvisomN;QfGfY5NgS|m|G2q=cqM$<^s z7zv!{x3SO@6DLCuHG@FV>2!D<84qjH2_!n5Zs!OJ3Pe2uwFVU;(g&)v^T!xCkXE9R zs}VV@0_}_Xq%lVx@Bdwu%6HycBmw#- z-~S}m@(pT;kN|1nER6&mT-tnlC^dtvfkX(b;lps|SQq1DFam33uo`41QbAvyNFrC+ z4SsJBJRXCq(jp?21mbd-IFth~mrEHTbZT%&B!xs})955p6fH8E7QzaNVv{37h|yGX z)EJfnOR|)Z3K_#n|G@^0i?xeEsYWAnAdP%2B#qXc_r)CtURKPWq4v)w>22_AZb5QUI6)aycx%-ZHpiiEO1{_DCn) zcK!IX4oRlvmpFy^qw|>hAq!_}ZEkMU@{-(#(aj&Q?j2f0TYEdQ*$Hp;Z7RVZaGr%b z%G$Qs(XFbg!o;oTJ{vF@`p%uYyK+=ZHf*z+mzF1$cr!uaE7QH_^_w($Cl)f_|?U&AcYr7;*4{q28>AYVRxw=Gb zzhQpS?kRDx+Mx8LZ%cQaIwX5^biog=D`UF+AM=gJF1p42F`c$@G1imiWjgaX`1667 zjb+L?R~wt$zvPhEk6H&(2^(Uc-;n7%s=XZR4^ZCg66`Erefrlcm4JT9gqa-~Y)s74 z?g!~l+Q`ELj~dvv;UUGG+Wt`|Yp3wNh5@5qGY}GH9G&rp=L2i_B>uG?uRI!NxBm=d zvv}yq>t}-2dsQ#u8><1N!$=70E#8uNit?~Hc|WyQVY*OW(Ga+q**C9wkN>ukia$R* zt2o|LSKUft9@}qr4KQux0W~Fq`8SVDGhg_AS=indT7N%Q99y=kgG+a5O_8uXA8*N@ zdjDwnWyQ|L!%-PurKT)OY82L$Z{P~n+YIef>Sa@1H9yZiY5m$c?qyi#M;K|Z@Wji( zj@8p9WN5DLK3GQXxUtp6kx>s`a^idY|K^N$$=d;4a46Fe*ULg9rgR?oX>Um1CYcF4 zbk67HeeTb`lWlYRD)UnZYhy4a`*%+l?wU1o^z`dn#+u#-6KnE@9pw-1Y)Ze_lTumY zuxxH?*^b9O3o zD~_BG$o4I=bryPEGprk?H8yL$R$LVHgq>f# o@9LG5vlq9B8uCVHrgalt0B_fmT(QPE&whh)qhdLSB2#n!0%<2MY5)KL literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/icon_facebook_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_facebook.imageset/icon_facebook_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..edb122c6f9474a1c09ee5099154a836cefbb21f6 GIT binary patch literal 3137 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 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/Contents.json new file mode 100644 index 0000000..0a06d53 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_left_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_left_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_left_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/icon_left_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/icon_left_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..0819430abb983cc8926ba5d4feb96d45632f0356 GIT binary patch literal 2600 zcmaJ@dpwhEAKx1}=Lch$NM$CrP2VXL_pV{iELdbKm!MUBA!o`~981e_YuCjMYX4Rt69V z#E9lc3DT^KXFok1&EErcx?HnZf>ah5Eari7wiJMnxZ+3vN)xi9fFOX)O^oXRJRuM* z2LY1>vgm6G9I?=aJ?rD55K1&?2*lG{Az^c301z4pLIgULyX;o!M2Z!f5)f}kM~0w5cz5XOpR1O*ZHg_oe&&zg}i=oc3-h6wvR zDHc5dN)}52DAvUl!9k(XP#n$$?S{qS&?}%A6dHp>XXE`t!gvJ9QOB8`@1wtgV|HeQ8WE`nL z0t&<;=qw{UQXCHwVVX?;E0EMZIQ4J+UVGfQ?S1#Ag4BbjPfU%KS+=mltwx7owgaw#3=$jAQpb5CyWr}ZHr zxM(*kQsuo*^8V~>{pT-UbgWso?lG5v={}qT((3Q;Hvku)+t;M8>~tK^8#c;l+{0S? z!Ccr>Q(gV`b4-5#oXZyqdjlgv>WM^qXIZ*dq42KMy@z%M&HJCDeA|Ms>s4Y{!~Z%8_1DE-ih)hnY(CX3725!xHaWHPmR>TQe9v=7$JT{d&I zaZ$mk2lp*@B3<6T6g;P-Wl;iqsOAq57QshW(oK>}&-;YA7!|l|B8*8d;CMWqdaUPW zkFj#0Sy<2NRg<=Rn~%=(e2|k(;*`%ZG;*4F>oB2R_Tb&L!-F^n?Hz*{W=P2C_KakA ztK1gPe%1<|(b3TnSJ%7euu#2a&aU(bzx?j*>iKqrcHjWeTz=^t22_G1uk5X zaMwx8wcy|DwoP@eERG#i<-EwP+h)|T1&7MN^|r+)bVyt>2ke_~*O3P~7}~F|-K)e} zzT(}y{Gu8%N`_e&jT4tzKK`IvTd%7B^`c6py6m`xx#W1!W-YUuZgTZmLmK4b#jIjC z%b;bX!?pTvA~<@A`C}ac3+Sr#CqFd>>c2`zc2a+gD^IV+;@XWyf+QF?#6FDZ&gJqTXj_8%m_FV1K;y_qJMI_Mh`_7)vs7{DBp9x_x!+S>yWfk zWp-L!`1O<3e=c&vm~`}@6hiZMdV#>wllWfl^#dq1Xq9qa>bpYV-AM!Lq4{vwrsHl}cr1)}g80+K-B2V=CU%wQn@k)5qEQCsgaI zt{QLm_SA1`(O%M3)L`0s%#g~pcMj7Xi?tG%(`cKH3pQxs3fHC`AS+?|Gxw@|9QB~f zs{rf1=>~UWG3*1&Z?MsL9b*FwdCMKvak2YmRW{yhY&>#qNvjIja3K~K9^T$Cf}j=> z6vop6RK8*rlzyb5tk~1=iv5CO{%%$LjKc*~P0sCFDr-DEnl&MJXu+DBnJIV;)RyGb z)XzOn%G1l1m+SPN+d+D6yXgMnV*dOA=)2W}yZpy*1nx%pQihKa=Ea5qFncBhNCZS8 z(d3F#%g9#mZv^ikm+mmm>BzK3_+4OBINiYy6F=^{lV(^}n$^6w>bk=iWwBA!kbJ24m-ai(<)XIj zK$zR*%lZGQyk;@sWxSi-7)3PJB1P}a)X%)4jOzS#`03MEo${fsV1gECLX*^&WWEoF zDQ*|8Vp>nJVm}my*qTK>AL#ha@MMCus;#OAl9H05i#}KTdsmlaeBQ>u1rc6l>mJ{~ zKe4ORy|3~HYtW8rX>;J2l$Xr`hkDUa#_gk=8mg zAyQ90;?|uR!qwboM}{G&X7gJHvTO`w$KaU-e|{9BO1=B%K_+iUu=P@GZEYEbBz;DX zF_@vUOK3;#N C2SZ!{ literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/icon_left_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_left.imageset/icon_left_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..107a1dc3cac5ae86a35d7398ea82de3d487c0437 GIT binary patch literal 4653 zcmaJ_c|4Te+qY&*)ME)*qGX>L#$aS0WEo`NGsa*TGt7)NYl@IijI2py$u4_jNs%pv zkV5u-%hFR*-tqjNp5Ob&`@Hw(zVCC+^|`*^>wC_1ea`3Hcbu7tK07NvD-8_|yTLV> zIkmld@-UyGzM+&!JhkB?>e>=5aPGuF1Rh1B<%V-bi5U1GJW%E+gj=v*FN%twzl655 zCECJ`p-7yM9OA@BF3881il&lj1oc2g6zQG^5GzB(vR z^tBK?$|A(X5*gx+RB;p4P#3ux1f>%Apoj>OARi2t01Z+T{fie$?Vp$dq9T8}5WUqz z|0Bv4ZYH9G!=pqLmZ-^`i3{`|c<&{MKzC@|f z@NVu`T- z3@{V{iAVbq(KxKg2_wQ4=TB4|0FWH;WJYcmi6i0& zo;Y6-9Sewv1RQ}xV^0i{e<9#-r~#HhL|~C91DKj9l|v4Vc7uWxb@k-sb(J96Ko|(5 ztE8o^qNAgtq@@D{>1o4MAiuFN9Mazhg(d#Ry8Rcc{IA%PV({^$MuwsA=m3fnwr*Nr*e@Y*PrPe#1TG-;& z#U3;?XC52Cv@C-@ZaA>`S|0EnPfvTCqr1qW-`jEaE}og0E7`(Nigx|_sr(V`_1WP$ z7poT&v@ElrG-zkLZPIn7>U?cw7~_j`DZb+3AW&4*f@s|2?F(7(fSIwG@6eg5r4WtTC$U0nS*fXD#J8OW4I z27Z2i)#49(F<^dpz67gDQEgpeVfS^~CT11FQh(s7=!+g*G3=cO=Q()ggh`j;7_>yn zt)B-UeGZIWBQ{@Vg^pUa<%9??!2n|V77|9lG6BVXN<%=JKxUmQ~h!@8eNM>oSfhdWpAr!6eD2ynb&*s=f$e#9-ALX`d;%#J zsp!azr+i)hVE^0q-(2=Y`)VB2>3H___D)96rbmIeOfuvbztc{?iqHuAI-q1E6ugik zOV4x$Je!;%2&hfiN8e94j9Aa7@JF52bdNc-blf3zMXEa1>{*Aix4+_hS~T@`O=9Ge z?)(<=?ftZkiR$^JqnU`~I87}k#z#>DLqj(XCy+@#diHURc#5%VYv9Wqlhj?e_r7i; zctjip<2g{p=`L6s>m?c194F2(9?-Nz`SUBU%N)ma*wJTwZ1d`~9op%ZKma#4x2(Q% zm7mEos4OfS91<)kDeuH9(DFOpVPRwM$-SZKy07V^3-znr^ke{kSoAQ#n5e}Cl7 z%1SRI&q%PHIT~H!Lw*K7DzmMg+qlj0hc>;Vv$HyH=ok8L7~%RE<|@-|%#(RY6d0&< z|LJ4n(a>B*cdWp<1xK0+Y~OAPotqv zYw~m%lvpL`n1^J$OF_Pt;S6_vO=fEme8;xK49;?NbbR>%+o1o$qToh*9zHcEM=Ft6_!{CDRtdlqF!0r{Cv@=Sc&_jBz+**;gjHEf#c5s+7=6uMy#s9~Cuy=Z&u9cP5@cMY= z%u3TUy5Inh0D(z|#pDj?7oITSd;dWDRa3$}FobqEFh0fE@tjsQk5&6pxo$S)ZiJT#CJmzXxyr!EO)6oSz#E|ta zaqU7xx1bqLe;`xQo4>fIPQRVmRf=+ZHH!p+lN{T1!`{Qoo%)F~;GA=h>EPd>Q4|H2N{yhvqH! zc=TpX1YF*zMLE4HN@LxXaRTsVao<*D8=EZbv!Qj6A+4bLNU|GefvnNW+ntePweTHj zD*(8^tdDj5b5K&+vm=H8rS|+z)^60qx3wu0)P_*UeJY@b&X-bZ^_)U~KR!P5bgfV^ z%)1D-EVt|SfkA`wO{B2|MxG`hQ~2>f?4nzwEce)60f&z2FvGe;8E0z#n?6^4n4aGK zJ+^Oe1aQV$zs!ZUJ@s>L+Oa~nYrpjxw$ka~ zUhVhM;SxTS`T#yZZ;7Q%$QDud4mr=FzR~XT8K) z34C-$!eCF-tBifH|0BR98+;Sof9kanesPOTyG&JMclqlo4OtjESl8vO6^-t`8zAy@#{x3^qwiY- zfKTJi#gt>tJo+pK()(OkJ$|NIi$XUzG;}N!00^M59=;pIUUy_pfA7gyeb0VB(-~;+ z{UbgrkC{CEX^3Rb8LiXoKmm_65kE6bbx1}W<#+GY^ zW7Ra~>&fVW3ZC!JCK^l?-kT06bsaZG3Iw-N8icu0FHHHn)2Tat`t&Ju5HRaARqynM z@gVnSfwJP~?7ZvZ-67J(WW}CWL*WzJc6YEEdH(ya1;uMLRa-OOyIIJSW4$~zU%V5L zd9v5i=)Z1#Ja$g*!A$USj`7kqMnldJ{_ugni_;TE9%~Uty3HS|o{K4T=|kRFL7%)S z+E3gC=vv-Oh)}ZLisU=*PWB~C#Ae;N`dYP6j7s0`?rzJ(K`xT4b>1AQXxISaii`BN z)FH2%9fxPG3lMLoJazE^^A+X*uNf(Ekew5{W17G83DGJ@)q4($3f!{EU7i3kRH#VI z>WZ?W444(peLzuYGY2Q844DS&1Eu*idI{1B$sL~Qy%fJw{G&FTaOKRy&8efw8dTpW zjgNI@B_)0u2cs5z(@`G7T=a>wzWR6Vtu=KL4$9B9(&!xy+W1&nUN&1Q3HTWKy|G4e zCznTnvIu#Ee-N{jH11^dWs|x`R|Z(De5~_sQEIHSk55eWDK0KP&++hl`x(1?*?UU_ zv+1UwHLJe2EpLF4-F1uI?43}Q6(#IycT-=4w#Fh{xE&2KUKcUsIOo(QE57e z@Qd>2kLD%}$FKaFsm%u4@(-r_A+5vY-XIWJOL(~v8lMkLjwm5CMYE>CfH~ZzXODiA z=!L96EYexaDk`>A8>ZBF{e9t@7P7fF=Mt_=hyU1=#c-$O2RHVVs`i5!(Ne}3vuds! zapkIa&72ek-j4l_rZ;jfy4NuSJv~7@+=#@=5|YqztX<)CYir26RbtzN%uMJ*sLj@x zV%+|?pu_?o4w0dI8o~&wdSx>D{%bZ!8ZJ%R2!sX$Ytmf##va+(Pkw5hv9kWfVG*~CZ zu9)UhhN#&RuBfcU?O#Y(f0~~@QV!Oz(hpJO#qa+DmDlG5Y5ko5fXCI~+;s-&Zu$66~+;O^nhRQ1o-8WOjrS?(NI-BOneo{eIvd2^3X2SMA<5SNW75Yj8`>%0_hX$x-?Fj^ml z7DmK$ujV}GP2Ed|5Bat_6^)@mGDkyqxIe2IR5p&(nNtrgdrMik3L3lb@@0Lbs}C|V z3~q$(c6X*p+hC0h4db5;sz@Yd%Pp?LSWG7&xhCmf<713vSf3lL;uL)R!ma13n_Jk= zmT2IAEx=^q{H0F~@)E>Oeaj}zatK0GYYEGPvFU&t;qGgrB~gmsLu&VTW;>$60UHy& zX=!QRS4^^lo>$tMVR?J4rKJdJm&fR=97)Ce!>w&r;zc6T-OVg3?9hDM+RQmID{#SM zL)!Gw8|A5mZQwP@u%rtrdm+Zg{nEu7gQi&!*_}ami3B66=yS7EM#2%4-L%>@#rM^z2M&19wEs(d=Mdpst4`NzHw%V zc~9aHlUnnEOa(2x`aIEqB)t2Q?#>x6l^P`HFM}|!OkVx$$2GXsh++pLb|FUS{c)mw9ur;FL z1##6}2an%_rFx0QoDt0I7hj*CaQ|_r%Jjj_+sn&K5&!^1mymLy{-y0MKrYPm%Rj#x nzoqQyl;5B^j_8eGJWunCHi))LqC}4t7K_zZS-lg{d-M`52+>P)qIXvBy$4ZN z3Bhmke4gj?{r&NMzV~(OxijyXIcM&r!dX8h_}j0AXB(4 z5b}ox=w@q==ElGfd+BBmF|~#w047iin4LJ&&&F0J0L)CBNk>qbN7-HmY6(;DaD-}j zsA!scSeuHPF};)kh`E8#0JcyB1mI?CW9I~N6KDDh7lgk5)6C5T_=^N#Eza~GrQRyP z0m#4|p#VW3KbI*FFE2ny2*@iSC?v$o3E<=5<>Tf-??PO>0w6&l5T7vM?~Ms9&C$#p zq%JG>w=DFNIFls;VGrWwc6D_Hy7B|zjuza!qN1XIF!=bm&=g!w?sf=>8<(9E^FIi( zP$yGIm^}gpw*&k^gqXmc5#mf}P5)zpt^I#t?VSGZCUl2!yFu)^d4W8CO!|jVS^57a zwYB{(wG%=e`ak;qufR^4?)Fe_b*K~E+0hg|aOTW^MA?I69H9^d+))z_xA~_R-&n#C za3@Q+JwQf72=Gi9VhXeS)4={0hq5wA(as40u``7#%8E0gF@P|b8HiU9EXT(O<`%wD3rk6h%E*WcOUdx?%1O(L3jMx z)J)D1ZVUL!Xb|k*b>aP2yuW$P{#_Tof92&yE5rR~X#c;V{-+7;KYwoj>$vEL|GGZZ z4(;!bXvgj|Q8B^5pjA_pmC|&Z+c(6sr`S&LS#)}x8awI@Km^o5B>_(*{Y1S=4@k)E zr(6=qUqr3fXoSWuGNqk(e4Cm*u`^MpRJWdylZRO^4-m{=gpljL0HZxJwZ#TE1(VwWt0Ge7sNY= z&^3kXm1r}EziPFS!%-zgw34x!h`0SX`Wz^6AqjqBk0jj*grci>^kFE-vR3;az0Zl$6lbY5Qb`{6NNb zLAq==mZr`2JHv<x^YhldgM&($7&04BZ7nUXPZHi9jCvkIOrmu2$~8`Y{b^LBrB{B7;Jo~N zRuAu?pquC3-ria|r3RuQg)esyAZ}*_LSTAgV#3AM^ zI)MN3dcR6|bwjsFC$dBlFVfkx@&0Y;b9VOGTA!OMEsX+|&raLJL7lFQGa!%oT3gil zJbXOb_xJi)MMXt8>3jE(9h)f2NI7z=$&O+CkR26SgtL>=X_BQ@f%$N{ZhBhUJk1~$ zF6B-~@WZr<&6?U;s#4vmt<`{l0A06vkuf;v+RW;QS|LH1xKNPC0pBd0tV*c6pF;O8 z-?t-{F)NDEU`f_yNm88HL011k$h|JP5DN1;b{ut;bP)%#j4cKO6!XgQy6dvHE5FG~ z+IQp%7-?0*`bpfg_8B+#&o2o)%hg~E^=t`0SPi)#;uWG^F^7YTOc0?kF>`>^ocnOu z0TaRY6c96YG!-IXP>d0*0y> zxQwyeSd=MhF0;gQHqHxwdL&=AHoM_(>ucQ2Qg>(mg|jFv>$ao=oGc=h*Qj1o4bYdb z-vx#7gmobCaD$0xTJS56Yzzz*Sl{%m&Qt9W(F&1(k|(3Z&u8K>JYBrJyjYirFK(9< zF+6GX!5QIJ^H8gUgfG}?)=o@%*uq?eet5!uPa!;QH(WV)3Ec0m+n+t{J8bQ6zSjkQ zKtUh%ESd_|Ez31DFovA?2%)Vcr1zn`>D}$`?~fL?okQWC^8u!DZGra3E^%Rjsi{ zg~cKZ^HNvT*ViA9qJOdE=P`G=l?HdACj6ies@+P^c~`$l?t3<=gLLnUX0pBgRSg?I ziJ|&|lRQyiMdt`iY_Ul56(F!A`&T^6ADF0`l>IGlw+Gk zl8)Y`0FwqnwDl9y(`{tJp3r0!7Z<~(OAWg#D=R%)&Pw1nP37g~ZTbX1Usx2lM$f=T zu!HCNf@I$93Vf444*M>YH9cu;?f3q7gH+BigKk2A163?x!}nMcyfi^;ZQ^HRA7l&2 zN^0R_d5Yf)qAr#^Rl{xI$1i?1ojy@iRCLFBX{y{*JfYZn*Yt=qH|AMG+TMXprTpio z(%HW)p^r<_OM(y273U5{B(C>gqR!52mnxy*;yXpAvz5@Q(cK$@)CrQss?(2ww{GRp zAX~ebpn19t|Dw-CWTzLOF4UgzA)SLH$Y=0I#7+mpvtHBcI0wF>Cn6$pIy#~F0Y!Ch z-CktGN&8Aba@TTQK=V6Hml!&!SJm)nd_t{w`EXV*K+mPo+ zg(d=n(I;WE;vjlNlwo^VqMUo5{CdmKBWM#Hhe{cV=g6D*1)fYS={p=Ze-#wX^lS zZPdy~J&O&?fBXy{Sk|_7um%H$FyQ@DcN?!Ei3<2W^YxxR5$vtH zt?dE6U$fO9-A&b}n+TV~g%n=zE7X^etsloo>-b&f!iaEX;Hw7&5=Qnt7V-s;;8eT6 z5?J*>hCfd|)mE9fQgd>t6+wb(G{t{`_DgtT`?&e|+_ncZcof4w@o z``Rin6`b#x-wobe*%m4$i;E~@*ge@dA;t%IAncwj6m4(6M1fyUC3#Jts#;mEdzR8}KR3*>V4S_W zriOZKeB9!5US6l+&j@=d?y1HJ>DUg9LqgVG99d2Chz~6~W_hhC7N}ymw-+adY5lB< zo4b;auX|f6NA??aaEp}{6ngc(*%^}Zyxu=Nq>{r%Z4M+wwq8w^ok*e}SV3gV0?ji3 zwP3A!pIm{rG^Mz4T%`1i1jQYeYEer+Rq0kXZZ=&&9<$j?@Coc^dDyCc6(jpEOnDy2 zs%fG;n$K&d-@WDl0;i(zEl0r=V?&f~8GJ`K{T_)PF>)8KG-bHS}&Y1TKGc1U>O@?x1%$f9kO6NUAwzGxPlG{;iIN@AJiewR*u6yyJd zQy3Yhi_;oALRPwQFVH48&Z@NP!Sn^?4&qZvh_?ly8Psyg&x@J1PI>>}Knqu!xanY% zKj#ir@De$|-74l^zbz-1|3)MDHP;@8<4S#slr>l{;{)QVOAE3`g6Yem9kmeHtF(;O zyG>(20efKA-RWtuOdTj^%;;&TtRUWj`^3xG>-N`npHfCV(n6 zh3Lr&SbVFk?Up(T_3@Vrh>KXr@NapSQu)GtTTJP-Hj55GG=NhZgafc(~L95yMLgJQ{W0LaR6}r6w*8j&S*|ts`TPRyulWYHIAvsIyXj z0cS-sY&NT)HYE04ybW?RTKhe6jQW-(ooFv-qbV?~wH$fOp%Qi~+d`Kks%ju&8ZlHB+kR8$kc3a9sWR zyv||PMfBWGF{mY6hEe!DgV&hz>9VB0TW!D!_L#k-{4S#5Qi?u0?+w4p@MdoXvDd1? zA*LlbMWL7=0&$@v9=fJHiX9hgYc#WKlc7;E2!0;|{2(j9W6b%O+-QbTA>REY(kP4B zjq~Glo9vQBQiAoUDaTDwaj*q7#ID?nREbbiV)bM^bq3FC0!ba#KcPZCo)QlT8HukiywWpY}txR@{bX zCC*>2GEBkw$GrXvc$B8A)_FLp7m`A@b?kd9p`vYb8}y+Iq_0k9K9JZ`?2uB4_JP8x zE;*jFBO3Y@;fGb~;M~`?itFAwhRyoG#)_lK91%(Xir6NVNw(1}B5|W+#-VpDoAdU8 zsU-5bi`fek^dwUyII0aJkG|Ypti$k$e0vu8<;M^jHN=UmODFH|Mm@TRBC&0jaL0R+ zCW#xSSg*0&RX#-dxP1%7M>?D&!;<)J0R)*+aqT=so%{roFGq=kJ3@yJ7x8vTb*_lE|+Ahu+W zhc%~)^p}<7X&sgVsW^`01$A?`F)iRqimOff!u6YVp_(_Rz4toGY4pTPRkFPNxV~W9 z`>RZdguHG~bck`yt3&&M*O`{eWBb|^CDtzP(aX}nGJL*H+E@2=kT!@Xem{jGSaep% z%{Cp@isB6b?-*QaD4sv<=JQHF;VjPC^*Cz;sb$Ao5_wg$BeD+|MCBobj|q(Ul4jfR zPcvsX$+%F^H{N(DU^N5OUS%LTk22in70Zd7ynP8+rNF%SE_@ zf;;Y<8i@{Z=()JKA_FG_vWT1U`LpU>afHU#G>T-+9x<~+`YuMj0zrhEo{YQU#QTep``p`)X=gqJTkUGa;GIkTA`y@1 zjS>oHwsLH77+|kQ^uEFcf&$|@e>cLno>^;~QaVm4dOIT`pC%m(iA zt2p`$0vgo4semuHSoNCTNpkB}cE%-FWtEL{zo@JJxZF?~W2DSCX0u&@t0dJnFO*k?r3alTm2GZpc&Te@B0fB_J5CGm zbZfvxsr9GYuUyB+SAR^&(uz+sb~#$uH&woOCK@UfC?_FmTaXC68!H3It77*uX^^_B zDB=Mib>xERDf9?xVVt#Cv>FDJC@C#1bw;QDo{U<<51(%0t%_Y4zUGCrJHx0r$KAyC zYdNav1=J13v?f6yQ$FI@I7e~)I%Y|CL+&)OUg z4-G9w3pCkfb*^A-tr&;L3LHt=rcsFHK^;e4uOejp>1<>^P-@j zpcZ%2k@R?ZXi94!otWFvXuZ>Re{(!`CU^T#eC`l+02$4b_5f3dtxLwst3cCQ#xon> z8~QKyqpJjm_1pfBmHS&NqW3wj_f1)7@kHf+HKL<^H7FE1P%f|om)=(Oy&7jNo=h#b znXLq4@r!1*(?Sr@GotgI9Tfpaj8ksUs|{E7Juqe`nTuoF1MRIyzBj%)s6Ks-YuF~r zE7^cSA!+3h;ZE+1GK-DP&)@MUd8OI!6#7#Iq*vf_!cX-EkxFENj1L6lmw?=eI<&R;E)6g27GEC6v2(oPU@r{MZ~ITW=B0HX z({4InIV~(U%PTV`#+cy2s7;K!&{OU-bOL^XXs>&?r)oB+5c#WRInZ^N-82B#=4wm# zW$!-Lb-P4Lu*&XAjf!X6P*3c{4JI{eGYvls35;;OJX-A`U0fa*8QHD@nUt~Fi?ww# zj;A%2pyZ!YelI1!Emj7Z}s zDXMBJ$1S7pv%E{6jI0wZaRm;yxNWQ$GYg^?4>?Bb#9pf%IohjIJSOck;6g1T0jURu zhK6^$2+$qTjWz)`q?vd!ChnVb^4+gV9itoWw4tf}8&RE_77gQ^pWH&ojkhIwrPcLz z8byE$PGcN*^SH!Jc0S}>z^at_e3Sd>`P$l=Ek=E)9IxeGVw~o?%Z9wX4MBk?r|m%m z(_k=|h~{<1gD6jr&x(fRsBu1jt1Rad%Qz-%bLB|M$;8>54%z;w>Cu~d9Lfy{%V*9D z|0LD+?Z^kU8o7scaOm-K0on$~%`mEZ?{*DU@iT7g>C&6bvZ$bek3Ae2)o0}iQIkhX z`u<7{^UQJepTT}p+REdY#^gf^lUGfGlW>xIYz)4?kCPZY_ba%|>*X5LZ<47VFEqMx zAIw%+5T_zlGd&OM*}Sw{=$bV1!(SB}qS*OFGl{>q57Mn|&dw<3hX8TEyhc!&TkbB+ z$~o^24&EOMA5Fb4cHQ?N?AmJ683+-86y@!~gxG-Zp;Y3ibsKi&vEWI27u6T|$p&abO z617$MM`cbUszExc6;wkCRYV^b8(o<*&+Q_jqHZ62-)NZJ#)?3H9 zdK^BRLUvg%a(U_ z2nW5)C>0M#e&W=i@Te@JLObBk>fbeiCgo#Qpo;Hh3S)k zqlBb)9$&6vfYk=5rrW%sN-7MMLPWMdmH?zXDQygKT5ct?*+bJ-e9fiJB~Sy@|S+dFgaFrVf|OL&m{ zZvOK^_cFvHFAerPLNFf-IbZMmV=AM*zJ7jtI75GFVPWC^m*>=x=tP)C=2)yFGn3&t z7uV46;9z>>gH+60VDHF?(fg$ZGOPEJHDW+qjSMSS6Wz9lsYpzE6U5l0} z6);^{u+(#lxwLsAm%64KAVlps?Aqf9!Nl^Xk>B;Z@gd zVY`Lihpg)%cIfq_jF`*~aSUDxq0;Etb&5>pkt$?oD7m}+CU2APV|MPB-8^$96|&68 zY79D`D8`rOs?mkhYg+Bg#P{*JXI49d_U^@$xRqf&%A-$N)XLoNRD6yVeiLcU_`2@Y vetC2z!(w;|^NM)Xb)R_jTiMMg3@nVGox&Y~)dHSBOU{a571>g0|loFkl8SqFba>;Y>QzB+t{2Qib6R?l<26E3MG*_ zJtBz;D@hJ{9&#whG?fnT^i-YJ6zrWM>k1N&1*kF0$T_$5&{N|M+OTRVN5PYUzbUpiIzcgaH@{M<8Kv$%{5bpfDzA4AK<*{eeiLaj5$- zZaBN|u_Px;NHCAb#=u~FKHrFMY{cRO!4T%=<|`aXq@l#akQ>G1kp+fKuJ#WG9F0ri z(AhjXiwRy~BnPr0c$N@JrvH?{VE?3La=*7p(lD5S%!VP1;43Bla3m7{zbk|B)0@k4 zqy3xj|0L$RN3m%zHyW1}!J$Y7w_kfD6dPm9p^{2fU|^1IE?6YD#iwhLYtvYkZ4;|a|8l!inTK}voXWl z8e`4ic4%Y#4=j#FiD1x}ydPNVzgXj6Vpqh#U`rz7XdHSZjcUhXF~Hx7#?XJA3;dUS z-?7wR=Ysep7A8pswldoP8ubs8L_aIrpTdEfx>oQ7q&> zHXr`*bvC|GM*9fl%b7zPOE1(cl=fcdBxA4lbe-ue*_yRqd_=mC`RvJrreR1?v>;*3 zW6UgidTzmVM`XkO;58k=Do!~icIsf|>Sqd}Q==Y1d6OdLu-LFT57yEkw2WTY`pCLA zn1A(7*wGydAp)uHW$Oy<15|e{97wrA_2Qk>Wpo&^y>k{c_u?39z9nCuZ$i|M$M;^H z1ITZe+J;rRKQ)YRIG%U>c2!cnXlc^a-=b%YUxQ{pNY+`k=Xf8nt`hvJ>h;b_9mNNL zB4-hUQJQc(V^ z@OY#yBRtjx(%Em86oUQp2F|y9o%1=h>cMvLHrs^D-CGjuB5|kdp6bZB1G#pQ zTF{ib%zj8JN{1YU!?;1#ksY&ulq$+OO2p`l0nw;gyO#VnqlDf2(#>AV85MuvuZ;MF zr7p;hGYQBYMUHJBLLa2wd){Y8w(PaYJuqL8EEh-g_9uoZ_pF~N()|SHZNA;Yyf^tu zBv|TI@d^GQi_H{&UiIX!idV(sS5{fuI)7T-G7%`lcF~|`Pri3;3Dhe4inz(5-W~Ey zo;^}=4dz2>*LtD$N2ch_-QwCam*qvRnl;pSEdbDhL3(cmr#NH77 zl^QGe3SZ`q&9i=*h6)HD6`fE+3ahVl52k4F^)IdAo7riGj9o98D#gaSScIf5%01eJ zKse4^eN&c{OVEBYqRSsD)&t7t4!m2Np{lg1OLdD^K~PTArUs_fNU|JWPhM(LB{N(6 zao`QCY751q+xv;|b@Ypdke$iffQobF;__^-fI~U^RQD12*)x0)IO~Dxj-n`{^m5)OOapvJNwU( z8_i?Whj+7IdUr%o2m1~s5?FV)@?7gk7jpW2W3~70`2=iOhfI{N)o|^f7&1>Q4RA8< zZ1QSLk7<6C1?}xR>k<(hACZIJW`&eVZ*mx3BzuJZ0LvZTtzsF<`rKX3oKe2@nYXQU0%bnot?@An;C(kf3IHtRQ0AtqxPf> z5&86F`;e#qQ!ij>z7jNj)#}O%!=8R?KXH#S&!uafUlsnbMryi9_m=MgFOjTvkb50r zN6y6d*)hUSN*3dTy4&^q?qEY;GnjWwax{~y+lp$&?KAd|8OHkJoBm5xp> zqQJx6D6nG1#G8=T{tmjQfDA=zSnsK--R;-a;eg?**h z4!?UnM~B-Ev;1~lth~t|^4@1z*7sPs0912M8QIkS;_^Ipu@Vd+lUeZj8)4yJ2aK5MUzVFmtj(PBevZDFMYeNO7AJfv{UV>|=S?WI z&}<@Fp`Xr&FHaJ1KvDt@#O`X@gerYuHHhG)V#8 z8&ogL&hIfU?b(~Mv~#WUZ|84UA<6^yU>_ws#m71<_IZdg1%=N(`(%pSxn2jzSPWy=KED!j1I)L7hc;dm`O$)y-|d{1 z$OEn$$evpwcATz!SNr1eIBSQasr53nut(Zpb1vLY?sRC)hjFjv%4Oix%K#ZGqGgRS z{;SCHyy$Ap<4wltVo~D3Zr4IX)$)f11wzhV!NS9svV?8(f&ou{K-^T+-RINdHOtgJ zr#g0(wWJq3$W04WKI%B3q2SwQ<^Ach^`q3NTU$}hNj6eqUyaoJ%j5YzL(g-d>pj(R y`*~mdN5;G^Jfgm+oK{|~aNea%^W$iv^lyM=$L_ZY@Gys!>nj28j4Q(i9Q+TB@#Vq* literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_line.imageset/icon_line_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_line.imageset/icon_line_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6084b206c95131e439f27bbb139fb52dcdac8be7 GIT binary patch literal 6101 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 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_line.imageset/icon_line_3x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_line.imageset/icon_line_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae76f21e7264c8bd3a99b4159206a749423d9cc3 GIT binary patch literal 10622 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≫cUz z%CU7Lrf@x}4Sd>?nqz+-nzB#q-Ku#!_vWGTFo`~NLUG|s0bjjUNotq~^yX&-6W2Aj oplT@%Vjq(0BVEzYfuwc6po;%LDW=70cUhwM9{+SCXmo2q7t@!?U@*L-F(M_sE_8jCl#0|+8JLA&L}|!m0+1Rp9ib#J zjeSEi5zb(^FEOYSs07(66eo=k=JJ7TMl+3OFv25jW(-dyC?J{88B7AO@4J&AV9*G_ zc&-eQnT3Sj5R+*kRGD%$o|%gCHDJU$K)4O135*1V0XAcr$%@(p;3zLj?_FjX1V&w` zQ~~%xRDw(a2uTY8aG{W39AUEo9uH!Na(O&<5Wqp$92lWrUNAcpKY7%=vLbTo@b ziz-Euu~_s;0O~2qjKXk6Mh27-0+ALS%;xj?E)EVSnDz*^+D#N@3pQE(#u-F}6}K47 zlz}t>E=DYwOs51Ot@K3-M)L%%$vRdhx?r#kGsA2MaiuiwD3kratI;^&ZKagNOTDio zwyN!B0#*`MGTnmHjnn$MLYYyag}^A%q9)0-@hU3xBt=^Fq!|#ZctD^G!wn{vVc94` zCPSqrD}|YGLMjq~GzVlbXi$k5k%*#%QM_nG$YzVfqN4diAwMiih_EHmB0g^%DOihfN zUAn2hB|mO~Qk}gYXgK?`<2teKi*t?z)wvy0HO`S;4$n#|?o#eK$nDcNS*-bM{3X%Z zg zx2{DW)1rTTWndsZ@<7Y?Dz~~@ePKNtH$Cj?>U!4N+8XoYlzb6bR@AJ~;JABceJRND z%x2{Gv-;Hm0RihOQ;r@wapDBicZSEHLh3i;{Qddo{|t+(R2r_O3_Lpq_+Y@t)7jk9 zOPG&>t7Qqs=CrrB zZ}13|4Gj&IUrRaecTgEDpn9t z=jqjp7qoK*hlZRL{qlvjS;AxO@Bfl=tleu{q~qyTk4okAku4E*Nl~Njw~(>prrb<&j)MnoKkO!JQX73xB_H<9K_| z;M9HS9)|edgZl%+i+vL7vXM% RBLsKd{Zg@9bR>Fx_P^;de>wmF literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_menu.imageset/icon_menu_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_menu.imageset/icon_menu_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cec9aa2243db70325f9407474d9b01ab7312de72 GIT binary patch literal 1980 zcmaJ?c~}!?8V^D}5L`+Fa;Tjhjx7i|I1)1)E+jyLCL$nm6qg)>43f+^8A*VrkHoXU zgI!h-if5F9px_C$4VO^R&>|QP32g<*^2AlF+HPrq?lG}q`^U2L%*^+F@ALkC@9#aH z=PQa6#n{`r*-|JJdjX#pPp+YsZ{>3G5B*}q$;Fk3N+uG}OhP5bVM>GymB4^NF5V5t z!(v(9UOh}AtUZy$WFlF(6_TQIn%Lq)Q_C?DO_FU^V`AwZm;fa3ZbT6VKG$`C03r(m zcLoa?LW~P%A^dzCPRJJ}O7r(fIWll_I1s9aNCG)bhyk@cN1=q&Vc;uXh}>JubP#yu zLhK0xe-)K1j03nR4g~f1G5MMgXnaXN<~uz(olRioyp;FEF1v={-lS$GEYH>)&2^l$07p{ zR!VUMBM?*pSQy0;bRQ80l1hI~L5{tlRVZJVi7XghEyn0f8pD#(qN7mw|6S$sH{MDj z9{x@5|0Gr>=3y{B9#*3Ja4FfiOb<&a4C3Ojm_YGF6wO(zVq6wVpvo*11Got+;60&O ziYP1wpH~Q>5E3YqgjgYk1-vkj7 zc^uXvmWN9B$zcVth?V_@WiN@f41*jaBlBP!$%SRnI4TETB@H1Fo6(0A#?_qvdGnae&TPbHXif0 zi!%>;UR#%zQa!h4z$4#q?2)$lbZ8shW-qkims92sI-Z+fdLG~Et(Us_<;hIe9Hf3KSsq#D~!{sY)v-Sm3Np)y92zxv42! z)6l-r$7lN%uXBY_JCc%St%~bAZr!>iLOLe4&EyuSU>L3_pM_-_-<=`r)?64c>y{ts z>ub1l=`UT?JNR<<0}csUL2e$2pO;%_y3|sSyk9(ecxz{EVd&p>Tiaz$%fn{dsVHSwKe zDXw-$hVvw))6+1XpP%YbCoY^F)j5wY07U z0n$2XFgR*@LGz{{WBrdObNAu|Q4VdptXV(NRuhzj<9NXHmP6-~(;bx8J36+p*zA)1 zX?^d{u$Tj94D92ls-54e&7NZn;~4hWN&~I3WZi}hc(&1Ch=f8yqO4oKe)dz{3Fnf- zYx(Z(?q8T*V%hZ%o)#H%obAW{LBu!LXuYVLCc^!Y=2K_Snh%fa^@3xm614T|Rltow z(-kCqSzlj&AiK!wNLav*E!nBms%0hL86N9f*LGF+e;AW#igA70{_njDp9M19hVR~8 zc|W_Eb4Si{H;#{k)6>)Swc5tUQagM5qUE6wR6S2!uBzx*)@##r<%-$LlvFN2F4GhV z>N8bN&fottVbJZKSEz_3@9piKxScWhrX)Vt~4_RwE tRTu8xdN?%H{dCG@KFZ(LukmF}p%n$EQe!dE;9bjoDu@#Cnj$j}{1=0nE)oC$ literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_menu.imageset/icon_menu_3x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_menu.imageset/icon_menu_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..7312497781547e5a2a8ea76744e25075bad6c83a GIT binary patch literal 2623 zcmaJ@cU%+M77o%uT|^&ZP)P!a3M7O;AfbjtiqEK2=@^oML`Wti69`3JKx~NcKv!23 zu&^xB7L+DZ6pUg8L1}`EQL#`J5kz1othn!w=bPWm+pz*``!DSBRjV{FH=LR zArOdVt}Zlpxb>4gDoXI%>UYW#xLE^j@qs+RP$-%q01y-w7y_VNxr{Kt9bm9xB3l3( z1VUb)w;&Sn#wasWycy0EzKJGybFu}IY-Wl2c46RX z0#+#5o#yl{7Cf@Wupx*~#^Iu)qp{HhEGP)W;YlQtjKj>#1okiy#_%A9*n}t4TV$XC zLZ*Pjhd3Y)C1YfSfFj5i184eo30(enTAuLRG{F;w6EpZYJl0fJ(xM}s{{LOM-0$8( z$Q}46-~UN0^o-#HICnq@iUdq};X?Ifq4;E~0AN6%z!L-`7H4rM8-ze18|0&?9z@he zI)lmK$qbto5Og}(l_!K4JSN~uv&Fz1SPq9pcG_aoUIJbsHM#gRm%k}N4y zQ@oQSjYM3;(mn9HU?68upnSk|CeXBJ%IM{v8I{KJ_fq^$gV?r(Yf(q{@HcV-b zq4$f6K8Ei*M|Pjl|<>znnBiJ9(1^yGSO79srTxtY1t zGM@<5#PP}&)(2#&(|#&7skW%-*bHjRzrP) z{rr@ryCQ?n;cR**sF|}8zP>-I(dUtumsiN4$g_%@2CU|$#-&m(FRxU@l+f`@0?9`s zdmEiT+uhMI@xDelnC&8 zDA8NHoX|C~2kjNFJ{@L%K2u>vz3|DGbGJgK%{7mVSvIAt#+j9N79zUZK7A5h*x(lT zd4xVOIjNSJnK|_3(|dnCzhduRugy6E<9{P@$EEhSm32RjMxXY6oOjM~7qK8o7E$30Emw7-beK#Zj=%4AxYH5hXB>s$Vj&j+Yafsb|Lmp4*B*-?6n95 zZmE0U>?#c^8y}DC_C9!BwP>Au>W-^@%J**}=e6IuFWZkkjGTW-c7f%vuzllQ$xVsF z54S0^$0Eg127PxxN>bt%bg3N@T~$?;viyS7rRz!IuBs{E?38`nq;X+s=_v!Y@#EOo z*bmm@!GVDfnz4`dpRR1A@Xns8>K!gu82%Ld(S969{PQ%AKC*KD^au8foB(B4Gxjr) zhkZ|_ZJ@z(a*xpGBAtWo^X>WotQA!(b35?c+*)LY#2=K zcVIU6S4UDIcU81>jdnjOHaJ+fHhMHWLJtXl-EdL^b=-*?t($Gqd?FJ&yy{vx>ExCy zbj|W5bWAH;CCGEuIDU33T8T`F5Nx<^vo}#4X%nKYC2ihlctYApxT&}EU~@Cbwx|Os#QpHMTjwlbx)N+$vo|(b$)G5${@Ee)RR~#xnoH zC-nn~BSS-H?c%5S`r1n`tDb@sm&gqlc;xp7)yK!UbvQTlZt^-{WL+yaO*&J#JF>QK z$H3vQD(B}j(gAFR-)z;R!I>M<@um5SeNUef5qfYJv}`m3Y=Hjj1CEEJh$h!+YtyJLwqZ{eV_AKQ-J!lj(=Ys zm6$IjSt(gwjZCPismVdFoI;`MVD$%T=or7qW)u_@xHdjW?p%{>Z?&hwF9*S1>F`@= zckhHn+|KBtsoA+-+w*s%>?7K7X_-;E>F9+sM+Lg^PFGF|QI`Bhp~8r8O7=_Vx@9}9 I#Bq1xU-BkubN~PV literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_other.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/icon_other.imageset/Contents.json new file mode 100644 index 0000000..9d31e05 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/icon_other.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_other_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_other.imageset/icon_other_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_other.imageset/icon_other_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..04c5e2e56e09ebcdcf6b66a709d6b5196737512c GIT binary patch literal 9002 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 BUQGZ1 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/Contents.json new file mode 100644 index 0000000..0184844 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_right_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_right_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_right_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/icon_right_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/icon_right_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..92d5fdea7ab736001433ab6299839b16c011e97d GIT binary patch literal 2568 zcmaJ@X;@Ne8z#4m6t~LEQbO}nQ#L^ZR|HK`5~f+LWIRq}k+Y9cYAZiE%fRqJS2$F;nqQVpLm6xd5&zMmN_*WMx-xKk7 zQVePcoD7NqI3DTZ%t2!?a939(28VZb#W=ySXbcvG*1WFH7#tDrO2oRszdZ;|G%+`U z7)J5`7E5#TL~M{sMMM-zE|(+aE=W+Eh{6yEgc%Mj)>-4>EJ+ngSqf*N#AcR(0!TPw zo=D0Ah42|h78^{FdLlHL{#}AV^qp2H`PL>)!%zyA2!%nSXG)rNq*DLCt3dGGTOthu z{>k@Wi6!(@5r7H!KB$PhHL<(pkxCmf|J8t;r3J( zhbNpdIDAD=sl-5`M9LC!fIx~TLc@XN@wmiQ1UH-u#?{x=7fr!n{M<;s1TvZ6Mk1pz z{=O7~>nxT6a#93E*?t$U=I~wmfKa1%u}0V#C=(I{qNfa`km!o8 z#>l87dc@+X;cj>NBidNhZ$UBoTD47=^^0^Imf*bfO-!S-GK}XHtT5R(_tkvI0GvL1 zN9Y3FJGiM~8^!)wVM7*OS7&2rS3B?28O$#WdchYr7A9{3z@hpZf5n zXWHoaDaWb&Qp^7NTdr8wFbuLOzUuT(IY-|W1W+z`6)rdED}DZ)dH?pZS|{($u6FF{ zGi8d*j^CTKDWMTB+hDgr{TtP9IG3XtGsedOjy&Zo!2wAJV~fKHdn~!$M`3HsLwMW{oDr0Tc2a|w22qg z8DDX90b4t`MHe}wmzlh9IA|HHs@1=y64mv(pBWn+9ah=VAJ&n*m2Rs)=@q(Qv@Jg^ zFr*_*-B@nBT1A~7w7=KXIOn)|!uF=pn@7}lCrtV({C{am@BJ`d;gA|+-g#u-GFak^ z5h@lIu{z#GbnZq!EuNWnD{}~ER8hxb7DLjVJkRa9I?%=49BtuGD%cc_TM}2I6$EVv zK7dPJ5o1j-_h)30pK%(6f zv8ok|>N>X!$h7*vHNR$Qx8`p~Ir^5Ji)#t*2L@-P(yQcoD{VRj|D|cM4RbFC>R_!0t@+@s6OCC~q52&pI!cw1SJ%uvo-0M@X#VZHT%p1=L{`Jjx z6WgXp*KgZ47|FQMFH@XrBf50!tv9{-T#>Zqn%*6#tRd5W$^O3n&$*<`GAn?eTd>I< z^5M;9wk&?9VaICz#7*bw%*Z_5Hp{>=uC_M5fbmIcvm|@#NKP&+X8G;6T)sRHBFuVu z_uhRPEA5ERCkC&b9CLAAlKaxedYHv_Qg=`}dJ$KQ&h-fomskQJri?;csa(FEJ&=9V zBkD!(=bVD!r54(xsLz5g2z5rZ;m;s}HnP*^ILD#$(eTL&^IKY;_DdhF35#78Y1!iy{2)pwumaLAA~Hw9>)+E$EZwb`1n3wF_CV`KT);$edMG5WFAJ`i)C z+%lP7iy3U^a_utKn z@piwV{+;{I%Q}I@mW(wU%hJrQKeCxK8K`bp?h_S_ncID_aSedZV8l-CLYyuu@_SoZ z+tj`h3WeTsQ!GfDd|(6~SyQ^?PmCSfCOe>&lhu&DwBX6*(KEWI%@2gEU!P8NbCWyl ziFG*Ul#r0{IpD>?pRdJFnwaN%uEg%*zt$`A-s?E%q0-tJj-R*NzX65itDilKV~S4; zQd3jg)kDrJ+aK7JRGvDeEO_sX*|fvTy1KP-(Dc%}sl^@AOQl`aOzZI!uVYWG#5H$= zi%ksl*bg7#`LW2y5qYn+51&^ml_7C)ml`f!-0bbQ+{S-m@{fJ?mnWRJ4_HMF_}Jo4 zGODiVXW^c8dN|r;F$k?X?kU!BaU~^qe7&Wkqa!WaY43}a;tF=?bp21VaV9T&lisS5 z1eM_s_AO7TG&?Z%)}ih_RRXpHnu0M0D|ttZbko)ZS5IGbS~+*#;E89#$ms}jdOD}4t&OENY~d#*9g0}D&UIVS z2=2aq#|EKLC;-9fheNVDkIEH$jlS5qwOb1Y<)$mS73J8Pk8)HOHxJi6nh(*2cuP&m Tx!8gJnY&q_AB|Gw8=v_XSsN(F literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/icon_right_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/icon_right_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..98fbb4c0c7a23a4c52e649d65505a51fa5f2d804 GIT binary patch literal 4624 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 Kpj_WI_J08F048Gq literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/icon_right_3x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_right.imageset/icon_right_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6c365f7c3042d054f236646f949e54576c062bf6 GIT binary patch literal 7580 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,!?!ygU}ai1Wl*9ga=j~K1`AUH(s|2=R@)~EABuf zDVsxb5XuzFNM2Wbo~fm!bi5L}wZK?}d}uY!-`+DmvYzO*wRf`RV0}ejXF7aEBTPI( z8P)Q94LCM1PD@+h+3I$i?UnK_3&hM!ni;vC~1* zG`Al{7d=htRST{$zH?Y7Db`(nO^Y^dDQ$4~EG_Fmq32OMNxN+fx}boK@4kr2IgXj{ zbJHW-PvA`poSTT&H0kToHSb}pvNyB(K1u29(Hb~^8j%+VU1SeQ3=Dn`ungXm78^(<|T8q zt|&eBWpZUIbu32B+6O-DOgyIy_0=%2=IngsmzJ5fWTRJfL|z zV>poLH-%WNM~Hu!e@?ybJU5$Z@ufbDe5#}Tgz6}#PFoCL(Hq*VR$K9|!drj&Wtj{- z_1m_Wuy%=ZIyX^i!AxFmDRvDKnS_&S8~t>5(fR17`07ScE@q%^a73 z#NM}^bBipJgvEO)$`s)IUoGzR%lXd=qcZFE1#c`rvEGvK@bHU;g@tV6#|xmK%@HL& z!R&$}yx>dW!qzj*3keK;&K;NrR1nC9 zUVk4)N5@C%>gp^E#JIR(#k(H6LkWK>8yhc;8OE<)9XwfF*vu|hbSz84SBSC?4bV;k z>Th2O2Lvb*unc!8G)zQ(M7W2V2$Ujw1kHb(tomY&jBGDAIJMy8IybMZSgbDASOTrP z12QeA1XJ{Aj*i}X)6?a5)A-kA9vX=8l81J#eP@;LcO(c{3Lg47FfafPOR5W7ufuj} zqg-jHE0n1zD|2#yLPd?!CxJR!{-h^6PJ7WmC?e8jYyPpV+gFX(0{?gJkxYU-E797mq9MgAm8&qK#WcW+@1ik%NW$Nu)iAtipY4|XB2 z4pM=7-gBUbf+Y~3uX2}@*@)Tosf1x|6IyfYn$DCcxa9DJ5yi^x-eSf{ViCpE3EcjMI zMMuY5T2j*FxzbocKP%|}DVp5;w*!6IQD-d&L#Ic}+v=#yKg7O>pDYnWv29|O3Du(b zpj*1(78ZpDi_ zbo<+U782*;;Y}wbmEAc96Q|naecX&L24aiTExa(iTzfcQ4+~6SuOi$$kKrnsxv@oNq4Y z^!_lc{mRRa`(E&!U)DXpqrKhvbfYVBA{(d|biM8y^fo(N`oaXr=uBy*n#c#;tRNKQ zF~!4j$2xYaLGLOG)MU|hG6CHDrlqaTC}O6#jMLoKmWd`%MKS?5XX8?^gI~L7g(pt| zxJw;3h{a>lrZKdS)D-Db^t7}JpH-Q(P3Fq_ zX+SDUsR>Iu_%R^fXfGLw?5?_CaOm97t)Z`7_q-jmxtTB5Z z%8b|wv9+g4Vw&0B?livU?gY~nULwvcjPpbW`8^~pr?^9WDLo;_x7KRA20?tiUCs7G z@z_U4N5@~L@@&YpwUw~M1hRsLxsGytH|VmnvhJ=0yKi<35rn5)6ymfe%!4dOiS}YP zBITzy=yyr}Q&VoH3=+!D;jSN4#mRAjM9@BwkZ5+fyFAiSD|%nm&~UMbE)%8uU%to_ zgEV&-b`wYt23kOQh9*|(z~_xX_FBdWF1eJndVcwsLy=vIXsX&k&~@PBNL zJp#i-<^l!ny%5BGEm36*7rz{u$I=CDlml8vVcTBOD+WbssYR^&M;3iIZ3!J4MG$Z& zYz$q`UZVLlQ}U$0FyaX-E9*?JTj`Y_{{^UScbC&~y6urz%7Wc{Go(~M39TL$B$yT4 z9jrb1NggCIU7Xfqk&pCe+-QrSNqM}+HT wTYx9@!F5nAD4=Bdrw_|v597}uOgs!rdc+0O+fM<1|1Z^4)m5ogdJ+160M2?fz5oCK literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_share.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/icon_share.imageset/Contents.json new file mode 100644 index 0000000..3f460c9 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/icon_share.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_share_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_share_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_share_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_share.imageset/icon_share_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_share.imageset/icon_share_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c04909fe9864cfdcea181eb9d995c1823b67ff81 GIT binary patch literal 2085 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 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_triangle.imageset/icon_triangle_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_triangle.imageset/icon_triangle_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f55c9ce232a140738aa37cdb782b5e798a4f86 GIT binary patch literal 2442 zcmaJ@dpMNo8y+cZZPbVo#mrF2HYbN+hACr)*bFm9n?__ZUrfxw%*Y_+7(zliIF=AO z#FDe5LJpxzT1})VA%(5jXtm$8X@7tG+V?xWhwHiT=YF2|dB5w6r8(?YR?<|0Kp@I? zwiG9@HK0HPrfi(L`{%hLxC!wvyn93BxdUEhR&ao9w}J`*a2Dj);i z9NQovzzA}1_6+jz#Iq5*cET(q1dxCWh*>ZR*Owp(QK<8jHfnLRvPYQvchO%l&385<3C^ z>ixgOBIiH>fOY~ze1D-QxN(PdWv&DSvJha2`9fzt-*-8SG;h9`FY@LKU}OdkrcY&g za(J?Z?Oza7D#4B?60>-ofE|U1069<`4x2zWGsaul7@Oj(FxFVCwJFI8PbT9{Nn{Mx z#)^W+En_KsPk%1J6E9=g|6b75bCCUCy5#pJtuU$N}( zYr%aNiw4D@Wn23{TfMvl){kuXt#HA~x6%iAV7&{$!mfbi^+O=5KG{)7&JyX={y^LG z0F9-Q$Ks;dV*BVi-iWU>)FERDdr_;(wN1**Jk^(Qn_aN3d|bnoWkxdhQm>zAP&fru zk8{Wmmn#{G-A5cDPA}RvB(&-VA4i3qE38OEwW z=ysYMT@GJl8FR6#r-#wm*?GiEQ!%3XQh0dyQ^!4f79$@m_HvtuL}FcQYbzj?N^hs8 zs+;aWXSc^Z?C)PSF)`5yUmy24FE20PX9I)rQH)#D+qb-;p&_@M6atgUl;-5*Jk1$( zue8?NvL#A$^X9*f`uM!|4}JWk^>78gySw|~tfZlWjPxGKPe{0r1lzeZX;XExVczxY z(?4Ack!%eW)E;mP4qmK3dGe$}Osl<(jg9cgkxAVtX=P=ladXp}>>g96poG;bDoC zxF2pwt5XEkPnnvUrnVg?ZTl6B>U@5F{sJYaq@*NKRaI31_9tlGlC?sxVm}Up@z}d} zZ;1TnOomc<1a4B_dS|rFoPK|AZ*Q#P#Z6)hOQEKgR&Xvs3aRnAs+}}3!7S~L7zn?yRx{6IS zH?N1-T_5P`@}0jV%E-tl2n!2qbHtPdX~*^*KYA2*#{O<0El%;%^E=V|nr8!xr{_L= zP#$~n;y@dDX}b2tjT>slFH}Sth)?0q7NP1z3_qkdd7V1!SHfXP_pfF?{vsJ`K{5%VHe6f?{$PkstD3one}^ZyD$Io<45-kXX(QGU<> zb8|Z@SA-dHZgYeW>V8=ZrTh8K>gX%HOm=zw`t@f79X`@V`AbQfc?Aha=nj+mUWC3U zU0&3>m0vS3FtBc)hF((6-P**@8uadUIq zWgUEM)RvB)^lcvIrl+N`qp}9t+FmJ8`3E09VAXZzglFY%ezcT-;BNQmY^6ta6YPEP zkPnLmuP!dOC%X>~?JW6CB?GfhK_PZ-r-oqZu4S+2gasB`PC=cT>A5n}X!U9lV}*T@ zy2j(pp5GL@o;+DJU`CB{A}g;xySg1U6BQd9tMWL~YT9c&H@&+$#eQqbT$;dTnn4*;tu@PpCgC-v2C9mRiVln= zH#av|vpUf>Nau33?4A?#)z$O-iJv#oU0epZdPphBVo|>F6RoN^#mn->ARdQ1+%Qbh zmdK4;A_;_rFnhtJf$4Gcc(otHKhbFJl=kE;CTUxo2ce6b1A4tyDcoK_rQaWece-09 z>ECMM!3|7KEh*U>C=T}BZ*GPwGat0%L-odd)~{b5(xZK~{9xgk3m5dutE!f=?mYMI z5UMu}Zdj6clYSHq2b|S*PKZ5+{hZ`0RyIQ zBH1LI*=D7$=3skPvewdL_qOw$je5avKhrwFk3wirTLfkA{-$S!m`fXCGc$)8Zr_Ao lyID~bTJYtXGF^gtK%TCaBx<}B5y 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 NY=O2!l^|R~{|yi85*7de literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/Contents.json new file mode 100644 index 0000000..79790d8 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "icon_walking_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "icon_walking_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "icon_walking_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/icon_walking_1x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/icon_walking_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ead0a47e1d2267a3439af6063d4c37bc0d6e3c GIT binary patch literal 1839 zcmaJ?X;2eq7!HD5!zBm-in=Z$2qc>WBH0okBp?xk96?b~iOB{cY&LF|Bp}d+4x?aE zD|S#3Z>1qOrXdg*fe?8- z@E=nd;$%R8;Rp~;XVYX1CKKRr=*+Ni4u=^Euoz4h#2{}DjTr`qb70n7VDtjXY`9zj zrwZdobCD4b%q0jl3_&`bj;>?VF+2xia=BcK28%@_5j0JqijeAQDvke`f)LTjaHX11 zVk*F*C|!va5Im4{`p*(j^|-7`GrCRWhCzC%8e-BJmL-h=#p3^mqUbnUL!=^~{r;!0 zMpCFopj1SI72qLkIaeyGPRHjr}CgzMV z#9~;a(hyRW3=s)=AgMuDD&;Uk5WyERSmB&lp^(Xpn;Xj&u;Z9qzJSH%Fa;5F$GAdF zR)8WZVvH;Q%;ikTwKM~&CNm2WT&YFm@i>M8Ba4QW6MJD#s5i=$PwXXZLM}v_fh?u{ zSE+>iD|4!-s2G&* z3We)RdCd(C#v`q*t-diL9*-9-o?SiLp)7tMvm;;IkQ_AB|Ki1(?fE|@EGjMi`0&{? zWn^^p#`Tqz&641@+S*$4>(_2ITedjexqFxW^3<(?KT3*=yGfaw&z}c(c69J(&YZb! zC{XrGd%NAKmKOZwDVLwCs;b13w${~!U-;E|=@G5z(IcB_)28idYisMxqTki``+VW+ zYeT2g{ZSM>U^E(cnM|e(5&?n!{vFNozP>((yM={Y&|SICUFV*rXLmD(C$oV8)&#y7WaO||mX;JAczKYj6K zCWqribFWxFI5_Cz&DT&d<+pD9~=tnPbP&DWSnJ(5uIfA1^D9 zmEP;@{3-oJMraTKP!NUUTnGeFU7ellCb_z}xS0n8t5!X)GZ?Jco8A&7CBy7zwk=B) z3Plg0)8z>S0;P|S4{KA1(RP1K1ecrA($dlh6s7R_hV4fAc5f$JT&q2Ju)aR;!H34C zCY5s!^Sn5#D`?SSPeb%sIjiIT@NkJFE$yOMB>HYrwYQ0J(*C&;GxpWt9+YFwTgNi)(9a zY}{R5J{eiEWZU$}_0p2b{yT(1p?&tPhzlkkx1e)#-0Wu+M}4y0x~%=-oBg3)SB_IX zJoXu4)0!7{f6w<*SYPmzewn#+X=e#ov|>f?ypz~l(_VwYpm=JQ>2%b%dGi9TQ{G?S zVZG1M=n-@`VV3);6DLksD@#jDZv(F8;;w7i40Vt;@qEdJ$#-_z+1VZ5ee_STOYRQ5 qvdYRL%=b?Fg@yT6)evV@!=BlcN?wu4)P88>3=_pA37cZG%l-zPF2$Ju literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/icon_walking_2x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/icon_walking_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1acd89200638dab0e9e45189dcd575f300cf9fc1 GIT binary patch literal 3560 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 VGE@vydGzmPVR{}@W9<2le*yl2D186` literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/icon_walking_3x.png b/LifeLog/LifeLog/Assets.xcassets/Common/icon_walking.imageset/icon_walking_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..51fe8b43527bd5733ed31f5f6ed7569360e1616e GIT binary patch literal 5768 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 OhBZ`lm8%qOBK`+|h@SWW literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Tapbar/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Tapbar/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/Contents.json new file mode 100644 index 0000000..0c9deb2 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "tapbar_history_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "tapbar_history_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "tapbar_history_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/tapbar_history_1x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/tapbar_history_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ee4020a4ac1dc40ca045326986016b424a6561d GIT binary patch literal 1352 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 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/tapbar_history_3x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_history.imageset/tapbar_history_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..46ab02d0d0104b74db246b861c10df08d2aca7c3 GIT binary patch literal 2319 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 m{{>cEg(+LYRBKd%g^bn$fcb6Mw<&;$S`)4B=( literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_map.imageset/tapbar_map_2x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_map.imageset/tapbar_map_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef3787874e6796095fb3f90d1726a4e4fb9f2df GIT binary patch literal 1468 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y-fM)1rW~NvfIGeh-8JiiHIT<(^8oHW0I$1h9TbesM8yLDd zxmcRP^t$9Hm*%GCmB93-AoLpI)C)=sxdlL*T~doO%TiO^it=+6z@E0s#OW4OSDfZS z^`_u-i>Vt14B zV(O$9T3lZ1oPJD>y?*zZr~L{YgIMjEjj81~?;fv7+h_c{qJLWI%vtQoD=ZCJer7M5 z^&~k^WM$fB&ukMZqjN4t)jTgX9ZYzT&Ufkk_mu$}OP*T1yOOlgf~~pn$K{O~v(j$8 zExY;r^W4h4_kPc8a#0f87PeaU_Sb5Nn{{^2JejhsXy=_{H%y&mm}drP zU45~s^Z4UuNgFFzX5MK1E|PnD!qm{Ye&Rk$gLq=%cinw=TmPQ)ueH}--(NEIY}!p1 zrHzkEtgbHY?RfBkY(?zti_<~oxHQyL$fQZ{lgx02m=F=I~i)A+;rMl-|CqEjx+UFCK_Z)hpx!mSFLvbsEBLbG)_M$ zK^8{=9H{R2i*kjONTI%?^*i3%rBuZJermBUZf%(U$*eyQR);>`KZVU8P~@l6!UEep z^(Pr_NMCiT+GH4Dxf{g*7Ej`T;6WJzf1= J);T3K0RV2zA9Vl# literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_map.imageset/tapbar_map_3x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_map.imageset/tapbar_map_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fc533e44a97c9e8e56d50d4832c2c4fd038a929e GIT binary patch literal 1775 zcmaJ?X;c$e7!8zGARtRc*`#A!KqSiqh$bZ>B%x3Yg^*%Uunx%tQb;By6G$S0g0w1! z)0P72u|UBB%2H5}94)Jy%GL@z9Hc0paRKVTI5F%0%WXK_@rE(07!}<8C<&ZEQMu8YORw82(9{tcv03;$N zVV5_T!j-e&I7y&Z0f%ct_(E;GkS-$lZU=nS42(buqY$8$CdiZwHIp#M%fQBlFqr_% zrJ(Ul!n`N}HxytY3K;Mvc@l*b5Cmv666obkqk$d(l>$=96zrxEK`(|kjX~WCEL;Sv znnEOI@Yn$hwXioPAr3|53^F+>DT$QiNkSB{WROm$8#t&`B9=i^YGf#+Cd!oS7a7>F zQmBx~Q3)ag42)0=qC%MjOzHd*r1B+NnQ~#9uni-tAvqZ&Q4C93OyqL^KUFGS%2uL0 z__f|;iIsef947N%C8AOYv4az@HVb1j&>rBoo3xY$gHYAW0-528HF#4)FA5(fld?AjsM3=TB#`=v)0*6fnS_ zO{Xnl*@#djg=Od>R`eRnek0ak2B{pY%!U<`L|7D{K%~Ijq8XB9v~VaiiXUg2C&uTu zyq0;aXc;XFSg$u?$(R_j;b{MJ)Qcg^KZfCwaj};r>%%h4?+VP=$2P4P!@d_Ni0#K$ z>mLl=4i1OxS3Fi;OL0jO~I0JvE4Yz`OW_1)xgm4(p5!OuS^>w9$z_p zGs8T35D0{iPRDE%(CkeT2dp#FoGo;oI;FPMLGNF7FXirEhY!d8H2b`vXS%6}{$TBv zZfbf5aho*`FK99T^&f|>ZtV!0(3&8Vxw~(^PkAqxbb9Be!SeF*YWH0CXsV#tjf%(P z&2_h=s!LJnzZ3+XAaTw&HqIVYtDkei!~0`Pcr!h%H@olGj*gC=?Cb0Mtf0UpiIJa@ zQ%zl0-I<@C-_g?2QjwRJC+`z#8uyCD;;Yy7`th)e0jmu`?%j9lY|pf6F6ne@#>dCa z>vXzQH$Bza$w~M!rFl?X%ef>rkOH27VVR?GJ zzO2r1xQyCsXFTq9_6au)7}`Y9Xf&s6xx|YXFIL$($ETze6z1nQN_4jh?JeF}<0rwJ zsVpjaW&OiNx%9E=nI}0?v(MXX+)X1&zc4p3zS7Zgw5qnYws7=#idGl}?pV8}Q;`+W zAAE3EvR13l9c!+Pm?+Dvw{wkXi}UKTO$(?PDDQdE9_sepGqq3s*vwcQ!K=40nWX&4Y%hGT$FnS(ld-qDIdQi*&|<`GBP&=`X27G_%f=iG$_GjQ`WMtGyj=9U=0Y`fG~E)Nl$DjWCk=S1m$i?$7S%W!&x_iDn-ke``OhiV aAtPM+G*f4^Z@a|s3ku?du)p`;m-a7h_qj6w literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/Contents.json new file mode 100644 index 0000000..18f1984 --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "tapbar_ranking_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "tapbar_ranking_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "tapbar_ranking_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/tapbar_ranking_1x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/tapbar_ranking_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..fadd4726a3cd5dacc955338643f89afab9842b6b GIT binary patch literal 1644 zcmaJ>c~BE~6kZZkN&qcX8Z?$QcvL0HCYS{>#3Upf8A+r-OOy(P>_(zwH*6M&6a=qA z5w&eP48?IsMXVMT0@7At0L4m0$D@>~(i!OB0WBb7QBaW54Fc^Sr8|54-kbM*@A_sx ziB?CryDoDD0Ki=tsfeMzK90v_A@#oc`$3(x+sk*8kFM%3JSRa938~xgD}kHZxq5X-yak}d;t%lZkWU0C=$XVK_EDDv8ikX zq8G&|!e??(mYAJNk|q(4mz9;p%?jY+#10-mI5^nBArNq=2#$F-Mrth_%ith*bKGtd%8NnGcm|=P7N_@fq%w)*1ga%*A`ZvXW~UgPij%lG6*qzMSQva)rPUcQ zhhyC|LZuQZF*B*fbf{7xW>Xwog8>nRK`3*y6}kc`g{3zUTh%jLm=GC9N#4^;%i zvseYL%P^uCIg3U9!3yTZI>cZ!QJEDeVaP<0Z~`}i(@l#E^VSj=J}=)47MZ^mXkILj zDu(A+?Y~w%>!S4IIL--|GUlX@VwBzqO4w5I+YJCf>sBgcah9%>S5s3G`Z*^r`U-#n zUmosh4tVu)q~NfR%U_cdW5){$7FDk-m*nZ4)}xd?oRyfEc%_6DVu{xGH03UksxW_l z|Fg|`Q%x1s)sois_MKIwrOcwPwxhmg-%U9|k4J}owWp<}u_b$6Sx#0~3O7KI$^FyC z@oj~ywO^}`3%1qo?4+sH>g{XRtXWvfiXKU_9qg#9t!+mTq-p=v^B-P3(P(+vyS2Eu zSUos6m|QP~TW^<3rUF2pi&|{@7vs+d8jFgG;?mQf<|S{=FVi$MG{nOLD`(z#$h2)?=6~FF z+5d+{Qki9_tG?abck7%}0?jRAv#si0q4LN9w}{NQ?y%A1J3f0S8By7JsU>fIS*mF% zadCBh$N5@Y{LTcxt*by<$IIu~?e>eSK(NNU-|w5PfPhiD)Z58#N_fvR`P$2Yfq?|Z z&BfoH(KXQRFp<8xcxB+e4H~eIuu~{Zrn3D{)N?Qm0Vg7luM&8htmornS=L`oK5@2e>+=O z7f=)REU)N&_pi#*C&!=LDG`*@E)*_4wt$kt_s&Ih9jU_1ney@>Z_c0H7YtT-T{g2oWpx2tfW{k#`@Qm&>mm;B3 zw9vKOHoH-%E}`BsX`>{$N4L7~A8+sZoO7P%`F(!h?{7b!bI{AvRYgfh34uVUxVw?P z;T5~^D9FQaJ%d!mRk%T z^ojBGrN`{1+cHoN8vud`4->FKhz5w*;T!>8WRLpBi--3MVl)c)rULD@NB!dzmEr|B zarq!%WoBVYH^*QAYil!%rIoccW<7v4$6(Rs@NI31vBX33m|XsUw{86 zvA{Q)2co?}0XLFQhYJ^CuwaUZcjALIh|Bloa>IXQ(TmB2xB@1Z2RQjy14a}YoyA!Y z7=J@hD0p{{0HSf|pgY+f1#_6OSPZ@^A)-zM_E%|J@$Pw`*N6 zl`9&O)zk_}V5?dL>uP-s*LddWyDsstM{V#m%|c~Tv${&S;l;%(9;1ScPmsp20jE|g z8_rrxwYkY_zlv8IRgIK=c=b<7p>N*M^qEH?mjc$$-NaLIiVmMXwU60$%wC@qw6~=e z7q1r2=Sv>S*QhX%3IfO0wl+VpSUj|nSs!}1WAJ)qrD_)N_Y13 zJWHv5eD~fxx!l~`n_9;x;^Ho5@8(>>3_L$GUAgwLUxylmlPFVQYHF%oTU$F}c3RRf zK010yKf9>To1~ik;Pq>XWbTjt{_RS@5;^In-ouEX^osHEkonW6PuFVg>v;AyV8!y~ z0jF-!X|yf}0)fyt%wzOd1y(h>962pJ`u17dF7I+naZAhCQu)CnYX0wceu-1RpAs1r z^<;^HLR!Eze(~-~VKpv$M;#}}=X{@gRUR$i`Q;}qYpP31OYMe+hW2V9ktXgGilnBd z2CL^58{1GCV0P<}XQ+CEUTc_QJaukv4*dG{YjC=oZ=Hwdyyc++k)NO6K}1}8YwI{b z6-9iZr_9XETuV<+-ydW=Gc6gE*a=_vp0%;Jk8^Ija>e>%K|#T0Mvpzk^@rkqO zMqgjw*nyn2!`6AT$mJtO%MWX)&+DUDx&cRrw`L9p4cU~Il!ZoB862*|LExG(E5gk)sC+`>ssR}D#zk=mFE{D1xpb=jWr!Enbac@7cCO1 zE!66hJ5yui3@%^3ysK0GX;)X*$%CYWSFex015gaHHg(||;uxff&RMeHDdTLauSTwrIz({nxa-=HlW#Gs6@0ELH688sCm)tW2HS<@zc=U(Y zMDqr=tx3gH$h%cmZSLvrKDW4~opjO{Z)cZ*@pHZ3mzEL2YyPA-#h^KZ`_+-8 zx1Y76W`s`t^>?~2=tNEq(%VwwWQ+-QPQRm*lauG9Gh*~d>JVB_DVfFNf5q$P;35ie z1j3#$%133PZAMyJ+7fkR$H9{GNZjCgdjesjRHEp3u~ov00F$H-#%ErA%r18+uuN&n z3KT>}R$6{eI-sFz0@uvp_Qa-(nw7DHe9O%qixgQYc*a@Gs z+ajpWTe>3uvMgJDe#4FTHH63R`_b~!VRYiVhD9+9Zo^j4qf zaK$zYaUi|Ez8=X#wwz}riccDcDVJWl2w42s8yELZ!s@=<)urCipUSe;^pNOgszWc z-cuZuk*aB;sHli3e}{dSUs_gnAYL7h!|6UL3qd4FALuYJFi>tx8enY8LXcY1?u|*u ztFxM@TIUrFk9Y*zB_<}WVXamw318&?K%w?1VvSBv>aj`3SIHXP6AH(iUBbgFCO*A= zrZb>@)O}u-e&^I3hI&p;PIW_+M9E)LRNmK2c6D`aO;%pBTKLy$d2XL2}Z*A#9o zE}YrW=%96qki{}dEmRfkBDLU|_wV0tmhm8@gaDbtOe@S{+Hc9h+Yywq%riaV zXG^VgR2uT~0FQFtUGkYh1Rc4HRfPowd>I*;(#+hBil>hhErP3Yn)!xBM(6ZA+!FWg z+ZvMPA@t$2pUt-6e%`umn}3!dRr1^Lx3B%&bR9wlaneWe=8Y|GjD^24cV|!X1yWGr E-;e1qX#fBK literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/tapbar_ranking_3x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_ranking.imageset/tapbar_ranking_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5758b9c39918f5abdae32e3e74528b58053a77 GIT binary patch literal 3839 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 t;bBLr5I=vCwv0Ch7k*w|MTBqnF4mMA2p zrf25aD!t#mUr8Y|#a1cY)Yrhbz&SM|)1#^=HMq(zB)KX(*)m1R-cG@$!U||WZfZ%Q zLPc&)Ua?h$trFN=DVPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP;AXPso zwK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&px_*Arl8@Qn4Fmh63_(e z@b$Iw%quQQ%u7!7bg@+enxU7OnPO#ZX69<*W?*RMWZ-0I=xXlhWa;c|Y3}H3VCd%L zVrd4`>yn>bnwy$e0@Is<&})QKFDNnO765H_NiE7OOHFYr%Fk5*d)g`!ms?!j+;Ex) z)tiFbEe1IC>H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFk!EHX3EIGz!>G};uunK z>&;YazcvSvR!IptMsbGyt(|+>rZLFQ-mtxxSFcI-NBgWDT;9%3iOESxiL8wu+CK6b zeNhwVQa))gS?X)}xhjD1A`#pJ`6Bd1w7HM1#(-TnJwQfJt6K-y%D5IrY zqQ3mReg3n~_0qGA#`S%vTE3T6B$$61i`nU^$6n8joOX9jz?5IUmzP-deJ-?`YbWjz z8tNu}QLE|(gWIQ$+TPu!%m27zMg>!&O0?g% zcPH!p>gG@0`#+X@i3XQ;*CO>7{k>213Rb`Q{V!R7rE`M;bNk&xC9NC}(@z}@(<>}k zYs}U1nnRayV&Y@jXO0I16uAB`(Cx9YsGJv_{rIAv+hr4WiL;7{f5Z|P-b(B*pFZn` QE~xDBboFyt=akR{0BDM_!~g&Q literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_sns.imageset/tapbar_sns_2x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_sns.imageset/tapbar_sns_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e270a0df4132d4cbd6a38e99b1ddd60bea0171 GIT binary patch literal 1354 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2nC-$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y-fM)1rW~Nvfo0++qxVpKRIT<(^8oHW0I$1h9TbesM8yLDd zxmcRP^t$9Hm*%GCmB93-AoRN8)C)=sxdlL*T~doO%TiO^it=+6z@E0s#O)R*oaRCG zrr>sqGfutwK*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*gF_rL^3ci?(uYS45_&F zW~Q%SbAZ6{-xUoGiRpJv1a+2PXP!~PYQCdX1V9=fEDXjy__&Jg-Ji>+41DGf1eYaI>Ll|1UVZ2Fnh=xzm{QQ^?XjfY}EsS z?HAvc-A{>(TXU`GXQGJfwC9z~hYim0$u808n(nu}IDJ-{EK8ZvW}VYlO8+u3p3qL# zxxZ%VtL1F_TqcRRRw{0lO6p}5yt?P0P_=1>?4%d6f0!LN`9ECLpr2K%a=v)pvXxv{ z8JrJkUr-C`2%X@fD8K|l6ZSUws7)5W|2;n>^sE3+*q-aJc};!2vxQVo8ws);)IFmd z&Y^NjV9JTders9Z?rXR!@PLbHLXB=w{gjUylb2m=7Cp?N6t2~1GXK2f^O{Bl_lloO z^BWyBllvaqIBv2}(AclN_?({tixUV{vuB=Ryjx*oR~q|W?wO!$qsz>1zyCV!zU!AI z#Huq@<)zRcse^qLYrpP%ulLp4zA9sb(uDhtVX8ikLe~28^-oNlv`pRe6X*8x9H;Vm z);ix5S-#fJX!hB@Lk2c&pSmA5_-)R$Ziy(q6vgtX{hRIqhUpW&emH$T+#giBdAjl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y-fM)1rW~Nvfo0++qxVl-IIT<(^8oHW0I$1h9TbesM8yLDd zxmcRP^t$9Hm*%GCmB93-AoM!o)C)=sxdlL*T~doO%TiO^it=+6z@E0s#NrkMXHyq9 zpo4Il2i2Q`+btG2_38s1qYsK&q^O1o0n-nN2~W5{4m|0n<^j`t5inspT~NKjz`!`& z)5S5Q;?|p+hI!2f5^ae*EFK9RF6S?_$}MK*xwAz&dg@kl4exUTOOzA@SeCk-n&QD4 zKKIf0$q|cm>ZaV-|MQ56FI%LzFw=$uOx$aZ_tgG&yj~hNEj2UtdRy-8xp@kQ4JsT3 zBr<2E&3j(DKk20Y?aF!f;;tWG?OL~9`r6Z?%tHn?DxOLD|2DM<+~4=U{%h_3M;7NM z=S38qRp0q<`_06+^HiS{Un|MBiobrI?R+MOSOkB!s)?y!{lQxqU0Wk<5BgtD2@4gS zmikk%J;?j;!jdWG(+kQXj!bf>l{wzNE%(0e=~tzPrH)^`nYaDfn}YBEpZIDnSByw# zWEG1LXaEu*7RzhrlU2fAVXXn1v|1*G>P}fRr!ArJ>xYObYq)^eyI4$BTlMv;fK5eG zO&~3TAm8e2IG~j9H&`Pw-|6Hk0kGy(t&^r+763{xb!#M_{d>bNc=FxSzo)Oy-PxHt zD=j|s>hg8Mdt`jRua?TJl$TkgVRdTv!@%deAHFFtUwPSM^TB42;hFR08QB=*Cf#hC T)5)R=D!4pd{an^LB{Ts5a^cp$ literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/Contents.json b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/Contents.json new file mode 100644 index 0000000..80dca0a --- /dev/null +++ b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "tapbar_today_1x.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "tapbar_today_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "tapbar_today_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/tapbar_today_1x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/tapbar_today_1x.png new file mode 100644 index 0000000000000000000000000000000000000000..1882b3820c04509689a12bf0237b72a2ec447d53 GIT binary patch literal 1800 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

  • `@^oDn)@E+6!+?%4t2o><{BG{zp9b7ZV)FuO)QGmre?h{DUZ){eZ;&_6AU*? zsjQqM(EXN{CXhsq%ri+<<%iz;O6mMv?sJ9e>)*a322ao?Now0ssOw)(KS^w?sCf1M zk*)mHQ0)3{ASWm1x}P!r{^k_-tumFcHFcqeY{MrtBKLHic|zHGd`)P|`2%ViMT&=? zbLvNXC!#WG#YJcH^A)f=y~V-iWK6lq0a9sgt@D<_Mdaf>M4M!OsHbO|@%h2u&9#1aGx*}r zLYTz~{R+;$`pB_+U;6t$_-T52S|lDM#m<-4H8#EN~3V{i2c)8Qv7Ydd(Wrbh4iF0*NDPG%-TTU%Siw8GRM zoE+lq*zv#MwNtTK-h5~YYuM^ z*{$DH`(SuzNdIoLZ`=3i(W7leoCj4^Rl<24jYhfaq{Y`JHArxqs+wA%NeSJ) kjan9%Ju?Jb@=s8Kt!+N0XxEM@S^3lSaPwkZrUf1OH_#l5jQ{`u literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/tapbar_today_3x.png b/LifeLog/LifeLog/Assets.xcassets/Tapbar/tapbar_today.imageset/tapbar_today_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f90b57fdd5fb4bbe810199cb67a841eac91829 GIT binary patch literal 3972 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 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Assets.xcassets/Today/today_back_button.imageset/today_back_button_3x.png b/LifeLog/LifeLog/Assets.xcassets/Today/today_back_button.imageset/today_back_button_3x.png new file mode 100644 index 0000000000000000000000000000000000000000..71b32cf88de6100d421ce4feb4793e805d585e51 GIT binary patch literal 11484 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 literal 0 HcmV?d00001 diff --git a/LifeLog/LifeLog/Base.lproj/LaunchScreen.storyboard b/LifeLog/LifeLog/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..fdf3f97 --- /dev/null +++ b/LifeLog/LifeLog/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/BaseViewController.h b/LifeLog/LifeLog/BaseViewController.h new file mode 100644 index 0000000..374662b --- /dev/null +++ b/LifeLog/LifeLog/BaseViewController.h @@ -0,0 +1,13 @@ +// +// BaseViewController.h +// LifeLog +// +// Created by Panasonic R&D Center Vietnam on 7/31/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface BaseViewController : UIViewController +@property (nonatomic, weak) IBOutlet UIScrollView *scrollView; +@end diff --git a/LifeLog/LifeLog/BaseViewController.m b/LifeLog/LifeLog/BaseViewController.m new file mode 100644 index 0000000..6b9be85 --- /dev/null +++ b/LifeLog/LifeLog/BaseViewController.m @@ -0,0 +1,107 @@ +// +// BaseViewController.m +// LifeLog +// +// Created by Panasonic R&D Center Vietnam on 7/31/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "BaseViewController.h" + +@interface BaseViewController () + +@end + +@implementation BaseViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self + selector:@selector(keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [center addObserver:self + selector:@selector(keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; + // self.scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - keyboard notifications + +- (void)keyboardWillShow:(NSNotification *)notification +{ + //Obtain Keyboard Position and Size Information - キーボードのポジション・サイズを取得 + CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + // Add the keyboard size to the bottom content inset of the scroll view. + // スクロールビューの底ContentInsetキーボードサイズを追加 + UIEdgeInsets inset = self.scrollView.contentInset; + inset.bottom = keyboardFrame.size.height; + self.scrollView.contentInset = inset; + + UIEdgeInsets scrollInset = self.scrollView.scrollIndicatorInsets; + scrollInset.bottom = keyboardFrame.size.height; + self.scrollView.scrollIndicatorInsets = scrollInset; + + //Obtain First Responder - FirstResponderを入手 + UIView *currentFirstResponder = [self _findFirstResponder:self.scrollView]; + CGRect rectResponder = currentFirstResponder.frame; + + // Determine visible frame - 表示なフレームを設定 + CGRect visibleFrame = self.view.frame; + visibleFrame.size.height -= keyboardFrame.size.height; + + // Determine whether item is in visible frame - アイテムを表示フレーム内にあるかどうかを確認 + if (!CGRectContainsPoint(visibleFrame, rectResponder.origin) ) + { + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; + [UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]]; + [UIView setAnimationBeginsFromCurrentState:YES]; + int scrollPointY = (rectResponder.origin.y - keyboardFrame.origin.y) + rectResponder.size.height + 5; + //5 = minor padding - 5はマイナーパディング + CGPoint scrollPoint = CGPointMake(0.0, scrollPointY); + //Scroll to new point - 新ポイントにスクロール + [self.scrollView setContentOffset:scrollPoint animated:YES]; + [UIView commitAnimations]; + } +} + + +- (void)keyboardWillHide:(NSNotification *)notification +{ + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; + [UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]]; + [UIView setAnimationBeginsFromCurrentState:YES]; + UIEdgeInsets inset = self.scrollView.contentInset; + inset.bottom = 0; + self.scrollView.contentInset = inset; + + UIEdgeInsets scrollInset = self.scrollView.scrollIndicatorInsets; + scrollInset.bottom = 0; + self.scrollView.scrollIndicatorInsets = scrollInset; + + [self.scrollView setContentOffset:CGPointMake(0, -self.scrollView.contentInset.top) animated:YES]; + [UIView commitAnimations]; +} + +- (UIView *)_findFirstResponder:(UIView *)view +{ + for ( UIView *childView in view.subviews ) { + if ( [childView respondsToSelector:@selector(isFirstResponder)] && [childView isFirstResponder] ) return childView; + UIView *result = [self _findFirstResponder:childView]; + if ( result ) return result; + } + return nil; +} + +@end diff --git a/LifeLog/LifeLog/CMMotionActivityExtra.h b/LifeLog/LifeLog/CMMotionActivityExtra.h new file mode 100644 index 0000000..db48eb0 --- /dev/null +++ b/LifeLog/LifeLog/CMMotionActivityExtra.h @@ -0,0 +1,14 @@ +// +// CMMotionActivityExtra.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/29/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface CMMotionActivityExtra : NSObject +@property (nonatomic, strong) CMMotionActivity *activity; +@property (nonatomic, strong) NSDate *endDate; +@end diff --git a/LifeLog/LifeLog/CMMotionActivityExtra.m b/LifeLog/LifeLog/CMMotionActivityExtra.m new file mode 100644 index 0000000..3112abe --- /dev/null +++ b/LifeLog/LifeLog/CMMotionActivityExtra.m @@ -0,0 +1,13 @@ +// +// CMMotionActivityExtra.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/29/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "CMMotionActivityExtra.h" + +@implementation CMMotionActivityExtra + +@end diff --git a/LifeLog/LifeLog/CustomTextField.h b/LifeLog/LifeLog/CustomTextField.h new file mode 100644 index 0000000..7cb253b --- /dev/null +++ b/LifeLog/LifeLog/CustomTextField.h @@ -0,0 +1,13 @@ +// +// CustomTextField.h +// LifeLog +// +// Created by Nguyen Van Phong on 8/1/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface CustomTextField : UITextField + +@end diff --git a/LifeLog/LifeLog/CustomTextField.m b/LifeLog/LifeLog/CustomTextField.m new file mode 100644 index 0000000..3e30124 --- /dev/null +++ b/LifeLog/LifeLog/CustomTextField.m @@ -0,0 +1,33 @@ +// +// CustomTextField.m +// LifeLog +// +// Created by Nguyen Van Phong on 8/1/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "CustomTextField.h" + +@implementation CustomTextField + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + self.borderStyle = UITextBorderStyleNone; + self.textAlignment = NSTextAlignmentCenter; + } + return self; +} + +- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { + return NO; +} + +- (CGRect)caretRectForPosition:(UITextPosition *)position +{ + return CGRectZero; +} + +@end diff --git a/LifeLog/LifeLog/Entities.h b/LifeLog/LifeLog/Entities.h new file mode 100644 index 0000000..d8cac16 --- /dev/null +++ b/LifeLog/LifeLog/Entities.h @@ -0,0 +1,14 @@ +// +// Entities.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#ifndef Entities_h +#define Entities_h + +#import "User.h" + +#endif /* Entities_h */ diff --git a/LifeLog/LifeLog/HistoryViewController.h b/LifeLog/LifeLog/HistoryViewController.h new file mode 100644 index 0000000..43155ea --- /dev/null +++ b/LifeLog/LifeLog/HistoryViewController.h @@ -0,0 +1,13 @@ +// +// HistoryViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface HistoryViewController : UIViewController + +@end diff --git a/LifeLog/LifeLog/HistoryViewController.m b/LifeLog/LifeLog/HistoryViewController.m new file mode 100644 index 0000000..67b3740 --- /dev/null +++ b/LifeLog/LifeLog/HistoryViewController.m @@ -0,0 +1,28 @@ +// +// HistoryViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "HistoryViewController.h" + +@interface HistoryViewController () + +@end + +@implementation HistoryViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title = NSLocalizedString(@"lifelog.tapbar.history", nil); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/LifeLog/LifeLog/HistoryViewController.xib b/LifeLog/LifeLog/HistoryViewController.xib new file mode 100644 index 0000000..38e1996 --- /dev/null +++ b/LifeLog/LifeLog/HistoryViewController.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/HomeViewController.h b/LifeLog/LifeLog/HomeViewController.h new file mode 100644 index 0000000..b86fea0 --- /dev/null +++ b/LifeLog/LifeLog/HomeViewController.h @@ -0,0 +1,13 @@ +// +// HomeViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface HomeViewController : UIViewController + +@end diff --git a/LifeLog/LifeLog/HomeViewController.m b/LifeLog/LifeLog/HomeViewController.m new file mode 100644 index 0000000..a8fe9c1 --- /dev/null +++ b/LifeLog/LifeLog/HomeViewController.m @@ -0,0 +1,257 @@ +// +// HomeViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "HomeViewController.h" +#import "NSDate+helper.h" +#import +#import "CMMotionActivityExtra.h" +#import "TodayViewController.h" +#import "Utilities.h" +#import + +static NSInteger numberTotal = 10000; + +@interface HomeViewController () +{ + MBProgressHUD *progressHud; +} +@property (nonatomic, weak) IBOutlet UILabel *lblTitle; +@property (nonatomic, weak) IBOutlet UIImageView *avatar; +@property (nonatomic, weak) IBOutlet UILabel *lblDateCurrent; +@property (nonatomic, weak) IBOutlet UILabel *lblValueStep; +@property (nonatomic, weak) IBOutlet UILabel *lblUnitStep; +@property (nonatomic, weak) IBOutlet UILabel *lblValueStepOther; +@property (nonatomic, weak) IBOutlet UILabel *lblPercent; +@property (nonatomic, weak) IBOutlet UILabel *lblNotice; +@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentHome; + +@property (nonatomic, strong) CMPedometer *pedometer; +@property (nonatomic, strong) CMMotionActivityManager *motionActivityManager; +@property (nonatomic, strong) NSOperationQueue *operationQueue; +@property (nonatomic, strong) NSTimer *timer; +@property (nonatomic, assign) NSInteger bike; +@property (nonatomic, assign) NSInteger walking; +@property (nonatomic, assign) NSInteger running; +@property (nonatomic, strong) NSDate *dateCurrent; + +//@property (nonatomic, assign) BOOL isRequesting; +@property (nonatomic, assign) int totalRequest; +@property (nonatomic, assign) int countComplete; + +@end + +@implementation HomeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.lblTitle.text = NSLocalizedString(@"lifelog.home.title", nil); + + [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.lblTitle attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; + + self.avatar.backgroundColor = [UIColor whiteColor]; + self.avatar.layer.borderWidth = 2.0f; + self.avatar.layer.borderColor = [[UIColor whiteColor] CGColor]; + self.avatar.layer.cornerRadius = self.avatar.frame.size.width/2.0f; + self.avatar.layer.masksToBounds = YES; + self.lblNotice.text = NSLocalizedString(@"lifelog.home.notice", nil); + + _dateCurrent = [NSDate date]; + 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)]; + + self.lblUnitStep.text = NSLocalizedString(@"lifelog.home.unit.step", nil); + + if ([CMPedometer isStepCountingAvailable]) { + _pedometer = [[CMPedometer alloc] init]; + } + if ([CMMotionActivityManager isActivityAvailable]) { + _motionActivityManager = [[CMMotionActivityManager alloc] init]; + } + _operationQueue = [[NSOperationQueue alloc] init]; + _bike = 0; + _walking = 0; + _running = 0; + _segmentHome.selectedSegmentIndex = 1; +// _isRequesting = NO; + _totalRequest = 0; + _countComplete = 0; + + progressHud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; + progressHud.mode = MBProgressHUDModeIndeterminate; + progressHud.detailsLabel.text = NSLocalizedString(@"lifelog.home.progressHud.title", nil); +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; +// _timer = [NSTimer scheduledTimerWithTimeInterval:1.5f target:self selector:@selector(countStep) userInfo:nil repeats:YES]; +// [_timer fire]; + [self countStep]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + //[_timer invalidate]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - IBAction +- (IBAction)menuButtonTouchUpInside:(id)sender +{ + +} + +- (IBAction)todayButtonTouchUpInside:(id)sender +{ + TodayViewController *todayVC = [[TodayViewController alloc] initWithNibName:@"TodayViewController" bundle:nil]; + [self.navigationController pushViewController:todayVC animated:YES]; +} + +- (IBAction)leftButtonTouchUpInside:(id)sender +{ + self.dateCurrent = [self.dateCurrent dateByAddingTimeInterval:-(24*60*60)]; + 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)]; + [self countStep]; +} + +- (IBAction)rightButtonTouchUpInside:(id)sender +{ + self.dateCurrent = [self.dateCurrent dateByAddingTimeInterval:24*60*60]; + 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)]; + [self countStep]; +} + +- (IBAction)segmentValueChange:(id)sender { + [self updateStepUI]; +} + +#pragma mark - Functions Private +- (void)countStep +{ +// if (self.isRequesting == YES) { +// return; +// } + if ([CMMotionActivityManager isActivityAvailable]) { + [progressHud showAnimated:YES]; + [progressHud setHidden:NO]; + // self.isRequesting = YES; + self.bike = 0; + self.walking = 0; + self.running = 0; + NSDate *startDate = [self.dateCurrent beginningAtMidnightOfDay]; + NSDate *endDate = [startDate dateByAddingTimeInterval:(24*60*60 - 1)]; + + HomeViewController __weak *weakSelf = self; + dispatch_queue_t myQueue = dispatch_queue_create("mobileworld.jp.lifelog", NULL); + dispatch_async(myQueue, ^{ + if (weakSelf == nil) { + return ; + } + + [weakSelf.motionActivityManager queryActivityStartingFromDate:startDate toDate:endDate toQueue:_operationQueue withHandler:^(NSArray * _Nullable activities, NSError * _Nullable error) { + if (error || activities.count <= 0) { + weakSelf.totalRequest = 0; + weakSelf.countComplete = 0; + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf updateStepUI]; + }); + return ; + } + // set EndDate + weakSelf.totalRequest = (int)activities.count; + NSMutableArray *arrayActivities = [[NSMutableArray alloc] init]; + for (int i = 0; i < activities.count; i++) { + CMMotionActivity *activity = [activities objectAtIndex:i]; + CMMotionActivityExtra *activityExtra = [[CMMotionActivityExtra alloc] init]; + activityExtra.activity = activity; + if (i == activities.count - 1) { + activityExtra.endDate = endDate; + } + else { + CMMotionActivity *activityNext = [activities objectAtIndex:i+1]; + activityExtra.endDate = activityNext.startDate; + } + [arrayActivities addObject:activityExtra]; + } + + for (CMMotionActivityExtra *activityExtra in arrayActivities) { + // NSLog(@"%@", activityExtra.activity.startDate); + [weakSelf.pedometer queryPedometerDataFromDate:activityExtra.activity.startDate toDate:activityExtra.endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) { + NSInteger numberStep = [pedometerData.numberOfSteps integerValue]; + + if (activityExtra.activity.cycling) { + // self.bike + weakSelf.bike += numberStep; + //NSLog(@"Step cycling"); + } + else if (activityExtra.activity.walking) { + // self.walking + weakSelf.walking += numberStep; + //NSLog(@"Step walking"); + } + else if (activityExtra.activity.running) { + weakSelf.running += numberStep; + //NSLog(@"Step running"); + } + else { + // unknown + //NSLog(@"Step unknown"); + } + // NSLog(@"Number of step--> %ld", numberStep); + weakSelf.countComplete += 1; + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf updateStepUI]; + }); + }]; + } + // NSLog(@"-----------------------------------------------------"); + }]; + }); + } + else { + [progressHud setHidden:YES]; + } +} + +- (void)updateStepUI //:(NSInteger)numberStep +{ + if (self.totalRequest == self.countComplete) { + switch (self.segmentHome.selectedSegmentIndex) { + case 0: + self.lblValueStep.text = [Utilities addCommaFromNumber:self.bike]; + self.lblValueStepOther.text = [NSString stringWithFormat:@"%@ %ld", NSLocalizedString(@"lifelog.today.remaining.other", nil), numberTotal - self.bike]; + self.lblPercent.text = [NSString stringWithFormat:@"%@ %i%@", NSLocalizedString(@"lifelog.today.text.percent", nil), (int)(self.bike*100/numberTotal), NSLocalizedString(@"lifelog.today.percent", nil)]; + break; + + case 1: + self.lblValueStep.text = [Utilities addCommaFromNumber:self.walking]; + self.lblValueStepOther.text = [NSString stringWithFormat:@"%@ %ld", NSLocalizedString(@"lifelog.today.remaining.other", nil), numberTotal - self.walking]; + self.lblPercent.text = [NSString stringWithFormat:@"%@ %i%@", NSLocalizedString(@"lifelog.today.text.percent", nil), (int)(self.walking*100/numberTotal), NSLocalizedString(@"lifelog.today.percent", nil)]; + break; + + case 2: + self.lblValueStep.text = [Utilities addCommaFromNumber:self.running]; + self.lblValueStepOther.text = [NSString stringWithFormat:@"%@ %ld", NSLocalizedString(@"lifelog.today.remaining.other", nil), numberTotal - self.running]; + self.lblPercent.text = [NSString stringWithFormat:@"%@ %i%@", NSLocalizedString(@"lifelog.today.text.percent", nil), (int)(self.running*100/numberTotal), NSLocalizedString(@"lifelog.today.percent", nil)]; + break; + + default: + break; + } + // NSLog(@"Walking: %ld || Running: %ld || Bike: %ld", self.walking, self.running, self.bike); + // self.isRequesting = NO; + self.countComplete = 0; + self.totalRequest = 0; + [progressHud setHidden:YES]; + } +} + +@end diff --git a/LifeLog/LifeLog/HomeViewController.xib b/LifeLog/LifeLog/HomeViewController.xib new file mode 100644 index 0000000..2ad2e13 --- /dev/null +++ b/LifeLog/LifeLog/HomeViewController.xib @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/Info.plist b/LifeLog/LifeLog/Info.plist new file mode 100644 index 0000000..1bd7ec8 --- /dev/null +++ b/LifeLog/LifeLog/Info.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSMotionUsageDescription + $(PRODUCT_NAME) motion use + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSCameraUsageDescription + to take photos and video + NSPhotoLibraryUsageDescription + to save photos and videos + + diff --git a/LifeLog/LifeLog/Localizable.strings b/LifeLog/LifeLog/Localizable.strings new file mode 100644 index 0000000..899ebfa --- /dev/null +++ b/LifeLog/LifeLog/Localizable.strings @@ -0,0 +1,62 @@ +/* + Localizable.strings + LifeLog + + Created by Nguyen Van Phong on 7/27/17. + Copyright © 2017 PhongNV. All rights reserved. +*/ + +// Common +"lifelog.common.year" = "年"; +"lifelog.common.month" = "月"; +"lifelog.common.day" = "日"; +"lifelog.common.email" = "メールアドレス"; +"lifelog.common.password" = "パスワード"; +"lifelog.common.back" = "戻る"; +// Login +"lifelog.login.title" = "ライフログ"; +"lifelog.login.button.login" = "ログイン"; +"lifelog.login.label.register" = "登録がまだの方"; +"lifelog.login.button.register" = "新規登録"; +"lifelog.login.forget.password" = "パスワードをお忘れの方"; +// Register +"lifelog.register.title" = "会員登録"; +"lifelog.register.username" = "ユーザー名"; +"lifelog.register.name" = "氏名"; +"lifelog.register.nickname" = "ニックネーム"; +"lifelog.register.confirmation.password" = "確認用パスワード"; +"lifelog.register.sex" = "性別"; +"lifelog.register.birthday" = "生年月日"; +"lifelog.register.height" = "身長"; +"lifelog.register.height.unit" = "cm"; +"lifelog.register.weight.unit" = "kg"; +"lifelog.register.weight" = "体重"; +"lifelog.register.fat.percentage" = "体脂肪率"; +"lifelog.register.fat.percentage.unit" = "%"; +"lifelog.register.daily.physical.activity.level" = "1日の身体活動レベル"; +"lifelog.register.low" = "低い"; +"lifelog.register.normal" = "普通"; +"lifelog.register.high" = "高い"; +"lifelog.register.area" = "お住いの地域"; +"lifelog.register.area.hokkaido" = "北海道"; +"lifelog.register.note" = "コメント"; +// Tapbar +"lifelog.tapbar.today" = "今日"; +"lifelog.tapbar.history" = "履歴"; +"lifelog.tapbar.ranking" = "ランキング"; +"lifelog.tapbar.map" = "MAP"; +"lifelog.tapbar.sns" = "SNS"; +// Screen Home +"lifelog.home.title" = "自宅"; +"lifelog.home.unit.step" = "step"; +"lifelog.home.progressHud.title" = "Processing..."; +"lifelog.home.notice" = "お知らせ"; +// Screen Today +"lifelog.today.title" = "今日"; +"lifelog.today.remaining.step.1" = "目模まであと"; +"lifelog.today.remaining.step.2" = "歩です"; +"lifelog.today.total.other" = "目標"; +"lifelog.today.unit.step" = "歩"; +"lifelog.today.remaining.other" = "残歩数"; +"lifelog.today.text.percent" = "達成率"; +"lifelog.today.percent" = "%"; diff --git a/LifeLog/LifeLog/LoginViewController.h b/LifeLog/LifeLog/LoginViewController.h new file mode 100644 index 0000000..b90ade1 --- /dev/null +++ b/LifeLog/LifeLog/LoginViewController.h @@ -0,0 +1,14 @@ +// +// LoginViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import +#import "BaseViewController.h" + +@interface LoginViewController : BaseViewController + +@end diff --git a/LifeLog/LifeLog/LoginViewController.m b/LifeLog/LifeLog/LoginViewController.m new file mode 100644 index 0000000..7e5de0d --- /dev/null +++ b/LifeLog/LifeLog/LoginViewController.m @@ -0,0 +1,99 @@ +// +// LoginViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "LoginViewController.h" +#import "ServerAPI.h" +#import "AppDelegate.h" +#import "RegisterViewController.h" + +@interface LoginViewController () +@property (nonatomic, weak) IBOutlet UILabel *lblEmail; +@property (nonatomic, weak) IBOutlet UILabel *lblPassword; +@property (nonatomic, weak) IBOutlet UILabel *lblRegister; +@property (nonatomic, weak) IBOutlet UITextField *tfEmail; +@property (nonatomic, weak) IBOutlet UITextField *tfPassword; +@property (nonatomic, weak) IBOutlet UIButton *btnLogin; +@property (nonatomic, weak) IBOutlet UIButton *btnRegist; +@property (nonatomic, weak) IBOutlet UIButton *btnForget; +@end + +@implementation LoginViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title = NSLocalizedString(@"lifelog.login.title", nil); + + self.lblEmail.text = NSLocalizedString(@"lifelog.common.email", nil); + self.lblPassword.text = NSLocalizedString(@"lifelog.common.password", nil); + self.lblRegister.text = NSLocalizedString(@"lifelog.login.label.register", nil); + + [self.btnLogin setTitle:NSLocalizedString(@"lifelog.login.button.login", nil) forState:UIControlStateNormal]; + [self.btnRegist setTitle:NSLocalizedString(@"lifelog.login.button.register", nil) forState:UIControlStateNormal]; + + NSMutableAttributedString *forgetString = [[NSMutableAttributedString alloc] initWithString:NSLocalizedString(@"lifelog.login.forget.password", nil)]; + [forgetString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, [forgetString length])]; + // Or for adding Colored text use---------- + UIColor* textColor = [UIColor blueColor]; + [forgetString setAttributes:@{NSForegroundColorAttributeName:textColor,NSUnderlineStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleSingle]} range:NSMakeRange(0,[forgetString length])]; + // Or for adding Colored text use---------- + [_btnForget setAttributedTitle:forgetString forState:UIControlStateNormal]; + + self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"lifelog.common.back", nil) style:UIBarButtonItemStylePlain target:nil action:nil]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)buttonLoginTouchUpInside:(id)sender { + LoginViewController __weak *weakSelf = self; + [[ServerAPI server] loginWithEmail:_tfEmail.text Password:_tfPassword.text CompletionHandler:^(User *user, NSString *token, NSError *error) { + if (error == nil) { + // save user and goto MainMenu + dispatch_async(dispatch_get_main_queue(), ^{ + [[AppDelegate sharedAppDelegate] gotoMainMenu]; + }); + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + NSString *message = [error.userInfo objectForKey:@"message"]; + if (message.length > 0) { + UIAlertController * alert= [UIAlertController + alertControllerWithTitle:@"Error" + message:message + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [alert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [alert addAction:ok]; + + [weakSelf presentViewController:alert animated:YES completion:nil]; + } + }); + } + }]; +} + +- (IBAction)buttonForgetTouchUpInside:(id)sender { +} + +- (IBAction)buttonRegisterTouchUpInside:(id)sender { + RegisterViewController *registerVC = [[RegisterViewController alloc] initWithNibName:@"RegisterViewController" bundle:nil]; + [self.navigationController pushViewController:registerVC animated:YES]; +} + +@end diff --git a/LifeLog/LifeLog/LoginViewController.xib b/LifeLog/LifeLog/LoginViewController.xib new file mode 100644 index 0000000..0287e7f --- /dev/null +++ b/LifeLog/LifeLog/LoginViewController.xib @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/MapViewController.h b/LifeLog/LifeLog/MapViewController.h new file mode 100644 index 0000000..4f30fec --- /dev/null +++ b/LifeLog/LifeLog/MapViewController.h @@ -0,0 +1,13 @@ +// +// MapViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface MapViewController : UIViewController + +@end diff --git a/LifeLog/LifeLog/MapViewController.m b/LifeLog/LifeLog/MapViewController.m new file mode 100644 index 0000000..ac3c418 --- /dev/null +++ b/LifeLog/LifeLog/MapViewController.m @@ -0,0 +1,28 @@ +// +// MapViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "MapViewController.h" + +@interface MapViewController () + +@end + +@implementation MapViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title = NSLocalizedString(@"lifelog.tapbar.map", nil); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/LifeLog/LifeLog/MapViewController.xib b/LifeLog/LifeLog/MapViewController.xib new file mode 100644 index 0000000..1fcd6c9 --- /dev/null +++ b/LifeLog/LifeLog/MapViewController.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/NSDate+helper.h b/LifeLog/LifeLog/NSDate+helper.h new file mode 100644 index 0000000..f707e79 --- /dev/null +++ b/LifeLog/LifeLog/NSDate+helper.h @@ -0,0 +1,100 @@ +// +// NSDate+Helper.h +// BeepBeep +// +// Created by Michael Nguyen on 4/6/16. +// Copyright © 2016 lenpham. All rights reserved. +// + +#import + +@interface NSDate (Helper) +- (NSUInteger)daysAgo; +- (NSUInteger)daysAgoAgainstMidnight; +- (NSString *)stringDaysAgo; +- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag; +- (NSUInteger)weekday; + ++ (NSDate *)fromString:(NSString *)string; ++ (NSDate *)dateFromString:(NSString *)string; ++ (NSDate *)dateFromString:(NSString *)string withFormat:(NSString *)format; ++ (NSDate *)dateFromString:(NSString *)string withStyle:(NSDateFormatterStyle)style; ++ (NSString *)stringFromDate:(NSDate *)date withStyle:(NSDateFormatterStyle)style; ++ (NSString *)stringFromDateTime:(NSDate *)date withStyle:(NSDateFormatterStyle)style; ++ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)string; ++ (NSString *)stringFromDate:(NSDate *)date; ++ (NSString *)stringForDisplayFromDate:(NSDate *)date; ++ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed; ++ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed alwaysDisplayTime:(BOOL)displayTime; + +- (NSString *)toString; +- (NSString *)toTimeString; +- (NSString *)toTimeOnlyString; +- (NSString *)string; +- (NSString *)stringWithFormat:(NSString *)format; +- (NSString *)stringWithFormat:(NSString *)format timeZone:(NSTimeZone *)timeZone; +- (NSString *)stringWithStyle:(NSDateFormatterStyle)style; +- (NSString *)stringWithDateStyle:(NSDateFormatterStyle)dateStyle timeStyle:(NSDateFormatterStyle)timeStyle; + +- (NSDate *)toLocalTime; +- (NSDate *)toGlobalTime; + +- (NSInteger)numberOfDayUntilDate:(NSDate *)date; + +- (NSDate *)beginningOfWeek; +- (NSDate *)beginningOfDay; +- (NSDate *)beginningAtMidnightOfDay; +- (NSDate *)endOfWeek; + +- (NSDate *)dateByAddSecond:(NSInteger)seconds; +- (NSDate *)dateByAddMinute:(NSInteger)minutes; +- (NSDate *)dateByAddDays:(NSInteger)days; +- (NSDate *)dateByAddMonth:(NSInteger)months; +- (NSDate *)dateByAddingYears:(NSUInteger)years; ++ (NSDate *)lastDateOfMonth:(NSDate *)month; ++ (NSDate *)lastDateOfWeek:(NSDate *)week; ++ (NSDate *)firstDateOfMonth:(NSDate *)month; ++ (NSString *)dateFormatString; ++ (NSString *)timeFormatString; ++ (NSString *)timestampFormatString; ++ (NSString *)dbFormatString; ++ (NSDate *)parseDate:(NSString *)inStrDate format:(NSString *)inFormat; +- (NSDate *)dateOnly; + ++ (NSDateComponents *)hourComponentsBetweenDate:(NSDate *)firstDate andDate:(NSDate *)endDate; ++ (NSInteger)dayBetweenDay:(NSDate *)firstDay andDay:(NSDate *)lastDay; +- (NSInteger)getMonth; +- (NSInteger)getDay; +- (NSInteger)getYear; ++ (NSInteger)dayUntilBirthDate:(NSDate *)birthDate; + +- (NSDate *)OneAmOfDay; + +/** + * Compare date time + * + * @param date <#date description#> + * + * @return <#return value description#> + */ +- (BOOL)isAfterDate:(NSDate *)date; +- (BOOL)isBetweenDate:(NSDate *)start end:(NSDate *)end; ++ (NSString *)toStringWithOutSimiColon:(NSDate *)date; ++ (NSString *)toStringWithOutSimiColonWithOutTime:(NSDate *)date; ++ (BOOL)isAllDayEvent:(NSDate *)startDate withEndDate:(NSDate *)endDate; +- (BOOL)isSameDay:(NSDate *)anotherDate; +- (NSInteger)daysBetweenDate:(NSDate *)d; + +- (BOOL)isLaterThanOrEqualTo:(NSDate *)date; +- (BOOL)isEarlierThanOrEqualTo:(NSDate *)date; +- (BOOL)isLaterThan:(NSDate *)date; +- (BOOL)isEarlierThan:(NSDate *)date; + +//Convert date to day ago +- (NSString *)convertDateToDurationString; +- (NSString *)getTimeStr; +- (NSString *)getDateStr; +- (NSDate *)setTimeWithTimeStr:(NSString *)timeStr; +- (NSDateFormatter *)dateFormatter; ++ (NSTimeZone *)defaultTimeZone; +@end diff --git a/LifeLog/LifeLog/NSDate+helper.m b/LifeLog/LifeLog/NSDate+helper.m new file mode 100644 index 0000000..9f17751 --- /dev/null +++ b/LifeLog/LifeLog/NSDate+helper.m @@ -0,0 +1,893 @@ +// +// NSDate+Helper.m +// BeepBeep +// +// Created by Michael Nguyen on 4/6/16. +// Copyright © 2016 lenpham. All rights reserved. +// + +#import "NSDate+Helper.h" +//Date time type +#define MANAPP_DATETIME_DEFAULT_TYPE NSDateFormatterMediumStyle +#define MANAPP_DATETIME_TIME_DEFAULT_TYPE NSDateFormatterMediumStyle +#define MANAPP_TIME_DEFAULT_TYPE NSDateFormatterShortStyle +@implementation NSDate (Helper) + +/* + * This guy can be a little unreliable and produce unexpected results, + * you're better off using daysAgoAgainstMidnight + */ +- (NSUInteger)daysAgo +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + + [calendar setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; + NSDateComponents *components = [calendar components:(NSCalendarUnitDay) + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components day]; +} + +- (NSUInteger)daysAgoAgainstMidnight +{ + // get a midnight version of ourself: + NSDateFormatter *mdf = [self dateFormatter]; + + [mdf setDateFormat:@"yyyy-MM-dd"]; + NSDate *midnight = [mdf dateFromString:[mdf stringFromDate:self]]; + + return (int)[midnight timeIntervalSinceNow] / (60 * 60 * 24) * -1; +} + +- (NSString *)stringDaysAgo +{ + return [self stringDaysAgoAgainstMidnight:YES]; +} + +- (NSString *)stringDaysAgoAgainstMidnight:(BOOL)flag +{ + NSUInteger daysAgo = (flag) ?[self daysAgoAgainstMidnight] :[self daysAgo]; + NSString *text = nil; + + switch (daysAgo) { + case 0: + text = @"Today"; + break; + + case 1: + text = @"Yesterday"; + break; + + default: + text = [NSString stringWithFormat:@"%ld days ago", (unsigned long)daysAgo]; + } + return text; +} + +- (NSUInteger)weekday +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *weekdayComponents = [calendar components:(NSCalendarUnitWeekday) fromDate:self]; + + return [weekdayComponents weekday]; +} + ++ (NSDate *)fromString:(NSString *)string +{ + return [NSDate dateFromString:string withStyle:MANAPP_DATETIME_DEFAULT_TYPE]; +} + ++ (NSDate *)dateFromString:(NSString *)string +{ + return [NSDate dateFromString:string withFormat:[NSDate dbFormatString]]; +} + ++ (NSDate *)dateFromString:(NSString *)string withFormat:(NSString *)format +{ + NSDateFormatter *inputFormatter = [[NSDateFormatter alloc]init]; + + [inputFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + [inputFormatter setTimeZone:[NSDate defaultTimeZone]]; + [inputFormatter setDateFormat:format]; + NSDate *date = [inputFormatter dateFromString:string]; + return date; +} + ++ (NSDate *)dateFromString:(NSString *)string withStyle:(NSDateFormatterStyle)style +{ + NSDateFormatter *inputFormatter = [[NSDateFormatter alloc]init]; + + [inputFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; + + [inputFormatter setDateStyle:style]; + NSDate *date = [inputFormatter dateFromString:string]; + return date; +} + ++ (NSString *)stringFromDate:(NSDate *)date withStyle:(NSDateFormatterStyle)style +{ + return [date stringWithStyle:style]; +} + ++ (NSString *)stringFromDateTime:(NSDate *)date withStyle:(NSDateFormatterStyle)style +{ + return [date stringWithDateTimeStyle:style]; +} + ++ (NSString *)stringFromTime:(NSDate *)date withStyle:(NSDateFormatterStyle)style +{ + return [date stringWithTimeOnlyStyle:style]; +} + ++ (NSString *)stringFromDate:(NSDate *)date withFormat:(NSString *)format +{ + return [date stringWithFormat:format]; +} + ++ (NSString *)stringFromDate:(NSDate *)date +{ + return [date string]; +} + ++ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed alwaysDisplayTime:(BOOL)displayTime +{ + /* + * if the date is in today, display 12-hour time with meridian, + * if it is within the last 7 days, display weekday name (Friday) + * if within the calendar year, display as Jan 23 + * else display as Nov 11, 2008 + */ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateFormatter *displayFormatter = [[NSDateFormatter alloc] init]; + + [displayFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; + + NSDate *today = [NSDate date]; + NSDateComponents *offsetComponents = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) + fromDate:today]; + + NSDate *midnight = [calendar dateFromComponents:offsetComponents]; + NSString *displayString = nil; + + // comparing against midnight + NSComparisonResult midnight_result = [date compare:midnight]; + + if (midnight_result == NSOrderedDescending) { + if (prefixed) { + [displayFormatter setDateFormat:@"'at' h:mm a"]; // at 11:30 am + } + else { + [displayFormatter setDateFormat:@"h:mm a"]; // 11:30 am + } + } + else { + // check if date is within last 7 days + NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init]; + [componentsToSubtract setDay:-7]; + NSDate *lastweek = [calendar dateByAddingComponents:componentsToSubtract toDate:today options:0]; + NSComparisonResult lastweek_result = [date compare:lastweek]; + + if (lastweek_result == NSOrderedDescending) { + if (displayTime) { + [displayFormatter setDateFormat:@"EEEE h:mm a"]; + } + else { + [displayFormatter setDateFormat:@"EEEE"]; // Tuesday + } + } + else { + // check if same calendar year + NSInteger thisYear = [offsetComponents year]; + + NSDateComponents *dateComponents = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) + fromDate:date]; + NSInteger thatYear = [dateComponents year]; + + if (thatYear >= thisYear) { + if (displayTime) { + [displayFormatter setDateFormat:@"MMM d h:mm a"]; + } + else { + [displayFormatter setDateFormat:@"MMM d"]; + } + } + else { + if (displayTime) { + [displayFormatter setDateFormat:@"MMM d, yyyy h:mm a"]; + } + else { + [displayFormatter setDateFormat:@"MMM d, yyyy"]; + } + } + } + + if (prefixed) { + NSString *dateFormat = [displayFormatter dateFormat]; + NSString *prefix = @"'on' "; + [displayFormatter setDateFormat:[prefix stringByAppendingString:dateFormat]]; + } + } + + // use display formatter to return formatted date string + displayString = [displayFormatter stringFromDate:date]; + + return displayString; +} + ++ (NSString *)stringForDisplayFromDate:(NSDate *)date prefixed:(BOOL)prefixed +{ + return [[self class] stringForDisplayFromDate:date prefixed:prefixed alwaysDisplayTime:NO]; +} + ++ (NSString *)stringForDisplayFromDate:(NSDate *)date +{ + return [self stringForDisplayFromDate:date prefixed:NO]; +} + +- (NSString *)stringWithFormat:(NSString *)format +{ + NSDateFormatter *outputFormatter = [self dateFormatter]; + + [outputFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + [outputFormatter setTimeZone:[NSDate defaultTimeZone]]; + [outputFormatter setDateFormat:format]; + NSString *timestamp_str = [outputFormatter stringFromDate:self]; + return timestamp_str; +} + +- (NSString *)stringWithFormat:(NSString *)format timeZone:(NSTimeZone *)timeZone +{ + NSDateFormatter *outputFormatter = [self dateFormatter]; + + [outputFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + [outputFormatter setTimeZone:timeZone ? timeZone :[NSTimeZone localTimeZone]]; + [outputFormatter setDateFormat:format]; + NSString *timestamp_str = [outputFormatter stringFromDate:self]; + return timestamp_str; +} + +- (NSString *)stringWithStyle:(NSDateFormatterStyle)style +{ + NSDateFormatter *outputFormatter = [self dateFormatter]; + + [outputFormatter setDateStyle:style]; + NSString *timestamp_str = [outputFormatter stringFromDate:self]; + return timestamp_str; +} + +- (NSString *)stringWithDateTimeStyle:(NSDateFormatterStyle)style +{ + NSDateFormatter *outputFormatter = [self dateFormatter]; + + [outputFormatter setDateStyle:style]; + [outputFormatter setTimeStyle:NSDateFormatterShortStyle]; + NSString *timestamp_str = [outputFormatter stringFromDate:self]; + return timestamp_str; +} + +- (NSString *)stringWithTimeOnlyStyle:(NSDateFormatterStyle)style +{ + NSDateFormatter *outputFormatter = [self dateFormatter]; + + [outputFormatter setTimeStyle:style]; + NSString *timestamp_str = [outputFormatter stringFromDate:self]; + return timestamp_str; +} + +- (NSString *)toString +{ + return [NSDate stringFromDate:self withStyle:MANAPP_DATETIME_DEFAULT_TYPE]; +} + +- (NSString *)toTimeString +{ + return [NSDate stringFromDateTime:self withStyle:MANAPP_DATETIME_DEFAULT_TYPE]; +} + +- (NSString *)toTimeOnlyString +{ + return [NSDate stringFromTime:self withStyle:MANAPP_TIME_DEFAULT_TYPE]; +} + +- (NSString *)string +{ + return [self stringWithFormat:[NSDate dbFormatString]]; +} + +- (NSString *)stringWithDateStyle:(NSDateFormatterStyle)dateStyle timeStyle:(NSDateFormatterStyle)timeStyle +{ + NSDateFormatter *outputFormatter = [self dateFormatter]; + + [outputFormatter setDateStyle:dateStyle]; + [outputFormatter setTimeStyle:timeStyle]; + NSString *outputString = [outputFormatter stringFromDate:self]; + return outputString; +} + +//negative value if the date is before the current date +- (NSInteger)numberOfDayUntilDate:(NSDate *)date +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + + [calendar setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + + NSDateComponents *components = [calendar components:NSCalendarUnitDay + fromDate:self + toDate:date + options:0]; + + return components.day; +} + +- (NSDate *)beginningOfWeek +{ + // largely borrowed from "Date and Time Programming Guide for Cocoa" + // we'll use the default calendar and hope for the best + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDate *beginningOfWeek = nil; + BOOL ok = [calendar rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek + interval:NULL forDate:self]; + + if (ok) { + return beginningOfWeek; + } + + // couldn't calc via range, so try to grab Sunday, assuming gregorian style + // Get the weekday component of the current date + NSDateComponents *weekdayComponents = [calendar components:NSCalendarUnitWeekday fromDate:self]; + + /* + * Create a date components to represent the number of days to subtract from the current date. + * The weekday value for Sunday in the Gregorian calendar is 1, so subtract 1 from the number of days to subtract from the date in question. (If today's Sunday, subtract 0 days.) + */ + NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init]; + [componentsToSubtract setDay:0 - ([weekdayComponents weekday] - 1)]; + beginningOfWeek = nil; + beginningOfWeek = [calendar dateByAddingComponents:componentsToSubtract toDate:self options:0]; + + //normalize to midnight, extract the year, month, and day components and create a new date from those components. + NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) + fromDate:beginningOfWeek]; + return [calendar dateFromComponents:components]; +} + +- (NSDate *)beginningOfDay +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + // Get the weekday component of the current date + NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) + fromDate:self]; + + return [calendar dateFromComponents:components]; +} + +- (NSDate *)OneAmOfDay +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + // Get the weekday component of the current date + NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) + fromDate:self]; + + [components setHour:1]; + return [calendar dateFromComponents:components]; +} + +- (NSDate *)toLocalTime +{ + NSTimeZone *tz = [NSTimeZone localTimeZone]; + NSInteger seconds = [tz secondsFromGMTForDate:self]; + + return [NSDate dateWithTimeInterval:seconds sinceDate:self]; +} + +- (NSDate *)toGlobalTime +{ + NSTimeZone *tz = [NSTimeZone localTimeZone]; + NSInteger seconds = -[tz secondsFromGMTForDate:self]; + + return [NSDate dateWithTimeInterval:seconds sinceDate:self]; +} + +- (NSDate *)beginningAtMidnightOfDay +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + // Get the weekday component of the current date + NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:self]; + + components.hour = 0; + components.minute = 0; + components.second = 0; + return [calendar dateFromComponents:components]; +} + +- (NSDate *)endOfWeek +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + // Get the weekday component of the current date + NSDateComponents *weekdayComponents = [calendar components:NSCalendarUnitWeekday fromDate:self]; + NSDateComponents *componentsToAdd = [[NSDateComponents alloc] init]; + + // to get the end of week for a particular date, add (7 - weekday) days + [componentsToAdd setDay:(7 - [weekdayComponents weekday])]; //7-> 8 + NSDate *endOfWeek = [calendar dateByAddingComponents:componentsToAdd toDate:self options:0]; + + return endOfWeek; +} + +// Cuongnt changed: can change follow to expected Fomat + +//+ (NSString *)dateFormatString { +// return @"yyyy-MM-dd"; +//} ++ (NSString *)dateFormatString +{ + return @"MM-dd-yyyy"; +} + ++ (NSString *)timeFormatString +{ + return @"HH:mm:ss"; +} + ++ (NSString *)timestampFormatString +{ + return @"yyyy-MM-dd HH:mm:ss"; +} + +// preserving for compatibility ++ (NSString *)dbFormatString +{ + return [NSDate timestampFormatString]; +} + ++ (NSDate *)parseDate:(NSString *)inStrDate format:(NSString *)inFormat +{ + NSDateFormatter *dtFormatter = [[NSDateFormatter alloc] init]; + + [dtFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + [dtFormatter setDateFormat:inFormat]; + NSDate *dateOutput = [dtFormatter dateFromString:inStrDate]; + return dateOutput; +} + +- (NSDate *)dateOnly +{ + unsigned int flags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:flags fromDate:self]; + NSDate *dateOnly = [calendar dateFromComponents:components]; + + return dateOnly; +} + +- (NSDate *)dateByAddSecond:(NSInteger)seconds +{ + NSCalendar *theCalendar = [NSCalendar currentCalendar]; + NSDateComponents *dayComponent = [[NSDateComponents alloc]init]; + + dayComponent.second = seconds; + return [theCalendar dateByAddingComponents:dayComponent toDate:self options:0]; +} + +- (NSDate *)dateByAddMinute:(NSInteger)minutes +{ + NSCalendar *theCalendar = [NSCalendar currentCalendar]; + NSDateComponents *dayComponent = [[NSDateComponents alloc]init]; + + dayComponent.minute = minutes; + return [theCalendar dateByAddingComponents:dayComponent toDate:self options:0]; +} + +- (NSDate *)dateByAddDays:(NSInteger)days +{ + NSCalendar *theCalendar = [NSCalendar currentCalendar]; + NSDateComponents *dayComponent = [[NSDateComponents alloc]init]; + + dayComponent.day = days; + return [theCalendar dateByAddingComponents:dayComponent toDate:self options:0]; +} + +- (NSDate *)dateByAddMonth:(NSInteger)months +{ + NSCalendar *theCalendar = [NSCalendar currentCalendar]; + NSDateComponents *monthComponent = [[NSDateComponents alloc]init]; + + monthComponent.month = months; + return [theCalendar dateByAddingComponents:monthComponent toDate:self options:0]; +} + +- (NSDate *)dateByAddingYears:(NSUInteger)years +{ + NSDateComponents *c = [[NSDateComponents alloc] init]; + + c.year = years; + return [[NSCalendar currentCalendar] dateByAddingComponents:c toDate:self options:0]; +} + ++ (NSDate *)lastDateOfMonth:(NSDate *)month +{ + NSDate *nextMonth = [month dateByAddMonth:1]; + + return [nextMonth dateByAddDays:-1]; +} + ++ (NSDate *)firstDateOfMonth:(NSDate *)month +{ + NSDate *previousMonth = [month dateByAddMonth:-1]; + + return [previousMonth dateByAddDays:1]; +} + ++ (NSDate *)lastDateOfWeek:(NSDate *)week +{ + return [week dateByAddDays:7]; +} + ++ (NSDateComponents *)hourComponentsBetweenDate:(NSDate *)firstDate andDate:(NSDate *)endDate +{ + NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; + NSDateComponents *components = [gregorianCalendar components:unitFlags + fromDate:firstDate + toDate:endDate + options:0]; + + return components; +} + ++ (NSInteger)dayBetweenDay:(NSDate *)firstDay andDay:(NSDate *)lastDay +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + + NSDateComponents *components = [calendar components:NSCalendarUnitDay + fromDate:firstDay + toDate:lastDay + options:0]; + + return components.day; +} + +- (NSInteger)getMonth +{ + NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + NSUInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitYear; + NSDateComponents *components = [gregorianCalendar components:unitFlags fromDate:self]; + + return components.month; +} + +- (NSInteger)getDay +{ + NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + NSUInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitYear; + NSDateComponents *components = [gregorianCalendar components:unitFlags fromDate:self]; + + return components.day; +} + +- (NSInteger)getYear +{ + NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + NSUInteger unitFlags = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitYear; + NSDateComponents *components = [gregorianCalendar components:unitFlags fromDate:self]; + + return components.year; +} + ++ (NSInteger)dayUntilBirthDate:(NSDate *)birthDate +{ + NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + + NSDateComponents *thisYearComponents = [calendar components:NSCalendarUnitYear fromDate:[NSDate date]]; + NSDateComponents *birthDayComponents = [calendar components:NSCalendarUnitMonth | NSCalendarUnitDay fromDate:birthDate]; + + [birthDayComponents setYear:[thisYearComponents year]]; + + NSDate *birthDayThisYear = [calendar dateFromComponents:birthDayComponents]; + NSDateComponents *difference = [calendar components:NSCalendarUnitDay fromDate:[NSDate date] toDate:birthDayThisYear options:0]; + + if ([difference day] > 0) { + // this years birthday is already over. calculate distance to next years birthday + [birthDayComponents setYear:[thisYearComponents year] + 1]; + birthDayThisYear = [calendar dateFromComponents:birthDayComponents]; + difference = [calendar components:NSCalendarUnitDay fromDate:[NSDate date] toDate:birthDayThisYear options:0]; + } + + return [difference day]; +} + +#pragma mark - compare datetime + +- (BOOL)isLaterThanOrEqualTo:(NSDate *)date +{ + return !([self compare:date] == NSOrderedAscending); +} + +- (BOOL)isEarlierThanOrEqualTo:(NSDate *)date +{ + return !([self compare:date] == NSOrderedDescending); +} + +- (BOOL)isLaterThan:(NSDate *)date +{ + return ([self compare:date] == NSOrderedDescending); +} + +- (BOOL)isEarlierThan:(NSDate *)date +{ + return ([self compare:date] == NSOrderedAscending); +} + +- (BOOL)isAfterDate:(NSDate *)date +{ + if ([self compare:date] == NSOrderedDescending) { + return YES; + } + else { + return NO; + } +} + +- (BOOL)isBetweenDate:(NSDate *)start end:(NSDate *)end +{ + if ([self isAfterDate:start] && [end isAfterDate:self]) { + return YES; + } + return NO; +} + ++ (NSString *)toStringWithOutSimiColon:(NSDate *)date +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + + [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + + [dateFormatter setDateFormat:@"MMMM dd yyyy hh:mm a"]; + NSString *formattedDateString = [dateFormatter stringFromDate:date]; + return formattedDateString; +} + ++ (NSString *)toStringWithOutSimiColonWithOutTime:(NSDate *)date +{ + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; + + [dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + + [dateFormatter setDateFormat:@"MMMM dd yyyy"]; + NSString *formattedDateString = [dateFormatter stringFromDate:date]; + return formattedDateString; +} + ++ (BOOL)isAllDayEvent:(NSDate *)startDate withEndDate:(NSDate *)endDate +{ + BOOL isAllDayEvent = NO; + NSDateComponents *dateComponents = [NSDate hourComponentsBetweenDate:startDate andDate:endDate]; + + NSLog(@"hour %ld", (long)dateComponents.hour); + NSLog(@"minute %ld", (long)dateComponents.minute); + + if ((dateComponents.hour == 24) || (dateComponents.hour == 23 && dateComponents.minute >= 57)) { + isAllDayEvent = YES; + } + return isAllDayEvent; +} + +- (BOOL)isSameDay:(NSDate *)anotherDate +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + + [calendar setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + NSDateComponents *components1 = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:self]; + NSDateComponents *components2 = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:anotherDate]; + + return ([components1 year] == [components2 year] && [components1 month] == [components2 month] && [components1 day] == [components2 day]); +} + +- (NSInteger)daysBetweenDate:(NSDate *)d +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + + NSDate *startDate = [self dateOnly]; + NSDate *endDate = [d dateOnly]; + + NSDateFormatter *formatter = [self dateFormatter]; + + [formatter setDateFormat:@"yyyy-MM-dd"]; + startDate = [formatter dateFromString:[startDate stringWithFormat:@"yyyy-MM-dd"]]; + endDate = [formatter dateFromString:[endDate stringWithFormat:@"yyyy-MM-dd"]]; + + NSInteger startDay = [calendar ordinalityOfUnit:NSCalendarUnitDay + inUnit:NSEraCalendarUnit forDate:startDate]; + NSInteger endDay = [calendar ordinalityOfUnit:NSCalendarUnitDay + inUnit:NSEraCalendarUnit forDate:endDate]; + return labs(endDay - startDay); +} + +- (NSString *)convertDateToDurationString +{ + NSString *suffix = @""; + NSInteger quantity = 0; + + //Year + ([self yearsAgo] > 0) ? (suffix = @"years ago") : (suffix = @""); + + if (suffix.length > 0) { + quantity = [self yearsAgo]; + (quantity == 1) ? (suffix = @"year ago") : (suffix = @"years ago"); + return [NSString stringWithFormat:@"%zd %@", quantity, suffix]; + } + //Month + NSInteger _month = [self monthsBetweenDateInSameYear]; + (_month > 0) ? (suffix = @"months ago") : (suffix = @""); + + if (suffix.length > 0) { + quantity = _month; + (quantity == 1) ? (suffix = @"month ago") : (suffix = @"months ago"); + return [NSString stringWithFormat:@"%zd %@", quantity, suffix]; + } + //Week + NSInteger _week = [self weekBetweenDateInSameMonth]; + (_week > 0) ? (suffix = @"weeks ago") : (suffix = @""); + + if (suffix.length > 0) { + quantity = _week; + (quantity == 1) ? (suffix = @"week ago") : (suffix = @"weeks ago"); + return [NSString stringWithFormat:@"%zd %@", quantity, suffix]; + } + + //Day + NSInteger _day = [self daysBetweenDateInSameWeek]; + (_day > 0) ? (suffix = @"days ago") : (suffix = @""); + + if (suffix.length > 0) { + quantity = _day; + (quantity == 1) ? (suffix = @"day ago") : (suffix = @"days ago"); + return [NSString stringWithFormat:@"%zd %@", quantity, suffix]; + } + //Hour + NSInteger _hour = [self hoursBetweenDateInSameDay]; + (_hour > 0) ? (suffix = @"hours ago") : (suffix = @""); + + if (suffix.length > 0) { + quantity = _hour; + (quantity == 1) ? (suffix = @"hour ago") : (suffix = @"hours ago"); + return [NSString stringWithFormat:@"%zd %@", quantity, suffix]; + } + + //Minute + NSInteger _minutes = [self minuteBetweenDateInSameHour]; + (_minutes > 0) ? (suffix = @"minutes ago") : (suffix = @""); + + if (suffix.length > 0) { + quantity = _minutes; + (quantity == 1) ? (suffix = @"minute ago") : (suffix = @"minutes ago"); + return [NSString stringWithFormat:@"%zd %@", quantity, suffix]; + } + else { + return @"Few seconds ago"; + } +} + +- (NSInteger)minuteBetweenDateInSameHour +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSWeekCalendarUnit | NSCalendarUnitDay | NSHourCalendarUnit | NSMinuteCalendarUnit + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components minute]; +} + +- (NSInteger)hoursBetweenDateInSameDay +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSWeekCalendarUnit | NSCalendarUnitDay | NSHourCalendarUnit | NSMinuteCalendarUnit + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components hour]; +} + +- (NSInteger)yearsAgo +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSWeekCalendarUnit | NSCalendarUnitDay | NSHourCalendarUnit | NSMinuteCalendarUnit + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components year]; +} + +- (NSInteger)daysBetweenDateInSameWeek +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSWeekCalendarUnit | NSCalendarUnitDay | NSHourCalendarUnit | NSMinuteCalendarUnit + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components day]; +} + +- (NSInteger)monthsBetweenDateInSameYear +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSWeekCalendarUnit | NSCalendarUnitDay | NSHourCalendarUnit | NSMinuteCalendarUnit + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components month]; +} + +- (NSInteger)weekBetweenDateInSameMonth +{ + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSWeekCalendarUnit | NSCalendarUnitDay | NSHourCalendarUnit | NSMinuteCalendarUnit + fromDate:self + toDate:[NSDate date] + options:0]; + + return [components weekOfMonth]; +} + +- (NSString *)getTimeStr +{ + NSDateFormatter *formatter = [self dateFormatter]; + + [formatter setDateFormat:@"h:mm a"]; + + //Optionally for time zone conversions + [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]]; + + NSString *stringFromDate = [formatter stringFromDate:self]; + return stringFromDate; +} + +- (NSString *)getDateStr +{ + NSDateFormatter *formatter = [self dateFormatter]; + + [formatter setDateFormat:@"yyyy/MM/dd"]; + + //Optionally for time zone conversions + [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]]; + + NSString *stringFromDate = [formatter stringFromDate:self]; + return stringFromDate; +} + +- (NSDate *)setTimeWithTimeStr:(NSString *)timeStr +{ + NSString *dateStr = [self getDateStr]; + + NSDateFormatter *formatter = [self dateFormatter]; + + [formatter setDateFormat:@"yyyy/MM/dd h:mm a"]; + + NSString *dateFullStr = [NSString stringWithFormat:@"%@ %@", dateStr, timeStr]; + NSDate *newDate = [formatter dateFromString:dateFullStr]; + return newDate; +} + +#pragma mark - NSDateFormatter +- (NSDateFormatter *)dateFormatter +{ + NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; + + [formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"ja_JP"]]; + + return formatter; +} + ++ (NSTimeZone *)defaultTimeZone +{ + return [NSTimeZone localTimeZone]; +} + +@end diff --git a/LifeLog/LifeLog/RankingViewController.h b/LifeLog/LifeLog/RankingViewController.h new file mode 100644 index 0000000..67ceea8 --- /dev/null +++ b/LifeLog/LifeLog/RankingViewController.h @@ -0,0 +1,13 @@ +// +// RankingViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface RankingViewController : UIViewController + +@end diff --git a/LifeLog/LifeLog/RankingViewController.m b/LifeLog/LifeLog/RankingViewController.m new file mode 100644 index 0000000..cec4c2f --- /dev/null +++ b/LifeLog/LifeLog/RankingViewController.m @@ -0,0 +1,28 @@ +// +// RankingViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "RankingViewController.h" + +@interface RankingViewController () + +@end + +@implementation RankingViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title = NSLocalizedString(@"lifelog.tapbar.ranking", nil); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/LifeLog/LifeLog/RankingViewController.xib b/LifeLog/LifeLog/RankingViewController.xib new file mode 100644 index 0000000..cfa4324 --- /dev/null +++ b/LifeLog/LifeLog/RankingViewController.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/RegisterViewController.h b/LifeLog/LifeLog/RegisterViewController.h new file mode 100644 index 0000000..6d35b31 --- /dev/null +++ b/LifeLog/LifeLog/RegisterViewController.h @@ -0,0 +1,13 @@ +// +// RegisterViewController.h +// LifeLog +// +// Created by Panasonic R&D Center Vietnam on 7/31/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "BaseViewController.h" + +@interface RegisterViewController : BaseViewController + +@end diff --git a/LifeLog/LifeLog/RegisterViewController.m b/LifeLog/LifeLog/RegisterViewController.m new file mode 100644 index 0000000..c38b045 --- /dev/null +++ b/LifeLog/LifeLog/RegisterViewController.m @@ -0,0 +1,482 @@ +// +// RegisterViewController.m +// LifeLog +// +// Created by Panasonic R&D Center Vietnam on 7/31/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "RegisterViewController.h" +#import "CustomTextField.h" +#import "Utilities.h" +#import "NSDate+helper.h" +#import "ServerAPI.h" +#import "AppDelegate.h" +static int const kPickerTagArea = 1; +static int const kPickerTagSex = 2; + +@interface RegisterViewController () +{ + NSInteger indexArea; + UIPickerView *pickerArea; + + UIPickerView *pickerSex; + UIDatePicker *pickerDate; + NSDate *dateBirthDay; + NSString *profile_image; +} +@property (nonatomic, weak) IBOutlet UIImageView *avatar; + +@property (nonatomic, weak) IBOutlet UILabel *lblUsername; +@property (nonatomic, weak) IBOutlet UILabel *lblName; +@property (nonatomic, weak) IBOutlet UILabel *lblNickname; +@property (nonatomic, weak) IBOutlet UILabel *lblEmail; +@property (nonatomic, weak) IBOutlet UILabel *lblPassword; +@property (nonatomic, weak) IBOutlet UILabel *lblConfirmPassword; +@property (nonatomic, weak) IBOutlet UILabel *lblSex; +@property (nonatomic, weak) IBOutlet UILabel *lblBirthday; +@property (nonatomic, weak) IBOutlet UILabel *lblHeight; +@property (nonatomic, weak) IBOutlet UILabel *lblHeightUnit; +@property (nonatomic, weak) IBOutlet UILabel *lblWeight; +@property (nonatomic, weak) IBOutlet UILabel *lblWeightUnit; +@property (nonatomic, weak) IBOutlet UILabel *lblFatPercentage; +@property (nonatomic, weak) IBOutlet UILabel *lblFatPercentageUnit; +@property (nonatomic, weak) IBOutlet UILabel *lblPhysicalActivity; +@property (nonatomic, weak) IBOutlet UILabel *lblArea; +@property (nonatomic, weak) IBOutlet UILabel *lblNote; + +@property (nonatomic, weak) IBOutlet UITextField *tfUsername; +@property (nonatomic, weak) IBOutlet UITextField *tfName; +@property (nonatomic, weak) IBOutlet UITextField *tfNickname; +@property (nonatomic, weak) IBOutlet UITextField *tfEmail; +@property (nonatomic, weak) IBOutlet UITextField *tfPassword; +@property (nonatomic, weak) IBOutlet UITextField *tfConfirmPassword; +@property (nonatomic, weak) IBOutlet UITextField *tflblSex; +@property (nonatomic, weak) IBOutlet UITextField *tfBirthday; +@property (nonatomic, weak) IBOutlet UITextField *tfHeight; +@property (nonatomic, weak) IBOutlet UITextField *tfWeight; +@property (nonatomic, weak) IBOutlet UITextField *tfFatPercentage; +@property (nonatomic, weak) IBOutlet UISegmentedControl *physicalActivity; +@property (nonatomic, weak) IBOutlet CustomTextField *tfArea; +@property (nonatomic, weak) IBOutlet UITextView *tvNote; + +@property (nonatomic, weak) IBOutlet UIToolbar *toolBar; +@property (nonatomic, strong) NSArray *arrayArea; +@property (nonatomic, strong) NSArray *arraySex; + +@property (nonatomic) UIImagePickerController *imagePickerController; + +@end + +@implementation RegisterViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self setupUIRegister]; + + _arrayArea = [[NSArray alloc] initWithObjects:@"北海道", @"青森県", @"岩手県", @"宮城県", @"秋田県", @"山形県", @"福島県", @"茨城県", @"栃木県", @"群馬県", @"埼玉県", @"千葉県", @"東京都", @"神奈川県", @"新潟県", @"富山県", @"石川県", @"福井県", @"山梨県", @"長野県", @"岐阜県", @"静岡県", @"愛知県", @"三重県", @"滋賀県", @"京都府", @"大阪府", @"兵庫県", @"奈良県", @"和歌山県", @"鳥取県", @"島根県", @"岡山県", @"広島県", @"山口県", @"徳島県", @"香川県", @"愛媛県", @"高知県", @"福岡県", @"佐賀県", @"長崎県", @"熊本県", @"大分県" , @"宮崎県", @"鹿児島県", @"沖縄県", nil]; + _arraySex = [[NSArray alloc] initWithObjects:@"男", @"女", nil]; + + pickerArea = [[UIPickerView alloc] init]; + pickerArea.dataSource = self; + pickerArea.delegate = self; + pickerArea.showsSelectionIndicator = YES; + pickerArea.tag = kPickerTagArea; + pickerArea.backgroundColor = [Utilities convertHecToColor:0x618DB6]; + + _tfArea.inputAccessoryView = _toolBar; + _tfArea.inputView = pickerArea; + //_tfArea.alpha = 0.5; + _tfArea.delegate = self; + + pickerSex = [[UIPickerView alloc] init]; + pickerSex.dataSource = self; + pickerSex.delegate = self; + pickerSex.showsSelectionIndicator = YES; + pickerSex.tag = kPickerTagSex; + pickerSex.backgroundColor = [Utilities convertHecToColor:0x618DB6]; + + _tflblSex.inputAccessoryView = _toolBar; + _tflblSex.inputView = pickerSex; + //_tflblSex.alpha = 0.5; + _tflblSex.delegate = self; + + pickerDate = [[UIDatePicker alloc] init]; + pickerDate.backgroundColor = [Utilities convertHecToColor:0x618DB6]; + pickerDate.datePickerMode = UIDatePickerModeDate; + _tfBirthday.inputAccessoryView = _toolBar; + _tfBirthday.inputView = pickerDate; + //_tflblSex.alpha = 0.5; + _tflblSex.delegate = self; + profile_image = @""; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)setupUIRegister +{ + self.avatar.backgroundColor = [UIColor whiteColor]; + self.avatar.layer.borderWidth = 2.0f; + self.avatar.layer.borderColor = [[UIColor whiteColor] CGColor]; + self.avatar.layer.cornerRadius = self.avatar.frame.size.width/2.0f; + self.avatar.layer.masksToBounds = YES; + self.title = NSLocalizedString(@"lifelog.register.title", nil); + self.lblUsername.text = NSLocalizedString(@"lifelog.register.username", nil); + self.lblName.text = NSLocalizedString(@"lifelog.register.name", nil); + self.lblNickname.text = NSLocalizedString(@"lifelog.register.nickname", nil); + self.lblEmail.text = NSLocalizedString(@"lifelog.common.email", nil); + self.lblPassword.text = NSLocalizedString(@"lifelog.common.password", nil); + self.lblConfirmPassword.text = NSLocalizedString(@"lifelog.register.confirmation.password", nil); + self.lblSex.text = NSLocalizedString(@"lifelog.register.sex", nil); + self.lblBirthday.text = NSLocalizedString(@"lifelog.register.birthday", nil); + self.lblHeight.text = NSLocalizedString(@"lifelog.register.height", nil); + self.lblHeightUnit.text = NSLocalizedString(@"lifelog.register.height.unit", nil); + self.lblWeight.text = NSLocalizedString(@"lifelog.register.weight", nil); + self.lblWeightUnit.text = NSLocalizedString(@"lifelog.register.weight.unit", nil); + self.lblFatPercentage.text = NSLocalizedString(@"lifelog.register.fat.percentage", nil); + self.lblFatPercentageUnit.text = NSLocalizedString(@"lifelog.register.fat.percentage.unit", nil); + self.lblPhysicalActivity.text = NSLocalizedString(@"lifelog.register.daily.physical.activity.level", nil); + self.lblArea.text = NSLocalizedString(@"lifelog.register.area", nil); + self.lblNote.text = NSLocalizedString(@"lifelog.register.note", nil); + + UIImage *img1=[UIImage imageNamed:@"icon_right"]; + CGRect frameimg1 = CGRectMake(0, 0, img1.size.width, img1.size.height); + UIButton *registButton=[[UIButton alloc]initWithFrame:frameimg1]; + [registButton setBackgroundImage:img1 forState:UIControlStateNormal]; + [registButton addTarget:self action:@selector(registButtonPressed:) + forControlEvents:UIControlEventTouchUpInside]; + [registButton setShowsTouchWhenHighlighted:YES]; + UIBarButtonItem *barButton = [[UIBarButtonItem alloc]initWithCustomView:registButton]; + self.navigationItem.rightBarButtonItem = barButton; +} + +#pragma mark - Actions +- (IBAction)avatarTouchUpInside:(id)sender { + UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"Avatar" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Select Camera", @"Select Photo", nil]; + [action showInView:self.view]; +} + +- (IBAction)registButtonPressed:(id)sender { + NSLog(@"registButtonPressed"); + [self registerUser]; +} + +#pragma mark - UIActionSheetDelegate +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { + switch (buttonIndex) { + case 0: + [self showCamera]; + break; + case 1: + [self showPhoto]; + break; + default: + break; + } +} + +#pragma mark - UIImagePickerControllerDelegate + +// This method is called when an image has been chosen from the library or taken from the camera. +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; + self.avatar.image = image; + NSData *dataImage = UIImagePNGRepresentation(image); + RegisterViewController __weak *weakSelf = self; + [[ServerAPI server] uploadImage:nil andImageData:dataImage CompletionHandler:^(NSString *linkImage, NSError *error) { + if (weakSelf == nil) { + return ; + } + if (error == nil) { + profile_image = linkImage; + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + NSString *message = [error.userInfo objectForKey:@"message"]; + [weakSelf showErrorMessage:message]; + }); + } + }]; + // Dismiss the image picker. + [self dismissViewControllerAnimated:YES completion:nil]; + _imagePickerController = nil; +} + +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker +{ + [self dismissViewControllerAnimated:YES completion:^{ + //.. done dismissing + }]; +} + +#pragma mark - Function Private +- (void)showCamera { + if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) + { + UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; + imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; + imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; + imagePickerController.delegate = self; + imagePickerController.modalPresentationStyle = UIModalPresentationFullScreen; + _imagePickerController = imagePickerController; // we need this for later + [self presentViewController:self.imagePickerController animated:YES completion:^{ + //.. done presenting + }]; + } +} + +- (void)showPhoto { + UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; + imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; + imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; + imagePickerController.delegate = self; + imagePickerController.modalPresentationStyle = UIModalPresentationPopover; + _imagePickerController = imagePickerController; // we need this for later + [self presentViewController:self.imagePickerController animated:YES completion:^{ + //.. done presenting + }]; +} + +- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType fromButton:(UIBarButtonItem *)button +{ + if (self.avatar.isAnimating) + { + [self.avatar stopAnimating]; + } + + UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; + imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; + imagePickerController.sourceType = sourceType; + imagePickerController.delegate = self; + imagePickerController.modalPresentationStyle = + (sourceType == UIImagePickerControllerSourceTypeCamera) ? UIModalPresentationFullScreen : UIModalPresentationPopover; + + UIPopoverPresentationController *presentationController = imagePickerController.popoverPresentationController; + presentationController.barButtonItem = button; // display popover from the UIBarButtonItem as an anchor + presentationController.permittedArrowDirections = UIPopoverArrowDirectionAny; + + if (sourceType == UIImagePickerControllerSourceTypeCamera) + { + // The user wants to use the camera interface. Set up our custom overlay view for the camera. + imagePickerController.showsCameraControls = NO; + + /* + Load the overlay view from the OverlayView nib file. Self is the File's Owner for the nib file, so the overlayView outlet is set to the main view in the nib. Pass that view to the image picker controller to use as its overlay view, and set self's reference to the view to nil. + */ + } + + _imagePickerController = imagePickerController; // we need this for later + + [self presentViewController:self.imagePickerController animated:YES completion:^{ + //.. done presenting + }]; +} + +- (IBAction)donePicker:(id)sender +{ + [_tfArea resignFirstResponder]; + [_tflblSex resignFirstResponder]; + if ([_tfBirthday becomeFirstResponder]) { + [_tfBirthday resignFirstResponder]; + dateBirthDay = pickerDate.date; + _tfBirthday.text = [NSString stringWithFormat:@"%ld%@%ld%@%ld%@", (long)[dateBirthDay getYear], NSLocalizedString(@"lifelog.common.year", nil), (long)[dateBirthDay getMonth], NSLocalizedString(@"lifelog.common.month", nil), (long)[dateBirthDay getDay], NSLocalizedString(@"lifelog.common.day", nil)]; + } +} + +#pragma mark - UITextFieldDelegate +- (void)textFieldDidEndEditing:(UITextField *)textField { + //if (textField == _tfArea) { + [textField resignFirstResponder]; + //} +} + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + //if (textField == _tfArea) { + [textField resignFirstResponder]; + return NO; + //} + //else { + return YES; + //} +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + [textField resignFirstResponder]; + return YES; +} + +- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { + //if (textField == _tfArea) { + [textField resignFirstResponder]; + //} + return YES; +} + +- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { + //if (textField == _tfArea) { + [textField resignFirstResponder]; + //} + return YES; +} + +#pragma mark - UIPickerViewDataSource + +- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView +{ + return 1; +} + +- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component +{ + int tag = (int)pickerView.tag; + switch (tag) { + case kPickerTagArea: + return _arrayArea.count; + case kPickerTagSex: + return _arraySex.count; + default: + return 0; + } +} + +#pragma mark - UIPickerViewDelegate +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component +{ + int tag = (int)pickerView.tag; + switch (tag) { + case kPickerTagArea: + _tfArea.text = [_arrayArea objectAtIndex:row]; + break; + case kPickerTagSex: + _tflblSex.text = [_arraySex objectAtIndex:row]; + break; + default: + break; + } +} + +- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component +{ + NSString *strTitle = @""; + int tag = (int)pickerView.tag; + switch (tag) { + case kPickerTagArea: + strTitle = [_arrayArea objectAtIndex:row]; + break; + case kPickerTagSex: + strTitle = [_arraySex objectAtIndex:row]; + break; + default: + strTitle = @""; + break; + } + NSAttributedString *attString = [[NSAttributedString alloc] initWithString:strTitle attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; + + return attString; + +} + +- (NSMutableDictionary *)addParam:(NSString *)param value:(NSString *)value withDict:(NSMutableDictionary *)dict +{ + if (value.length > 0) { + [dict setObject:value forKey:param]; + } + return dict; +} + +/* + API regist: + - Url: http://clover.timesfun.jp:9001/register + Params: + username: "sonle33", password: "laslas123", full_name: "son le", nickname: "las", birthday: "1990-11-11", height: 177, weight: 70, fat_rate: 12, gender: 1, address: "asdsad", description: "nothing", receive_notification: 0, phone: 0988999777, share_data: 1, profile_image: "upload/avt/2019525859598528205222222.png", delete_flag: 0, email: "sonle33@las.vn", physical_activity: 0, remember_me: 1 + + - Url: http://clover.timesfun.jp:9001/forgetPass + param: email + */ + +- (NSDictionary *)createParamsForRegisterUser { + NSMutableDictionary *dictResutl = [[NSMutableDictionary alloc] init]; + dictResutl = [self addParam:@"username" value:_tfUsername.text withDict:dictResutl]; + dictResutl = [self addParam:@"full_name" value:_tfName.text withDict:dictResutl]; + dictResutl = [self addParam:@"nickname" value:_tfNickname.text withDict:dictResutl]; + dictResutl = [self addParam:@"email" value:_tfEmail.text withDict:dictResutl]; + dictResutl = [self addParam:@"password" value:_tfPassword.text withDict:dictResutl]; + dictResutl = [self addParam:@"confirm_password" value:_tfConfirmPassword.text withDict:dictResutl]; + NSString *valueSex = nil; // 0 - 男, 1 - 女 + if (_tflblSex.text.length > 0) { + if ([_tflblSex.text isEqualToString:@"男"]) { + valueSex = @"0"; + } + else if ([_tflblSex.text isEqualToString:@"男"]) { + valueSex = @"1"; + } + } + dictResutl = [self addParam:@"gender" value:valueSex withDict:dictResutl]; + NSString *valueBirthDay = nil; + if (_tfBirthday.text.length > 0) { + valueBirthDay = [NSString stringWithFormat:@"%ld-%ld-%ld", (long)[dateBirthDay getYear], (long)[dateBirthDay getMonth], (long)[dateBirthDay getDay]]; + } + dictResutl = [self addParam:@"height" value:_tfHeight.text withDict:dictResutl]; + dictResutl = [self addParam:@"weight" value:_tfWeight.text withDict:dictResutl]; + dictResutl = [self addParam:@"fat_rate" value:_tfFatPercentage.text withDict:dictResutl]; + NSString *physicalActivityValue = [NSString stringWithFormat:@"%ld", _physicalActivity.selectedSegmentIndex]; + dictResutl = [self addParam:@"physical_activity" value:physicalActivityValue withDict:dictResutl]; + dictResutl = [self addParam:@"address" value:_tfArea.text withDict:dictResutl]; + dictResutl = [self addParam:@"description" value:_tvNote.text withDict:dictResutl]; + if (![profile_image isEqualToString:@""]) { + dictResutl = [self addParam:@"profile_image" value:profile_image withDict:dictResutl]; + } + return dictResutl; +} + +- (void)registerUser { + NSDictionary *paramRegister = [self createParamsForRegisterUser]; + RegisterViewController __weak *weakSelf = self; + [[ServerAPI server] registerUserWithParams:paramRegister CompletionHandler:^(NSError *error) { + if (weakSelf == nil) { + return ; + } + if (error == nil) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[AppDelegate sharedAppDelegate] gotoMainMenu]; + }); + } + else { + dispatch_async(dispatch_get_main_queue(), ^{ + NSString *message = [error.userInfo objectForKey:@"message"]; + [weakSelf showErrorMessage:message]; + }); + } + }]; +} + +- (void)showErrorMessage:(NSString *)message +{ + if (message.length > 0) { + UIAlertController * alert= [UIAlertController + alertControllerWithTitle:@"Error" + message:message + preferredStyle:UIAlertControllerStyleAlert]; + + UIAlertAction* ok = [UIAlertAction + actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction * action) + { + [alert dismissViewControllerAnimated:YES completion:nil]; + + }]; + + [alert addAction:ok]; + + [self presentViewController:alert animated:YES completion:nil]; + } +} + +@end diff --git a/LifeLog/LifeLog/RegisterViewController.xib b/LifeLog/LifeLog/RegisterViewController.xib new file mode 100644 index 0000000..1ceaed2 --- /dev/null +++ b/LifeLog/LifeLog/RegisterViewController.xib @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/SNSViewController.h b/LifeLog/LifeLog/SNSViewController.h new file mode 100644 index 0000000..dc79a72 --- /dev/null +++ b/LifeLog/LifeLog/SNSViewController.h @@ -0,0 +1,13 @@ +// +// SNSViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface SNSViewController : UIViewController + +@end diff --git a/LifeLog/LifeLog/SNSViewController.m b/LifeLog/LifeLog/SNSViewController.m new file mode 100644 index 0000000..86ec7b5 --- /dev/null +++ b/LifeLog/LifeLog/SNSViewController.m @@ -0,0 +1,28 @@ +// +// SNSViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "SNSViewController.h" + +@interface SNSViewController () + +@end + +@implementation SNSViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title = NSLocalizedString(@"lifelog.tapbar.sns", nil); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/LifeLog/LifeLog/SNSViewController.xib b/LifeLog/LifeLog/SNSViewController.xib new file mode 100644 index 0000000..247466b --- /dev/null +++ b/LifeLog/LifeLog/SNSViewController.xib @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/ServerAPI.h b/LifeLog/LifeLog/ServerAPI.h new file mode 100644 index 0000000..be409a0 --- /dev/null +++ b/LifeLog/LifeLog/ServerAPI.h @@ -0,0 +1,18 @@ +// +// ServerAPI.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import +#import "Entities.h" + +@interface ServerAPI : NSObject ++ (instancetype) server; +@property (nonatomic, assign) NSTimeInterval timeOutInterval; +- (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion; +- (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(NSError *)) completion; +- (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion; +@end diff --git a/LifeLog/LifeLog/ServerAPI.m b/LifeLog/LifeLog/ServerAPI.m new file mode 100644 index 0000000..7905b41 --- /dev/null +++ b/LifeLog/LifeLog/ServerAPI.m @@ -0,0 +1,223 @@ +// +// ServerAPI.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "ServerAPI.h" + +NSString *const kServerAddress = @"http://clover.timesfun.jp:9001/"; + +@implementation NSString (NSString_Extended) +- (NSString *)urlencode { + NSMutableString *output = [NSMutableString string]; + const unsigned char *source = (const unsigned char *)[self UTF8String]; + int sourceLen = (int)strlen((const char *)source); + for (int i = 0; i < sourceLen; ++i) { + const unsigned char thisChar = source[i]; + if (thisChar == ' '){ + [output appendString:@"+"]; + } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || + (thisChar >= 'a' && thisChar <= 'z') || + (thisChar >= 'A' && thisChar <= 'Z') || + (thisChar >= '0' && thisChar <= '9')) { + [output appendFormat:@"%c", thisChar]; + } else { + [output appendFormat:@"%%%02X", thisChar]; + } + } + return output; +} +@end + +@implementation ServerAPI +static ServerAPI *_server = nil; + +@synthesize timeOutInterval = _timeOutInterval; + ++ (instancetype)server +{ + @synchronized(self) { + if (_server == nil) { + _server = [[ServerAPI alloc] init]; + } + } + return _server; +} + +- (instancetype)init +{ + self = [super init]; + if (self != nil) { + self.timeOutInterval = 150; + } + return self; +} + +// Login +- (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion +{ + [self _request:[kServerAddress stringByAppendingFormat: @"login"] method:@"POST" paras:@{@"email":email, @"password": password} completion:^(NSData *data, NSError *error) { + + if (completion == NULL) { + return ; + } + + if (error == nil) + { + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; + + + int status = [dataResult[@"status"] intValue]; + if (status == 1) { // status = 1 success + NSString *token = dataResult[@"result"][@"token"]; + NSDictionary *dictUser = dataResult[@"result"][@"user"]; + User *user = [[User alloc] init]; + user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]]; + user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]]; + user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]]; + user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]]; + user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]]; + user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]]; + user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]]; + user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]]; + user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue]; + user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue]; + user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue]; + user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]]; + completion(user, token, nil); + } + else { // status = 0 error + NSString *message = dataResult[@"message"]; + NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; + completion(nil, nil, loginFaild); + } + } + else + { + completion(nil, nil, error); + } + }]; +} + +// Register +- (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(NSError *)) completion { + [self _request:[kServerAddress stringByAppendingFormat: @"register"] method:@"POST" paras:params completion:^(NSData *data, NSError *error) { + + if (completion == NULL) { + return ; + } + + if (error == nil) + { + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; + + + int status = [dataResult[@"status"] intValue]; + if (status == 1) { // status = 1 success + completion(nil); + } + else { // status = 0 error + NSString *message = dataResult[@"message"]; + NSError *registerFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; + completion(registerFaild); + } + } + else + { + completion(error); + } + }]; +} + +- (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion { + NSDictionary *dict = nil; + NSString *base64Encoded = [data base64EncodedStringWithOptions:0]; + if (token != nil) { + dict = @{@"token":token, @"img": base64Encoded}; + } + else { + dict = @{@"img": base64Encoded}; + } + [self _request:[kServerAddress stringByAppendingFormat: @"upload-image"] method:@"POST" paras:dict completion:^(NSData *data, NSError *error) { + + if (completion == NULL) { + return ; + } + + if (error == nil) + { + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; + + int status = [dataResult[@"status"] intValue]; + if (status == 1) { // status = 1 success + NSString *image_profile = dataResult[@"result"][@"image_profile"]; + completion(image_profile, nil); + } + else { // status = 0 error + NSString *message = dataResult[@"message"]; + NSError *uploadFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; + completion(nil, uploadFaild); + } + } + else + { + completion(nil, error); + } + }]; +} + +#pragma mark - Private Function +- (NSData *) _encodeDictionary: (NSDictionary *) dictionary +{ + NSMutableArray *parts = [[NSMutableArray alloc] init]; + for (id key in dictionary) + { + NSString *encodedValue = [[dictionary[key] description] urlencode]; + NSString *encodedKey = [[key description] urlencode];//[[key description] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; + NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue]; + [parts addObject:part]; + } + NSString *encodedDictionary = [parts componentsJoinedByString:@"&"]; + return [encodedDictionary dataUsingEncoding: NSUTF8StringEncoding]; +} + +- (void) _request:(NSString *)address method:(NSString *)method paras:(NSDictionary *)paras completion:(void (^)(NSData *data, NSError *error))completion +{ + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:address]]; + request.HTTPMethod = method; + [request setValue: @"application/json" forHTTPHeaderField: @"Accept"]; + [request setValue: @"application/json" forHTTPHeaderField: @"Content-Type"]; + [request setTimeoutInterval:self.timeOutInterval]; + + if (paras != nil) + { + NSData *encodedData = [self _encodeDictionary: paras]; + [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long) encodedData.length] forHTTPHeaderField: @"Content-Length"]; + [request setValue: @"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField: @"Content-Type"]; + [request setHTTPBody: encodedData]; + } + + NSURLSession *session = [NSURLSession sharedSession]; + NSURLSessionDataTask *task = [session dataTaskWithRequest:request + completionHandler: + ^(NSData *data, NSURLResponse *response, NSError *error) { + if (completion == NULL) { + return ; + } + if (error == nil) + { + completion(data, nil); + } + else + { + completion(nil, error); + } + }]; + + [task resume]; +} + +@end diff --git a/LifeLog/LifeLog/TodayViewController.h b/LifeLog/LifeLog/TodayViewController.h new file mode 100644 index 0000000..8a32c3a --- /dev/null +++ b/LifeLog/LifeLog/TodayViewController.h @@ -0,0 +1,13 @@ +// +// TodayViewController.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/29/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface TodayViewController : UIViewController + +@end diff --git a/LifeLog/LifeLog/TodayViewController.m b/LifeLog/LifeLog/TodayViewController.m new file mode 100644 index 0000000..a47e951 --- /dev/null +++ b/LifeLog/LifeLog/TodayViewController.m @@ -0,0 +1,120 @@ +// +// TodayViewController.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/29/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "TodayViewController.h" +#import +#import +#import "NSDate+helper.h" +#import "Utilities.h" + +static NSInteger numberTotal = 10000; + +@interface TodayViewController () +@property (nonatomic, weak) IBOutlet UILabel *lblTitle; +@property (weak, nonatomic) IBOutlet CircleProgressBar *circleProgressToday; +@property (weak, nonatomic) IBOutlet UILabel *lblValueStep; +@property (weak, nonatomic) IBOutlet UILabel *lblTotalStep; +@property (weak, nonatomic) IBOutlet UILabel *lblRemainingStep; +@property (weak, nonatomic) IBOutlet UILabel *lblTotalStepOther; +@property (weak, nonatomic) IBOutlet UILabel *lblRemainingStepOther; +@property (weak, nonatomic) IBOutlet UILabel *lblPercent; + +@property (nonatomic, strong) CMPedometer *pedometer; +@property (nonatomic, strong) CMMotionActivityManager *motionActivityManager; +@property (nonatomic, strong) NSOperationQueue *operationQueue; +@property (nonatomic, strong) NSTimer *timer; + +@property (nonatomic, assign) BOOL isRequesting; +@end + +@implementation TodayViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.lblTitle.text = NSLocalizedString(@"lifelog.today.title", nil); + + [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.lblTitle attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; + + if ([CMPedometer isStepCountingAvailable]) { + _pedometer = [[CMPedometer alloc] init]; + } + if ([CMMotionActivityManager isActivityAvailable]) { + _motionActivityManager = [[CMMotionActivityManager alloc] init]; + } + self.isRequesting = NO; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + _timer = [NSTimer scheduledTimerWithTimeInterval:0.3f target:self selector:@selector(countStep) userInfo:nil repeats:YES]; + [_timer fire]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + [_timer invalidate]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - IBAction +- (IBAction)menuButtonTouchUpInside:(id)sender +{ + +} + +- (IBAction)backButtonTouchUpInside:(id)sender +{ + [self.navigationController popViewControllerAnimated:YES]; +} + +#pragma mark - Functions Private +- (void)countStep +{ + if (self.isRequesting == YES) { + return; + } + if ([CMMotionActivityManager isActivityAvailable]) { + self.isRequesting = YES; + NSDate *endDate = [NSDate date]; + NSDate *startDate = [endDate beginningAtMidnightOfDay]; + TodayViewController __weak *weakSelf = self; + dispatch_queue_t myQueue = dispatch_queue_create("mobileworld.jp.lifelog", NULL); + dispatch_async(myQueue, ^{ + if (weakSelf == nil) { + return ; + } + [weakSelf.pedometer queryPedometerDataFromDate:startDate toDate:endDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) { + NSInteger numberStep = [pedometerData.numberOfSteps integerValue]; + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf updateStepUI:numberStep]; + }); + }]; + }); + } +} + +- (void)updateStepUI:(NSInteger)numberStep +{ + // NSLog(@"Number of step: %ld", numberStep); + self.isRequesting = NO; + float valueProgress = numberStep*1.f/numberTotal; + [self.circleProgressToday setProgress:valueProgress animated:YES]; + self.lblValueStep.text = [Utilities addCommaFromNumber:numberStep]; + self.lblTotalStep.text = [NSString stringWithFormat:@"/ %@", [Utilities addCommaFromNumber:numberTotal]]; + self.lblRemainingStep.text = [NSString stringWithFormat:@"%@%ld%@", NSLocalizedString(@"lifelog.today.remaining.step.1", nil), (numberTotal - numberStep), NSLocalizedString(@"lifelog.today.remaining.step.2", nil)]; + self.lblTotalStepOther.text = [NSString stringWithFormat:@"%@%@%@", NSLocalizedString(@"lifelog.today.total.other", nil), [Utilities addCommaFromNumber:numberTotal], NSLocalizedString(@"lifelog.today.unit.step", nil)]; + self.lblRemainingStepOther.text = [NSString stringWithFormat:@"%@%ld%@", NSLocalizedString(@"lifelog.today.remaining.other", nil), (numberTotal - numberStep), NSLocalizedString(@"lifelog.today.unit.step", nil)]; + self.lblPercent.text = [NSString stringWithFormat:@"%@%i%@", NSLocalizedString(@"lifelog.today.text.percent", nil), (int)(numberStep*100/numberTotal), NSLocalizedString(@"lifelog.today.percent", nil)]; +} + +@end diff --git a/LifeLog/LifeLog/TodayViewController.xib b/LifeLog/LifeLog/TodayViewController.xib new file mode 100644 index 0000000..664c521 --- /dev/null +++ b/LifeLog/LifeLog/TodayViewController.xib @@ -0,0 +1,234 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/LifeLog/User.h b/LifeLog/LifeLog/User.h new file mode 100644 index 0000000..26f19b6 --- /dev/null +++ b/LifeLog/LifeLog/User.h @@ -0,0 +1,25 @@ +// +// User.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface User : NSObject +@property (nonatomic, strong) NSString *user_id; +@property (nonatomic, strong) NSString *username; +@property (nonatomic, strong) NSString *password; +@property (nonatomic, strong) NSString *full_name; +@property (nonatomic, strong) NSString *nickname; +@property (nonatomic, strong) NSString *birthday; +@property (nonatomic, assign) float height; +@property (nonatomic, assign) float weight; +@property (nonatomic, assign) int gender; // 0 & 1 +@property (nonatomic, strong) NSString *address; +@property (nonatomic, strong) NSString *user_description; +@property (nonatomic, strong) NSString *email; +@property (nonatomic, strong) NSString *phone; +@end diff --git a/LifeLog/LifeLog/User.m b/LifeLog/LifeLog/User.m new file mode 100644 index 0000000..503b2f2 --- /dev/null +++ b/LifeLog/LifeLog/User.m @@ -0,0 +1,32 @@ +// +// User.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/30/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "User.h" + +@implementation User +//- (id)initWithCoder:(NSCoder *)decoder { +// self = [super init]; +// if (!self) { +// return nil; +// } +// +// self.user_id = [decoder decodeObjectForKey:@"user_id"]; +// self.access_token = [decoder decodeObjectForKey:@"access_token"]; +// self.full_name = [decoder decodeObjectForKey:@"full_name"]; +// self.picture = [decoder decodeObjectForKey:@"picture"]; +// +// return self; +//} +// +//- (void)encodeWithCoder:(NSCoder *)encoder { +// [encoder encodeObject:self.user_id forKey:@"user_id"]; +// [encoder encodeObject:self.access_token forKey:@"access_token"]; +// [encoder encodeObject:self.full_name forKey:@"full_name"]; +// [encoder encodeObject:self.picture forKey:@"picture"]; +//} +@end diff --git a/LifeLog/LifeLog/Utilities.h b/LifeLog/LifeLog/Utilities.h new file mode 100644 index 0000000..d13f456 --- /dev/null +++ b/LifeLog/LifeLog/Utilities.h @@ -0,0 +1,15 @@ +// +// Utilities.h +// LifeLog +// +// Created by Nguyen Van Phong on 7/29/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import +#import + +@interface Utilities : NSObject ++ (NSString *)addCommaFromNumber:(NSInteger)number; ++ (UIColor *)convertHecToColor:(int) hex; +@end diff --git a/LifeLog/LifeLog/Utilities.m b/LifeLog/LifeLog/Utilities.m new file mode 100644 index 0000000..01994a4 --- /dev/null +++ b/LifeLog/LifeLog/Utilities.m @@ -0,0 +1,28 @@ +// +// Utilities.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/29/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import "Utilities.h" + +@implementation Utilities ++ (NSString *)addCommaFromNumber:(NSInteger)number +{ + NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init]; + [fmt setNumberStyle:NSNumberFormatterDecimalStyle]; + [fmt setMaximumFractionDigits:0]; + NSString *result = [fmt stringFromNumber:@(number)]; + return result; +} + ++ (UIColor *)convertHecToColor:(int) hex +{ + return [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 \ + green:((float)((hex & 0xFF00) >> 8))/255.0 \ + blue:((float)(hex & 0xFF))/255.0 alpha:1.0]; +} + +@end diff --git a/LifeLog/LifeLog/main.m b/LifeLog/LifeLog/main.m new file mode 100644 index 0000000..242ba60 --- /dev/null +++ b/LifeLog/LifeLog/main.m @@ -0,0 +1,16 @@ +// +// main.m +// LifeLog +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/LifeLog/LifeLogTests/Info.plist b/LifeLog/LifeLogTests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/LifeLog/LifeLogTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/LifeLog/LifeLogTests/LifeLogTests.m b/LifeLog/LifeLogTests/LifeLogTests.m new file mode 100644 index 0000000..f98da80 --- /dev/null +++ b/LifeLog/LifeLogTests/LifeLogTests.m @@ -0,0 +1,39 @@ +// +// LifeLogTests.m +// LifeLogTests +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface LifeLogTests : XCTestCase + +@end + +@implementation LifeLogTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/LifeLog/LifeLogUITests/Info.plist b/LifeLog/LifeLogUITests/Info.plist new file mode 100644 index 0000000..6c6c23c --- /dev/null +++ b/LifeLog/LifeLogUITests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/LifeLog/LifeLogUITests/LifeLogUITests.m b/LifeLog/LifeLogUITests/LifeLogUITests.m new file mode 100644 index 0000000..204356f --- /dev/null +++ b/LifeLog/LifeLogUITests/LifeLogUITests.m @@ -0,0 +1,40 @@ +// +// LifeLogUITests.m +// LifeLogUITests +// +// Created by Nguyen Van Phong on 7/25/17. +// Copyright © 2017 PhongNV. All rights reserved. +// + +#import + +@interface LifeLogUITests : XCTestCase + +@end + +@implementation LifeLogUITests + +- (void)setUp { + [super setUp]; + + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + self.continueAfterFailure = NO; + // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. + [[[XCUIApplication alloc] init] launch]; + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. +} + +@end diff --git a/LifeLog/Podfile b/LifeLog/Podfile new file mode 100644 index 0000000..8487187 --- /dev/null +++ b/LifeLog/Podfile @@ -0,0 +1,7 @@ +platform :ios, '9.0' +use_frameworks! + +target 'LifeLog' do + pod 'CircleProgressBar' + pod 'MBProgressHUD', '~> 1.0.0' +end diff --git a/LifeLog/Podfile.lock b/LifeLog/Podfile.lock new file mode 100644 index 0000000..d15be4b --- /dev/null +++ b/LifeLog/Podfile.lock @@ -0,0 +1,15 @@ +PODS: + - CircleProgressBar (0.32) + - MBProgressHUD (1.0.0) + +DEPENDENCIES: + - CircleProgressBar + - MBProgressHUD (~> 1.0.0) + +SPEC CHECKSUMS: + CircleProgressBar: 3920079be5224b62b3d9ed6eeb23ac01c835b681 + MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a + +PODFILE CHECKSUM: 5eefeeee50f83862f5058b666c40152b158a027f + +COCOAPODS: 1.1.1 diff --git a/LifeLog/Pods/CircleProgressBar/CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.h b/LifeLog/Pods/CircleProgressBar/CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.h new file mode 100755 index 0000000..56b761a --- /dev/null +++ b/LifeLog/Pods/CircleProgressBar/CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.h @@ -0,0 +1,85 @@ +// +// CircleProgressBar.h +// CircleProgressBar +// +// Created by Andrew Cherkashin on 3/16/15. +// Copyright (c) 2015 Eclair. All rights reserved. +// + +#import + +typedef NSString*(^StringGenerationBlock)(CGFloat progress); +typedef NSAttributedString*(^AttributedStringGenerationBlock)(CGFloat progress); + +/** Class that represents CircleProgressBar itself. + + CircleProgressBar can be initialized programmatically or using InterfaceBuilder. + + To change progress in CircleProgressBar just use: + + [ setProgress:(CGFloat) animated:(BOOL)animated]; + + Interface provides ability to customize each element of CircleProgressBar independently; + + */ +IB_DESIGNABLE +@interface CircleProgressBar : UIView + +/// @brief Width of Progress Bar +@property (nonatomic) IBInspectable CGFloat progressBarWidth; +/// @brief Progress color in Progress Bar +@property (nonatomic) IBInspectable UIColor *progressBarProgressColor; +/// @brief Track color in Progress Bar +@property (nonatomic) IBInspectable UIColor *progressBarTrackColor; +/// @brief Start Angle +@property (nonatomic) IBInspectable CGFloat startAngle; + +/// @brief Whether HintView should be shown or not +@property (nonatomic) IBInspectable BOOL hintHidden; +/// @brief Inner spacing between Progress Bar and Hint View +@property (nonatomic) IBInspectable CGFloat hintViewSpacing; +/// @brief Hint View Background Color +@property (nonatomic) IBInspectable UIColor *hintViewBackgroundColor; +/// @brief Hint View Text Font +@property (nonatomic) IBInspectable UIFont *hintTextFont; +/// @brief Hint View Text Color +@property (nonatomic) IBInspectable UIColor *hintTextColor; + +/** Used to set block that generates NSString according to progress, to show it in Hint View + + @param StringGenerationBlock block with CGFloat progress parameter, that returns NSString* + */ +- (void)setHintTextGenerationBlock:(StringGenerationBlock)generationBlock; + +/** Used to set block that generates NSAttributedString according to progress, to show it in Hint View + + @param AttributedStringGenerationBlock block with CGFloat progress parameter, that returns NSAttributedString* + */ +- (void)setHintAttributedGenerationBlock:(AttributedStringGenerationBlock)generationBlock; + +/// @brief Current ProgressBar's progress (Read-Only) +/// To change ProgressBar's progress use setProgress:animated: +@property (nonatomic, readonly) IBInspectable CGFloat progress; + +/// @brief Indicates of there is ongoing animation +@property (nonatomic, readonly) BOOL isAnimating; + +/** Used to set progress with animation or without + + @param progress progress to be set + @param animated should control animate progress change or not + */ +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated; + +/** Used to set progress with animation and custom duration + + @param progress progress to be set + @param animated should control animate progress change or not + @param duration animation duration (default is 0.2f) + */ +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated duration:(CGFloat)duration; + +/// Used to stop ongoing animation +- (void)stopAnimation; + +@end diff --git a/LifeLog/Pods/CircleProgressBar/CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.m b/LifeLog/Pods/CircleProgressBar/CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.m new file mode 100755 index 0000000..51dd1dd --- /dev/null +++ b/LifeLog/Pods/CircleProgressBar/CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.m @@ -0,0 +1,310 @@ +// +// CircleProgressBar.m +// CircleProgressBar +// +// Created by Andrew Cherkashin on 3/16/15. +// Copyright (c) 2015 Eclair. All rights reserved. +// + +#import "CircleProgressBar.h" + +// Common +#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) + +// Progress Bar Defaults +#define DefaultProgressBarProgressColor [UIColor colorWithRed:0.71 green:0.099 blue:0.099 alpha:0.7] +#define DefaultProgressBarTrackColor [UIColor colorWithRed:1 green:1 blue:1 alpha:0.7] +const CGFloat DefaultProgressBarWidth = 33.0f; + +// Hint View Defaults +#define DefaultHintBackgroundColor [UIColor colorWithWhite:0 alpha:0.7] +#define DefaultHintTextFont [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:30.0f] +#define DefaultHintTextColor [UIColor whiteColor] +const CGFloat DefaultHintSpacing = 20.0f; +const StringGenerationBlock DefaultHintTextGenerationBlock = ^NSString *(CGFloat progress) { + return [NSString stringWithFormat:@"%.0f%%", progress * 100]; +}; + +// Animation Constants +const CGFloat AnimationChangeTimeDuration = 0.2f; +const CGFloat AnimationChangeTimeStep = 0.01f; + +@interface CircleProgressBar (Private) + +// Common +- (CGFloat)progressAccordingToBounds:(CGFloat)progress; + +// Base Drawing +- (void)drawBackground:(CGContextRef)context; + +// ProgressBar Drawing +- (UIColor*)progressBarProgressColorForDrawing; +- (UIColor*)progressBarTrackColorForDrawing; +- (CGFloat)progressBarWidthForDrawing; +- (void)drawProgressBar:(CGContextRef)context progressAngle:(CGFloat)progressAngle center:(CGPoint)center radius:(CGFloat)radius; + +// Hint Drawing +- (CGFloat)hintViewSpacingForDrawing; +- (UIColor*)hintViewBackgroundColorForDrawing; +- (UIFont*)hintTextFontForDrawing; +- (UIColor*)hintTextColorForDrawing; +- (NSString*)stringRepresentationOfProgress:(CGFloat)progress; +- (void)drawSimpleHintTextAtCenter:(CGPoint)center; +- (void)drawAttributedHintTextAtCenter:(CGPoint)center; +- (void)drawHint:(CGContextRef)context center:(CGPoint)center radius:(CGFloat)radius; + +// Animation +- (void)animateProgressBarChangeFrom:(CGFloat)startProgress to:(CGFloat)endProgress duration:(CGFloat)duration; +- (void)updateProgressBarForAnimation; + +@end + +@implementation CircleProgressBar { + NSTimer *_animationTimer; + CGFloat _currentAnimationProgress, _startProgress, _endProgress, _animationProgressStep; + StringGenerationBlock _hintTextGenerationBlock; + AttributedStringGenerationBlock _hintAttributedTextGenerationBlock; +} + +- (BOOL)isAnimating { + return _animationTimer != nil; +} + +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated { + [self setProgress:progress animated:animated duration:AnimationChangeTimeDuration]; +} + +- (void)setProgress:(CGFloat)progress animated:(BOOL)animated duration:(CGFloat)duration; { + progress = [self progressAccordingToBounds:progress]; + if (_progress == progress) { + return; + } + + [_animationTimer invalidate]; + _animationTimer = nil; + + if (animated) { + [self animateProgressBarChangeFrom:_progress to:progress duration:duration]; + } else { + _progress = progress; + [self setNeedsDisplay]; + } +} + +- (void)stopAnimation { + if (!self.isAnimating) { + return; + } + + [_animationTimer invalidate]; + _animationTimer = nil; + _progress = _endProgress; + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect { + [super drawRect:rect]; + + CGPoint innerCenter = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2); + CGFloat radius = MIN(innerCenter.x, innerCenter.y); + CGFloat currentProgressAngle = (_progress * 360) + _startAngle; + + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextClearRect(context, rect); + + [self drawBackground:context]; + + [self drawProgressBar:context progressAngle:currentProgressAngle center:innerCenter radius:radius]; + if (!_hintHidden) { + [self drawHint:context center:innerCenter radius:radius]; + } +} + +#pragma mark - Setters with View Update + +- (void)setProgressBarWidth:(CGFloat)progressBarWidth { + _progressBarWidth = progressBarWidth; + [self setNeedsDisplay]; +} + +- (void)setProgressBarProgressColor:(UIColor *)progressBarProgressColor { + _progressBarProgressColor = progressBarProgressColor; + [self setNeedsDisplay]; +} + +- (void)setProgressBarTrackColor:(UIColor *)progressBarTrackColor { + _progressBarTrackColor = progressBarTrackColor; + [self setNeedsDisplay]; +} + +- (void)setHintHidden:(BOOL)isHintHidden { + _hintHidden = isHintHidden; + [self setNeedsDisplay]; +} + +- (void)setHintViewSpacing:(CGFloat)hintViewSpacing { + _hintViewSpacing = hintViewSpacing; + [self setNeedsDisplay]; +} + +- (void)setHintViewBackgroundColor:(UIColor *)hintViewBackgroundColor { + _hintViewBackgroundColor = hintViewBackgroundColor; + [self setNeedsDisplay]; +} + +- (void)setHintTextFont:(UIFont *)hintTextFont { + _hintTextFont = hintTextFont; + [self setNeedsDisplay]; +} + +- (void)setHintTextColor:(UIColor *)hintTextColor { + _hintTextColor = hintTextColor; + [self setNeedsDisplay]; +} + +- (void)setHintTextGenerationBlock:(StringGenerationBlock)generationBlock { + _hintTextGenerationBlock = generationBlock; + [self setNeedsDisplay]; +} + +- (void)setHintAttributedGenerationBlock:(AttributedStringGenerationBlock)generationBlock { + _hintAttributedTextGenerationBlock = generationBlock; + [self setNeedsDisplay]; +} + +- (void)setStartAngle:(CGFloat)startAngle { + _startAngle = startAngle; + [self setNeedsDisplay]; +} + +@end + +@implementation CircleProgressBar (Private) + +#pragma mark - Common + +- (CGFloat)progressAccordingToBounds:(CGFloat)progress { + progress = MIN(progress, 1); + progress = MAX(progress, 0); + return progress; +} + +#pragma mark - Base Drawing + +- (void)drawBackground:(CGContextRef)context { + CGContextSetFillColorWithColor(context, self.backgroundColor.CGColor); + CGContextFillRect(context, self.bounds); +} + +#pragma mark - ProgressBar Drawing + +- (UIColor*)progressBarProgressColorForDrawing { + return (_progressBarProgressColor != nil ? _progressBarProgressColor : DefaultProgressBarProgressColor); +} + +- (UIColor*)progressBarTrackColorForDrawing { + return (_progressBarTrackColor != nil ? _progressBarTrackColor : DefaultProgressBarTrackColor); +} + +- (CGFloat)progressBarWidthForDrawing { + return (_progressBarWidth > 0 ? _progressBarWidth : DefaultProgressBarWidth); +} + +- (void)drawProgressBar:(CGContextRef)context progressAngle:(CGFloat)progressAngle center:(CGPoint)center radius:(CGFloat)radius { + CGFloat barWidth = self.progressBarWidthForDrawing; + if (barWidth > radius) { + barWidth = radius; + } + + CGContextSetFillColorWithColor(context, self.progressBarProgressColorForDrawing.CGColor); + CGContextBeginPath(context); + CGContextAddArc(context, center.x, center.y, radius, DEGREES_TO_RADIANS(_startAngle), DEGREES_TO_RADIANS(progressAngle), 0); + CGContextAddArc(context, center.x, center.y, radius - barWidth, DEGREES_TO_RADIANS(progressAngle), DEGREES_TO_RADIANS(_startAngle), 1); + CGContextClosePath(context); + CGContextFillPath(context); + + CGContextSetFillColorWithColor(context, self.progressBarTrackColorForDrawing.CGColor); + CGContextBeginPath(context); + CGContextAddArc(context, center.x, center.y, radius, DEGREES_TO_RADIANS(progressAngle), DEGREES_TO_RADIANS(_startAngle + 360), 0); + CGContextAddArc(context, center.x, center.y, radius - barWidth, DEGREES_TO_RADIANS(_startAngle + 360), DEGREES_TO_RADIANS(progressAngle), 1); + CGContextClosePath(context); + CGContextFillPath(context); +} + +#pragma mark - Hint Drawing + +- (CGFloat)hintViewSpacingForDrawing { + return (_hintViewSpacing != 0 ? _hintViewSpacing : DefaultHintSpacing); +} + +- (UIColor*)hintViewBackgroundColorForDrawing { + return (_hintViewBackgroundColor != nil ? _hintViewBackgroundColor : DefaultHintBackgroundColor); +} + +- (UIFont*)hintTextFontForDrawing { + return (_hintTextFont != nil ? _hintTextFont : DefaultHintTextFont); +} + +- (UIColor*)hintTextColorForDrawing { + return (_hintTextColor != nil ? _hintTextColor : DefaultHintTextColor); +} + +- (NSString*)stringRepresentationOfProgress:(CGFloat)progress { + return (_hintTextGenerationBlock != nil ? _hintTextGenerationBlock(progress) : DefaultHintTextGenerationBlock(progress)); +} + +- (void)drawSimpleHintTextAtCenter:(CGPoint)center { + NSString *progressString = [self stringRepresentationOfProgress:_progress]; + CGSize hintTextSize = [progressString boundingRectWithSize:CGSizeZero options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: self.hintTextFontForDrawing} context:nil].size; + [progressString drawAtPoint:CGPointMake(center.x - hintTextSize.width / 2, center.y - hintTextSize.height / 2) withAttributes:@{NSFontAttributeName: self.hintTextFontForDrawing, NSForegroundColorAttributeName: self.hintTextColorForDrawing}]; +} + +- (void)drawAttributedHintTextAtCenter:(CGPoint)center { + NSAttributedString *progressString = _hintAttributedTextGenerationBlock(_progress); + CGSize hintTextSize = [progressString boundingRectWithSize:CGSizeZero options:NSStringDrawingUsesFontLeading context:nil].size; + [progressString drawAtPoint:CGPointMake(center.x - hintTextSize.width / 2, center.y - hintTextSize.height / 2)]; +} + +- (void)drawHint:(CGContextRef)context center:(CGPoint)center radius:(CGFloat)radius { + CGFloat barWidth = self.progressBarWidthForDrawing; + if (barWidth + self.hintViewSpacingForDrawing > radius) { + return; + } + + CGContextSetFillColorWithColor(context, self.hintViewBackgroundColorForDrawing.CGColor); + CGContextBeginPath(context); + CGContextAddArc(context, center.x, center.y, radius - barWidth - self.hintViewSpacingForDrawing, DEGREES_TO_RADIANS(0), DEGREES_TO_RADIANS(360), 1); + CGContextClosePath(context); + CGContextFillPath(context); + + if (_hintAttributedTextGenerationBlock != nil) { + [self drawAttributedHintTextAtCenter:center]; + } else { + [self drawSimpleHintTextAtCenter:center]; + } +} + +#pragma mark - Amination + +- (void)animateProgressBarChangeFrom:(CGFloat)startProgress to:(CGFloat)endProgress duration:(CGFloat)duration { + _currentAnimationProgress = _startProgress = startProgress; + _endProgress = endProgress; + + _animationProgressStep = (_endProgress - _startProgress) * AnimationChangeTimeStep / duration; + + _animationTimer = [NSTimer scheduledTimerWithTimeInterval:AnimationChangeTimeStep target:self selector:@selector(updateProgressBarForAnimation) userInfo:nil repeats:YES]; + [[NSRunLoop currentRunLoop] addTimer:_animationTimer forMode:NSRunLoopCommonModes]; +} + +- (void)updateProgressBarForAnimation { + _currentAnimationProgress += _animationProgressStep; + _progress = _currentAnimationProgress; + if ((_animationProgressStep > 0 && _currentAnimationProgress >= _endProgress) || (_animationProgressStep < 0 && _currentAnimationProgress <= _endProgress)) { + [_animationTimer invalidate]; + _animationTimer = nil; + _progress = _endProgress; + } + [self setNeedsDisplay]; +} + +@end \ No newline at end of file diff --git a/LifeLog/Pods/CircleProgressBar/LICENSE b/LifeLog/Pods/CircleProgressBar/LICENSE new file mode 100644 index 0000000..623aa05 --- /dev/null +++ b/LifeLog/Pods/CircleProgressBar/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Cherkashin Andrey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/LifeLog/Pods/CircleProgressBar/README.md b/LifeLog/Pods/CircleProgressBar/README.md new file mode 100644 index 0000000..8aac885 --- /dev/null +++ b/LifeLog/Pods/CircleProgressBar/README.md @@ -0,0 +1,115 @@ +CircleProgressBar +================= + +Circle Progress Bar iOS Control. + +Require iOS 7.0+ or tvOS 9.0+ + +![CircleProgressBar Screenshot-iOS-Example](https://raw.githubusercontent.com/Eclair/CircleProgressBar/master/Screenshots/ios-screen01.png) +![CircleProgressBar Screenshot-iOS-Example2](https://raw.githubusercontent.com/Eclair/CircleProgressBar/master/Screenshots/ios-screen02.png) + +Installation +============ + +You can install this control in two ways: + +1. Using CocoaPods: + +```ruby +pod 'CircleProgressBar', '~> 0.32’ +``` + +2. Manually: + + Download source from this repository and copy CircleProgressBarDemo/CircleProgressBar folder to your project. + + Don't forget to add _*UIKit*_ and _*QuartzCore*_ frameworks to your project. + +How to use +========== + +_NOTE: If you installed this control manually - please be sure that you've added UIKit and QuartzCore frameworks to your project._ + +_NOTE: If you're using rectangular view for CircleProgressBar control instead of square, ProgressBar will fit available area and will be drawn in center of it._ + +You can simply add UIView in Interface Builder to your controller and change it's class to "CircleProgressBar" (overridden _initWithCoder_ method will be called) or create CircleProgressBar programmatically using _init_ or _initWithFrame_ methods. + +Using Interface Builder you'll take advantage of Xcode 6 new live rendering feature to customize control according to your needs on the fly (will be explained below in "Customization" section). + +To change progress, simply call "setProgress:animated:" method of CircleProgressBar instance: + +```objective-c +[_circleProgressBar setProgress:(CGFloat)progress animated:(BOOL)animated]; +``` + +or "setProgress:animated:duration:" method to define custom animation time: + +```objective-c +[_circleProgressBar setProgress:(CGFloat)progress animated:(BOOL)animated duration:(CGFloat)duration]; +``` + +To check if there is ongoing animation use `isAnimating` property. +To stop an ongoing animation, you can use `stopAnimation` method. In this case it will set the progress to animation end value: + +```objective-c +[_circleProgressBar stopAnimation]; +``` + +Customization +============= + +CircleProgressBar provides many customization properties: + +```objective-c +// Progress Bar Customization +@property (nonatomic) CGFloat progressBarWidth; +@property (nonatomic) UIColor *progressBarProgressColor; +@property (nonatomic) UIColor *progressBarTrackColor; +@property (nonatomic) CGFloat startAngle; + +// Hint View Customization (inside progress bar) +@property (nonatomic) BOOL hintHidden; +@property (nonatomic) CGFloat hintViewSpacing; +@property (nonatomic) UIColor *hintViewBackgroundColor; +@property (nonatomic) UIFont *hintTextFont; +@property (nonatomic) UIColor *hintTextColor; +``` + +Using these customization properties you can define Progress Bar's width, color of filled part, color of empty part, Progress Bar's start angle, Hint View's spacing (between progress bar and hint view), background color, hint text color and hint text font. + +If you want to hide HintView you can simply set hintHidden property to NO. + +To customize text inside HintView you can simply set TextGenerationBlock: + +```objective-c +- (void)setHintTextGenerationBlock:(StringGenerationBlock)generationBlock; +``` + +For example this way: + +```objective-c +[_circleProgressBar setHintTextGenerationBlock:^NSString *(CGFloat progress) { + return [NSString stringWithFormat:@"%.0f / 255", progress * 255]; +}]; +``` + +If you want to use NSAttributedString you can set instead HintAttributedGenerationBlock: + +```objective-c +- (void)setHintAttributedGenerationBlock:(AttributedStringGenerationBlock)generationBlock; +``` + +If you using Interface Builder, you can take an advantage of Xcode 6 live render with IBDesignable and IBInspectable features to customize control: + +![CircleProgressBar Screenshot-Xcode-InterfaceBuilder](https://raw.githubusercontent.com/Eclair/CircleProgressBar/master/Screenshots/xcode-screen01.png) + +License (MIT) +============= + +Copyright (c) 2015 Cherkashin Andrey + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/LifeLog/Pods/MBProgressHUD/LICENSE b/LifeLog/Pods/MBProgressHUD/LICENSE new file mode 100644 index 0000000..1c0d59b --- /dev/null +++ b/LifeLog/Pods/MBProgressHUD/LICENSE @@ -0,0 +1,19 @@ +Copyright © 2009-2016 Matej Bukovinski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/LifeLog/Pods/MBProgressHUD/MBProgressHUD.h b/LifeLog/Pods/MBProgressHUD/MBProgressHUD.h new file mode 100644 index 0000000..a10744c --- /dev/null +++ b/LifeLog/Pods/MBProgressHUD/MBProgressHUD.h @@ -0,0 +1,435 @@ +// +// MBProgressHUD.h +// Version 1.0.0 +// Created by Matej Bukovinski on 2.4.09. +// + +// This code is distributed under the terms and conditions of the MIT license. + +// Copyright © 2009-2016 Matej Bukovinski +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import +#import + +@class MBBackgroundView; +@protocol MBProgressHUDDelegate; + + +extern CGFloat const MBProgressMaxOffset; + +typedef NS_ENUM(NSInteger, MBProgressHUDMode) { + /// UIActivityIndicatorView. + MBProgressHUDModeIndeterminate, + /// A round, pie-chart like, progress view. + MBProgressHUDModeDeterminate, + /// Horizontal progress bar. + MBProgressHUDModeDeterminateHorizontalBar, + /// Ring-shaped progress view. + MBProgressHUDModeAnnularDeterminate, + /// Shows a custom view. + MBProgressHUDModeCustomView, + /// Shows only labels. + MBProgressHUDModeText +}; + +typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) { + /// Opacity animation + MBProgressHUDAnimationFade, + /// Opacity + scale animation (zoom in when appearing zoom out when disappearing) + MBProgressHUDAnimationZoom, + /// Opacity + scale animation (zoom out style) + MBProgressHUDAnimationZoomOut, + /// Opacity + scale animation (zoom in style) + MBProgressHUDAnimationZoomIn +}; + +typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) { + /// Solid color background + MBProgressHUDBackgroundStyleSolidColor, + /// UIVisualEffectView or UIToolbar.layer background view + MBProgressHUDBackgroundStyleBlur +}; + +typedef void (^MBProgressHUDCompletionBlock)(); + + +NS_ASSUME_NONNULL_BEGIN + + +/** + * Displays a simple HUD window containing a progress indicator and two optional labels for short messages. + * + * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. + * The MBProgressHUD window spans over the entire space given to it by the initWithFrame: constructor and catches all + * user input on this region, thereby preventing the user operations on components below the view. + * + * @note To still allow touches to pass through the HUD, you can set hud.userInteractionEnabled = NO. + * @attention MBProgressHUD is a UI class and should therefore only be accessed on the main thread. + */ +@interface MBProgressHUD : UIView + +/** + * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:. + * + * @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. + * + * @param view The view that the HUD will be added to + * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use + * animations while appearing. + * @return A reference to the created HUD. + * + * @see hideHUDForView:animated: + * @see animationType + */ ++ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated; + +/// @name Showing and hiding + +/** + * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:. + * + * @note This method sets removeFromSuperViewOnHide. The HUD will automatically be removed from the view hierarchy when hidden. + * + * @param view The view that is going to be searched for a HUD subview. + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use + * animations while disappearing. + * @return YES if a HUD was found and removed, NO otherwise. + * + * @see showHUDAddedTo:animated: + * @see animationType + */ ++ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated; + +/** + * Finds the top-most HUD subview and returns it. + * + * @param view The view that is going to be searched. + * @return A reference to the last HUD subview discovered. + */ ++ (nullable MBProgressHUD *)HUDForView:(UIView *)view; + +/** + * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with + * view.bounds as the parameter. + * + * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as + * the HUD's superview (i.e., the view that the HUD will be added to). + */ +- (instancetype)initWithView:(UIView *)view; + +/** + * Displays the HUD. + * + * @note You need to make sure that the main thread completes its run loop soon after this method call so that + * the user interface can be updated. Call this method when your task is already set up to be executed in a new thread + * (e.g., when using something like NSOperation or making an asynchronous call like NSURLRequest). + * + * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use + * animations while appearing. + * + * @see animationType + */ +- (void)showAnimated:(BOOL)animated; + +/** + * Hides the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to + * hide the HUD when your task completes. + * + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use + * animations while disappearing. + * + * @see animationType + */ +- (void)hideAnimated:(BOOL)animated; + +/** + * Hides the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to + * hide the HUD when your task completes. + * + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use + * animations while disappearing. + * @param delay Delay in seconds until the HUD is hidden. + * + * @see animationType + */ +- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay; + +/** + * The HUD delegate object. Receives HUD state notifications. + */ +@property (weak, nonatomic) id delegate; + +/** + * Called after the HUD is hiden. + */ +@property (copy, nullable) MBProgressHUDCompletionBlock completionBlock; + +/* + * Grace period is the time (in seconds) that the invoked method may be run without + * showing the HUD. If the task finishes before the grace time runs out, the HUD will + * not be shown at all. + * This may be used to prevent HUD display for very short tasks. + * Defaults to 0 (no grace time). + */ +@property (assign, nonatomic) NSTimeInterval graceTime; + +/** + * The minimum time (in seconds) that the HUD is shown. + * This avoids the problem of the HUD being shown and than instantly hidden. + * Defaults to 0 (no minimum show time). + */ +@property (assign, nonatomic) NSTimeInterval minShowTime; + +/** + * Removes the HUD from its parent view when hidden. + * Defaults to NO. + */ +@property (assign, nonatomic) BOOL removeFromSuperViewOnHide; + +/// @name Appearance + +/** + * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. + */ +@property (assign, nonatomic) MBProgressHUDMode mode; + +/** + * A color that gets forwarded to all labels and supported indicators. Also sets the tintColor + * for custom views on iOS 7+. Set to nil to manage color individually. + * Defaults to semi-translucent black on iOS 7 and later and white on earlier iOS versions. + */ +@property (strong, nonatomic, nullable) UIColor *contentColor UI_APPEARANCE_SELECTOR; + +/** + * The animation type that should be used when the HUD is shown and hidden. + */ +@property (assign, nonatomic) MBProgressHUDAnimation animationType UI_APPEARANCE_SELECTOR; + +/** + * The bezel offset relative to the center of the view. You can use MBProgressMaxOffset + * and -MBProgressMaxOffset to move the HUD all the way to the screen edge in each direction. + * E.g., CGPointMake(0.f, MBProgressMaxOffset) would position the HUD centered on the bottom edge. + */ +@property (assign, nonatomic) CGPoint offset UI_APPEARANCE_SELECTOR; + +/** + * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). + * This also represents the minimum bezel distance to the edge of the HUD view. + * Defaults to 20.f + */ +@property (assign, nonatomic) CGFloat margin UI_APPEARANCE_SELECTOR; + +/** + * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size). + */ +@property (assign, nonatomic) CGSize minSize UI_APPEARANCE_SELECTOR; + +/** + * Force the HUD dimensions to be equal if possible. + */ +@property (assign, nonatomic, getter = isSquare) BOOL square UI_APPEARANCE_SELECTOR; + +/** + * When enabled, the bezel center gets slightly affected by the device accelerometer data. + * Has no effect on iOS < 7.0. Defaults to YES. + */ +@property (assign, nonatomic, getter=areDefaultMotionEffectsEnabled) BOOL defaultMotionEffectsEnabled UI_APPEARANCE_SELECTOR; + +/// @name Progress + +/** + * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. + */ +@property (assign, nonatomic) float progress; + +/// @name ProgressObject + +/** + * The NSProgress object feeding the progress information to the progress indicator. + */ +@property (strong, nonatomic, nullable) NSProgress *progressObject; + +/// @name Views + +/** + * The view containing the labels and indicator (or customView). + */ +@property (strong, nonatomic, readonly) MBBackgroundView *bezelView; + +/** + * View covering the entire HUD area, placed behind bezelView. + */ +@property (strong, nonatomic, readonly) MBBackgroundView *backgroundView; + +/** + * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView. + * The view should implement intrinsicContentSize for proper sizing. For best results use approximately 37 by 37 pixels. + */ +@property (strong, nonatomic, nullable) UIView *customView; + +/** + * A label that holds an optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit + * the entire text. + */ +@property (strong, nonatomic, readonly) UILabel *label; + +/** + * A label that holds an optional details message displayed below the labelText message. The details text can span multiple lines. + */ +@property (strong, nonatomic, readonly) UILabel *detailsLabel; + +/** + * A button that is placed below the labels. Visible only if a target / action is added. + */ +@property (strong, nonatomic, readonly) UIButton *button; + +@end + + +@protocol MBProgressHUDDelegate + +@optional + +/** + * Called after the HUD was fully hidden from the screen. + */ +- (void)hudWasHidden:(MBProgressHUD *)hud; + +@end + + +/** + * A progress view for showing definite progress by filling up a circle (pie chart). + */ +@interface MBRoundProgressView : UIView + +/** + * Progress (0.0 to 1.0) + */ +@property (nonatomic, assign) float progress; + +/** + * Indicator progress color. + * Defaults to white [UIColor whiteColor]. + */ +@property (nonatomic, strong) UIColor *progressTintColor; + +/** + * Indicator background (non-progress) color. + * Only applicable on iOS versions older than iOS 7. + * Defaults to translucent white (alpha 0.1). + */ +@property (nonatomic, strong) UIColor *backgroundTintColor; + +/* + * Display mode - NO = round or YES = annular. Defaults to round. + */ +@property (nonatomic, assign, getter = isAnnular) BOOL annular; + +@end + + +/** + * A flat bar progress view. + */ +@interface MBBarProgressView : UIView + +/** + * Progress (0.0 to 1.0) + */ +@property (nonatomic, assign) float progress; + +/** + * Bar border line color. + * Defaults to white [UIColor whiteColor]. + */ +@property (nonatomic, strong) UIColor *lineColor; + +/** + * Bar background color. + * Defaults to clear [UIColor clearColor]; + */ +@property (nonatomic, strong) UIColor *progressRemainingColor; + +/** + * Bar progress color. + * Defaults to white [UIColor whiteColor]. + */ +@property (nonatomic, strong) UIColor *progressColor; + +@end + + +@interface MBBackgroundView : UIView + +/** + * The background style. + * Defaults to MBProgressHUDBackgroundStyleBlur on iOS 7 or later and MBProgressHUDBackgroundStyleSolidColor otherwise. + * @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions. + */ +@property (nonatomic) MBProgressHUDBackgroundStyle style; + +/** + * The background color or the blur tint color. + * @note Due to iOS 7 not supporting UIVisualEffectView, the blur effect differs slightly between iOS 7 and later versions. + */ +@property (nonatomic, strong) UIColor *color; + +@end + +@interface MBProgressHUD (Deprecated) + ++ (NSArray *)allHUDsForView:(UIView *)view __attribute__((deprecated("Store references when using more than one HUD per view."))); ++ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated __attribute__((deprecated("Store references when using more than one HUD per view."))); + +- (id)initWithWindow:(UIWindow *)window __attribute__((deprecated("Use initWithView: instead."))); + +- (void)show:(BOOL)animated __attribute__((deprecated("Use showAnimated: instead."))); +- (void)hide:(BOOL)animated __attribute__((deprecated("Use hideAnimated: instead."))); +- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay __attribute__((deprecated("Use hideAnimated:afterDelay: instead."))); + +- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated __attribute__((deprecated("Use GCD directly."))); +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block __attribute__((deprecated("Use GCD directly."))); +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly."))); +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue __attribute__((deprecated("Use GCD directly."))); +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue + completionBlock:(nullable MBProgressHUDCompletionBlock)completion __attribute__((deprecated("Use GCD directly."))); +@property (assign) BOOL taskInProgress __attribute__((deprecated("No longer needed."))); + +@property (nonatomic, copy) NSString *labelText __attribute__((deprecated("Use label.text instead."))); +@property (nonatomic, strong) UIFont *labelFont __attribute__((deprecated("Use label.font instead."))); +@property (nonatomic, strong) UIColor *labelColor __attribute__((deprecated("Use label.textColor instead."))); +@property (nonatomic, copy) NSString *detailsLabelText __attribute__((deprecated("Use detailsLabel.text instead."))); +@property (nonatomic, strong) UIFont *detailsLabelFont __attribute__((deprecated("Use detailsLabel.font instead."))); +@property (nonatomic, strong) UIColor *detailsLabelColor __attribute__((deprecated("Use detailsLabel.textColor instead."))); +@property (assign, nonatomic) CGFloat opacity __attribute__((deprecated("Customize bezelView properties instead."))); +@property (strong, nonatomic) UIColor *color __attribute__((deprecated("Customize the bezelView color instead."))); +@property (assign, nonatomic) CGFloat xOffset __attribute__((deprecated("Set offset.x instead."))); +@property (assign, nonatomic) CGFloat yOffset __attribute__((deprecated("Set offset.y instead."))); +@property (assign, nonatomic) CGFloat cornerRadius __attribute__((deprecated("Set bezelView.layer.cornerRadius instead."))); +@property (assign, nonatomic) BOOL dimBackground __attribute__((deprecated("Customize HUD background properties instead."))); +@property (strong, nonatomic) UIColor *activityIndicatorColor __attribute__((deprecated("Use UIAppearance to customize UIActivityIndicatorView. E.g.: [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil].color = [UIColor redColor];"))); +@property (atomic, assign, readonly) CGSize size __attribute__((deprecated("Get the bezelView.frame.size instead."))); + +@end + +NS_ASSUME_NONNULL_END diff --git a/LifeLog/Pods/MBProgressHUD/MBProgressHUD.m b/LifeLog/Pods/MBProgressHUD/MBProgressHUD.m new file mode 100644 index 0000000..a94f921 --- /dev/null +++ b/LifeLog/Pods/MBProgressHUD/MBProgressHUD.m @@ -0,0 +1,1484 @@ +// +// MBProgressHUD.m +// Version 1.0.0 +// Created by Matej Bukovinski on 2.4.09. +// + +#import "MBProgressHUD.h" +#import + + +#ifndef kCFCoreFoundationVersionNumber_iOS_7_0 + #define kCFCoreFoundationVersionNumber_iOS_7_0 847.20 +#endif + +#ifndef kCFCoreFoundationVersionNumber_iOS_8_0 + #define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15 +#endif + +#define MBMainThreadAssert() NSAssert([NSThread isMainThread], @"MBProgressHUD needs to be accessed on the main thread."); + +CGFloat const MBProgressMaxOffset = 1000000.f; + +static const CGFloat MBDefaultPadding = 4.f; +static const CGFloat MBDefaultLabelFontSize = 16.f; +static const CGFloat MBDefaultDetailsLabelFontSize = 12.f; + + +@interface MBProgressHUD () { + // Deprecated + UIColor *_activityIndicatorColor; + CGFloat _opacity; +} + +@property (nonatomic, assign) BOOL useAnimation; +@property (nonatomic, assign, getter=hasFinished) BOOL finished; +@property (nonatomic, strong) UIView *indicator; +@property (nonatomic, strong) NSDate *showStarted; +@property (nonatomic, strong) NSArray *paddingConstraints; +@property (nonatomic, strong) NSArray *bezelConstraints; +@property (nonatomic, strong) UIView *topSpacer; +@property (nonatomic, strong) UIView *bottomSpacer; +@property (nonatomic, weak) NSTimer *graceTimer; +@property (nonatomic, weak) NSTimer *minShowTimer; +@property (nonatomic, weak) NSTimer *hideDelayTimer; +@property (nonatomic, weak) CADisplayLink *progressObjectDisplayLink; + +// Deprecated +@property (assign) BOOL taskInProgress; + +@end + + +@interface MBProgressHUDRoundedButton : UIButton +@end + + +@implementation MBProgressHUD + +#pragma mark - Class methods + ++ (instancetype)showHUDAddedTo:(UIView *)view animated:(BOOL)animated { + MBProgressHUD *hud = [[self alloc] initWithView:view]; + hud.removeFromSuperViewOnHide = YES; + [view addSubview:hud]; + [hud showAnimated:animated]; + return hud; +} + ++ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated { + MBProgressHUD *hud = [self HUDForView:view]; + if (hud != nil) { + hud.removeFromSuperViewOnHide = YES; + [hud hideAnimated:animated]; + return YES; + } + return NO; +} + ++ (MBProgressHUD *)HUDForView:(UIView *)view { + NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; + for (UIView *subview in subviewsEnum) { + if ([subview isKindOfClass:self]) { + return (MBProgressHUD *)subview; + } + } + return nil; +} + +#pragma mark - Lifecycle + +- (void)commonInit { + // Set default values for properties + _animationType = MBProgressHUDAnimationFade; + _mode = MBProgressHUDModeIndeterminate; + _margin = 20.0f; + _opacity = 1.f; + _defaultMotionEffectsEnabled = YES; + + // Default color, depending on the current iOS version + BOOL isLegacy = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; + _contentColor = isLegacy ? [UIColor whiteColor] : [UIColor colorWithWhite:0.f alpha:0.7f]; + // Transparent background + self.opaque = NO; + self.backgroundColor = [UIColor clearColor]; + // Make it invisible for now + self.alpha = 0.0f; + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.layer.allowsGroupOpacity = NO; + + [self setupViews]; + [self updateIndicators]; + [self registerForNotifications]; +} + +- (instancetype)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + [self commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)aDecoder { + if ((self = [super initWithCoder:aDecoder])) { + [self commonInit]; + } + return self; +} + +- (id)initWithView:(UIView *)view { + NSAssert(view, @"View must not be nil."); + return [self initWithFrame:view.bounds]; +} + +- (void)dealloc { + [self unregisterFromNotifications]; +} + +#pragma mark - Show & hide + +- (void)showAnimated:(BOOL)animated { + MBMainThreadAssert(); + [self.minShowTimer invalidate]; + self.useAnimation = animated; + self.finished = NO; + // If the grace time is set, postpone the HUD display + if (self.graceTime > 0.0) { + NSTimer *timer = [NSTimer timerWithTimeInterval:self.graceTime target:self selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO]; + [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; + self.graceTimer = timer; + } + // ... otherwise show the HUD immediately + else { + [self showUsingAnimation:self.useAnimation]; + } +} + +- (void)hideAnimated:(BOOL)animated { + MBMainThreadAssert(); + [self.graceTimer invalidate]; + self.useAnimation = animated; + self.finished = YES; + // If the minShow time is set, calculate how long the HUD was shown, + // and postpone the hiding operation if necessary + if (self.minShowTime > 0.0 && self.showStarted) { + NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:self.showStarted]; + if (interv < self.minShowTime) { + NSTimer *timer = [NSTimer timerWithTimeInterval:(self.minShowTime - interv) target:self selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO]; + [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; + self.minShowTimer = timer; + return; + } + } + // ... otherwise hide the HUD immediately + [self hideUsingAnimation:self.useAnimation]; +} + +- (void)hideAnimated:(BOOL)animated afterDelay:(NSTimeInterval)delay { + NSTimer *timer = [NSTimer timerWithTimeInterval:delay target:self selector:@selector(handleHideTimer:) userInfo:@(animated) repeats:NO]; + [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; + self.hideDelayTimer = timer; +} + +#pragma mark - Timer callbacks + +- (void)handleGraceTimer:(NSTimer *)theTimer { + // Show the HUD only if the task is still running + if (!self.hasFinished) { + [self showUsingAnimation:self.useAnimation]; + } +} + +- (void)handleMinShowTimer:(NSTimer *)theTimer { + [self hideUsingAnimation:self.useAnimation]; +} + +- (void)handleHideTimer:(NSTimer *)timer { + [self hideAnimated:[timer.userInfo boolValue]]; +} + +#pragma mark - View Hierrarchy + +- (void)didMoveToSuperview { + [self updateForCurrentOrientationAnimated:NO]; +} + +#pragma mark - Internal show & hide operations + +- (void)showUsingAnimation:(BOOL)animated { + // Cancel any previous animations + [self.bezelView.layer removeAllAnimations]; + [self.backgroundView.layer removeAllAnimations]; + + // Cancel any scheduled hideDelayed: calls + [self.hideDelayTimer invalidate]; + + self.showStarted = [NSDate date]; + self.alpha = 1.f; + + // Needed in case we hide and re-show with the same NSProgress object attached. + [self setNSProgressDisplayLinkEnabled:YES]; + + if (animated) { + [self animateIn:YES withType:self.animationType completion:NULL]; + } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + self.bezelView.alpha = self.opacity; +#pragma clang diagnostic pop + self.backgroundView.alpha = 1.f; + } +} + +- (void)hideUsingAnimation:(BOOL)animated { + if (animated && self.showStarted) { + self.showStarted = nil; + [self animateIn:NO withType:self.animationType completion:^(BOOL finished) { + [self done]; + }]; + } else { + self.showStarted = nil; + self.bezelView.alpha = 0.f; + self.backgroundView.alpha = 1.f; + [self done]; + } +} + +- (void)animateIn:(BOOL)animatingIn withType:(MBProgressHUDAnimation)type completion:(void(^)(BOOL finished))completion { + // Automatically determine the correct zoom animation type + if (type == MBProgressHUDAnimationZoom) { + type = animatingIn ? MBProgressHUDAnimationZoomIn : MBProgressHUDAnimationZoomOut; + } + + CGAffineTransform small = CGAffineTransformMakeScale(0.5f, 0.5f); + CGAffineTransform large = CGAffineTransformMakeScale(1.5f, 1.5f); + + // Set starting state + UIView *bezelView = self.bezelView; + if (animatingIn && bezelView.alpha == 0.f && type == MBProgressHUDAnimationZoomIn) { + bezelView.transform = small; + } else if (animatingIn && bezelView.alpha == 0.f && type == MBProgressHUDAnimationZoomOut) { + bezelView.transform = large; + } + + // Perform animations + dispatch_block_t animations = ^{ + if (animatingIn) { + bezelView.transform = CGAffineTransformIdentity; + } else if (!animatingIn && type == MBProgressHUDAnimationZoomIn) { + bezelView.transform = large; + } else if (!animatingIn && type == MBProgressHUDAnimationZoomOut) { + bezelView.transform = small; + } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + bezelView.alpha = animatingIn ? self.opacity : 0.f; +#pragma clang diagnostic pop + self.backgroundView.alpha = animatingIn ? 1.f : 0.f; + }; + + // Spring animations are nicer, but only available on iOS 7+ +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { + [UIView animateWithDuration:0.3 delay:0. usingSpringWithDamping:1.f initialSpringVelocity:0.f options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion]; + return; + } +#endif + [UIView animateWithDuration:0.3 delay:0. options:UIViewAnimationOptionBeginFromCurrentState animations:animations completion:completion]; +} + +- (void)done { + // Cancel any scheduled hideDelayed: calls + [self.hideDelayTimer invalidate]; + [self setNSProgressDisplayLinkEnabled:NO]; + + if (self.hasFinished) { + self.alpha = 0.0f; + if (self.removeFromSuperViewOnHide) { + [self removeFromSuperview]; + } + } + MBProgressHUDCompletionBlock completionBlock = self.completionBlock; + if (completionBlock) { + completionBlock(); + } + id delegate = self.delegate; + if ([delegate respondsToSelector:@selector(hudWasHidden:)]) { + [delegate performSelector:@selector(hudWasHidden:) withObject:self]; + } +} + +#pragma mark - UI + +- (void)setupViews { + UIColor *defaultColor = self.contentColor; + + MBBackgroundView *backgroundView = [[MBBackgroundView alloc] initWithFrame:self.bounds]; + backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; + backgroundView.backgroundColor = [UIColor clearColor]; + backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + backgroundView.alpha = 0.f; + [self addSubview:backgroundView]; + _backgroundView = backgroundView; + + MBBackgroundView *bezelView = [MBBackgroundView new]; + bezelView.translatesAutoresizingMaskIntoConstraints = NO; + bezelView.layer.cornerRadius = 5.f; + bezelView.alpha = 0.f; + [self addSubview:bezelView]; + _bezelView = bezelView; + [self updateBezelMotionEffects]; + + UILabel *label = [UILabel new]; + label.adjustsFontSizeToFitWidth = NO; + label.textAlignment = NSTextAlignmentCenter; + label.textColor = defaultColor; + label.font = [UIFont boldSystemFontOfSize:MBDefaultLabelFontSize]; + label.opaque = NO; + label.backgroundColor = [UIColor clearColor]; + _label = label; + + UILabel *detailsLabel = [UILabel new]; + detailsLabel.adjustsFontSizeToFitWidth = NO; + detailsLabel.textAlignment = NSTextAlignmentCenter; + detailsLabel.textColor = defaultColor; + detailsLabel.numberOfLines = 0; + detailsLabel.font = [UIFont boldSystemFontOfSize:MBDefaultDetailsLabelFontSize]; + detailsLabel.opaque = NO; + detailsLabel.backgroundColor = [UIColor clearColor]; + _detailsLabel = detailsLabel; + + UIButton *button = [MBProgressHUDRoundedButton buttonWithType:UIButtonTypeCustom]; + button.titleLabel.textAlignment = NSTextAlignmentCenter; + button.titleLabel.font = [UIFont boldSystemFontOfSize:MBDefaultDetailsLabelFontSize]; + [button setTitleColor:defaultColor forState:UIControlStateNormal]; + _button = button; + + for (UIView *view in @[label, detailsLabel, button]) { + view.translatesAutoresizingMaskIntoConstraints = NO; + [view setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisHorizontal]; + [view setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisVertical]; + [bezelView addSubview:view]; + } + + UIView *topSpacer = [UIView new]; + topSpacer.translatesAutoresizingMaskIntoConstraints = NO; + topSpacer.hidden = YES; + [bezelView addSubview:topSpacer]; + _topSpacer = topSpacer; + + UIView *bottomSpacer = [UIView new]; + bottomSpacer.translatesAutoresizingMaskIntoConstraints = NO; + bottomSpacer.hidden = YES; + [bezelView addSubview:bottomSpacer]; + _bottomSpacer = bottomSpacer; +} + +- (void)updateIndicators { + UIView *indicator = self.indicator; + BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]]; + BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]]; + + MBProgressHUDMode mode = self.mode; + if (mode == MBProgressHUDModeIndeterminate) { + if (!isActivityIndicator) { + // Update to indeterminate indicator + [indicator removeFromSuperview]; + indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; + [(UIActivityIndicatorView *)indicator startAnimating]; + [self.bezelView addSubview:indicator]; + } + } + else if (mode == MBProgressHUDModeDeterminateHorizontalBar) { + // Update to bar determinate indicator + [indicator removeFromSuperview]; + indicator = [[MBBarProgressView alloc] init]; + [self.bezelView addSubview:indicator]; + } + else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) { + if (!isRoundIndicator) { + // Update to determinante indicator + [indicator removeFromSuperview]; + indicator = [[MBRoundProgressView alloc] init]; + [self.bezelView addSubview:indicator]; + } + if (mode == MBProgressHUDModeAnnularDeterminate) { + [(MBRoundProgressView *)indicator setAnnular:YES]; + } + } + else if (mode == MBProgressHUDModeCustomView && self.customView != indicator) { + // Update custom view indicator + [indicator removeFromSuperview]; + indicator = self.customView; + [self.bezelView addSubview:indicator]; + } + else if (mode == MBProgressHUDModeText) { + [indicator removeFromSuperview]; + indicator = nil; + } + indicator.translatesAutoresizingMaskIntoConstraints = NO; + self.indicator = indicator; + + if ([indicator respondsToSelector:@selector(setProgress:)]) { + [(id)indicator setValue:@(self.progress) forKey:@"progress"]; + } + + [indicator setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisHorizontal]; + [indicator setContentCompressionResistancePriority:998.f forAxis:UILayoutConstraintAxisVertical]; + + [self updateViewsForColor:self.contentColor]; + [self setNeedsUpdateConstraints]; +} + +- (void)updateViewsForColor:(UIColor *)color { + if (!color) return; + + self.label.textColor = color; + self.detailsLabel.textColor = color; + [self.button setTitleColor:color forState:UIControlStateNormal]; + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if (self.activityIndicatorColor) { + color = self.activityIndicatorColor; + } +#pragma clang diagnostic pop + + // UIAppearance settings are prioritized. If they are preset the set color is ignored. + + UIView *indicator = self.indicator; + if ([indicator isKindOfClass:[UIActivityIndicatorView class]]) { + UIActivityIndicatorView *appearance = nil; +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000 + appearance = [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil]; +#else + // For iOS 9+ + appearance = [UIActivityIndicatorView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; +#endif + + if (appearance.color == nil) { + ((UIActivityIndicatorView *)indicator).color = color; + } + } else if ([indicator isKindOfClass:[MBRoundProgressView class]]) { + MBRoundProgressView *appearance = nil; +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000 + appearance = [MBRoundProgressView appearanceWhenContainedIn:[MBProgressHUD class], nil]; +#else + appearance = [MBRoundProgressView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; +#endif + if (appearance.progressTintColor == nil) { + ((MBRoundProgressView *)indicator).progressTintColor = color; + } + if (appearance.backgroundTintColor == nil) { + ((MBRoundProgressView *)indicator).backgroundTintColor = [color colorWithAlphaComponent:0.1]; + } + } else if ([indicator isKindOfClass:[MBBarProgressView class]]) { + MBBarProgressView *appearance = nil; +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000 + appearance = [MBBarProgressView appearanceWhenContainedIn:[MBProgressHUD class], nil]; +#else + appearance = [MBBarProgressView appearanceWhenContainedInInstancesOfClasses:@[[MBProgressHUD class]]]; +#endif + if (appearance.progressColor == nil) { + ((MBBarProgressView *)indicator).progressColor = color; + } + if (appearance.lineColor == nil) { + ((MBBarProgressView *)indicator).lineColor = color; + } + } else { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV + if ([indicator respondsToSelector:@selector(setTintColor:)]) { + [indicator setTintColor:color]; + } +#endif + } +} + +- (void)updateBezelMotionEffects { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 || TARGET_OS_TV + MBBackgroundView *bezelView = self.bezelView; + if (![bezelView respondsToSelector:@selector(addMotionEffect:)]) return; + + if (self.defaultMotionEffectsEnabled) { + CGFloat effectOffset = 10.f; + UIInterpolatingMotionEffect *effectX = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis]; + effectX.maximumRelativeValue = @(effectOffset); + effectX.minimumRelativeValue = @(-effectOffset); + + UIInterpolatingMotionEffect *effectY = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis]; + effectY.maximumRelativeValue = @(effectOffset); + effectY.minimumRelativeValue = @(-effectOffset); + + UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init]; + group.motionEffects = @[effectX, effectY]; + + [bezelView addMotionEffect:group]; + } else { + NSArray *effects = [bezelView motionEffects]; + for (UIMotionEffect *effect in effects) { + [bezelView removeMotionEffect:effect]; + } + } +#endif +} + +#pragma mark - Layout + +- (void)updateConstraints { + UIView *bezel = self.bezelView; + UIView *topSpacer = self.topSpacer; + UIView *bottomSpacer = self.bottomSpacer; + CGFloat margin = self.margin; + NSMutableArray *bezelConstraints = [NSMutableArray array]; + NSDictionary *metrics = @{@"margin": @(margin)}; + + NSMutableArray *subviews = [NSMutableArray arrayWithObjects:self.topSpacer, self.label, self.detailsLabel, self.button, self.bottomSpacer, nil]; + if (self.indicator) [subviews insertObject:self.indicator atIndex:1]; + + // Remove existing constraints + [self removeConstraints:self.constraints]; + [topSpacer removeConstraints:topSpacer.constraints]; + [bottomSpacer removeConstraints:bottomSpacer.constraints]; + if (self.bezelConstraints) { + [bezel removeConstraints:self.bezelConstraints]; + self.bezelConstraints = nil; + } + + // Center bezel in container (self), applying the offset if set + CGPoint offset = self.offset; + NSMutableArray *centeringConstraints = [NSMutableArray array]; + [centeringConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterX multiplier:1.f constant:offset.x]]; + [centeringConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeCenterY multiplier:1.f constant:offset.y]]; + [self applyPriority:998.f toConstraints:centeringConstraints]; + [self addConstraints:centeringConstraints]; + + // Ensure minimum side margin is kept + NSMutableArray *sideConstraints = [NSMutableArray array]; + [sideConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=margin)-[bezel]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(bezel)]]; + [sideConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=margin)-[bezel]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(bezel)]]; + [self applyPriority:999.f toConstraints:sideConstraints]; + [self addConstraints:sideConstraints]; + + // Minimum bezel size, if set + CGSize minimumSize = self.minSize; + if (!CGSizeEqualToSize(minimumSize, CGSizeZero)) { + NSMutableArray *minSizeConstraints = [NSMutableArray array]; + [minSizeConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:minimumSize.width]]; + [minSizeConstraints addObject:[NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:minimumSize.height]]; + [self applyPriority:997.f toConstraints:minSizeConstraints]; + [bezelConstraints addObjectsFromArray:minSizeConstraints]; + } + + // Square aspect ratio, if set + if (self.square) { + NSLayoutConstraint *square = [NSLayoutConstraint constraintWithItem:bezel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeWidth multiplier:1.f constant:0]; + square.priority = 997.f; + [bezelConstraints addObject:square]; + } + + // Top and bottom spacing + [topSpacer addConstraint:[NSLayoutConstraint constraintWithItem:topSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:margin]]; + [bottomSpacer addConstraint:[NSLayoutConstraint constraintWithItem:bottomSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:margin]]; + // Top and bottom spaces should be equal + [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:topSpacer attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:bottomSpacer attribute:NSLayoutAttributeHeight multiplier:1.f constant:0.f]]; + + // Layout subviews in bezel + NSMutableArray *paddingConstraints = [NSMutableArray new]; + [subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { + // Center in bezel + [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeCenterX multiplier:1.f constant:0.f]]; + // Ensure the minimum edge margin is kept + [bezelConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(>=margin)-[view]-(>=margin)-|" options:0 metrics:metrics views:NSDictionaryOfVariableBindings(view)]]; + // Element spacing + if (idx == 0) { + // First, ensure spacing to bezel edge + [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeTop multiplier:1.f constant:0.f]]; + } else if (idx == subviews.count - 1) { + // Last, ensure spacing to bezel edge + [bezelConstraints addObject:[NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:bezel attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]]; + } + if (idx > 0) { + // Has previous + NSLayoutConstraint *padding = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:subviews[idx - 1] attribute:NSLayoutAttributeBottom multiplier:1.f constant:0.f]; + [bezelConstraints addObject:padding]; + [paddingConstraints addObject:padding]; + } + }]; + + [bezel addConstraints:bezelConstraints]; + self.bezelConstraints = bezelConstraints; + + self.paddingConstraints = [paddingConstraints copy]; + [self updatePaddingConstraints]; + + [super updateConstraints]; +} + +- (void)layoutSubviews { + // There is no need to update constraints if they are going to + // be recreated in [super layoutSubviews] due to needsUpdateConstraints being set. + // This also avoids an issue on iOS 8, where updatePaddingConstraints + // would trigger a zombie object access. + if (!self.needsUpdateConstraints) { + [self updatePaddingConstraints]; + } + [super layoutSubviews]; +} + +- (void)updatePaddingConstraints { + // Set padding dynamically, depending on whether the view is visible or not + __block BOOL hasVisibleAncestors = NO; + [self.paddingConstraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *padding, NSUInteger idx, BOOL *stop) { + UIView *firstView = (UIView *)padding.firstItem; + UIView *secondView = (UIView *)padding.secondItem; + BOOL firstVisible = !firstView.hidden && !CGSizeEqualToSize(firstView.intrinsicContentSize, CGSizeZero); + BOOL secondVisible = !secondView.hidden && !CGSizeEqualToSize(secondView.intrinsicContentSize, CGSizeZero); + // Set if both views are visible or if there's a visible view on top that doesn't have padding + // added relative to the current view yet + padding.constant = (firstVisible && (secondVisible || hasVisibleAncestors)) ? MBDefaultPadding : 0.f; + hasVisibleAncestors |= secondVisible; + }]; +} + +- (void)applyPriority:(UILayoutPriority)priority toConstraints:(NSArray *)constraints { + for (NSLayoutConstraint *constraint in constraints) { + constraint.priority = priority; + } +} + +#pragma mark - Properties + +- (void)setMode:(MBProgressHUDMode)mode { + if (mode != _mode) { + _mode = mode; + [self updateIndicators]; + } +} + +- (void)setCustomView:(UIView *)customView { + if (customView != _customView) { + _customView = customView; + if (self.mode == MBProgressHUDModeCustomView) { + [self updateIndicators]; + } + } +} + +- (void)setOffset:(CGPoint)offset { + if (!CGPointEqualToPoint(offset, _offset)) { + _offset = offset; + [self setNeedsUpdateConstraints]; + } +} + +- (void)setMargin:(CGFloat)margin { + if (margin != _margin) { + _margin = margin; + [self setNeedsUpdateConstraints]; + } +} + +- (void)setMinSize:(CGSize)minSize { + if (!CGSizeEqualToSize(minSize, _minSize)) { + _minSize = minSize; + [self setNeedsUpdateConstraints]; + } +} + +- (void)setSquare:(BOOL)square { + if (square != _square) { + _square = square; + [self setNeedsUpdateConstraints]; + } +} + +- (void)setProgressObjectDisplayLink:(CADisplayLink *)progressObjectDisplayLink { + if (progressObjectDisplayLink != _progressObjectDisplayLink) { + [_progressObjectDisplayLink invalidate]; + + _progressObjectDisplayLink = progressObjectDisplayLink; + + [_progressObjectDisplayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; + } +} + +- (void)setProgressObject:(NSProgress *)progressObject { + if (progressObject != _progressObject) { + _progressObject = progressObject; + [self setNSProgressDisplayLinkEnabled:YES]; + } +} + +- (void)setProgress:(float)progress { + if (progress != _progress) { + _progress = progress; + UIView *indicator = self.indicator; + if ([indicator respondsToSelector:@selector(setProgress:)]) { + [(id)indicator setValue:@(self.progress) forKey:@"progress"]; + } + } +} + +- (void)setContentColor:(UIColor *)contentColor { + if (contentColor != _contentColor && ![contentColor isEqual:_contentColor]) { + _contentColor = contentColor; + [self updateViewsForColor:contentColor]; + } +} + +- (void)setDefaultMotionEffectsEnabled:(BOOL)defaultMotionEffectsEnabled { + if (defaultMotionEffectsEnabled != _defaultMotionEffectsEnabled) { + _defaultMotionEffectsEnabled = defaultMotionEffectsEnabled; + [self updateBezelMotionEffects]; + } +} + +#pragma mark - NSProgress + +- (void)setNSProgressDisplayLinkEnabled:(BOOL)enabled { + // We're using CADisplayLink, because NSProgress can change very quickly and observing it may starve the main thread, + // so we're refreshing the progress only every frame draw + if (enabled && self.progressObject) { + // Only create if not already active. + if (!self.progressObjectDisplayLink) { + self.progressObjectDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateProgressFromProgressObject)]; + } + } else { + self.progressObjectDisplayLink = nil; + } +} + +- (void)updateProgressFromProgressObject { + self.progress = self.progressObject.fractionCompleted; +} + +#pragma mark - Notifications + +- (void)registerForNotifications { +#if !TARGET_OS_TV + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + + [nc addObserver:self selector:@selector(statusBarOrientationDidChange:) + name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; +#endif +} + +- (void)unregisterFromNotifications { +#if !TARGET_OS_TV + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc removeObserver:self name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; +#endif +} + +#if !TARGET_OS_TV +- (void)statusBarOrientationDidChange:(NSNotification *)notification { + UIView *superview = self.superview; + if (!superview) { + return; + } else { + [self updateForCurrentOrientationAnimated:YES]; + } +} +#endif + +- (void)updateForCurrentOrientationAnimated:(BOOL)animated { + // Stay in sync with the superview in any case + if (self.superview) { + self.bounds = self.superview.bounds; + } + + // Not needed on iOS 8+, compile out when the deployment target allows, + // to avoid sharedApplication problems on extension targets +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 + // Only needed pre iOS 8 when added to a window + BOOL iOS8OrLater = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0; + if (iOS8OrLater || ![self.superview isKindOfClass:[UIWindow class]]) return; + + // Make extension friendly. Will not get called on extensions (iOS 8+) due to the above check. + // This just ensures we don't get a warning about extension-unsafe API. + Class UIApplicationClass = NSClassFromString(@"UIApplication"); + if (!UIApplicationClass || ![UIApplicationClass respondsToSelector:@selector(sharedApplication)]) return; + + UIApplication *application = [UIApplication performSelector:@selector(sharedApplication)]; + UIInterfaceOrientation orientation = application.statusBarOrientation; + CGFloat radians = 0; + + if (UIInterfaceOrientationIsLandscape(orientation)) { + radians = orientation == UIInterfaceOrientationLandscapeLeft ? -(CGFloat)M_PI_2 : (CGFloat)M_PI_2; + // Window coordinates differ! + self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width); + } else { + radians = orientation == UIInterfaceOrientationPortraitUpsideDown ? (CGFloat)M_PI : 0.f; + } + + if (animated) { + [UIView animateWithDuration:0.3 animations:^{ + self.transform = CGAffineTransformMakeRotation(radians); + }]; + } else { + self.transform = CGAffineTransformMakeRotation(radians); + } +#endif +} + +@end + + +@implementation MBRoundProgressView + +#pragma mark - Lifecycle + +- (id)init { + return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)]; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + _progress = 0.f; + _annular = NO; + _progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f]; + _backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f]; + } + return self; +} + +#pragma mark - Layout + +- (CGSize)intrinsicContentSize { + return CGSizeMake(37.f, 37.f); +} + +#pragma mark - Properties + +- (void)setProgress:(float)progress { + if (progress != _progress) { + _progress = progress; + [self setNeedsDisplay]; + } +} + +- (void)setProgressTintColor:(UIColor *)progressTintColor { + NSAssert(progressTintColor, @"The color should not be nil."); + if (progressTintColor != _progressTintColor && ![progressTintColor isEqual:_progressTintColor]) { + _progressTintColor = progressTintColor; + [self setNeedsDisplay]; + } +} + +- (void)setBackgroundTintColor:(UIColor *)backgroundTintColor { + NSAssert(backgroundTintColor, @"The color should not be nil."); + if (backgroundTintColor != _backgroundTintColor && ![backgroundTintColor isEqual:_backgroundTintColor]) { + _backgroundTintColor = backgroundTintColor; + [self setNeedsDisplay]; + } +} + +#pragma mark - Drawing + +- (void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; + + if (_annular) { + // Draw background + CGFloat lineWidth = isPreiOS7 ? 5.f : 2.f; + UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; + processBackgroundPath.lineWidth = lineWidth; + processBackgroundPath.lineCapStyle = kCGLineCapButt; + CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); + CGFloat radius = (self.bounds.size.width - lineWidth)/2; + CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees + CGFloat endAngle = (2 * (float)M_PI) + startAngle; + [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; + [_backgroundTintColor set]; + [processBackgroundPath stroke]; + // Draw progress + UIBezierPath *processPath = [UIBezierPath bezierPath]; + processPath.lineCapStyle = isPreiOS7 ? kCGLineCapRound : kCGLineCapSquare; + processPath.lineWidth = lineWidth; + endAngle = (self.progress * 2 * (float)M_PI) + startAngle; + [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; + [_progressTintColor set]; + [processPath stroke]; + } else { + // Draw background + CGFloat lineWidth = 2.f; + CGRect allRect = self.bounds; + CGRect circleRect = CGRectInset(allRect, lineWidth/2.f, lineWidth/2.f); + CGPoint center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); + [_progressTintColor setStroke]; + [_backgroundTintColor setFill]; + CGContextSetLineWidth(context, lineWidth); + if (isPreiOS7) { + CGContextFillEllipseInRect(context, circleRect); + } + CGContextStrokeEllipseInRect(context, circleRect); + // 90 degrees + CGFloat startAngle = - ((float)M_PI / 2.f); + // Draw progress + if (isPreiOS7) { + CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - lineWidth; + CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; + [_progressTintColor setFill]; + CGContextMoveToPoint(context, center.x, center.y); + CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); + CGContextClosePath(context); + CGContextFillPath(context); + } else { + UIBezierPath *processPath = [UIBezierPath bezierPath]; + processPath.lineCapStyle = kCGLineCapButt; + processPath.lineWidth = lineWidth * 2.f; + CGFloat radius = (CGRectGetWidth(self.bounds) / 2.f) - (processPath.lineWidth / 2.f); + CGFloat endAngle = (self.progress * 2.f * (float)M_PI) + startAngle; + [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; + // Ensure that we don't get color overlaping when _progressTintColor alpha < 1.f. + CGContextSetBlendMode(context, kCGBlendModeCopy); + [_progressTintColor set]; + [processPath stroke]; + } + } +} + +@end + + +@implementation MBBarProgressView + +#pragma mark - Lifecycle + +- (id)init { + return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)]; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + _progress = 0.f; + _lineColor = [UIColor whiteColor]; + _progressColor = [UIColor whiteColor]; + _progressRemainingColor = [UIColor clearColor]; + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + } + return self; +} + +#pragma mark - Layout + +- (CGSize)intrinsicContentSize { + BOOL isPreiOS7 = kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0; + return CGSizeMake(120.f, isPreiOS7 ? 20.f : 10.f); +} + +#pragma mark - Properties + +- (void)setProgress:(float)progress { + if (progress != _progress) { + _progress = progress; + [self setNeedsDisplay]; + } +} + +- (void)setProgressColor:(UIColor *)progressColor { + NSAssert(progressColor, @"The color should not be nil."); + if (progressColor != _progressColor && ![progressColor isEqual:_progressColor]) { + _progressColor = progressColor; + [self setNeedsDisplay]; + } +} + +- (void)setProgressRemainingColor:(UIColor *)progressRemainingColor { + NSAssert(progressRemainingColor, @"The color should not be nil."); + if (progressRemainingColor != _progressRemainingColor && ![progressRemainingColor isEqual:_progressRemainingColor]) { + _progressRemainingColor = progressRemainingColor; + [self setNeedsDisplay]; + } +} + +#pragma mark - Drawing + +- (void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetLineWidth(context, 2); + CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]); + CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]); + + // Draw background + CGFloat radius = (rect.size.height / 2) - 2; + CGContextMoveToPoint(context, 2, rect.size.height/2); + CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2); + CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); + CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); + CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2); + CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); + CGContextFillPath(context); + + // Draw border + CGContextMoveToPoint(context, 2, rect.size.height/2); + CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2); + CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); + CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); + CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2); + CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); + CGContextStrokePath(context); + + CGContextSetFillColorWithColor(context, [_progressColor CGColor]); + radius = radius - 2; + CGFloat amount = self.progress * rect.size.width; + + // Progress in the middle area + if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) { + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); + CGContextAddLineToPoint(context, amount, 4); + CGContextAddLineToPoint(context, amount, radius + 4); + + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); + CGContextAddLineToPoint(context, amount, rect.size.height - 4); + CGContextAddLineToPoint(context, amount, radius + 4); + + CGContextFillPath(context); + } + + // Progress in the right arc + else if (amount > radius + 4) { + CGFloat x = amount - (rect.size.width - radius - 4); + + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4); + CGFloat angle = -acos(x/radius); + if (isnan(angle)) angle = 0; + CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0); + CGContextAddLineToPoint(context, amount, rect.size.height/2); + + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4); + angle = acos(x/radius); + if (isnan(angle)) angle = 0; + CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1); + CGContextAddLineToPoint(context, amount, rect.size.height/2); + + CGContextFillPath(context); + } + + // Progress is in the left arc + else if (amount < radius + 4 && amount > 0) { + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); + CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); + + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); + CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); + + CGContextFillPath(context); + } +} + +@end + + +@interface MBBackgroundView () + +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV +@property UIVisualEffectView *effectView; +#endif +#if !TARGET_OS_TV +@property UIToolbar *toolbar; +#endif + +@end + + +@implementation MBBackgroundView + +#pragma mark - Lifecycle + +- (instancetype)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { + _style = MBProgressHUDBackgroundStyleBlur; + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { + _color = [UIColor colorWithWhite:0.8f alpha:0.6f]; + } else { + _color = [UIColor colorWithWhite:0.95f alpha:0.6f]; + } + } else { + _style = MBProgressHUDBackgroundStyleSolidColor; + _color = [[UIColor blackColor] colorWithAlphaComponent:0.8]; + } + + self.clipsToBounds = YES; + + [self updateForBackgroundStyle]; + } + return self; +} + +#pragma mark - Layout + +- (CGSize)intrinsicContentSize { + // Smallest size possible. Content pushes against this. + return CGSizeZero; +} + +#pragma mark - Appearance + +- (void)setStyle:(MBProgressHUDBackgroundStyle)style { + if (style == MBProgressHUDBackgroundStyleBlur && kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iOS_7_0) { + style = MBProgressHUDBackgroundStyleSolidColor; + } + if (_style != style) { + _style = style; + [self updateForBackgroundStyle]; + } +} + +- (void)setColor:(UIColor *)color { + NSAssert(color, @"The color should not be nil."); + if (color != _color && ![color isEqual:_color]) { + _color = color; + [self updateViewsForColor:color]; + } +} + +/////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - Views + +- (void)updateForBackgroundStyle { + MBProgressHUDBackgroundStyle style = self.style; + if (style == MBProgressHUDBackgroundStyleBlur) { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; + UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + [self addSubview:effectView]; + effectView.frame = self.bounds; + effectView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + self.backgroundColor = self.color; + self.layer.allowsGroupOpacity = NO; + self.effectView = effectView; + } else { +#endif +#if !TARGET_OS_TV + UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectInset(self.bounds, -100.f, -100.f)]; + toolbar.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + toolbar.barTintColor = self.color; + toolbar.translucent = YES; + [self addSubview:toolbar]; + self.toolbar = toolbar; +#endif +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV + } +#endif + } else { +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { + [self.effectView removeFromSuperview]; + self.effectView = nil; + } else { +#endif +#if !TARGET_OS_TV + [self.toolbar removeFromSuperview]; + self.toolbar = nil; +#endif +#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 || TARGET_OS_TV + } +#endif + self.backgroundColor = self.color; + } +} + +- (void)updateViewsForColor:(UIColor *)color { + if (self.style == MBProgressHUDBackgroundStyleBlur) { + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0) { + self.backgroundColor = self.color; + } else { +#if !TARGET_OS_TV + self.toolbar.barTintColor = color; +#endif + } + } else { + self.backgroundColor = self.color; + } +} + +@end + + +@implementation MBProgressHUD (Deprecated) + +#pragma mark - Class + ++ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated { + NSArray *huds = [MBProgressHUD allHUDsForView:view]; + for (MBProgressHUD *hud in huds) { + hud.removeFromSuperViewOnHide = YES; + [hud hideAnimated:animated]; + } + return [huds count]; +} + ++ (NSArray *)allHUDsForView:(UIView *)view { + NSMutableArray *huds = [NSMutableArray array]; + NSArray *subviews = view.subviews; + for (UIView *aView in subviews) { + if ([aView isKindOfClass:self]) { + [huds addObject:aView]; + } + } + return [NSArray arrayWithArray:huds]; +} + +#pragma mark - Lifecycle + +- (id)initWithWindow:(UIWindow *)window { + return [self initWithView:window]; +} + +#pragma mark - Show & hide + +- (void)show:(BOOL)animated { + [self showAnimated:animated]; +} + +- (void)hide:(BOOL)animated { + [self hideAnimated:animated]; +} + +- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay { + [self hideAnimated:animated afterDelay:delay]; +} + +#pragma mark - Threading + +- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated { + [self showAnimated:animated whileExecutingBlock:^{ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + // Start executing the requested task + [target performSelector:method withObject:object]; +#pragma clang diagnostic pop + }]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block { + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion { + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue { + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue completionBlock:(nullable MBProgressHUDCompletionBlock)completion { + self.taskInProgress = YES; + self.completionBlock = completion; + dispatch_async(queue, ^(void) { + block(); + dispatch_async(dispatch_get_main_queue(), ^(void) { + [self cleanUp]; + }); + }); + [self showAnimated:animated]; +} + +- (void)cleanUp { + self.taskInProgress = NO; + [self hideAnimated:self.useAnimation]; +} + +#pragma mark - Labels + +- (NSString *)labelText { + return self.label.text; +} + +- (void)setLabelText:(NSString *)labelText { + MBMainThreadAssert(); + self.label.text = labelText; +} + +- (UIFont *)labelFont { + return self.label.font; +} + +- (void)setLabelFont:(UIFont *)labelFont { + MBMainThreadAssert(); + self.label.font = labelFont; +} + +- (UIColor *)labelColor { + return self.label.textColor; +} + +- (void)setLabelColor:(UIColor *)labelColor { + MBMainThreadAssert(); + self.label.textColor = labelColor; +} + +- (NSString *)detailsLabelText { + return self.detailsLabel.text; +} + +- (void)setDetailsLabelText:(NSString *)detailsLabelText { + MBMainThreadAssert(); + self.detailsLabel.text = detailsLabelText; +} + +- (UIFont *)detailsLabelFont { + return self.detailsLabel.font; +} + +- (void)setDetailsLabelFont:(UIFont *)detailsLabelFont { + MBMainThreadAssert(); + self.detailsLabel.font = detailsLabelFont; +} + +- (UIColor *)detailsLabelColor { + return self.detailsLabel.textColor; +} + +- (void)setDetailsLabelColor:(UIColor *)detailsLabelColor { + MBMainThreadAssert(); + self.detailsLabel.textColor = detailsLabelColor; +} + +- (CGFloat)opacity { + return _opacity; +} + +- (void)setOpacity:(CGFloat)opacity { + MBMainThreadAssert(); + _opacity = opacity; +} + +- (UIColor *)color { + return self.bezelView.color; +} + +- (void)setColor:(UIColor *)color { + MBMainThreadAssert(); + self.bezelView.color = color; +} + +- (CGFloat)yOffset { + return self.offset.y; +} + +- (void)setYOffset:(CGFloat)yOffset { + MBMainThreadAssert(); + self.offset = CGPointMake(self.offset.x, yOffset); +} + +- (CGFloat)xOffset { + return self.offset.x; +} + +- (void)setXOffset:(CGFloat)xOffset { + MBMainThreadAssert(); + self.offset = CGPointMake(xOffset, self.offset.y); +} + +- (CGFloat)cornerRadius { + return self.bezelView.layer.cornerRadius; +} + +- (void)setCornerRadius:(CGFloat)cornerRadius { + MBMainThreadAssert(); + self.bezelView.layer.cornerRadius = cornerRadius; +} + +- (BOOL)dimBackground { + MBBackgroundView *backgroundView = self.backgroundView; + UIColor *dimmedColor = [UIColor colorWithWhite:0.f alpha:.2f]; + return backgroundView.style == MBProgressHUDBackgroundStyleSolidColor && [backgroundView.color isEqual:dimmedColor]; +} + +- (void)setDimBackground:(BOOL)dimBackground { + MBMainThreadAssert(); + self.backgroundView.style = MBProgressHUDBackgroundStyleSolidColor; + self.backgroundView.color = dimBackground ? [UIColor colorWithWhite:0.f alpha:.2f] : [UIColor clearColor]; +} + +- (CGSize)size { + return self.bezelView.frame.size; +} + +- (UIColor *)activityIndicatorColor { + return _activityIndicatorColor; +} + +- (void)setActivityIndicatorColor:(UIColor *)activityIndicatorColor { + if (activityIndicatorColor != _activityIndicatorColor) { + _activityIndicatorColor = activityIndicatorColor; + UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)self.indicator; + if ([indicator isKindOfClass:[UIActivityIndicatorView class]]) { + [indicator setColor:activityIndicatorColor]; + } + } +} + +@end + +@implementation MBProgressHUDRoundedButton + +#pragma mark - Lifecycle + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + CALayer *layer = self.layer; + layer.borderWidth = 1.f; + } + return self; +} + +#pragma mark - Layout + +- (void)layoutSubviews { + [super layoutSubviews]; + // Fully rounded corners + CGFloat height = CGRectGetHeight(self.bounds); + self.layer.cornerRadius = ceil(height / 2.f); +} + +- (CGSize)intrinsicContentSize { + // Only show if we have associated control events + if (self.allControlEvents == 0) return CGSizeZero; + CGSize size = [super intrinsicContentSize]; + // Add some side padding + size.width += 20.f; + return size; +} + +#pragma mark - Color + +- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { + [super setTitleColor:color forState:state]; + // Update related colors + [self setHighlighted:self.highlighted]; + self.layer.borderColor = color.CGColor; +} + +- (void)setHighlighted:(BOOL)highlighted { + [super setHighlighted:highlighted]; + UIColor *baseColor = [self titleColorForState:UIControlStateSelected]; + self.backgroundColor = highlighted ? [baseColor colorWithAlphaComponent:0.1f] : [UIColor clearColor]; +} + +@end diff --git a/LifeLog/Pods/MBProgressHUD/README.mdown b/LifeLog/Pods/MBProgressHUD/README.mdown new file mode 100644 index 0000000..1c8d105 --- /dev/null +++ b/LifeLog/Pods/MBProgressHUD/README.mdown @@ -0,0 +1,126 @@ +# MBProgressHUD + +[![Build Status](https://travis-ci.org/matej/MBProgressHUD.svg?branch=master)](https://travis-ci.org/matej/MBProgressHUD) [![codecov.io](https://codecov.io/github/matej/MBProgressHUD/coverage.svg?branch=master)](https://codecov.io/github/matej/MBProgressHUD?branch=master) + [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) [![CocoaPods compatible](https://img.shields.io/cocoapods/v/MBProgressHUD.svg?style=flat)](https://cocoapods.org/pods/MBProgressHUD) [![License: MIT](https://img.shields.io/cocoapods/l/MBProgressHUD.svg?style=flat)](http://opensource.org/licenses/MIT) + +`MBProgressHUD` is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private `UIKit` `UIProgressHUD` with some additional features. + +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/1-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/1.png) +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/2-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/2.png) +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/3-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/3.png) +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/4-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/4.png) +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/5-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/5.png) +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/6-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/6.png) +[![](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/7-thumb.png)](http://dl.dropbox.com/u/378729/MBProgressHUD/v1/7.png) + +**NOTE:** The class has recently undegone a major rewrite. The old version is available in the [legacy](https://github.com/jdg/MBProgressHUD/tree/legacy) branch, should you need it. + +## Requirements + +`MBProgressHUD` works on iOS 6+ and requires ARC to build. It depends on the following Apple frameworks, which should already be included with most Xcode templates: + +* Foundation.framework +* UIKit.framework +* CoreGraphics.framework + +You will need the latest developer tools in order to build `MBProgressHUD`. Old Xcode versions might work, but compatibility will not be explicitly maintained. + +## Adding MBProgressHUD to your project + +### CocoaPods + +[CocoaPods](http://cocoapods.org) is the recommended way to add MBProgressHUD to your project. + +1. Add a pod entry for MBProgressHUD to your Podfile `pod 'MBProgressHUD', '~> 1.0.0'` +2. Install the pod(s) by running `pod install`. +3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. + +### Carthage + +1. Add MBProgressHUD to your Cartfile. e.g., `github "jdg/MBProgressHUD" ~> 1.0.0` +2. Run `carthage update` +3. Follow the rest of the [standard Carthage installation instructions](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to add MBProgressHUD to your project. + +### Source files + +Alternatively you can directly add the `MBProgressHUD.h` and `MBProgressHUD.m` source files to your project. + +1. Download the [latest code version](https://github.com/matej/MBProgressHUD/archive/master.zip) or add the repository as a git submodule to your git-tracked project. +2. Open your project in Xcode, then drag and drop `MBProgressHUD.h` and `MBProgressHUD.m` onto your project (use the "Product Navigator view"). Make sure to select Copy items when asked if you extracted the code archive outside of your project. +3. Include MBProgressHUD wherever you need it with `#import "MBProgressHUD.h"`. + +### Static library + +You can also add MBProgressHUD as a static library to your project or workspace. + +1. Download the [latest code version](https://github.com/matej/MBProgressHUD/downloads) or add the repository as a git submodule to your git-tracked project. +2. Open your project in Xcode, then drag and drop `MBProgressHUD.xcodeproj` onto your project or workspace (use the "Product Navigator view"). +3. Select your target and go to the Build phases tab. In the Link Binary With Libraries section select the add button. On the sheet find and add `libMBProgressHUD.a`. You might also need to add `MBProgressHUD` to the Target Dependencies list. +4. Include MBProgressHUD wherever you need it with `#import `. + +## Usage + +The main guideline you need to follow when dealing with MBProgressHUD while running long-running tasks is keeping the main thread work-free, so the UI can be updated promptly. The recommended way of using MBProgressHUD is therefore to set it up on the main thread and then spinning the task, that you want to perform, off onto a new thread. + +```objective-c +[MBProgressHUD showHUDAddedTo:self.view animated:YES]; +dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ + // Do something... + dispatch_async(dispatch_get_main_queue(), ^{ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + }); +}); +``` + +You can add the HUD on any view or window. It is however a good idea to avoid adding the HUD to certain `UIKit` views with complex view hierarchies - like `UITableView` or `UICollectionView`. Those can mutate their subviews in unexpected ways and thereby break HUD display. + +If you need to configure the HUD you can do this by using the MBProgressHUD reference that showHUDAddedTo:animated: returns. + +```objective-c +MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; +hud.mode = MBProgressHUDModeAnnularDeterminate; +hud.labelText = @"Loading"; +[self doSomethingInBackgroundWithProgressCallback:^(float progress) { + hud.progress = progress; +} completionCallback:^{ + [hud hide:YES]; +}]; +``` + +You can also use a `NSProgress` object and MBProgressHUD will update itself when there is progress reported through that object. + +```objective-c +MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; +hud.mode = MBProgressHUDModeAnnularDeterminate; +hud.labelText = @"Loading"; +NSProgress *progress = [self doSomethingInBackgroundCompletion:^{ + [hud hide:YES]; +}]; +hud.progressObject = progress; +``` + +UI updates should always be done on the main thread. Some MBProgressHUD setters are however considered "thread safe" and can be called from background threads. Those also include `setMode:`, `setCustomView:`, `setLabelText:`, `setLabelFont:`, `setDetailsLabelText:`, `setDetailsLabelFont:` and `setProgress:`. + +If you need to run your long-running task in the main thread, you should perform it with a slight delay, so UIKit will have enough time to update the UI (i.e., draw the HUD) before you block the main thread with your task. + +```objective-c +[MBProgressHUD showHUDAddedTo:self.view animated:YES]; +dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC); +dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ + // Do something... + [MBProgressHUD hideHUDForView:self.view animated:YES]; +}); +``` + +You should be aware that any HUD updates issued inside the above block won't be displayed until the block completes. + +For more examples, including how to use MBProgressHUD with asynchronous operations such as NSURLConnection, take a look at the bundled demo project. Extensive API documentation is provided in the header file (MBProgressHUD.h). + + +## License + +This code is distributed under the terms and conditions of the [MIT license](LICENSE). + +## Change-log + +A brief summary of each MBProgressHUD release can be found in the [CHANGELOG](CHANGELOG.mdown). diff --git a/LifeLog/Pods/Manifest.lock b/LifeLog/Pods/Manifest.lock new file mode 100644 index 0000000..d15be4b --- /dev/null +++ b/LifeLog/Pods/Manifest.lock @@ -0,0 +1,15 @@ +PODS: + - CircleProgressBar (0.32) + - MBProgressHUD (1.0.0) + +DEPENDENCIES: + - CircleProgressBar + - MBProgressHUD (~> 1.0.0) + +SPEC CHECKSUMS: + CircleProgressBar: 3920079be5224b62b3d9ed6eeb23ac01c835b681 + MBProgressHUD: 4890f671c94e8a0f3cf959aa731e9de2f036d71a + +PODFILE CHECKSUM: 5eefeeee50f83862f5058b666c40152b158a027f + +COCOAPODS: 1.1.1 diff --git a/LifeLog/Pods/Pods.xcodeproj/project.pbxproj b/LifeLog/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f4987df --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,718 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0968524ED4DE8DF7834055C5B6089D72 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C00BC2034DD6F61EF20C563BA04E4C1 /* MBProgressHUD-dummy.m */; }; + 1215629D558162CE728B27386DA02D1D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6647ACC906E3FCEEFF3813BB32B1FCF6 /* Foundation.framework */; }; + 14A0B914C8A7F8EEE1317349A990C581 /* CircleProgressBar.h in Headers */ = {isa = PBXBuildFile; fileRef = EFA750912F601AEA781316E22E962BDC /* CircleProgressBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1592E7C3059060DAA3A6D976250E7FD9 /* CircleProgressBar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 68F1CC874FC7F656AD0DC9F2B768808F /* CircleProgressBar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 171B76B1870F4F2D54B33EFA1BE6FDA6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC1FD743D031D373EDF29CC526F758E2 /* UIKit.framework */; }; + 28A794912ED1E06B05D96DF5ED0AED19 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D6958406969C746A2264CC8D6BEB6737 /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2FB418A613B03A588C8D3DF12F348D8E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6647ACC906E3FCEEFF3813BB32B1FCF6 /* Foundation.framework */; }; + 752082F0CF2210B595EA2F4452AE572E /* Pods-LifeLog-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B2AF4B58C683DE3E9F46928ED66EE9ED /* Pods-LifeLog-dummy.m */; }; + 7FA1FDC003B51BD9EEDAE2E3D55382E3 /* CircleProgressBar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 68B49BE33D100B749C511DE8B402F376 /* CircleProgressBar-dummy.m */; }; + 80C57AC821F5A19CDEB99A4A4AADDD50 /* Pods-LifeLog-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 85237E86ECAFF9C2A40892965ED10B39 /* Pods-LifeLog-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 897C38C8E3C31950E2E93A4D6937CCC4 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AFA7A8FC16E3D4607F9C877E05CCE23 /* MBProgressHUD.m */; }; + 98DF470CA8F6DD132AFAC1398FCD579C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8EF2301073B01E30612B5B1BD94446 /* CoreGraphics.framework */; }; + A5BF8DBDD8660DBCFE712657F3D82BDA /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFE6F6155EAEE8A3EA3210B0456B2F2 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B25457593E6ED0BA173BCD5D7D90C6E4 /* CircleProgressBar.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD6532F2EC3E15AB82D51D8C4CD9BEA /* CircleProgressBar.m */; }; + C7994DD63644F6D6E74CFC4D3C02CFB0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6647ACC906E3FCEEFF3813BB32B1FCF6 /* Foundation.framework */; }; + DA3FBCF3B21EB18151C3BC2645107E0D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51498E299B7CB17BCC8B54F93C150FAA /* QuartzCore.framework */; }; + FC2A8FC3716377A71E6A9933A7F58329 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51498E299B7CB17BCC8B54F93C150FAA /* QuartzCore.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 5C2B7F68AE6711A09413AE3DE907B597 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = B545B48FA0CEE58E0B8D9309EE4CFF7C; + remoteInfo = CircleProgressBar; + }; + A4FE162E7594594B6CB5495E1863182F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 41FA54D12162DAD51D02FC58A2CD5034; + remoteInfo = MBProgressHUD; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0088B5B87FF85BA864002FEA3165195C /* Pods-LifeLog.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LifeLog.release.xcconfig"; sourceTree = ""; }; + 0D8EF2301073B01E30612B5B1BD94446 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 117A771755EBDDE1E3D6D43086B7D59B /* CircleProgressBar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = CircleProgressBar.modulemap; sourceTree = ""; }; + 17392ABF13FACCC6293EB61F41DCC489 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1B3E020BABE5F69A2D00DB7C2A666CA5 /* Pods_LifeLog.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_LifeLog.framework; path = "Pods-LifeLog.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 2A80818DD4BB1CA6E27C6A443CCC490B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2E244D399D6C50515514D847282D465A /* MBProgressHUD.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.xcconfig; sourceTree = ""; }; + 4841A595CC7AE00CB8F37B50F92715F3 /* Pods-LifeLog.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LifeLog.debug.xcconfig"; sourceTree = ""; }; + 4AFA7A8FC16E3D4607F9C877E05CCE23 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + 51498E299B7CB17BCC8B54F93C150FAA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 61A544FE2DBE5751C0A436550258C21C /* Pods-LifeLog-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LifeLog-frameworks.sh"; sourceTree = ""; }; + 624957DC401374C9DC8C4854CD136348 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + 653F7D68BD37347579C65700C208BC0C /* CircleProgressBar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CircleProgressBar.framework; path = CircleProgressBar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 659282355E20C21035DE8E5CE6048B9B /* Pods-LifeLog-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LifeLog-acknowledgements.markdown"; sourceTree = ""; }; + 6647ACC906E3FCEEFF3813BB32B1FCF6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 68B49BE33D100B749C511DE8B402F376 /* CircleProgressBar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CircleProgressBar-dummy.m"; sourceTree = ""; }; + 68F1CC874FC7F656AD0DC9F2B768808F /* CircleProgressBar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CircleProgressBar-umbrella.h"; sourceTree = ""; }; + 7B73BFCF0788ED8CD9F9D39A571E9C0C /* Pods-LifeLog.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-LifeLog.modulemap"; sourceTree = ""; }; + 7C00BC2034DD6F61EF20C563BA04E4C1 /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + 85237E86ECAFF9C2A40892965ED10B39 /* Pods-LifeLog-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LifeLog-umbrella.h"; sourceTree = ""; }; + 8B01A7DF9CA2A84D08ABFE38972CA63E /* Pods-LifeLog-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LifeLog-acknowledgements.plist"; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9B7A09227A34B8013088EFBDFE1276AB /* Pods-LifeLog-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LifeLog-resources.sh"; sourceTree = ""; }; + A91ED1FAC252BBFA13CC0CB521FA14B0 /* CircleProgressBar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CircleProgressBar-prefix.pch"; sourceTree = ""; }; + AAFE6F6155EAEE8A3EA3210B0456B2F2 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + B2AF4B58C683DE3E9F46928ED66EE9ED /* Pods-LifeLog-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LifeLog-dummy.m"; sourceTree = ""; }; + B99F34C32B35C1C2FF3383BF68277269 /* CircleProgressBar.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CircleProgressBar.xcconfig; sourceTree = ""; }; + BAD6532F2EC3E15AB82D51D8C4CD9BEA /* CircleProgressBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CircleProgressBar.m; path = CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.m; sourceTree = ""; }; + C073295EE18124CA1E5F3CF4CCB867AA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C2E4EDF53E33E7C1D4DE78DC000A92F0 /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = MBProgressHUD.modulemap; sourceTree = ""; }; + D6958406969C746A2264CC8D6BEB6737 /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + EC1FD743D031D373EDF29CC526F758E2 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + EFA750912F601AEA781316E22E962BDC /* CircleProgressBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CircleProgressBar.h; path = CircleProgressBarDemo/CircleProgressBar/CircleProgressBar.h; sourceTree = ""; }; + F8B3B14A6327E7608B20196C8A319EFE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3466D02DAABCB0F72C1822B6D79B901F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2FB418A613B03A588C8D3DF12F348D8E /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 63B1C92D6BF370D768AAD98A0DA90451 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C7994DD63644F6D6E74CFC4D3C02CFB0 /* Foundation.framework in Frameworks */, + FC2A8FC3716377A71E6A9933A7F58329 /* QuartzCore.framework in Frameworks */, + 171B76B1870F4F2D54B33EFA1BE6FDA6 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B57774E30FD88AE26F9037E1360E947B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 98DF470CA8F6DD132AFAC1398FCD579C /* CoreGraphics.framework in Frameworks */, + 1215629D558162CE728B27386DA02D1D /* Foundation.framework in Frameworks */, + DA3FBCF3B21EB18151C3BC2645107E0D /* QuartzCore.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0A9D128C73E805501ABC424983EF6390 /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + F07ED1172062ECC06C2023637CDD8322 /* Pods-LifeLog */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2691F93227E549B2A03FB9E6D0C3C623 /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2691F93227E549B2A03FB9E6D0C3C623 /* iOS */ = { + isa = PBXGroup; + children = ( + 0D8EF2301073B01E30612B5B1BD94446 /* CoreGraphics.framework */, + 6647ACC906E3FCEEFF3813BB32B1FCF6 /* Foundation.framework */, + 51498E299B7CB17BCC8B54F93C150FAA /* QuartzCore.framework */, + EC1FD743D031D373EDF29CC526F758E2 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 66CF8ED62ACE9571E38A73DE29C194B3 /* MBProgressHUD */ = { + isa = PBXGroup; + children = ( + AAFE6F6155EAEE8A3EA3210B0456B2F2 /* MBProgressHUD.h */, + 4AFA7A8FC16E3D4607F9C877E05CCE23 /* MBProgressHUD.m */, + 9D30B70E1FE8F470E7375D7DDAE4937F /* Support Files */, + ); + name = MBProgressHUD; + path = MBProgressHUD; + sourceTree = ""; + }; + 75D0759E72EF5A96234DFB32B1614706 /* CircleProgressBar */ = { + isa = PBXGroup; + children = ( + EFA750912F601AEA781316E22E962BDC /* CircleProgressBar.h */, + BAD6532F2EC3E15AB82D51D8C4CD9BEA /* CircleProgressBar.m */, + EF19F22A4DD93880EE97EF0B09AB6306 /* Support Files */, + ); + name = CircleProgressBar; + path = CircleProgressBar; + sourceTree = ""; + }; + 7D75AB1D21DCDE4F2885D074A293BF9C /* Pods */ = { + isa = PBXGroup; + children = ( + 75D0759E72EF5A96234DFB32B1614706 /* CircleProgressBar */, + 66CF8ED62ACE9571E38A73DE29C194B3 /* MBProgressHUD */, + ); + name = Pods; + sourceTree = ""; + }; + 7DB346D0F39D3F0E887471402A8071AB = { + isa = PBXGroup; + children = ( + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */, + 7D75AB1D21DCDE4F2885D074A293BF9C /* Pods */, + DE9EDFFA07DAABE1C0ED37300F198CA8 /* Products */, + 0A9D128C73E805501ABC424983EF6390 /* Targets Support Files */, + ); + sourceTree = ""; + }; + 9D30B70E1FE8F470E7375D7DDAE4937F /* Support Files */ = { + isa = PBXGroup; + children = ( + 2A80818DD4BB1CA6E27C6A443CCC490B /* Info.plist */, + C2E4EDF53E33E7C1D4DE78DC000A92F0 /* MBProgressHUD.modulemap */, + 2E244D399D6C50515514D847282D465A /* MBProgressHUD.xcconfig */, + 7C00BC2034DD6F61EF20C563BA04E4C1 /* MBProgressHUD-dummy.m */, + 624957DC401374C9DC8C4854CD136348 /* MBProgressHUD-prefix.pch */, + D6958406969C746A2264CC8D6BEB6737 /* MBProgressHUD-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/MBProgressHUD"; + sourceTree = ""; + }; + DE9EDFFA07DAABE1C0ED37300F198CA8 /* Products */ = { + isa = PBXGroup; + children = ( + 653F7D68BD37347579C65700C208BC0C /* CircleProgressBar.framework */, + 17392ABF13FACCC6293EB61F41DCC489 /* MBProgressHUD.framework */, + 1B3E020BABE5F69A2D00DB7C2A666CA5 /* Pods_LifeLog.framework */, + ); + name = Products; + sourceTree = ""; + }; + EF19F22A4DD93880EE97EF0B09AB6306 /* Support Files */ = { + isa = PBXGroup; + children = ( + 117A771755EBDDE1E3D6D43086B7D59B /* CircleProgressBar.modulemap */, + B99F34C32B35C1C2FF3383BF68277269 /* CircleProgressBar.xcconfig */, + 68B49BE33D100B749C511DE8B402F376 /* CircleProgressBar-dummy.m */, + A91ED1FAC252BBFA13CC0CB521FA14B0 /* CircleProgressBar-prefix.pch */, + 68F1CC874FC7F656AD0DC9F2B768808F /* CircleProgressBar-umbrella.h */, + F8B3B14A6327E7608B20196C8A319EFE /* Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/CircleProgressBar"; + sourceTree = ""; + }; + F07ED1172062ECC06C2023637CDD8322 /* Pods-LifeLog */ = { + isa = PBXGroup; + children = ( + C073295EE18124CA1E5F3CF4CCB867AA /* Info.plist */, + 7B73BFCF0788ED8CD9F9D39A571E9C0C /* Pods-LifeLog.modulemap */, + 659282355E20C21035DE8E5CE6048B9B /* Pods-LifeLog-acknowledgements.markdown */, + 8B01A7DF9CA2A84D08ABFE38972CA63E /* Pods-LifeLog-acknowledgements.plist */, + B2AF4B58C683DE3E9F46928ED66EE9ED /* Pods-LifeLog-dummy.m */, + 61A544FE2DBE5751C0A436550258C21C /* Pods-LifeLog-frameworks.sh */, + 9B7A09227A34B8013088EFBDFE1276AB /* Pods-LifeLog-resources.sh */, + 85237E86ECAFF9C2A40892965ED10B39 /* Pods-LifeLog-umbrella.h */, + 4841A595CC7AE00CB8F37B50F92715F3 /* Pods-LifeLog.debug.xcconfig */, + 0088B5B87FF85BA864002FEA3165195C /* Pods-LifeLog.release.xcconfig */, + ); + name = "Pods-LifeLog"; + path = "Target Support Files/Pods-LifeLog"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 197B7877D5D346F405BDD059EF96DBDC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 28A794912ED1E06B05D96DF5ED0AED19 /* MBProgressHUD-umbrella.h in Headers */, + A5BF8DBDD8660DBCFE712657F3D82BDA /* MBProgressHUD.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 985E9DC6BC691A771B8CBC412AABCBE3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 80C57AC821F5A19CDEB99A4A4AADDD50 /* Pods-LifeLog-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F93375054C6557A65ADC289638BB6620 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1592E7C3059060DAA3A6D976250E7FD9 /* CircleProgressBar-umbrella.h in Headers */, + 14A0B914C8A7F8EEE1317349A990C581 /* CircleProgressBar.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 41FA54D12162DAD51D02FC58A2CD5034 /* MBProgressHUD */ = { + isa = PBXNativeTarget; + buildConfigurationList = CC1874913BA1F82C4953C3C7F551AB22 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */; + buildPhases = ( + FE8E0446C3B3B52779E8DE373E495A61 /* Sources */, + B57774E30FD88AE26F9037E1360E947B /* Frameworks */, + 197B7877D5D346F405BDD059EF96DBDC /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MBProgressHUD; + productName = MBProgressHUD; + productReference = 17392ABF13FACCC6293EB61F41DCC489 /* MBProgressHUD.framework */; + productType = "com.apple.product-type.framework"; + }; + 68F298692E9E827DF25BC903C3EA1575 /* Pods-LifeLog */ = { + isa = PBXNativeTarget; + buildConfigurationList = 02B53D7D95CC5D01CEE5579F06DD63FC /* Build configuration list for PBXNativeTarget "Pods-LifeLog" */; + buildPhases = ( + BE6230F705D403628F790517FC49D947 /* Sources */, + 3466D02DAABCB0F72C1822B6D79B901F /* Frameworks */, + 985E9DC6BC691A771B8CBC412AABCBE3 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 3B990767174CBF825A16442B3578FB94 /* PBXTargetDependency */, + 7A18C9FB0F1177C726BCC29DD5637E4B /* PBXTargetDependency */, + ); + name = "Pods-LifeLog"; + productName = "Pods-LifeLog"; + productReference = 1B3E020BABE5F69A2D00DB7C2A666CA5 /* Pods_LifeLog.framework */; + productType = "com.apple.product-type.framework"; + }; + B545B48FA0CEE58E0B8D9309EE4CFF7C /* CircleProgressBar */ = { + isa = PBXNativeTarget; + buildConfigurationList = 39B15C61CDDF99F09243A57E0E68A644 /* Build configuration list for PBXNativeTarget "CircleProgressBar" */; + buildPhases = ( + 3A84ADD9BC0D1E8E822745AD46AE41C1 /* Sources */, + 63B1C92D6BF370D768AAD98A0DA90451 /* Frameworks */, + F93375054C6557A65ADC289638BB6620 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CircleProgressBar; + productName = CircleProgressBar; + productReference = 653F7D68BD37347579C65700C208BC0C /* CircleProgressBar.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0730; + LastUpgradeCheck = 0700; + }; + buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7DB346D0F39D3F0E887471402A8071AB; + productRefGroup = DE9EDFFA07DAABE1C0ED37300F198CA8 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + B545B48FA0CEE58E0B8D9309EE4CFF7C /* CircleProgressBar */, + 41FA54D12162DAD51D02FC58A2CD5034 /* MBProgressHUD */, + 68F298692E9E827DF25BC903C3EA1575 /* Pods-LifeLog */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 3A84ADD9BC0D1E8E822745AD46AE41C1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7FA1FDC003B51BD9EEDAE2E3D55382E3 /* CircleProgressBar-dummy.m in Sources */, + B25457593E6ED0BA173BCD5D7D90C6E4 /* CircleProgressBar.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE6230F705D403628F790517FC49D947 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 752082F0CF2210B595EA2F4452AE572E /* Pods-LifeLog-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FE8E0446C3B3B52779E8DE373E495A61 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0968524ED4DE8DF7834055C5B6089D72 /* MBProgressHUD-dummy.m in Sources */, + 897C38C8E3C31950E2E93A4D6937CCC4 /* MBProgressHUD.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 3B990767174CBF825A16442B3578FB94 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CircleProgressBar; + target = B545B48FA0CEE58E0B8D9309EE4CFF7C /* CircleProgressBar */; + targetProxy = 5C2B7F68AE6711A09413AE3DE907B597 /* PBXContainerItemProxy */; + }; + 7A18C9FB0F1177C726BCC29DD5637E4B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MBProgressHUD; + target = 41FA54D12162DAD51D02FC58A2CD5034 /* MBProgressHUD */; + targetProxy = A4FE162E7594594B6CB5495E1863182F /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 28AD6A1DF145DEC6C11FEFD5EF87C7B5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0088B5B87FF85BA864002FEA3165195C /* Pods-LifeLog.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-LifeLog/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LifeLog/Pods-LifeLog.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_LifeLog; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 50121E177C81B70833CECCD8A15BEF20 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4841A595CC7AE00CB8F37B50F92715F3 /* Pods-LifeLog.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-LifeLog/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-LifeLog/Pods-LifeLog.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_LifeLog; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 59B042A655B7C20CBAB90E385BF4E4C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 679B973EA7AD405C207DDD569F65D749 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2E244D399D6C50515514D847282D465A /* MBProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7B1230B2BA14E13BD851B1184FB2BC7E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2E244D399D6C50515514D847282D465A /* MBProgressHUD.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD/MBProgressHUD.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 972CA8236715A57CCBC973245CE6140B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B99F34C32B35C1C2FF3383BF68277269 /* CircleProgressBar.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/CircleProgressBar/CircleProgressBar-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/CircleProgressBar/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/CircleProgressBar/CircleProgressBar.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = CircleProgressBar; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + B7324857C38B065FEB1EEE3105C2367A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D1629D5A0A8B6FF6407DE1D3EA34754A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B99F34C32B35C1C2FF3383BF68277269 /* CircleProgressBar.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/CircleProgressBar/CircleProgressBar-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/CircleProgressBar/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/CircleProgressBar/CircleProgressBar.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = CircleProgressBar; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 02B53D7D95CC5D01CEE5579F06DD63FC /* Build configuration list for PBXNativeTarget "Pods-LifeLog" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 50121E177C81B70833CECCD8A15BEF20 /* Debug */, + 28AD6A1DF145DEC6C11FEFD5EF87C7B5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 59B042A655B7C20CBAB90E385BF4E4C7 /* Debug */, + B7324857C38B065FEB1EEE3105C2367A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 39B15C61CDDF99F09243A57E0E68A644 /* Build configuration list for PBXNativeTarget "CircleProgressBar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D1629D5A0A8B6FF6407DE1D3EA34754A /* Debug */, + 972CA8236715A57CCBC973245CE6140B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CC1874913BA1F82C4953C3C7F551AB22 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 679B973EA7AD405C207DDD569F65D749 /* Debug */, + 7B1230B2BA14E13BD851B1184FB2BC7E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; +} diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/CircleProgressBar.xcscheme b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/CircleProgressBar.xcscheme new file mode 100644 index 0000000..3db5805 --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/CircleProgressBar.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/MBProgressHUD.xcscheme b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/MBProgressHUD.xcscheme new file mode 100644 index 0000000..c7a4f62 --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/MBProgressHUD.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/Pods-LifeLog.xcscheme b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/Pods-LifeLog.xcscheme new file mode 100644 index 0000000..500c350 --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/Pods-LifeLog.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/xcschememanagement.plist b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..e9d72ef --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PRDCV171MAC.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,42 @@ + + + + + SchemeUserState + + CircleProgressBar.xcscheme + + orderHint + 1 + + MBProgressHUD.xcscheme + + orderHint + 2 + + Pods-LifeLog.xcscheme + + orderHint + 3 + + + SuppressBuildableAutocreation + + 41FA54D12162DAD51D02FC58A2CD5034 + + primary + + + 68F298692E9E827DF25BC903C3EA1575 + + primary + + + B545B48FA0CEE58E0B8D9309EE4CFF7C + + primary + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/CircleProgressBar.xcscheme b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/CircleProgressBar.xcscheme new file mode 100644 index 0000000..db036db --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/CircleProgressBar.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/MBProgressHUD.xcscheme b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/MBProgressHUD.xcscheme new file mode 100644 index 0000000..8727906 --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/MBProgressHUD.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/Pods-LifeLog.xcscheme b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/Pods-LifeLog.xcscheme new file mode 100644 index 0000000..b5a1b40 --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/Pods-LifeLog.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/xcschememanagement.plist b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..7f7b431 --- /dev/null +++ b/LifeLog/Pods/Pods.xcodeproj/xcuserdata/PhongNV.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,42 @@ + + + + + SchemeUserState + + CircleProgressBar.xcscheme + + isShown + + + MBProgressHUD.xcscheme + + isShown + + + Pods-LifeLog.xcscheme + + isShown + + + + SuppressBuildableAutocreation + + 41FA54D12162DAD51D02FC58A2CD5034 + + primary + + + 68F298692E9E827DF25BC903C3EA1575 + + primary + + + B545B48FA0CEE58E0B8D9309EE4CFF7C + + primary + + + + + diff --git a/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-dummy.m b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-dummy.m new file mode 100644 index 0000000..b107ba5 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_CircleProgressBar : NSObject +@end +@implementation PodsDummy_CircleProgressBar +@end diff --git a/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-prefix.pch b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-umbrella.h b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-umbrella.h new file mode 100644 index 0000000..dc96e1f --- /dev/null +++ b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar-umbrella.h @@ -0,0 +1,9 @@ +#ifdef __OBJC__ +#import +#endif + +#import "CircleProgressBar.h" + +FOUNDATION_EXPORT double CircleProgressBarVersionNumber; +FOUNDATION_EXPORT const unsigned char CircleProgressBarVersionString[]; + diff --git a/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar.modulemap b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar.modulemap new file mode 100644 index 0000000..ece2094 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar.modulemap @@ -0,0 +1,6 @@ +framework module CircleProgressBar { + umbrella header "CircleProgressBar-umbrella.h" + + export * + module * { export * } +} diff --git a/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar.xcconfig b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar.xcconfig new file mode 100644 index 0000000..294d164 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/CircleProgressBar/CircleProgressBar.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/CircleProgressBar +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "QuartzCore" -framework "UIKit" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/LifeLog/Pods/Target Support Files/CircleProgressBar/Info.plist b/LifeLog/Pods/Target Support Files/CircleProgressBar/Info.plist new file mode 100644 index 0000000..8a57f06 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/CircleProgressBar/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.32.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/LifeLog/Pods/Target Support Files/MBProgressHUD/Info.plist b/LifeLog/Pods/Target Support Files/MBProgressHUD/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/MBProgressHUD/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-dummy.m b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-dummy.m new file mode 100644 index 0000000..67a74df --- /dev/null +++ b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MBProgressHUD : NSObject +@end +@implementation PodsDummy_MBProgressHUD +@end diff --git a/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch new file mode 100644 index 0000000..aa992a4 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-prefix.pch @@ -0,0 +1,4 @@ +#ifdef __OBJC__ +#import +#endif + diff --git a/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-umbrella.h b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-umbrella.h new file mode 100644 index 0000000..27916c7 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD-umbrella.h @@ -0,0 +1,9 @@ +#ifdef __OBJC__ +#import +#endif + +#import "MBProgressHUD.h" + +FOUNDATION_EXPORT double MBProgressHUDVersionNumber; +FOUNDATION_EXPORT const unsigned char MBProgressHUDVersionString[]; + diff --git a/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.modulemap b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.modulemap new file mode 100644 index 0000000..dbb3f94 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.modulemap @@ -0,0 +1,6 @@ +framework module MBProgressHUD { + umbrella header "MBProgressHUD-umbrella.h" + + export * + module * { export * } +} diff --git a/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig new file mode 100644 index 0000000..eba633e --- /dev/null +++ b/LifeLog/Pods/Target Support Files/MBProgressHUD/MBProgressHUD.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Info.plist b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-acknowledgements.markdown b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-acknowledgements.markdown new file mode 100644 index 0000000..31e7af4 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-acknowledgements.markdown @@ -0,0 +1,51 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## CircleProgressBar + +The MIT License (MIT) + +Copyright (c) 2015 Cherkashin Andrey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +## MBProgressHUD + +Copyright © 2009-2016 Matej Bukovinski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +Generated by CocoaPods - https://cocoapods.org diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-acknowledgements.plist b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-acknowledgements.plist new file mode 100644 index 0000000..b836d1f --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-acknowledgements.plist @@ -0,0 +1,89 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Cherkashin Andrey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + License + MIT + Title + CircleProgressBar + Type + PSGroupSpecifier + + + FooterText + Copyright © 2009-2016 Matej Bukovinski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + License + MIT + Title + MBProgressHUD + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-dummy.m b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-dummy.m new file mode 100644 index 0000000..78d04b3 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_LifeLog : NSObject +@end +@implementation PodsDummy_Pods_LifeLog +@end diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-frameworks.sh b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-frameworks.sh new file mode 100755 index 0000000..7464845 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-frameworks.sh @@ -0,0 +1,93 @@ +#!/bin/sh +set -e + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # use filter instead of exclude so missing patterns dont' throw errors + echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" + /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current file + archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + stripped="" + for arch in $archs; do + if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/CircleProgressBar/CircleProgressBar.framework" + install_framework "$BUILT_PRODUCTS_DIR/MBProgressHUD/MBProgressHUD.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "$BUILT_PRODUCTS_DIR/CircleProgressBar/CircleProgressBar.framework" + install_framework "$BUILT_PRODUCTS_DIR/MBProgressHUD/MBProgressHUD.framework" +fi diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-resources.sh b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-resources.sh new file mode 100755 index 0000000..25e9d37 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-resources.sh @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +case "${TARGETED_DEVICE_FAMILY}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-umbrella.h b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-umbrella.h new file mode 100644 index 0000000..3b595e0 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog-umbrella.h @@ -0,0 +1,8 @@ +#ifdef __OBJC__ +#import +#endif + + +FOUNDATION_EXPORT double Pods_LifeLogVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_LifeLogVersionString[]; + diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.debug.xcconfig b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.debug.xcconfig new file mode 100644 index 0000000..cbde0b3 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.debug.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/CircleProgressBar" "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/CircleProgressBar/CircleProgressBar.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD/MBProgressHUD.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "CircleProgressBar" -framework "MBProgressHUD" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.modulemap b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.modulemap new file mode 100644 index 0000000..fb9e087 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.modulemap @@ -0,0 +1,6 @@ +framework module Pods_LifeLog { + umbrella header "Pods-LifeLog-umbrella.h" + + export * + module * { export * } +} diff --git a/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.release.xcconfig b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.release.xcconfig new file mode 100644 index 0000000..cbde0b3 --- /dev/null +++ b/LifeLog/Pods/Target Support Files/Pods-LifeLog/Pods-LifeLog.release.xcconfig @@ -0,0 +1,9 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/CircleProgressBar" "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/CircleProgressBar/CircleProgressBar.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD/MBProgressHUD.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "CircleProgressBar" -framework "MBProgressHUD" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT}/Pods