diff --git a/Time/Time.xcodeproj/project.pbxproj b/Time/Time.xcodeproj/project.pbxproj old mode 100644 new mode 100755 index c8743f0..3720e3f --- a/Time/Time.xcodeproj/project.pbxproj +++ b/Time/Time.xcodeproj/project.pbxproj @@ -7,11 +7,14 @@ objects = { /* Begin PBXBuildFile section */ + 151FFE2F1B86B5E2008675B8 /* StopwatchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 151FFE2E1B86B5E2008675B8 /* StopwatchViewController.m */; }; + 1545AAB41B88CDDD00E7B5C6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1545AAB31B88CDDD00E7B5C6 /* QuartzCore.framework */; }; + 159ECBB91B982203002293F1 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 159ECBB81B982203002293F1 /* AVFoundation.framework */; }; + 159ECBBF1B98256D002293F1 /* SpecialEventsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 159ECBBE1B98256D002293F1 /* SpecialEventsViewController.m */; }; + 15F9B1381B92B4A900FDCC82 /* TimerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 15F9B1371B92B4A900FDCC82 /* TimerViewController.m */; }; 8D05375E1B86687C00588318 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D05375D1B86687C00588318 /* main.m */; }; 8D0537611B86687C00588318 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0537601B86687C00588318 /* AppDelegate.m */; }; - 8D0537641B86687C00588318 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0537631B86687C00588318 /* ViewController.m */; }; 8D0537671B86687C00588318 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D0537651B86687C00588318 /* Main.storyboard */; }; - 8D0537691B86687C00588318 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8D0537681B86687C00588318 /* Images.xcassets */; }; 8D05376C1B86687C00588318 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D05376A1B86687C00588318 /* LaunchScreen.xib */; }; 8D0537781B86687C00588318 /* TimeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D0537771B86687C00588318 /* TimeTests.m */; }; /* End PBXBuildFile section */ @@ -27,15 +30,20 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 151FFE2D1B86B5E2008675B8 /* StopwatchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StopwatchViewController.h; sourceTree = ""; }; + 151FFE2E1B86B5E2008675B8 /* StopwatchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StopwatchViewController.m; sourceTree = ""; }; + 1545AAB31B88CDDD00E7B5C6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 159ECBB81B982203002293F1 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 159ECBBD1B98256D002293F1 /* SpecialEventsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpecialEventsViewController.h; sourceTree = ""; }; + 159ECBBE1B98256D002293F1 /* SpecialEventsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpecialEventsViewController.m; sourceTree = ""; }; + 15F9B1361B92B4A900FDCC82 /* TimerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimerViewController.h; sourceTree = ""; }; + 15F9B1371B92B4A900FDCC82 /* TimerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TimerViewController.m; sourceTree = ""; }; 8D0537581B86687B00588318 /* Time.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Time.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8D05375C1B86687B00588318 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 8D05375D1B86687C00588318 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 8D05375F1B86687C00588318 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 8D0537601B86687C00588318 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 8D0537621B86687C00588318 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 8D0537631B86687C00588318 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 8D0537661B86687C00588318 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 8D0537681B86687C00588318 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 8D05376B1B86687C00588318 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 8D0537711B86687C00588318 /* TimeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TimeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 8D0537761B86687C00588318 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -47,6 +55,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 159ECBB91B982203002293F1 /* AVFoundation.framework in Frameworks */, + 1545AAB41B88CDDD00E7B5C6 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -63,6 +73,8 @@ 8D05374F1B86687B00588318 = { isa = PBXGroup; children = ( + 1545AAB31B88CDDD00E7B5C6 /* QuartzCore.framework */, + 159ECBB81B982203002293F1 /* AVFoundation.framework */, 8D05375A1B86687B00588318 /* Time */, 8D0537741B86687C00588318 /* TimeTests */, 8D0537591B86687B00588318 /* Products */, @@ -83,10 +95,13 @@ children = ( 8D05375F1B86687C00588318 /* AppDelegate.h */, 8D0537601B86687C00588318 /* AppDelegate.m */, - 8D0537621B86687C00588318 /* ViewController.h */, - 8D0537631B86687C00588318 /* ViewController.m */, + 151FFE2D1B86B5E2008675B8 /* StopwatchViewController.h */, + 151FFE2E1B86B5E2008675B8 /* StopwatchViewController.m */, + 15F9B1361B92B4A900FDCC82 /* TimerViewController.h */, + 15F9B1371B92B4A900FDCC82 /* TimerViewController.m */, + 159ECBBD1B98256D002293F1 /* SpecialEventsViewController.h */, + 159ECBBE1B98256D002293F1 /* SpecialEventsViewController.m */, 8D0537651B86687C00588318 /* Main.storyboard */, - 8D0537681B86687C00588318 /* Images.xcassets */, 8D05376A1B86687C00588318 /* LaunchScreen.xib */, 8D05375B1B86687B00588318 /* Supporting Files */, ); @@ -163,11 +178,12 @@ 8D0537501B86687B00588318 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0640; + LastUpgradeCheck = 0700; ORGANIZATIONNAME = "Mike Kavouras"; TargetAttributes = { 8D0537571B86687B00588318 = { CreatedOnToolsVersion = 6.4; + DevelopmentTeam = 2AGNSFK7FM; }; 8D0537701B86687C00588318 = { CreatedOnToolsVersion = 6.4; @@ -201,7 +217,6 @@ files = ( 8D0537671B86687C00588318 /* Main.storyboard in Resources */, 8D05376C1B86687C00588318 /* LaunchScreen.xib in Resources */, - 8D0537691B86687C00588318 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -219,7 +234,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8D0537641B86687C00588318 /* ViewController.m in Sources */, + 15F9B1381B92B4A900FDCC82 /* TimerViewController.m in Sources */, + 151FFE2F1B86B5E2008675B8 /* StopwatchViewController.m in Sources */, + 159ECBBF1B98256D002293F1 /* SpecialEventsViewController.m in Sources */, 8D0537611B86687C00588318 /* AppDelegate.m in Sources */, 8D05375E1B86687C00588318 /* main.m in Sources */, ); @@ -284,6 +301,7 @@ COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -299,7 +317,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -337,7 +355,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -349,9 +367,14 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = Time/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.mikekavouras.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; }; name = Debug; }; @@ -359,9 +382,14 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; INFOPLIST_FILE = Time/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.mikekavouras.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; }; name = Release; }; @@ -378,7 +406,9 @@ "$(inherited)", ); INFOPLIST_FILE = TimeTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.mikekavouras.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Time.app/Time"; }; @@ -393,7 +423,9 @@ "$(inherited)", ); INFOPLIST_FILE = TimeTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.4; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.mikekavouras.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Time.app/Time"; }; @@ -418,6 +450,7 @@ 8D05377D1B86687C00588318 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 8D05377E1B86687C00588318 /* Build configuration list for PBXNativeTarget "TimeTests" */ = { isa = XCConfigurationList; @@ -426,6 +459,7 @@ 8D0537801B86687C00588318 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/Time/Time.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Time/Time.xcodeproj/project.xcworkspace/contents.xcworkspacedata old mode 100644 new mode 100755 diff --git a/Time/Time/AppDelegate.h b/Time/Time/AppDelegate.h old mode 100644 new mode 100755 diff --git a/Time/Time/AppDelegate.m b/Time/Time/AppDelegate.m old mode 100644 new mode 100755 index d59e7a8..c9ddc28 --- a/Time/Time/AppDelegate.m +++ b/Time/Time/AppDelegate.m @@ -15,11 +15,23 @@ @interface AppDelegate () @implementation AppDelegate -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + [[UITabBar appearance] setTintColor:[UIColor redColor]]; + + if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){ + [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; + } // Override point for customization after application launch. + return YES; } + +-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { + +} + - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. @@ -42,4 +54,5 @@ - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } + @end diff --git a/Time/Time/Base.lproj/LaunchScreen.xib b/Time/Time/Base.lproj/LaunchScreen.xib old mode 100644 new mode 100755 index f9a54ff..24578b1 --- a/Time/Time/Base.lproj/LaunchScreen.xib +++ b/Time/Time/Base.lproj/LaunchScreen.xib @@ -1,7 +1,7 @@ - + - + diff --git a/Time/Time/Base.lproj/Main.storyboard b/Time/Time/Base.lproj/Main.storyboard old mode 100644 new mode 100755 index f56d2f3..063b63b --- a/Time/Time/Base.lproj/Main.storyboard +++ b/Time/Time/Base.lproj/Main.storyboard @@ -1,25 +1,654 @@ - + - + - - + + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Time/Time/Images.xcassets/AppIcon.appiconset/Contents.json b/Time/Time/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 36d2c80..0000000 --- a/Time/Time/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "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" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Time/Time/Info.plist b/Time/Time/Info.plist old mode 100644 new mode 100755 index 62e151f..40c6215 --- a/Time/Time/Info.plist +++ b/Time/Time/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.mikekavouras.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Time/Time/SpecialEventsViewController.h b/Time/Time/SpecialEventsViewController.h new file mode 100644 index 0000000..f383ca7 --- /dev/null +++ b/Time/Time/SpecialEventsViewController.h @@ -0,0 +1,13 @@ +// +// SpecialEventsViewController.h +// Time +// +// Created by Eric Sze on 9/3/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import + +@interface SpecialEventsViewController : UIViewController + +@end diff --git a/Time/Time/SpecialEventsViewController.m b/Time/Time/SpecialEventsViewController.m new file mode 100644 index 0000000..83e0179 --- /dev/null +++ b/Time/Time/SpecialEventsViewController.m @@ -0,0 +1,211 @@ +// +// SpecialEventsViewController.m +// Time +// +// Created by Eric Sze on 9/3/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import "SpecialEventsViewController.h" + +@interface SpecialEventsViewController () +@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; + +@property (weak, nonatomic) IBOutlet UIView *leftCircle; + +@property (weak, nonatomic) IBOutlet UIDatePicker *pickerView; +@property (weak, nonatomic) IBOutlet UITableView *tableView; + +@property (weak, nonatomic) IBOutlet UILabel *timerLabel; + +@property (nonatomic) NSDateComponents *comps; +@property (nonatomic) NSDate *now; +@property (nonatomic) NSDate *targetDate; +@property (nonatomic) NSTimer *countDownTimer; +@property (nonatomic) NSMutableArray *event; + +@property (nonatomic) NSInteger totalSecondsLeft; +@property (weak, nonatomic) IBOutlet UILabel *dateLabel; + +@end + +@implementation SpecialEventsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.leftCircle.layer.cornerRadius = 34.5; + self.leftCircle.layer.masksToBounds = YES; + + UIImage *backgroundImage = [UIImage imageNamed:@"track"]; + UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:backgroundImage]; + self.scrollView.contentSize = backgroundImage.size; + [self.scrollView addSubview:backgroundImageView]; + + self.timerLabel.text = @""; + [self.dateLabel setHidden:YES]; + +} + +- (IBAction)createButton:(UIButton *)sender { +// + + //Remove the time component from the datePicker. We care only about the date + NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; + NSUInteger preservedComponents = (NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay); + self.pickerView.date = [calendar dateFromComponents:[calendar components:preservedComponents fromDate:self.pickerView.date]]; + //self.dateLabel.text = self.pickerView.date; + //Set up a timer that calls the updateTime method every second to update the label + NSTimer *timer; + timer = [NSTimer scheduledTimerWithTimeInterval:1.0 + target:self + selector:@selector(updateTime) + userInfo:nil + repeats:YES]; +// NSDate *rightNow = [NSDate date]; +// NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; +// [outputFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; +// NSString *newDateString = [outputFormatter stringFromDate:rightNow]; +//// NSLog(@"newDateString %@", newDateString); +//// [outputFormatter release]; +// +// NSDate *dateNow = [outputFormatter dateFromString:newDateString]; +// +// NSDate* currentDate = [NSDate date]; +// NSTimeZone* currentTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; +// NSTimeZone* nowTimeZone = [NSTimeZone systemTimeZone]; +// +// NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:currentDate]; +// NSInteger nowGMTOffset = [nowTimeZone secondsFromGMTForDate:currentDate]; +// +// NSTimeInterval interval = nowGMTOffset - currentGMTOffset; +// NSDate* nowDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:currentDate]; +// +// +// NSCalendar *calendar = [NSCalendar currentCalendar]; +// self.now = [[NSDate alloc] init]; +// self.targetDate = self.pickerView.date; +// +// self.comps = [calendar components:(NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:dateNow toDate:self.targetDate options:0]; +// +// self.totalSecondsLeft = self.comps.day * 86400 + self.comps.hour * 3600 + self.comps.minute * 60; +// //self.totalSecondsLeft = [self.now timeIntervalSinceDate:self.targetDate]; +// [self startTimerMethod]; +// +// [self makeTimeLabel]; +} + +//- (void)startTimerMethod { +// self.countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES]; +//} +// +//- (void)updateLabel:(NSTimer *)timer { +// [self makeTimeLabel]; +// +// if (self.totalSecondsLeft > 0) { +// (self.totalSecondsLeft--); +// } else { +// [timer invalidate]; +// +// } +//} + +//- (void)makeTimeLabel { +// NSInteger days = [self.comps day]; +// NSInteger months = [self.comps month]; +// NSInteger years = [self.comps year]; +// NSInteger hours = [self.comps hour]; +// NSInteger minutes = [self.comps minute]; +// NSInteger seconds = [self.comps second]; +// NSString *countdownText = [NSString stringWithFormat:@"%d Days %d:%d:%d", days, hours, minutes,seconds]; +// + + +// NSInteger daysLeft = self.totalSecondsLeft / 86400; +// //NSInteger hoursLeft = self.totalSecondsLeft / 3600; +// //NSInteger hoursLeft = (self.totalSecondsLeft / 24) % 3600; +// NSInteger hoursLeft = self.totalSecondsLeft / 3600 % 24; +// NSInteger minutesLeft = (self.totalSecondsLeft % 3600) / 60; +// NSInteger secondsLeft = ((self.totalSecondsLeft % 3600) % 60) % 60; +// +// NSString *daysToBeShown = [NSString stringWithFormat:@"%ld", (long)daysLeft]; +// NSString *hoursToBeShown = [NSString stringWithFormat:@"%ld", (long)hoursLeft]; +// NSString *minutesToBeShown = @""; +// NSString *secondsToBeShown = @""; +// +// if (minutesLeft < 10 && minutesLeft != 0) { +// minutesToBeShown = [NSString stringWithFormat:@"0%ld", (long)minutesLeft]; +// } else if (minutesLeft == 0) { +// minutesToBeShown = @"00"; +// } else minutesToBeShown = [NSString stringWithFormat:@"%ld", (long)minutesLeft]; +// +// if (secondsLeft < 10 && secondsLeft != 0) { +// secondsToBeShown = [NSString stringWithFormat:@"0%ld", (long)secondsLeft]; +// } else if (secondsLeft == 0) { +// secondsToBeShown = @"00"; +// } else { +// secondsToBeShown = [NSString stringWithFormat:@"%ld", (long)secondsLeft]; +// } +// +// // if total seconds left is less than 1 hour (1 hour = 3600 seconds), only display minutes and seconds = 00:00 instead of 00:00:00 +// if (self.totalSecondsLeft < 3600) { +// self.timerLabel.text = [NSString stringWithFormat:@"%@:%@", minutesToBeShown, secondsToBeShown]; +// } else { +// self.timerLabel.text = [NSString stringWithFormat:@"%@:%@:%@:%@", daysToBeShown, hoursToBeShown, minutesToBeShown, secondsToBeShown]; +// } +//} + +-(void)updateTime +{ + //Get the time left until the specified date + NSInteger ti = ((NSInteger)[self.pickerView.date timeIntervalSinceNow]); + NSInteger seconds = ti % 60; + NSInteger minutes = (ti / 60) % 60; + NSInteger hours = (ti / 3600) % 24; + NSInteger days = (ti / 86400); + + //Update the label with the remaining time + self.timerLabel.text = [NSString stringWithFormat:@"%02li days %02li hrs %02li min %02li sec", (long)days, (long)hours, (long)minutes, (long)seconds]; +} + + + + + +#pragma mark - tableview + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.event.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"eventIdentifier" forIndexPath:indexPath]; + + // [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.laps.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; + + cell.textLabel.text = [NSString stringWithFormat:@"Event %ld", [self.event count] - (long)indexPath.row]; + cell.detailTextLabel.text = self.event[[self.event count] -1 - indexPath.row]; + + // cell.textLabel.text = [NSString stringWithFormat:@"Lap %ld", (long)indexPath.row]; + // cell.detailTextLabel.text = self.laps[indexPath.row]; + + + return cell; +} + + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/Time/Time/StopwatchViewController.h b/Time/Time/StopwatchViewController.h new file mode 100755 index 0000000..3ae0098 --- /dev/null +++ b/Time/Time/StopwatchViewController.h @@ -0,0 +1,14 @@ +// +// StopwatchTableViewController.h +// Time +// +// Created by Eric Sze on 8/20/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import + +@interface StopwatchViewController : UIViewController + + +@end diff --git a/Time/Time/StopwatchViewController.m b/Time/Time/StopwatchViewController.m new file mode 100755 index 0000000..8739be0 --- /dev/null +++ b/Time/Time/StopwatchViewController.m @@ -0,0 +1,219 @@ +// +// StopwatchTableViewController.m +// Time +// +// Created by Eric Sze on 8/20/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import "StopwatchViewController.h" +#import + +@import QuartzCore; + + +@interface StopwatchViewController () +@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; + +@property (weak, nonatomic) IBOutlet UIButton *lapButton; +@property (weak, nonatomic) IBOutlet UIButton *resetButton; + +@property (weak, nonatomic) IBOutlet UITableView *tableView; + +@property (weak, nonatomic) IBOutlet UILabel *timerLabel; +@property (weak, nonatomic) IBOutlet UIButton *start; + + +// Lap Time Properties +@property (weak, nonatomic) IBOutlet UILabel *lapTimeLabel; + +@property (nonatomic) NSMutableArray *laps; + + +@property (nonatomic) NSTimeInterval startTime; +@property (nonatomic) NSTimeInterval totalTime; +@property (nonatomic) NSTimeInterval currentTime; +@property (nonatomic) NSTimeInterval elapsed; +@property (nonatomic) NSDate *startTimeCount; +@property (nonatomic) NSTimeInterval previousTimeCount; + + +@property (nonatomic) NSTimeInterval startLapTime; +@property (nonatomic) NSTimeInterval elapsedLapTime; +@property (nonatomic) NSTimeInterval previousLapTime; +@property (nonatomic) NSTimeInterval lapTime; +@property (nonatomic) NSDate *startLapCount; +@property (nonatomic) NSTimeInterval previousLapCount; + +@property (weak, nonatomic) IBOutlet UIView *leftCircle; +@property (weak, nonatomic) IBOutlet UIView *rightCircle; + +@end + +@implementation StopwatchViewController + +BOOL running; + +- (void)viewDidLoad { + + [super viewDidLoad]; + + UIImage *backgroundImage = [UIImage imageNamed:@"track"]; + UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:backgroundImage]; + self.scrollView.contentSize = backgroundImage.size; + [self.scrollView addSubview:backgroundImageView]; + + [self.lapButton setEnabled:NO]; + [self.lapButton setTitleColor: [UIColor lightGrayColor]forState:UIControlStateNormal]; + [self.resetButton setHidden:YES]; + + self.laps = [[NSMutableArray alloc] init]; + + self.timerLabel.text = @"00:00.00"; + self.lapTimeLabel.text = @"00:00.00"; + + self.leftCircle.layer.cornerRadius = 34.5; + self.leftCircle.layer.masksToBounds = YES; + self.rightCircle.layer.cornerRadius = 34.5; + self.rightCircle.layer.masksToBounds = YES; +} + +- (IBAction)lapButton:(id)sender { + + [self.laps addObject:self.lapTimeLabel.text]; + self.lapTimeLabel.text = @"00:00.00"; + self.startLapTime = [NSDate timeIntervalSinceReferenceDate]; + self.previousLapCount = 0.0; + self.startLapCount = [[NSDate alloc]init]; + [self updateLapTime]; + [self.tableView reloadData]; + + + +} + +- (IBAction)resetButton:(UIButton *)sender { + + + [self.resetButton setHidden:YES]; + [self.lapButton setHidden:NO]; + [self.lapButton setEnabled:NO]; + [self.lapButton setTitleColor: [UIColor lightGrayColor]forState:UIControlStateNormal]; + [self.laps removeAllObjects]; + [self.tableView reloadData]; + + self.timerLabel.text = @"00:00.00"; + self.lapTimeLabel.text = @"00:00.00"; + + self.previousTimeCount = 0.0; + self.previousLapCount = 0.0; +} + +- (IBAction)start:(UIButton *)sender { + + + if (running == false) { + // start timer + running = true; + + self.lapButton.enabled = YES; + [self.lapButton setTitleColor: [UIColor blackColor]forState:UIControlStateNormal]; + + self.startTime = [NSDate timeIntervalSinceReferenceDate]; + self.startTimeCount = [[NSDate alloc]init]; + self.startLapTime = [NSDate timeIntervalSinceReferenceDate]; + self.startLapCount = [[NSDate alloc]init]; + [sender setTitle:@"Stop" forState:UIControlStateNormal]; + [sender setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; + [self updateTime]; + [self updateLapTime]; + + [self.resetButton setHidden:YES]; + [self.lapButton setHidden:NO]; + + } else { + // stop timer + self.previousTimeCount += [[NSDate date]timeIntervalSinceDate:self.startTimeCount]; + self.previousLapCount += [[NSDate date]timeIntervalSinceDate:self.startLapCount]; + [sender setTitle:@"Start" forState:UIControlStateNormal]; + [sender setTitleColor:[UIColor greenColor] forState:UIControlStateNormal]; + running = false; + + [self.lapButton setHidden:YES]; + [self.resetButton setHidden:NO]; + } + +} + +- (void)updateTime { + if (running == false) return; + + // calculate elapsed time + self.currentTime = [NSDate timeIntervalSinceReferenceDate]; + self.elapsed = self.previousTimeCount + self.currentTime - self.startTime; + + + // extract out the minutes, seconds, and fraction of seconds from elapsed time: + int mins = (int) (self.elapsed / 60.0); + self.elapsed -= mins * 60; + int secs = (int) (self.elapsed); + self.elapsed -= secs; + int fraction = self.elapsed * 100.0; + + // update our label using a format of 0:00.0 + self.timerLabel.text = [NSString stringWithFormat: @"%02u:%02u.%02u", mins, secs, fraction]; + // call updateTime again after 0.1 seconds + [self performSelector:@selector(updateTime) withObject:self afterDelay:0.01]; +} + +- (void)updateLapTime { + if (running == false) return; + + // calculate elapsed time + NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate]; + self.elapsedLapTime = self.previousLapCount + currentTime - self.startLapTime; + + + // extract out the minutes, seconds, and fraction of seconds from elapsed time: + int mins = (int) (self.elapsedLapTime / 60.0); + self.elapsedLapTime -= mins * 60; + int secs = (int) (self.elapsedLapTime); + self.elapsedLapTime -= secs; + int fraction = self.elapsedLapTime * 100.0; + + self.lapTimeLabel.text = [NSString stringWithFormat: @"%02u:%02u.%02u", mins, secs, fraction]; + + + + // call updateTime again after 0.1 seconds + [self performSelector:@selector(updateLapTime) withObject:self afterDelay:0.01]; +} + + + +#pragma mark - tableview + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.laps.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier" forIndexPath:indexPath]; + +// [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.laps.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; + + cell.textLabel.text = [NSString stringWithFormat:@"Lap %ld", [self.laps count] - (long)indexPath.row]; + cell.detailTextLabel.text = self.laps[[self.laps count] -1 - indexPath.row]; + +// cell.textLabel.text = [NSString stringWithFormat:@"Lap %ld", (long)indexPath.row]; +// cell.detailTextLabel.text = self.laps[indexPath.row]; + + + return cell; +} + +@end diff --git a/Time/Time/TimerViewController.h b/Time/Time/TimerViewController.h new file mode 100755 index 0000000..78d995f --- /dev/null +++ b/Time/Time/TimerViewController.h @@ -0,0 +1,13 @@ +// +// TimerViewController.h +// Time +// +// Created by Eric Sze on 8/29/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import + +@interface TimerViewController : UIViewController + +@end diff --git a/Time/Time/TimerViewController.m b/Time/Time/TimerViewController.m new file mode 100755 index 0000000..da1c1d0 --- /dev/null +++ b/Time/Time/TimerViewController.m @@ -0,0 +1,181 @@ +// +// TimerViewController.m +// Time +// +// Created by Eric Sze on 8/29/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import "TimerViewController.h" + +@interface TimerViewController () +@property (weak, nonatomic) IBOutlet UIView *leftCircle; +@property (weak, nonatomic) IBOutlet UIView *rightCircle; + +@property (weak, nonatomic) IBOutlet UIButton *startButton; +@property (weak, nonatomic) IBOutlet UIButton *cancelButton; +@property (weak, nonatomic) IBOutlet UIButton *pauseButton; +@property (weak, nonatomic) IBOutlet UIButton *resumeButton; + +@property (weak, nonatomic) IBOutlet UIDatePicker *pickerView; +@property (weak, nonatomic) IBOutlet UILabel *timerLabel; +@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; + +@property (nonatomic) NSDate *startTime; +@property (nonatomic) NSTimer *countDownTimer; +@property (nonatomic) NSInteger totalSecondsLeft; + +@end + +@implementation TimerViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + UIImage *backgroundImage = [UIImage imageNamed:@"track"]; + UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:backgroundImage]; + self.scrollView.contentSize = backgroundImage.size; + [self.scrollView addSubview:backgroundImageView]; + + self.leftCircle.layer.cornerRadius = 34.5; + self.leftCircle.layer.masksToBounds = YES; + self.leftCircle.clipsToBounds = YES; + + self.rightCircle.layer.cornerRadius = 34.5; + self.rightCircle.layer.masksToBounds = YES; + self.rightCircle.clipsToBounds = YES; + + self.timerLabel.alpha = 0; + [self.pauseButton setEnabled:NO]; + [self.pauseButton setTitleColor: [UIColor lightGrayColor]forState:UIControlStateNormal]; + [self.cancelButton setHidden:YES]; + [self.resumeButton setHidden:YES]; + + // this line makes the UIDatePicker (Timer tab) show 0 hours 1 min + self.pickerView.countDownDuration = 60.0f; +} + + +- (IBAction)startButton:(UIButton *)sender { + [self.startButton setHidden:YES]; + [self.cancelButton setHidden:NO]; + [self.pauseButton setEnabled:YES]; + [self.pauseButton setTitleColor: [UIColor blackColor]forState:UIControlStateNormal]; + + [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{self.pickerView.alpha = 0;} completion:nil]; + [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{self.timerLabel.alpha = 1;} completion:nil]; + + NSCalendar *calendar = [NSCalendar currentCalendar]; + NSDate *date = self.pickerView.date; + NSDateComponents *comps = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; + + self.totalSecondsLeft = comps.hour * 3600 + comps.minute * 60; + + [self startTimerMethod]; + + [self makeTimeLabel]; +} + +- (void)startTimerMethod { + self.countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES]; +} + +- (void)updateLabel:(NSTimer *)timer { + [self makeTimeLabel]; + + if (self.totalSecondsLeft > 0) { + (self.totalSecondsLeft--); + } else { + [timer invalidate]; + [self notification]; + [self cancelButtonActions]; + } +} + +- (void)makeTimeLabel { + NSInteger hoursLeft = self.totalSecondsLeft / 3600; + NSInteger minutesLeft = (self.totalSecondsLeft % 3600) / 60; + NSInteger secondsLeft = ((self.totalSecondsLeft % 3600) % 60) % 60; + + NSString *hoursToBeShown = [NSString stringWithFormat:@"%ld", (long)hoursLeft]; + NSString *minutesToBeShown = @""; + NSString *secondsToBeShown = @""; + + if (minutesLeft < 10 && minutesLeft != 0) { + minutesToBeShown = [NSString stringWithFormat:@"0%ld", (long)minutesLeft]; + } else if (minutesLeft == 0) { + minutesToBeShown = @"00"; + } else minutesToBeShown = [NSString stringWithFormat:@"%ld", (long)minutesLeft]; + + if (secondsLeft < 10 && secondsLeft != 0) { + secondsToBeShown = [NSString stringWithFormat:@"0%ld", (long)secondsLeft]; + } else if (secondsLeft == 0) { + secondsToBeShown = @"00"; + } else { + secondsToBeShown = [NSString stringWithFormat:@"%ld", (long)secondsLeft]; + } + + // if total seconds left is less than 1 hour (1 hour = 3600 seconds), only display minutes and seconds = 00:00 instead of 00:00:00 + if (self.totalSecondsLeft < 3600) { + self.timerLabel.text = [NSString stringWithFormat:@"%@:%@", minutesToBeShown, secondsToBeShown]; + } else { + self.timerLabel.text = [NSString stringWithFormat:@"%@:%@:%@", hoursToBeShown, minutesToBeShown, secondsToBeShown]; + } +} + +- (IBAction)cancelButton:(UIButton *)sender { + [self cancelButtonActions]; +} + +- (IBAction)pauseButton:(UIButton *)sender { + [self.pauseButton setHidden:YES]; + [self.resumeButton setHidden:NO]; + + [self.countDownTimer invalidate]; + //self.countDownTimer = nil; +} + +- (IBAction)resumeButton:(UIButton *)sender { + [self.resumeButton setHidden:YES]; + [self.pauseButton setHidden:NO]; + + [self startTimerMethod]; +} + + + +- (void)cancelButtonActions { + [self.cancelButton setHidden:YES]; + [self.startButton setHidden:NO]; + [self.pauseButton setHidden:NO]; + [self.pauseButton setEnabled:NO]; + [self.pauseButton setTitleColor: [UIColor lightGrayColor]forState:UIControlStateNormal]; + [self.resumeButton setHidden:YES]; + + [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{self.pickerView.alpha = 1;} completion:nil]; + [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{self.timerLabel.alpha = 0;} completion:nil]; + + [self.countDownTimer invalidate]; + self.countDownTimer = nil; + +} + +- (void)notification { + UILocalNotification *localNotification = [[UILocalNotification alloc] init]; + //localNotification.alertBody = [NSString stringWithFormat:@"Alert Fired at %@", dateTime]; + localNotification.applicationIconBadgeNumber = 1; + localNotification.soundName = UILocalNotificationDefaultSoundName; + [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/Time/Time/ViewController.h b/Time/Time/ViewController.h deleted file mode 100644 index 9d0e38f..0000000 --- a/Time/Time/ViewController.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// ViewController.h -// Time -// -// Created by Michael Kavouras on 8/20/15. -// Copyright (c) 2015 Mike Kavouras. All rights reserved. -// - -#import - -@interface ViewController : UIViewController - - -@end - diff --git a/Time/Time/ViewController.m b/Time/Time/ViewController.m deleted file mode 100644 index 194fe5f..0000000 --- a/Time/Time/ViewController.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// ViewController.m -// Time -// -// Created by Michael Kavouras on 8/20/15. -// Copyright (c) 2015 Mike Kavouras. All rights reserved. -// - -#import "ViewController.h" - -@interface ViewController () - -@end - -@implementation ViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -@end diff --git a/Time/Time/cancelButtonActions.h b/Time/Time/cancelButtonActions.h new file mode 100755 index 0000000..386a88b --- /dev/null +++ b/Time/Time/cancelButtonActions.h @@ -0,0 +1,14 @@ +// +// cancelButtonActions.h +// Time +// +// Created by Eric Sze on 9/2/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import +#import "TimerViewController.h" + +@interface cancelButtonActions : NSObject + +@end diff --git a/Time/Time/cancelButtonActions.m b/Time/Time/cancelButtonActions.m new file mode 100755 index 0000000..6e2a3e8 --- /dev/null +++ b/Time/Time/cancelButtonActions.m @@ -0,0 +1,13 @@ +// +// cancelButtonActions.m +// Time +// +// Created by Eric Sze on 9/2/15. +// Copyright (c) 2015 Mike Kavouras. All rights reserved. +// + +#import "cancelButtonActions.h" + +@implementation cancelButtonActions + +@end diff --git a/Time/Time/main.m b/Time/Time/main.m old mode 100644 new mode 100755 diff --git a/Time/TimeTests/Info.plist b/Time/TimeTests/Info.plist old mode 100644 new mode 100755 index 54624a4..ba72822 --- a/Time/TimeTests/Info.plist +++ b/Time/TimeTests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.mikekavouras.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Time/TimeTests/TimeTests.m b/Time/TimeTests/TimeTests.m old mode 100644 new mode 100755