From c88307d988a5a4bc50062dd82ac6954d770944c7 Mon Sep 17 00:00:00 2001 From: Sam Soffes Date: Wed, 25 Jul 2012 23:49:16 -0700 Subject: [PATCH] Initial import --- .gitignore | 11 + .gitmodules | 15 + Cheddar for iOS.xcodeproj/project.pbxproj | 1232 +++++++++++++++++ Classes/CDIAddListTableViewCell.h | 14 + Classes/CDIAddListTableViewCell.m | 54 + Classes/CDIAddTaskAnimationView.h | 15 + Classes/CDIAddTaskAnimationView.m | 118 ++ Classes/CDIAddTaskView.h | 44 + Classes/CDIAddTaskView.m | 297 ++++ Classes/CDIAppDelegate.h | 16 + Classes/CDIAppDelegate.m | 148 ++ Classes/CDIAttributedLabel.h | 12 + Classes/CDIAttributedLabel.m | 82 ++ Classes/CDICreateListViewController.h | 18 + Classes/CDICreateListViewController.m | 174 +++ Classes/CDIListTableViewCell.h | 17 + Classes/CDIListTableViewCell.m | 75 + Classes/CDIListViewController.h | 20 + Classes/CDIListViewController.m | 560 ++++++++ Classes/CDIListsViewController.h | 16 + Classes/CDIListsViewController.m | 478 +++++++ Classes/CDILoadingView.h | 10 + Classes/CDILoadingView.m | 23 + Classes/CDIManagedTableViewController.h | 33 + Classes/CDIManagedTableViewController.m | 328 +++++ Classes/CDINoListsView.h | 10 + Classes/CDINoListsView.m | 52 + Classes/CDINoTasksView.h | 10 + Classes/CDINoTasksView.m | 56 + Classes/CDIPullToRefreshContentView.h | 12 + Classes/CDIPullToRefreshContentView.m | 24 + Classes/CDIPullToRefreshView.h | 15 + Classes/CDIPullToRefreshView.m | 35 + Classes/CDIRenameTaskViewController.h | 19 + Classes/CDIRenameTaskViewController.m | 134 ++ Classes/CDISessionsViewController.h | 16 + Classes/CDISessionsViewController.m | 89 ++ Classes/CDISettingsViewController.h | 16 + Classes/CDISettingsViewController.m | 211 +++ Classes/CDISignInViewController.h | 15 + Classes/CDISignInViewController.m | 101 ++ Classes/CDISignUpViewController.h | 15 + Classes/CDISignUpViewController.m | 129 ++ Classes/CDISplitViewController.h | 19 + Classes/CDISplitViewController.m | 61 + Classes/CDITableViewCell.h | 17 + Classes/CDITableViewCell.m | 128 ++ ...DITableViewCellDeleteConfirmationControl.h | 10 + ...DITableViewCellDeleteConfirmationControl.m | 38 + Classes/CDITagView.h | 13 + Classes/CDITagView.m | 48 + Classes/CDITaskTableViewCell.h | 21 + Classes/CDITaskTableViewCell.m | 154 +++ Classes/CDITransactionObserver.h | 23 + Classes/CDITransactionObserver.m | 111 ++ Classes/CDIUpgradeViewController.h | 19 + Classes/CDIUpgradeViewController.m | 237 ++++ Classes/CDKTask+CheddariOSAdditions.h | 16 + Classes/CDKTask+CheddariOSAdditions.m | 107 ++ Classes/SKPaymentTransaction+Cheddar.h | 15 + Classes/SKPaymentTransaction+Cheddar.m | 42 + Classes/UIButton+Cheddar.h | 16 + Classes/UIButton+Cheddar.m | 65 + Classes/UIColor+Cheddar.h | 18 + Classes/UIColor+Cheddar.m | 42 + Classes/UIFont+Cheddar.h | 16 + Classes/UIFont+Cheddar.m | 32 + LICENSE | 22 + Other Sources/CDIDefinesExample.h | 24 + Other Sources/CDIDefinesExample.m | 29 + Other Sources/Cheddar-Prefix.pch | 22 + Other Sources/main.m | 25 + Rakefile | 16 + Readme.markdown | 35 + Resources/Cheddar-Info.plist | 67 + Resources/Cheddar.entitlements | 10 + Resources/Images/Default-Landscape.png | Bin 0 -> 5772 bytes Resources/Images/Default-Landscape@2x.png | Bin 0 -> 50355 bytes Resources/Images/Default-Portrait.png | Bin 0 -> 6366 bytes Resources/Images/Default-Portrait@2x.png | Bin 0 -> 63713 bytes Resources/Images/Default.png | Bin 0 -> 1896 bytes Resources/Images/Default@2x.png | Bin 0 -> 5457 bytes Resources/Images/Icon-100.png | Bin 0 -> 5602 bytes Resources/Images/Icon-114.png | Bin 0 -> 6349 bytes Resources/Images/Icon-144.png | Bin 0 -> 8518 bytes Resources/Images/Icon-29.png | Bin 0 -> 1262 bytes Resources/Images/Icon-50.png | Bin 0 -> 2389 bytes Resources/Images/Icon-57.png | Bin 0 -> 2857 bytes Resources/Images/Icon-58.png | Bin 0 -> 2840 bytes Resources/Images/Icon-72.png | Bin 0 -> 3795 bytes Resources/Images/add-list-arrow.png | Bin 0 -> 675 bytes Resources/Images/add-list-arrow@2x.png | Bin 0 -> 1369 bytes Resources/Images/add-task-arrow.png | Bin 0 -> 677 bytes Resources/Images/add-task-arrow@2x.png | Bin 0 -> 1375 bytes Resources/Images/arches.png | Bin 0 -> 499 bytes Resources/Images/arches@2x.png | Bin 0 -> 1033 bytes .../Images/archive-button-highlighted.png | Bin 0 -> 470 bytes .../Images/archive-button-highlighted@2x.png | Bin 0 -> 904 bytes Resources/Images/archive-button.png | Bin 0 -> 479 bytes Resources/Images/archive-button@2x.png | Bin 0 -> 920 bytes Resources/Images/big-button-highlighted.png | Bin 0 -> 339 bytes .../Images/big-button-highlighted@2x.png | Bin 0 -> 571 bytes Resources/Images/big-button.png | Bin 0 -> 780 bytes Resources/Images/big-button@2x.png | Bin 0 -> 834 bytes .../Images/big-gray-button-highlighted.png | Bin 0 -> 540 bytes .../Images/big-gray-button-highlighted@2x.png | Bin 0 -> 1047 bytes Resources/Images/big-gray-button.png | Bin 0 -> 555 bytes Resources/Images/big-gray-button@2x.png | Bin 0 -> 1149 bytes .../Images/big-orange-button-highlighted.png | Bin 0 -> 597 bytes .../big-orange-button-highlighted@2x.png | Bin 0 -> 1349 bytes Resources/Images/big-orange-button.png | Bin 0 -> 613 bytes Resources/Images/big-orange-button@2x.png | Bin 0 -> 1341 bytes Resources/Images/checkbox.png | Bin 0 -> 187 bytes Resources/Images/checkbox@2x.png | Bin 0 -> 360 bytes Resources/Images/corner-bl.png | Bin 0 -> 135 bytes Resources/Images/corner-bl@2x.png | Bin 0 -> 168 bytes Resources/Images/corner-br.png | Bin 0 -> 133 bytes Resources/Images/corner-br@2x.png | Bin 0 -> 168 bytes Resources/Images/corner-tl.png | Bin 0 -> 138 bytes Resources/Images/corner-tl@2x.png | Bin 0 -> 178 bytes Resources/Images/corner-tr.png | Bin 0 -> 133 bytes Resources/Images/corner-tr@2x.png | Bin 0 -> 171 bytes Resources/Images/disclosure-highlighted.png | Bin 0 -> 165 bytes .../Images/disclosure-highlighted@2x.png | Bin 0 -> 243 bytes Resources/Images/disclosure.png | Bin 0 -> 166 bytes Resources/Images/disclosure@2x.png | Bin 0 -> 243 bytes Resources/Images/list-icon.png | Bin 0 -> 13212 bytes Resources/Images/list-icon@2x.png | Bin 0 -> 35619 bytes Resources/Images/nav-back-highlighted.png | Bin 0 -> 670 bytes Resources/Images/nav-back-highlighted@2x.png | Bin 0 -> 1376 bytes Resources/Images/nav-back.png | Bin 0 -> 677 bytes Resources/Images/nav-back@2x.png | Bin 0 -> 1370 bytes Resources/Images/nav-background.png | Bin 0 -> 121 bytes Resources/Images/nav-background@2x.png | Bin 0 -> 151 bytes Resources/Images/nav-button-highlighted.png | Bin 0 -> 411 bytes .../Images/nav-button-highlighted@2x.png | Bin 0 -> 778 bytes Resources/Images/nav-button.png | Bin 0 -> 411 bytes Resources/Images/nav-button@2x.png | Bin 0 -> 772 bytes Resources/Images/nav-title.png | Bin 0 -> 1718 bytes Resources/Images/nav-title@2x.png | Bin 0 -> 3587 bytes Resources/Images/plus.png | Bin 0 -> 167 bytes Resources/Images/plus@2x.png | Bin 0 -> 233 bytes Resources/Images/settings.png | Bin 0 -> 453 bytes Resources/Images/settings@2x.png | Bin 0 -> 1231 bytes Resources/Images/small-check.png | Bin 0 -> 318 bytes Resources/Images/small-check@2x.png | Bin 0 -> 532 bytes Resources/Images/tag-x.png | Bin 0 -> 314 bytes Resources/Images/tag-x@2x.png | Bin 0 -> 501 bytes Resources/Images/tag.png | Bin 0 -> 316 bytes Resources/Images/tag@2x.png | Bin 0 -> 515 bytes Resources/Images/task-icon.png | Bin 0 -> 11182 bytes Resources/Images/task-icon@2x.png | Bin 0 -> 30096 bytes Resources/Images/textfield-focused.png | Bin 0 -> 874 bytes Resources/Images/textfield-focused@2x.png | Bin 0 -> 1526 bytes Resources/Images/textfield.png | Bin 0 -> 584 bytes Resources/Images/textfield@2x.png | Bin 0 -> 922 bytes Resources/Images/x.png | Bin 0 -> 323 bytes Resources/Images/x@2x.png | Bin 0 -> 459 bytes Vendor/CheddarKit | 1 + Vendor/Crashlytics.framework/Crashlytics | 1 + Vendor/Crashlytics.framework/Headers | 1 + Vendor/Crashlytics.framework/Resources | 1 + .../Versions/A/Crashlytics | Bin 0 -> 698858 bytes .../Versions/A/Headers/Crashlytics.h | 172 +++ .../Versions/A/Resources/Info.plist | 54 + .../Versions/A/Resources/Runner | 1 + .../A/Resources/en.lproj/InfoPlist.strings | Bin 0 -> 42 bytes .../Versions/A/Resources/runner.rb | 15 + Vendor/Crashlytics.framework/Versions/Current | 1 + Vendor/Crashlytics.framework/run | Bin 0 -> 44596 bytes Vendor/Localytics | 1 + Vendor/SSPullToRefresh | 1 + Vendor/SSToolkit | 1 + Vendor/TTTAttributedLabel | 1 + 174 files changed, 6538 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 Cheddar for iOS.xcodeproj/project.pbxproj create mode 100644 Classes/CDIAddListTableViewCell.h create mode 100644 Classes/CDIAddListTableViewCell.m create mode 100644 Classes/CDIAddTaskAnimationView.h create mode 100644 Classes/CDIAddTaskAnimationView.m create mode 100644 Classes/CDIAddTaskView.h create mode 100644 Classes/CDIAddTaskView.m create mode 100644 Classes/CDIAppDelegate.h create mode 100644 Classes/CDIAppDelegate.m create mode 100644 Classes/CDIAttributedLabel.h create mode 100644 Classes/CDIAttributedLabel.m create mode 100644 Classes/CDICreateListViewController.h create mode 100644 Classes/CDICreateListViewController.m create mode 100644 Classes/CDIListTableViewCell.h create mode 100644 Classes/CDIListTableViewCell.m create mode 100644 Classes/CDIListViewController.h create mode 100644 Classes/CDIListViewController.m create mode 100644 Classes/CDIListsViewController.h create mode 100644 Classes/CDIListsViewController.m create mode 100644 Classes/CDILoadingView.h create mode 100644 Classes/CDILoadingView.m create mode 100644 Classes/CDIManagedTableViewController.h create mode 100644 Classes/CDIManagedTableViewController.m create mode 100644 Classes/CDINoListsView.h create mode 100644 Classes/CDINoListsView.m create mode 100644 Classes/CDINoTasksView.h create mode 100644 Classes/CDINoTasksView.m create mode 100644 Classes/CDIPullToRefreshContentView.h create mode 100644 Classes/CDIPullToRefreshContentView.m create mode 100644 Classes/CDIPullToRefreshView.h create mode 100644 Classes/CDIPullToRefreshView.m create mode 100644 Classes/CDIRenameTaskViewController.h create mode 100644 Classes/CDIRenameTaskViewController.m create mode 100644 Classes/CDISessionsViewController.h create mode 100644 Classes/CDISessionsViewController.m create mode 100644 Classes/CDISettingsViewController.h create mode 100644 Classes/CDISettingsViewController.m create mode 100644 Classes/CDISignInViewController.h create mode 100644 Classes/CDISignInViewController.m create mode 100644 Classes/CDISignUpViewController.h create mode 100644 Classes/CDISignUpViewController.m create mode 100644 Classes/CDISplitViewController.h create mode 100644 Classes/CDISplitViewController.m create mode 100644 Classes/CDITableViewCell.h create mode 100644 Classes/CDITableViewCell.m create mode 100644 Classes/CDITableViewCellDeleteConfirmationControl.h create mode 100644 Classes/CDITableViewCellDeleteConfirmationControl.m create mode 100644 Classes/CDITagView.h create mode 100644 Classes/CDITagView.m create mode 100644 Classes/CDITaskTableViewCell.h create mode 100644 Classes/CDITaskTableViewCell.m create mode 100644 Classes/CDITransactionObserver.h create mode 100644 Classes/CDITransactionObserver.m create mode 100644 Classes/CDIUpgradeViewController.h create mode 100644 Classes/CDIUpgradeViewController.m create mode 100644 Classes/CDKTask+CheddariOSAdditions.h create mode 100644 Classes/CDKTask+CheddariOSAdditions.m create mode 100644 Classes/SKPaymentTransaction+Cheddar.h create mode 100644 Classes/SKPaymentTransaction+Cheddar.m create mode 100644 Classes/UIButton+Cheddar.h create mode 100644 Classes/UIButton+Cheddar.m create mode 100644 Classes/UIColor+Cheddar.h create mode 100644 Classes/UIColor+Cheddar.m create mode 100644 Classes/UIFont+Cheddar.h create mode 100644 Classes/UIFont+Cheddar.m create mode 100644 LICENSE create mode 100644 Other Sources/CDIDefinesExample.h create mode 100644 Other Sources/CDIDefinesExample.m create mode 100644 Other Sources/Cheddar-Prefix.pch create mode 100644 Other Sources/main.m create mode 100644 Rakefile create mode 100644 Readme.markdown create mode 100644 Resources/Cheddar-Info.plist create mode 100644 Resources/Cheddar.entitlements create mode 100644 Resources/Images/Default-Landscape.png create mode 100644 Resources/Images/Default-Landscape@2x.png create mode 100644 Resources/Images/Default-Portrait.png create mode 100644 Resources/Images/Default-Portrait@2x.png create mode 100644 Resources/Images/Default.png create mode 100644 Resources/Images/Default@2x.png create mode 100644 Resources/Images/Icon-100.png create mode 100644 Resources/Images/Icon-114.png create mode 100644 Resources/Images/Icon-144.png create mode 100644 Resources/Images/Icon-29.png create mode 100644 Resources/Images/Icon-50.png create mode 100644 Resources/Images/Icon-57.png create mode 100644 Resources/Images/Icon-58.png create mode 100644 Resources/Images/Icon-72.png create mode 100644 Resources/Images/add-list-arrow.png create mode 100644 Resources/Images/add-list-arrow@2x.png create mode 100644 Resources/Images/add-task-arrow.png create mode 100644 Resources/Images/add-task-arrow@2x.png create mode 100644 Resources/Images/arches.png create mode 100644 Resources/Images/arches@2x.png create mode 100644 Resources/Images/archive-button-highlighted.png create mode 100644 Resources/Images/archive-button-highlighted@2x.png create mode 100644 Resources/Images/archive-button.png create mode 100644 Resources/Images/archive-button@2x.png create mode 100644 Resources/Images/big-button-highlighted.png create mode 100644 Resources/Images/big-button-highlighted@2x.png create mode 100644 Resources/Images/big-button.png create mode 100644 Resources/Images/big-button@2x.png create mode 100644 Resources/Images/big-gray-button-highlighted.png create mode 100644 Resources/Images/big-gray-button-highlighted@2x.png create mode 100644 Resources/Images/big-gray-button.png create mode 100644 Resources/Images/big-gray-button@2x.png create mode 100644 Resources/Images/big-orange-button-highlighted.png create mode 100644 Resources/Images/big-orange-button-highlighted@2x.png create mode 100644 Resources/Images/big-orange-button.png create mode 100644 Resources/Images/big-orange-button@2x.png create mode 100644 Resources/Images/checkbox.png create mode 100644 Resources/Images/checkbox@2x.png create mode 100644 Resources/Images/corner-bl.png create mode 100644 Resources/Images/corner-bl@2x.png create mode 100644 Resources/Images/corner-br.png create mode 100644 Resources/Images/corner-br@2x.png create mode 100644 Resources/Images/corner-tl.png create mode 100644 Resources/Images/corner-tl@2x.png create mode 100644 Resources/Images/corner-tr.png create mode 100644 Resources/Images/corner-tr@2x.png create mode 100644 Resources/Images/disclosure-highlighted.png create mode 100644 Resources/Images/disclosure-highlighted@2x.png create mode 100644 Resources/Images/disclosure.png create mode 100644 Resources/Images/disclosure@2x.png create mode 100644 Resources/Images/list-icon.png create mode 100644 Resources/Images/list-icon@2x.png create mode 100644 Resources/Images/nav-back-highlighted.png create mode 100644 Resources/Images/nav-back-highlighted@2x.png create mode 100644 Resources/Images/nav-back.png create mode 100644 Resources/Images/nav-back@2x.png create mode 100644 Resources/Images/nav-background.png create mode 100644 Resources/Images/nav-background@2x.png create mode 100644 Resources/Images/nav-button-highlighted.png create mode 100644 Resources/Images/nav-button-highlighted@2x.png create mode 100644 Resources/Images/nav-button.png create mode 100644 Resources/Images/nav-button@2x.png create mode 100644 Resources/Images/nav-title.png create mode 100644 Resources/Images/nav-title@2x.png create mode 100644 Resources/Images/plus.png create mode 100644 Resources/Images/plus@2x.png create mode 100644 Resources/Images/settings.png create mode 100644 Resources/Images/settings@2x.png create mode 100644 Resources/Images/small-check.png create mode 100644 Resources/Images/small-check@2x.png create mode 100644 Resources/Images/tag-x.png create mode 100644 Resources/Images/tag-x@2x.png create mode 100644 Resources/Images/tag.png create mode 100644 Resources/Images/tag@2x.png create mode 100644 Resources/Images/task-icon.png create mode 100644 Resources/Images/task-icon@2x.png create mode 100644 Resources/Images/textfield-focused.png create mode 100644 Resources/Images/textfield-focused@2x.png create mode 100644 Resources/Images/textfield.png create mode 100644 Resources/Images/textfield@2x.png create mode 100644 Resources/Images/x.png create mode 100644 Resources/Images/x@2x.png create mode 160000 Vendor/CheddarKit create mode 120000 Vendor/Crashlytics.framework/Crashlytics create mode 120000 Vendor/Crashlytics.framework/Headers create mode 120000 Vendor/Crashlytics.framework/Resources create mode 100644 Vendor/Crashlytics.framework/Versions/A/Crashlytics create mode 100644 Vendor/Crashlytics.framework/Versions/A/Headers/Crashlytics.h create mode 100644 Vendor/Crashlytics.framework/Versions/A/Resources/Info.plist create mode 120000 Vendor/Crashlytics.framework/Versions/A/Resources/Runner create mode 100644 Vendor/Crashlytics.framework/Versions/A/Resources/en.lproj/InfoPlist.strings create mode 100644 Vendor/Crashlytics.framework/Versions/A/Resources/runner.rb create mode 120000 Vendor/Crashlytics.framework/Versions/Current create mode 100755 Vendor/Crashlytics.framework/run create mode 160000 Vendor/Localytics create mode 160000 Vendor/SSPullToRefresh create mode 160000 Vendor/SSToolkit create mode 160000 Vendor/TTTAttributedLabel diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..958dce0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +.DS_Store +*xcuserdata/ +*build/ +*.mode1v3 +*.pbxuser +*.xcworkspace +*.moved-aside/ +DerivedData + +Resources/Fonts/* +Other Sources/CDIDefines.* diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4589c97 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,15 @@ +[submodule "Vendor/CheddarKit"] + path = Vendor/CheddarKit + url = https://github.com/nothingmagical/cheddarkit.git +[submodule "Vendor/Localytics"] + path = Vendor/Localytics + url = https://github.com/samsoffes/localytics-ios.git +[submodule "Vendor/SSToolkit"] + path = Vendor/SSToolkit + url = https://github.com/samsoffes/sstoolkit.git +[submodule "Vendor/TTTAttributedLabel"] + path = Vendor/TTTAttributedLabel + url = https://github.com/mattt/TTTAttributedLabel.git +[submodule "Vendor/SSPullToRefresh"] + path = Vendor/SSPullToRefresh + url = https://github.com/samsoffes/sspulltorefresh.git diff --git a/Cheddar for iOS.xcodeproj/project.pbxproj b/Cheddar for iOS.xcodeproj/project.pbxproj new file mode 100644 index 0000000..f5bc36c --- /dev/null +++ b/Cheddar for iOS.xcodeproj/project.pbxproj @@ -0,0 +1,1232 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + B208BC2915BF63A80080705D /* CDIAddListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9315BF63A80080705D /* CDIAddListTableViewCell.m */; }; + B208BC2A15BF63A80080705D /* CDIAddTaskAnimationView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9515BF63A80080705D /* CDIAddTaskAnimationView.m */; }; + B208BC2B15BF63A80080705D /* CDIAddTaskView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9715BF63A80080705D /* CDIAddTaskView.m */; }; + B208BC2C15BF63A80080705D /* CDIAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9915BF63A80080705D /* CDIAppDelegate.m */; }; + B208BC2D15BF63A80080705D /* CDIAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9B15BF63A80080705D /* CDIAttributedLabel.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B208BC2E15BF63A80080705D /* CDICreateListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9D15BF63A80080705D /* CDICreateListViewController.m */; }; + B208BC2F15BF63A80080705D /* CDIListsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BB9F15BF63A80080705D /* CDIListsViewController.m */; }; + B208BC3015BF63A80080705D /* CDIListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBA115BF63A80080705D /* CDIListTableViewCell.m */; }; + B208BC3115BF63A80080705D /* CDIListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBA315BF63A80080705D /* CDIListViewController.m */; }; + B208BC3215BF63A80080705D /* CDILoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBA515BF63A80080705D /* CDILoadingView.m */; }; + B208BC3315BF63A80080705D /* CDIManagedTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBA715BF63A80080705D /* CDIManagedTableViewController.m */; }; + B208BC3415BF63A80080705D /* CDINoListsView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBA915BF63A80080705D /* CDINoListsView.m */; }; + B208BC3515BF63A80080705D /* CDINoTasksView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBAB15BF63A80080705D /* CDINoTasksView.m */; }; + B208BC3615BF63A80080705D /* CDIPullToRefreshContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBAD15BF63A80080705D /* CDIPullToRefreshContentView.m */; }; + B208BC3715BF63A80080705D /* CDIPullToRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBAF15BF63A80080705D /* CDIPullToRefreshView.m */; }; + B208BC3815BF63A80080705D /* CDIRenameTaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBB115BF63A80080705D /* CDIRenameTaskViewController.m */; }; + B208BC3915BF63A80080705D /* CDISessionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBB315BF63A80080705D /* CDISessionsViewController.m */; }; + B208BC3A15BF63A80080705D /* CDISettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBB515BF63A80080705D /* CDISettingsViewController.m */; }; + B208BC3B15BF63A80080705D /* CDISignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBB715BF63A80080705D /* CDISignInViewController.m */; }; + B208BC3C15BF63A80080705D /* CDISignUpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBB915BF63A80080705D /* CDISignUpViewController.m */; }; + B208BC3D15BF63A80080705D /* CDISplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBBB15BF63A80080705D /* CDISplitViewController.m */; }; + B208BC3E15BF63A80080705D /* CDITableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBBD15BF63A80080705D /* CDITableViewCell.m */; }; + B208BC3F15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBBF15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.m */; }; + B208BC4015BF63A80080705D /* CDITagView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBC115BF63A80080705D /* CDITagView.m */; }; + B208BC4115BF63A80080705D /* CDITaskTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBC315BF63A80080705D /* CDITaskTableViewCell.m */; }; + B208BC4215BF63A80080705D /* CDITransactionObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBC515BF63A80080705D /* CDITransactionObserver.m */; }; + B208BC4315BF63A80080705D /* CDIUpgradeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBC715BF63A80080705D /* CDIUpgradeViewController.m */; }; + B208BC4415BF63A80080705D /* SKPaymentTransaction+Cheddar.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBC915BF63A80080705D /* SKPaymentTransaction+Cheddar.m */; }; + B208BC4515BF63A80080705D /* UIButton+Cheddar.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBCB15BF63A80080705D /* UIButton+Cheddar.m */; }; + B208BC4615BF63A80080705D /* UIColor+Cheddar.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBCD15BF63A80080705D /* UIColor+Cheddar.m */; }; + B208BC4715BF63A80080705D /* UIFont+Cheddar.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBCF15BF63A80080705D /* UIFont+Cheddar.m */; }; + B208BC4815BF63A80080705D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BBD215BF63A80080705D /* main.m */; }; + B208BC4B15BF63A80080705D /* add-list-arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBD715BF63A80080705D /* add-list-arrow.png */; }; + B208BC4C15BF63A80080705D /* add-list-arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBD815BF63A80080705D /* add-list-arrow@2x.png */; }; + B208BC4D15BF63A80080705D /* add-task-arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBD915BF63A80080705D /* add-task-arrow.png */; }; + B208BC4E15BF63A80080705D /* add-task-arrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBDA15BF63A80080705D /* add-task-arrow@2x.png */; }; + B208BC4F15BF63A80080705D /* arches.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBDB15BF63A80080705D /* arches.png */; }; + B208BC5015BF63A80080705D /* arches@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBDC15BF63A80080705D /* arches@2x.png */; }; + B208BC5115BF63A80080705D /* archive-button-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBDD15BF63A80080705D /* archive-button-highlighted.png */; }; + B208BC5215BF63A80080705D /* archive-button-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBDE15BF63A80080705D /* archive-button-highlighted@2x.png */; }; + B208BC5315BF63A80080705D /* archive-button.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBDF15BF63A80080705D /* archive-button.png */; }; + B208BC5415BF63A80080705D /* archive-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE015BF63A80080705D /* archive-button@2x.png */; }; + B208BC5515BF63A80080705D /* big-button-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE115BF63A80080705D /* big-button-highlighted.png */; }; + B208BC5615BF63A80080705D /* big-button-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE215BF63A80080705D /* big-button-highlighted@2x.png */; }; + B208BC5715BF63A80080705D /* big-button.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE315BF63A80080705D /* big-button.png */; }; + B208BC5815BF63A80080705D /* big-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE415BF63A80080705D /* big-button@2x.png */; }; + B208BC5915BF63A80080705D /* big-gray-button-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE515BF63A80080705D /* big-gray-button-highlighted.png */; }; + B208BC5A15BF63A80080705D /* big-gray-button-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE615BF63A80080705D /* big-gray-button-highlighted@2x.png */; }; + B208BC5B15BF63A80080705D /* big-gray-button.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE715BF63A80080705D /* big-gray-button.png */; }; + B208BC5C15BF63A80080705D /* big-gray-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE815BF63A80080705D /* big-gray-button@2x.png */; }; + B208BC5D15BF63A80080705D /* big-orange-button-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBE915BF63A80080705D /* big-orange-button-highlighted.png */; }; + B208BC5E15BF63A80080705D /* big-orange-button-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBEA15BF63A80080705D /* big-orange-button-highlighted@2x.png */; }; + B208BC5F15BF63A80080705D /* big-orange-button.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBEB15BF63A80080705D /* big-orange-button.png */; }; + B208BC6015BF63A80080705D /* big-orange-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBEC15BF63A80080705D /* big-orange-button@2x.png */; }; + B208BC6115BF63A80080705D /* checkbox.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBED15BF63A80080705D /* checkbox.png */; }; + B208BC6215BF63A80080705D /* checkbox@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBEE15BF63A80080705D /* checkbox@2x.png */; }; + B208BC6315BF63A80080705D /* corner-bl.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBEF15BF63A80080705D /* corner-bl.png */; }; + B208BC6415BF63A80080705D /* corner-bl@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF015BF63A80080705D /* corner-bl@2x.png */; }; + B208BC6515BF63A80080705D /* corner-br.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF115BF63A80080705D /* corner-br.png */; }; + B208BC6615BF63A80080705D /* corner-br@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF215BF63A80080705D /* corner-br@2x.png */; }; + B208BC6715BF63A80080705D /* corner-tl.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF315BF63A80080705D /* corner-tl.png */; }; + B208BC6815BF63A80080705D /* corner-tl@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF415BF63A80080705D /* corner-tl@2x.png */; }; + B208BC6915BF63A80080705D /* corner-tr.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF515BF63A80080705D /* corner-tr.png */; }; + B208BC6A15BF63A80080705D /* corner-tr@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF615BF63A80080705D /* corner-tr@2x.png */; }; + B208BC6B15BF63A80080705D /* Default-Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF715BF63A80080705D /* Default-Landscape.png */; }; + B208BC6C15BF63A80080705D /* Default-Landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF815BF63A80080705D /* Default-Landscape@2x.png */; }; + B208BC6D15BF63A80080705D /* Default-Portrait.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBF915BF63A80080705D /* Default-Portrait.png */; }; + B208BC6E15BF63A80080705D /* Default-Portrait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBFA15BF63A80080705D /* Default-Portrait@2x.png */; }; + B208BC6F15BF63A80080705D /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBFB15BF63A80080705D /* Default.png */; }; + B208BC7015BF63A80080705D /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBFC15BF63A80080705D /* Default@2x.png */; }; + B208BC7115BF63A80080705D /* disclosure-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBFD15BF63A80080705D /* disclosure-highlighted.png */; }; + B208BC7215BF63A80080705D /* disclosure-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBFE15BF63A80080705D /* disclosure-highlighted@2x.png */; }; + B208BC7315BF63A80080705D /* disclosure.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BBFF15BF63A80080705D /* disclosure.png */; }; + B208BC7415BF63A80080705D /* disclosure@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0015BF63A80080705D /* disclosure@2x.png */; }; + B208BC7515BF63A80080705D /* Icon-100.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0115BF63A80080705D /* Icon-100.png */; }; + B208BC7615BF63A80080705D /* Icon-114.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0215BF63A80080705D /* Icon-114.png */; }; + B208BC7715BF63A80080705D /* Icon-144.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0315BF63A80080705D /* Icon-144.png */; }; + B208BC7815BF63A80080705D /* Icon-29.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0415BF63A80080705D /* Icon-29.png */; }; + B208BC7915BF63A80080705D /* Icon-50.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0515BF63A80080705D /* Icon-50.png */; }; + B208BC7A15BF63A80080705D /* Icon-57.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0615BF63A80080705D /* Icon-57.png */; }; + B208BC7B15BF63A80080705D /* Icon-58.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0715BF63A80080705D /* Icon-58.png */; }; + B208BC7C15BF63A80080705D /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0815BF63A80080705D /* Icon-72.png */; }; + B208BC7D15BF63A80080705D /* list-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0915BF63A80080705D /* list-icon.png */; }; + B208BC7E15BF63A80080705D /* list-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0A15BF63A80080705D /* list-icon@2x.png */; }; + B208BC7F15BF63A80080705D /* nav-back-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0B15BF63A80080705D /* nav-back-highlighted.png */; }; + B208BC8015BF63A80080705D /* nav-back-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0C15BF63A80080705D /* nav-back-highlighted@2x.png */; }; + B208BC8115BF63A80080705D /* nav-back.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0D15BF63A80080705D /* nav-back.png */; }; + B208BC8215BF63A80080705D /* nav-back@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0E15BF63A80080705D /* nav-back@2x.png */; }; + B208BC8315BF63A80080705D /* nav-background.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC0F15BF63A80080705D /* nav-background.png */; }; + B208BC8415BF63A80080705D /* nav-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1015BF63A80080705D /* nav-background@2x.png */; }; + B208BC8515BF63A80080705D /* nav-button-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1115BF63A80080705D /* nav-button-highlighted.png */; }; + B208BC8615BF63A80080705D /* nav-button-highlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1215BF63A80080705D /* nav-button-highlighted@2x.png */; }; + B208BC8715BF63A80080705D /* nav-button.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1315BF63A80080705D /* nav-button.png */; }; + B208BC8815BF63A80080705D /* nav-button@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1415BF63A80080705D /* nav-button@2x.png */; }; + B208BC8915BF63A80080705D /* nav-title.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1515BF63A80080705D /* nav-title.png */; }; + B208BC8A15BF63A80080705D /* nav-title@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1615BF63A80080705D /* nav-title@2x.png */; }; + B208BC8B15BF63A80080705D /* plus.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1715BF63A80080705D /* plus.png */; }; + B208BC8C15BF63A80080705D /* plus@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1815BF63A80080705D /* plus@2x.png */; }; + B208BC8D15BF63A80080705D /* settings.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1915BF63A80080705D /* settings.png */; }; + B208BC8E15BF63A80080705D /* settings@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1A15BF63A80080705D /* settings@2x.png */; }; + B208BC8F15BF63A80080705D /* small-check.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1B15BF63A80080705D /* small-check.png */; }; + B208BC9015BF63A80080705D /* small-check@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1C15BF63A80080705D /* small-check@2x.png */; }; + B208BC9115BF63A80080705D /* tag-x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1D15BF63A80080705D /* tag-x.png */; }; + B208BC9215BF63A80080705D /* tag-x@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1E15BF63A80080705D /* tag-x@2x.png */; }; + B208BC9315BF63A80080705D /* tag.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC1F15BF63A80080705D /* tag.png */; }; + B208BC9415BF63A80080705D /* tag@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2015BF63A80080705D /* tag@2x.png */; }; + B208BC9515BF63A80080705D /* task-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2115BF63A80080705D /* task-icon.png */; }; + B208BC9615BF63A80080705D /* task-icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2215BF63A80080705D /* task-icon@2x.png */; }; + B208BC9715BF63A80080705D /* textfield-focused.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2315BF63A80080705D /* textfield-focused.png */; }; + B208BC9815BF63A80080705D /* textfield-focused@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2415BF63A80080705D /* textfield-focused@2x.png */; }; + B208BC9915BF63A80080705D /* textfield.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2515BF63A80080705D /* textfield.png */; }; + B208BC9A15BF63A80080705D /* textfield@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2615BF63A80080705D /* textfield@2x.png */; }; + B208BC9B15BF63A80080705D /* x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2715BF63A80080705D /* x.png */; }; + B208BC9C15BF63A80080705D /* x@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B208BC2815BF63A80080705D /* x@2x.png */; }; + B208C10115BF63E20080705D /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208BE4315BF63E00080705D /* Crashlytics.framework */; }; + B208C10F15BF63E20080705D /* LocalyticsDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BE6015BF63E00080705D /* LocalyticsDatabase.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B208C11015BF63E20080705D /* LocalyticsSession.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BE6215BF63E00080705D /* LocalyticsSession.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B208C11115BF63E20080705D /* LocalyticsUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BE6415BF63E00080705D /* LocalyticsUploader.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B208C11215BF63E20080705D /* LocalyticsUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BE6615BF63E00080705D /* LocalyticsUtilities.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B208C11315BF63E20080705D /* Readme.markdown in Resources */ = {isa = PBXBuildFile; fileRef = B208BE6715BF63E00080705D /* Readme.markdown */; }; + B208C14015BF63E20080705D /* SSPullToRefreshDefaultContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BEC515BF63E00080705D /* SSPullToRefreshDefaultContentView.m */; }; + B208C14115BF63E20080705D /* SSPullToRefreshSimpleContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BEC715BF63E00080705D /* SSPullToRefreshSimpleContentView.m */; }; + B208C14215BF63E20080705D /* SSPullToRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BEC915BF63E00080705D /* SSPullToRefreshView.m */; }; + B208C1A515BF63E20080705D /* TTTAttributedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = B208BF7E15BF63E00080705D /* TTTAttributedLabel.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B208C1EB15BF64630080705D /* libSSToolkit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1DF15BF63E30080705D /* libSSToolkit.a */; }; + B208C1F415BF64630080705D /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1EC15BF64630080705D /* CoreData.framework */; }; + B208C1F515BF64630080705D /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1ED15BF64630080705D /* CoreText.framework */; }; + B208C1F615BF64630080705D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1EE15BF64630080705D /* Foundation.framework */; }; + B208C1F715BF64630080705D /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1EF15BF64630080705D /* MobileCoreServices.framework */; }; + B208C1F815BF64630080705D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1F015BF64630080705D /* QuartzCore.framework */; }; + B208C1F915BF64630080705D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1F115BF64630080705D /* Security.framework */; }; + B208C1FA15BF64630080705D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1F215BF64630080705D /* SystemConfiguration.framework */; }; + B208C1FB15BF64630080705D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C1F315BF64630080705D /* UIKit.framework */; }; + B208C5FC15BF658D0080705D /* libCheddarKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B208C5BF15BF654B0080705D /* libCheddarKit.a */; }; + B28FD2BE15BF730100365CD6 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2BD15BF730100365CD6 /* CFNetwork.framework */; }; + B28FD2C015BF731100365CD6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2BF15BF731000365CD6 /* CoreGraphics.framework */; }; + B28FD2C215BF731B00365CD6 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2C115BF731B00365CD6 /* MessageUI.framework */; }; + B28FD2C415BF732100365CD6 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2C315BF732100365CD6 /* libz.dylib */; }; + B28FD2C615BF732800365CD6 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2C515BF732800365CD6 /* StoreKit.framework */; }; + B28FD2C815BF732F00365CD6 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2C715BF732F00365CD6 /* libsqlite3.dylib */; }; + B28FD2D115BF739300365CD6 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B28FD2D015BF739300365CD6 /* libicucore.dylib */; }; + B28FD2D915BF742D00365CD6 /* Cheddar.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = B28FD2D215BF742D00365CD6 /* Cheddar.entitlements */; }; + B28FD2DB15BF742D00365CD6 /* Gotham-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = B28FD2D515BF742D00365CD6 /* Gotham-Bold.otf */; }; + B28FD2DC15BF742D00365CD6 /* Gotham-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = B28FD2D615BF742D00365CD6 /* Gotham-BoldItalic.otf */; }; + B28FD2DD15BF742D00365CD6 /* Gotham-Book.otf in Resources */ = {isa = PBXBuildFile; fileRef = B28FD2D715BF742D00365CD6 /* Gotham-Book.otf */; }; + B28FD2DE15BF742D00365CD6 /* Gotham-BookItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = B28FD2D815BF742D00365CD6 /* Gotham-BookItalic.otf */; }; + B28FD2E215BF755600365CD6 /* Cheddar.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B28FD2E015BF755600365CD6 /* Cheddar.xcdatamodeld */; }; + B28FD2E815BF774D00365CD6 /* CDIDefines.m in Sources */ = {isa = PBXBuildFile; fileRef = B28FD2E715BF774D00365CD6 /* CDIDefines.m */; }; + B2A2B07B15C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B2A2B07A15C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + B208C1DE15BF63E30080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = D2AAC07E0554694100DB518D; + remoteInfo = SSToolkit; + }; + B208C1E015BF63E30080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B239101D1357DC3E00ADE21B; + remoteInfo = SSToolkitTests; + }; + B208C1E215BF63E30080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B2C507EA151BA64400E94614; + remoteInfo = SSToolkitResources; + }; + B208C1E715BF64240080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = D2AAC07D0554694100DB518D; + remoteInfo = SSToolkit; + }; + B208C1E915BF64240080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = B2C507E9151BA64400E94614; + remoteInfo = SSToolkitResources; + }; + B208C5BE15BF654B0080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208C21215BF65490080705D /* CheddarKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B244408515BE53DC00D4D4CA; + remoteInfo = CheddarKit; + }; + B208C5FA15BF656C0080705D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208C21215BF65490080705D /* CheddarKit.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = B244408415BE53DC00D4D4CA; + remoteInfo = CheddarKit; + }; + B2A2B05C15C0B64700772CF6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B208C21215BF65490080705D /* CheddarKit.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B2D8D59015BF7EE600A61836; + remoteInfo = CheddarKitMac; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + B208BB9215BF63A80080705D /* CDIAddListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIAddListTableViewCell.h; sourceTree = ""; }; + B208BB9315BF63A80080705D /* CDIAddListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIAddListTableViewCell.m; sourceTree = ""; }; + B208BB9415BF63A80080705D /* CDIAddTaskAnimationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIAddTaskAnimationView.h; sourceTree = ""; }; + B208BB9515BF63A80080705D /* CDIAddTaskAnimationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIAddTaskAnimationView.m; sourceTree = ""; }; + B208BB9615BF63A80080705D /* CDIAddTaskView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIAddTaskView.h; sourceTree = ""; }; + B208BB9715BF63A80080705D /* CDIAddTaskView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIAddTaskView.m; sourceTree = ""; }; + B208BB9815BF63A80080705D /* CDIAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIAppDelegate.h; sourceTree = ""; }; + B208BB9915BF63A80080705D /* CDIAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIAppDelegate.m; sourceTree = ""; }; + B208BB9A15BF63A80080705D /* CDIAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIAttributedLabel.h; sourceTree = ""; }; + B208BB9B15BF63A80080705D /* CDIAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIAttributedLabel.m; sourceTree = ""; }; + B208BB9C15BF63A80080705D /* CDICreateListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDICreateListViewController.h; sourceTree = ""; }; + B208BB9D15BF63A80080705D /* CDICreateListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDICreateListViewController.m; sourceTree = ""; }; + B208BB9E15BF63A80080705D /* CDIListsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIListsViewController.h; sourceTree = ""; }; + B208BB9F15BF63A80080705D /* CDIListsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIListsViewController.m; sourceTree = ""; }; + B208BBA015BF63A80080705D /* CDIListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIListTableViewCell.h; sourceTree = ""; }; + B208BBA115BF63A80080705D /* CDIListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIListTableViewCell.m; sourceTree = ""; }; + B208BBA215BF63A80080705D /* CDIListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIListViewController.h; sourceTree = ""; }; + B208BBA315BF63A80080705D /* CDIListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIListViewController.m; sourceTree = ""; }; + B208BBA415BF63A80080705D /* CDILoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDILoadingView.h; sourceTree = ""; }; + B208BBA515BF63A80080705D /* CDILoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDILoadingView.m; sourceTree = ""; }; + B208BBA615BF63A80080705D /* CDIManagedTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIManagedTableViewController.h; sourceTree = ""; }; + B208BBA715BF63A80080705D /* CDIManagedTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIManagedTableViewController.m; sourceTree = ""; }; + B208BBA815BF63A80080705D /* CDINoListsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDINoListsView.h; sourceTree = ""; }; + B208BBA915BF63A80080705D /* CDINoListsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDINoListsView.m; sourceTree = ""; }; + B208BBAA15BF63A80080705D /* CDINoTasksView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDINoTasksView.h; sourceTree = ""; }; + B208BBAB15BF63A80080705D /* CDINoTasksView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDINoTasksView.m; sourceTree = ""; }; + B208BBAC15BF63A80080705D /* CDIPullToRefreshContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIPullToRefreshContentView.h; sourceTree = ""; }; + B208BBAD15BF63A80080705D /* CDIPullToRefreshContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIPullToRefreshContentView.m; sourceTree = ""; }; + B208BBAE15BF63A80080705D /* CDIPullToRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIPullToRefreshView.h; sourceTree = ""; }; + B208BBAF15BF63A80080705D /* CDIPullToRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIPullToRefreshView.m; sourceTree = ""; }; + B208BBB015BF63A80080705D /* CDIRenameTaskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIRenameTaskViewController.h; sourceTree = ""; }; + B208BBB115BF63A80080705D /* CDIRenameTaskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIRenameTaskViewController.m; sourceTree = ""; }; + B208BBB215BF63A80080705D /* CDISessionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDISessionsViewController.h; sourceTree = ""; }; + B208BBB315BF63A80080705D /* CDISessionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDISessionsViewController.m; sourceTree = ""; }; + B208BBB415BF63A80080705D /* CDISettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDISettingsViewController.h; sourceTree = ""; }; + B208BBB515BF63A80080705D /* CDISettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDISettingsViewController.m; sourceTree = ""; }; + B208BBB615BF63A80080705D /* CDISignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDISignInViewController.h; sourceTree = ""; }; + B208BBB715BF63A80080705D /* CDISignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDISignInViewController.m; sourceTree = ""; }; + B208BBB815BF63A80080705D /* CDISignUpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDISignUpViewController.h; sourceTree = ""; }; + B208BBB915BF63A80080705D /* CDISignUpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDISignUpViewController.m; sourceTree = ""; }; + B208BBBA15BF63A80080705D /* CDISplitViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDISplitViewController.h; sourceTree = ""; }; + B208BBBB15BF63A80080705D /* CDISplitViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDISplitViewController.m; sourceTree = ""; }; + B208BBBC15BF63A80080705D /* CDITableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDITableViewCell.h; sourceTree = ""; }; + B208BBBD15BF63A80080705D /* CDITableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDITableViewCell.m; sourceTree = ""; }; + B208BBBE15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDITableViewCellDeleteConfirmationControl.h; sourceTree = ""; }; + B208BBBF15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDITableViewCellDeleteConfirmationControl.m; sourceTree = ""; }; + B208BBC015BF63A80080705D /* CDITagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDITagView.h; sourceTree = ""; }; + B208BBC115BF63A80080705D /* CDITagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDITagView.m; sourceTree = ""; }; + B208BBC215BF63A80080705D /* CDITaskTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDITaskTableViewCell.h; sourceTree = ""; }; + B208BBC315BF63A80080705D /* CDITaskTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDITaskTableViewCell.m; sourceTree = ""; }; + B208BBC415BF63A80080705D /* CDITransactionObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDITransactionObserver.h; sourceTree = ""; }; + B208BBC515BF63A80080705D /* CDITransactionObserver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDITransactionObserver.m; sourceTree = ""; }; + B208BBC615BF63A80080705D /* CDIUpgradeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIUpgradeViewController.h; sourceTree = ""; }; + B208BBC715BF63A80080705D /* CDIUpgradeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIUpgradeViewController.m; sourceTree = ""; }; + B208BBC815BF63A80080705D /* SKPaymentTransaction+Cheddar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SKPaymentTransaction+Cheddar.h"; sourceTree = ""; }; + B208BBC915BF63A80080705D /* SKPaymentTransaction+Cheddar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SKPaymentTransaction+Cheddar.m"; sourceTree = ""; }; + B208BBCA15BF63A80080705D /* UIButton+Cheddar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+Cheddar.h"; sourceTree = ""; }; + B208BBCB15BF63A80080705D /* UIButton+Cheddar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+Cheddar.m"; sourceTree = ""; }; + B208BBCC15BF63A80080705D /* UIColor+Cheddar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Cheddar.h"; sourceTree = ""; }; + B208BBCD15BF63A80080705D /* UIColor+Cheddar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Cheddar.m"; sourceTree = ""; }; + B208BBCE15BF63A80080705D /* UIFont+Cheddar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIFont+Cheddar.h"; sourceTree = ""; }; + B208BBCF15BF63A80080705D /* UIFont+Cheddar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIFont+Cheddar.m"; sourceTree = ""; }; + B208BBD115BF63A80080705D /* Cheddar-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Cheddar-Prefix.pch"; sourceTree = ""; }; + B208BBD215BF63A80080705D /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + B208BBD415BF63A80080705D /* Cheddar-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Cheddar-Info.plist"; sourceTree = ""; }; + B208BBD715BF63A80080705D /* add-list-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add-list-arrow.png"; sourceTree = ""; }; + B208BBD815BF63A80080705D /* add-list-arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add-list-arrow@2x.png"; sourceTree = ""; }; + B208BBD915BF63A80080705D /* add-task-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add-task-arrow.png"; sourceTree = ""; }; + B208BBDA15BF63A80080705D /* add-task-arrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add-task-arrow@2x.png"; sourceTree = ""; }; + B208BBDB15BF63A80080705D /* arches.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = arches.png; sourceTree = ""; }; + B208BBDC15BF63A80080705D /* arches@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "arches@2x.png"; sourceTree = ""; }; + B208BBDD15BF63A80080705D /* archive-button-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "archive-button-highlighted.png"; sourceTree = ""; }; + B208BBDE15BF63A80080705D /* archive-button-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "archive-button-highlighted@2x.png"; sourceTree = ""; }; + B208BBDF15BF63A80080705D /* archive-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "archive-button.png"; sourceTree = ""; }; + B208BBE015BF63A80080705D /* archive-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "archive-button@2x.png"; sourceTree = ""; }; + B208BBE115BF63A80080705D /* big-button-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-button-highlighted.png"; sourceTree = ""; }; + B208BBE215BF63A80080705D /* big-button-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-button-highlighted@2x.png"; sourceTree = ""; }; + B208BBE315BF63A80080705D /* big-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-button.png"; sourceTree = ""; }; + B208BBE415BF63A80080705D /* big-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-button@2x.png"; sourceTree = ""; }; + B208BBE515BF63A80080705D /* big-gray-button-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-gray-button-highlighted.png"; sourceTree = ""; }; + B208BBE615BF63A80080705D /* big-gray-button-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-gray-button-highlighted@2x.png"; sourceTree = ""; }; + B208BBE715BF63A80080705D /* big-gray-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-gray-button.png"; sourceTree = ""; }; + B208BBE815BF63A80080705D /* big-gray-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-gray-button@2x.png"; sourceTree = ""; }; + B208BBE915BF63A80080705D /* big-orange-button-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-orange-button-highlighted.png"; sourceTree = ""; }; + B208BBEA15BF63A80080705D /* big-orange-button-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-orange-button-highlighted@2x.png"; sourceTree = ""; }; + B208BBEB15BF63A80080705D /* big-orange-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-orange-button.png"; sourceTree = ""; }; + B208BBEC15BF63A80080705D /* big-orange-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "big-orange-button@2x.png"; sourceTree = ""; }; + B208BBED15BF63A80080705D /* checkbox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checkbox.png; sourceTree = ""; }; + B208BBEE15BF63A80080705D /* checkbox@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "checkbox@2x.png"; sourceTree = ""; }; + B208BBEF15BF63A80080705D /* corner-bl.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-bl.png"; sourceTree = ""; }; + B208BBF015BF63A80080705D /* corner-bl@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-bl@2x.png"; sourceTree = ""; }; + B208BBF115BF63A80080705D /* corner-br.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-br.png"; sourceTree = ""; }; + B208BBF215BF63A80080705D /* corner-br@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-br@2x.png"; sourceTree = ""; }; + B208BBF315BF63A80080705D /* corner-tl.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-tl.png"; sourceTree = ""; }; + B208BBF415BF63A80080705D /* corner-tl@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-tl@2x.png"; sourceTree = ""; }; + B208BBF515BF63A80080705D /* corner-tr.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-tr.png"; sourceTree = ""; }; + B208BBF615BF63A80080705D /* corner-tr@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "corner-tr@2x.png"; sourceTree = ""; }; + B208BBF715BF63A80080705D /* Default-Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape.png"; sourceTree = ""; }; + B208BBF815BF63A80080705D /* Default-Landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Landscape@2x.png"; sourceTree = ""; }; + B208BBF915BF63A80080705D /* Default-Portrait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait.png"; sourceTree = ""; }; + B208BBFA15BF63A80080705D /* Default-Portrait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-Portrait@2x.png"; sourceTree = ""; }; + B208BBFB15BF63A80080705D /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + B208BBFC15BF63A80080705D /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + B208BBFD15BF63A80080705D /* disclosure-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "disclosure-highlighted.png"; sourceTree = ""; }; + B208BBFE15BF63A80080705D /* disclosure-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "disclosure-highlighted@2x.png"; sourceTree = ""; }; + B208BBFF15BF63A80080705D /* disclosure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = disclosure.png; sourceTree = ""; }; + B208BC0015BF63A80080705D /* disclosure@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "disclosure@2x.png"; sourceTree = ""; }; + B208BC0115BF63A80080705D /* Icon-100.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-100.png"; sourceTree = ""; }; + B208BC0215BF63A80080705D /* Icon-114.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-114.png"; sourceTree = ""; }; + B208BC0315BF63A80080705D /* Icon-144.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-144.png"; sourceTree = ""; }; + B208BC0415BF63A80080705D /* Icon-29.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-29.png"; sourceTree = ""; }; + B208BC0515BF63A80080705D /* Icon-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-50.png"; sourceTree = ""; }; + B208BC0615BF63A80080705D /* Icon-57.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-57.png"; sourceTree = ""; }; + B208BC0715BF63A80080705D /* Icon-58.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-58.png"; sourceTree = ""; }; + B208BC0815BF63A80080705D /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = ""; }; + B208BC0915BF63A80080705D /* list-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "list-icon.png"; sourceTree = ""; }; + B208BC0A15BF63A80080705D /* list-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "list-icon@2x.png"; sourceTree = ""; }; + B208BC0B15BF63A80080705D /* nav-back-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-back-highlighted.png"; sourceTree = ""; }; + B208BC0C15BF63A80080705D /* nav-back-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-back-highlighted@2x.png"; sourceTree = ""; }; + B208BC0D15BF63A80080705D /* nav-back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-back.png"; sourceTree = ""; }; + B208BC0E15BF63A80080705D /* nav-back@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-back@2x.png"; sourceTree = ""; }; + B208BC0F15BF63A80080705D /* nav-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-background.png"; sourceTree = ""; }; + B208BC1015BF63A80080705D /* nav-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-background@2x.png"; sourceTree = ""; }; + B208BC1115BF63A80080705D /* nav-button-highlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-button-highlighted.png"; sourceTree = ""; }; + B208BC1215BF63A80080705D /* nav-button-highlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-button-highlighted@2x.png"; sourceTree = ""; }; + B208BC1315BF63A80080705D /* nav-button.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-button.png"; sourceTree = ""; }; + B208BC1415BF63A80080705D /* nav-button@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-button@2x.png"; sourceTree = ""; }; + B208BC1515BF63A80080705D /* nav-title.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-title.png"; sourceTree = ""; }; + B208BC1615BF63A80080705D /* nav-title@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nav-title@2x.png"; sourceTree = ""; }; + B208BC1715BF63A80080705D /* plus.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = plus.png; sourceTree = ""; }; + B208BC1815BF63A80080705D /* plus@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "plus@2x.png"; sourceTree = ""; }; + B208BC1915BF63A80080705D /* settings.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = settings.png; sourceTree = ""; }; + B208BC1A15BF63A80080705D /* settings@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "settings@2x.png"; sourceTree = ""; }; + B208BC1B15BF63A80080705D /* small-check.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "small-check.png"; sourceTree = ""; }; + B208BC1C15BF63A80080705D /* small-check@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "small-check@2x.png"; sourceTree = ""; }; + B208BC1D15BF63A80080705D /* tag-x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tag-x.png"; sourceTree = ""; }; + B208BC1E15BF63A80080705D /* tag-x@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tag-x@2x.png"; sourceTree = ""; }; + B208BC1F15BF63A80080705D /* tag.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tag.png; sourceTree = ""; }; + B208BC2015BF63A80080705D /* tag@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tag@2x.png"; sourceTree = ""; }; + B208BC2115BF63A80080705D /* task-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "task-icon.png"; sourceTree = ""; }; + B208BC2215BF63A80080705D /* task-icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "task-icon@2x.png"; sourceTree = ""; }; + B208BC2315BF63A80080705D /* textfield-focused.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "textfield-focused.png"; sourceTree = ""; }; + B208BC2415BF63A80080705D /* textfield-focused@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "textfield-focused@2x.png"; sourceTree = ""; }; + B208BC2515BF63A80080705D /* textfield.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = textfield.png; sourceTree = ""; }; + B208BC2615BF63A80080705D /* textfield@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "textfield@2x.png"; sourceTree = ""; }; + B208BC2715BF63A80080705D /* x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = x.png; sourceTree = ""; }; + B208BC2815BF63A80080705D /* x@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "x@2x.png"; sourceTree = ""; }; + B208BE4315BF63E00080705D /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Crashlytics.framework; sourceTree = ""; }; + B208BE5F15BF63E00080705D /* LocalyticsDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsDatabase.h; sourceTree = ""; }; + B208BE6015BF63E00080705D /* LocalyticsDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsDatabase.m; sourceTree = ""; }; + B208BE6115BF63E00080705D /* LocalyticsSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsSession.h; sourceTree = ""; }; + B208BE6215BF63E00080705D /* LocalyticsSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsSession.m; sourceTree = ""; }; + B208BE6315BF63E00080705D /* LocalyticsUploader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsUploader.h; sourceTree = ""; }; + B208BE6415BF63E00080705D /* LocalyticsUploader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsUploader.m; sourceTree = ""; }; + B208BE6515BF63E00080705D /* LocalyticsUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalyticsUtilities.h; sourceTree = ""; }; + B208BE6615BF63E00080705D /* LocalyticsUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalyticsUtilities.m; sourceTree = ""; }; + B208BE6715BF63E00080705D /* Readme.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.markdown; sourceTree = ""; }; + B208BE6815BF63E00080705D /* WebserviceConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebserviceConstants.h; sourceTree = ""; }; + B208BEC215BF63E00080705D /* SSPullToRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSPullToRefresh.h; sourceTree = ""; }; + B208BEC415BF63E00080705D /* SSPullToRefreshDefaultContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSPullToRefreshDefaultContentView.h; sourceTree = ""; }; + B208BEC515BF63E00080705D /* SSPullToRefreshDefaultContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshDefaultContentView.m; sourceTree = ""; }; + B208BEC615BF63E00080705D /* SSPullToRefreshSimpleContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSPullToRefreshSimpleContentView.h; sourceTree = ""; }; + B208BEC715BF63E00080705D /* SSPullToRefreshSimpleContentView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshSimpleContentView.m; sourceTree = ""; }; + B208BEC815BF63E00080705D /* SSPullToRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSPullToRefreshView.h; sourceTree = ""; }; + B208BEC915BF63E00080705D /* SSPullToRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSPullToRefreshView.m; sourceTree = ""; }; + B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = SSToolkit.xcodeproj; sourceTree = ""; }; + B208BF7D15BF63E00080705D /* TTTAttributedLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTAttributedLabel.h; sourceTree = ""; }; + B208BF7E15BF63E00080705D /* TTTAttributedLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTAttributedLabel.m; sourceTree = ""; }; + B208C1EC15BF64630080705D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + B208C1ED15BF64630080705D /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + B208C1EE15BF64630080705D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + B208C1EF15BF64630080705D /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + B208C1F015BF64630080705D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + B208C1F115BF64630080705D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + B208C1F215BF64630080705D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + B208C1F315BF64630080705D /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + B208C21215BF65490080705D /* CheddarKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = CheddarKit.xcodeproj; sourceTree = ""; }; + B23FA755151FE0710069A0D1 /* Cheddar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Cheddar.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B28FD2BD15BF730100365CD6 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; + B28FD2BF15BF731000365CD6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + B28FD2C115BF731B00365CD6 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; + B28FD2C315BF732100365CD6 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + B28FD2C515BF732800365CD6 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + B28FD2C715BF732F00365CD6 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + B28FD2D015BF739300365CD6 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; + B28FD2D215BF742D00365CD6 /* Cheddar.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Cheddar.entitlements; sourceTree = ""; }; + B28FD2D515BF742D00365CD6 /* Gotham-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Gotham-Bold.otf"; sourceTree = ""; }; + B28FD2D615BF742D00365CD6 /* Gotham-BoldItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Gotham-BoldItalic.otf"; sourceTree = ""; }; + B28FD2D715BF742D00365CD6 /* Gotham-Book.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Gotham-Book.otf"; sourceTree = ""; }; + B28FD2D815BF742D00365CD6 /* Gotham-BookItalic.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Gotham-BookItalic.otf"; sourceTree = ""; }; + B28FD2E115BF755600365CD6 /* Cheddar.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Cheddar.xcdatamodel; sourceTree = ""; }; + B28FD2E315BF756800365CD6 /* Cheddar 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Cheddar 2.xcdatamodel"; sourceTree = ""; }; + B28FD2E415BF761C00365CD6 /* CDIDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDIDefines.h; sourceTree = ""; }; + B28FD2E715BF774D00365CD6 /* CDIDefines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CDIDefines.m; sourceTree = ""; }; + B2A2B07915C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CDKTask+CheddariOSAdditions.h"; sourceTree = ""; }; + B2A2B07A15C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "CDKTask+CheddariOSAdditions.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + B23FA752151FE0710069A0D1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B28FD2D115BF739300365CD6 /* libicucore.dylib in Frameworks */, + B208C1F715BF64630080705D /* MobileCoreServices.framework in Frameworks */, + B28FD2C815BF732F00365CD6 /* libsqlite3.dylib in Frameworks */, + B28FD2C615BF732800365CD6 /* StoreKit.framework in Frameworks */, + B28FD2C415BF732100365CD6 /* libz.dylib in Frameworks */, + B28FD2C215BF731B00365CD6 /* MessageUI.framework in Frameworks */, + B28FD2C015BF731100365CD6 /* CoreGraphics.framework in Frameworks */, + B28FD2BE15BF730100365CD6 /* CFNetwork.framework in Frameworks */, + B208C5FC15BF658D0080705D /* libCheddarKit.a in Frameworks */, + B208C1F415BF64630080705D /* CoreData.framework in Frameworks */, + B208C1F515BF64630080705D /* CoreText.framework in Frameworks */, + B208C1F615BF64630080705D /* Foundation.framework in Frameworks */, + B208C1F815BF64630080705D /* QuartzCore.framework in Frameworks */, + B208C1F915BF64630080705D /* Security.framework in Frameworks */, + B208C1FA15BF64630080705D /* SystemConfiguration.framework in Frameworks */, + B208C1FB15BF64630080705D /* UIKit.framework in Frameworks */, + B208C1EB15BF64630080705D /* libSSToolkit.a in Frameworks */, + B208C10115BF63E20080705D /* Crashlytics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + B208BB9115BF63A80080705D /* Classes */ = { + isa = PBXGroup; + children = ( + B208BB9215BF63A80080705D /* CDIAddListTableViewCell.h */, + B208BB9315BF63A80080705D /* CDIAddListTableViewCell.m */, + B208BB9415BF63A80080705D /* CDIAddTaskAnimationView.h */, + B208BB9515BF63A80080705D /* CDIAddTaskAnimationView.m */, + B208BB9615BF63A80080705D /* CDIAddTaskView.h */, + B208BB9715BF63A80080705D /* CDIAddTaskView.m */, + B208BB9815BF63A80080705D /* CDIAppDelegate.h */, + B208BB9915BF63A80080705D /* CDIAppDelegate.m */, + B208BB9A15BF63A80080705D /* CDIAttributedLabel.h */, + B208BB9B15BF63A80080705D /* CDIAttributedLabel.m */, + B208BB9C15BF63A80080705D /* CDICreateListViewController.h */, + B208BB9D15BF63A80080705D /* CDICreateListViewController.m */, + B208BB9E15BF63A80080705D /* CDIListsViewController.h */, + B208BB9F15BF63A80080705D /* CDIListsViewController.m */, + B208BBA015BF63A80080705D /* CDIListTableViewCell.h */, + B208BBA115BF63A80080705D /* CDIListTableViewCell.m */, + B208BBA215BF63A80080705D /* CDIListViewController.h */, + B208BBA315BF63A80080705D /* CDIListViewController.m */, + B208BBA415BF63A80080705D /* CDILoadingView.h */, + B208BBA515BF63A80080705D /* CDILoadingView.m */, + B208BBA615BF63A80080705D /* CDIManagedTableViewController.h */, + B208BBA715BF63A80080705D /* CDIManagedTableViewController.m */, + B208BBA815BF63A80080705D /* CDINoListsView.h */, + B208BBA915BF63A80080705D /* CDINoListsView.m */, + B208BBAA15BF63A80080705D /* CDINoTasksView.h */, + B208BBAB15BF63A80080705D /* CDINoTasksView.m */, + B208BBAC15BF63A80080705D /* CDIPullToRefreshContentView.h */, + B208BBAD15BF63A80080705D /* CDIPullToRefreshContentView.m */, + B208BBAE15BF63A80080705D /* CDIPullToRefreshView.h */, + B208BBAF15BF63A80080705D /* CDIPullToRefreshView.m */, + B208BBB015BF63A80080705D /* CDIRenameTaskViewController.h */, + B208BBB115BF63A80080705D /* CDIRenameTaskViewController.m */, + B208BBB215BF63A80080705D /* CDISessionsViewController.h */, + B208BBB315BF63A80080705D /* CDISessionsViewController.m */, + B208BBB415BF63A80080705D /* CDISettingsViewController.h */, + B208BBB515BF63A80080705D /* CDISettingsViewController.m */, + B208BBB615BF63A80080705D /* CDISignInViewController.h */, + B208BBB715BF63A80080705D /* CDISignInViewController.m */, + B208BBB815BF63A80080705D /* CDISignUpViewController.h */, + B208BBB915BF63A80080705D /* CDISignUpViewController.m */, + B208BBBA15BF63A80080705D /* CDISplitViewController.h */, + B208BBBB15BF63A80080705D /* CDISplitViewController.m */, + B208BBBC15BF63A80080705D /* CDITableViewCell.h */, + B208BBBD15BF63A80080705D /* CDITableViewCell.m */, + B208BBBE15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.h */, + B208BBBF15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.m */, + B208BBC015BF63A80080705D /* CDITagView.h */, + B208BBC115BF63A80080705D /* CDITagView.m */, + B208BBC215BF63A80080705D /* CDITaskTableViewCell.h */, + B208BBC315BF63A80080705D /* CDITaskTableViewCell.m */, + B208BBC415BF63A80080705D /* CDITransactionObserver.h */, + B208BBC515BF63A80080705D /* CDITransactionObserver.m */, + B208BBC615BF63A80080705D /* CDIUpgradeViewController.h */, + B208BBC715BF63A80080705D /* CDIUpgradeViewController.m */, + B208BBC815BF63A80080705D /* SKPaymentTransaction+Cheddar.h */, + B208BBC915BF63A80080705D /* SKPaymentTransaction+Cheddar.m */, + B208BBCA15BF63A80080705D /* UIButton+Cheddar.h */, + B208BBCB15BF63A80080705D /* UIButton+Cheddar.m */, + B208BBCC15BF63A80080705D /* UIColor+Cheddar.h */, + B208BBCD15BF63A80080705D /* UIColor+Cheddar.m */, + B208BBCE15BF63A80080705D /* UIFont+Cheddar.h */, + B208BBCF15BF63A80080705D /* UIFont+Cheddar.m */, + B2A2B07915C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.h */, + B2A2B07A15C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.m */, + ); + path = Classes; + sourceTree = ""; + }; + B208BBD015BF63A80080705D /* Other Sources */ = { + isa = PBXGroup; + children = ( + B208BBD115BF63A80080705D /* Cheddar-Prefix.pch */, + B208BBD215BF63A80080705D /* main.m */, + B28FD2E415BF761C00365CD6 /* CDIDefines.h */, + B28FD2E715BF774D00365CD6 /* CDIDefines.m */, + ); + path = "Other Sources"; + sourceTree = ""; + }; + B208BBD315BF63A80080705D /* Resources */ = { + isa = PBXGroup; + children = ( + B28FD2D215BF742D00365CD6 /* Cheddar.entitlements */, + B28FD2D315BF742D00365CD6 /* Fonts */, + B208BBD415BF63A80080705D /* Cheddar-Info.plist */, + B208BBD615BF63A80080705D /* Images */, + ); + path = Resources; + sourceTree = ""; + }; + B208BBD615BF63A80080705D /* Images */ = { + isa = PBXGroup; + children = ( + B208BBD715BF63A80080705D /* add-list-arrow.png */, + B208BBD815BF63A80080705D /* add-list-arrow@2x.png */, + B208BBD915BF63A80080705D /* add-task-arrow.png */, + B208BBDA15BF63A80080705D /* add-task-arrow@2x.png */, + B208BBDB15BF63A80080705D /* arches.png */, + B208BBDC15BF63A80080705D /* arches@2x.png */, + B208BBDD15BF63A80080705D /* archive-button-highlighted.png */, + B208BBDE15BF63A80080705D /* archive-button-highlighted@2x.png */, + B208BBDF15BF63A80080705D /* archive-button.png */, + B208BBE015BF63A80080705D /* archive-button@2x.png */, + B208BBE115BF63A80080705D /* big-button-highlighted.png */, + B208BBE215BF63A80080705D /* big-button-highlighted@2x.png */, + B208BBE315BF63A80080705D /* big-button.png */, + B208BBE415BF63A80080705D /* big-button@2x.png */, + B208BBE515BF63A80080705D /* big-gray-button-highlighted.png */, + B208BBE615BF63A80080705D /* big-gray-button-highlighted@2x.png */, + B208BBE715BF63A80080705D /* big-gray-button.png */, + B208BBE815BF63A80080705D /* big-gray-button@2x.png */, + B208BBE915BF63A80080705D /* big-orange-button-highlighted.png */, + B208BBEA15BF63A80080705D /* big-orange-button-highlighted@2x.png */, + B208BBEB15BF63A80080705D /* big-orange-button.png */, + B208BBEC15BF63A80080705D /* big-orange-button@2x.png */, + B208BBED15BF63A80080705D /* checkbox.png */, + B208BBEE15BF63A80080705D /* checkbox@2x.png */, + B208BBEF15BF63A80080705D /* corner-bl.png */, + B208BBF015BF63A80080705D /* corner-bl@2x.png */, + B208BBF115BF63A80080705D /* corner-br.png */, + B208BBF215BF63A80080705D /* corner-br@2x.png */, + B208BBF315BF63A80080705D /* corner-tl.png */, + B208BBF415BF63A80080705D /* corner-tl@2x.png */, + B208BBF515BF63A80080705D /* corner-tr.png */, + B208BBF615BF63A80080705D /* corner-tr@2x.png */, + B208BBF715BF63A80080705D /* Default-Landscape.png */, + B208BBF815BF63A80080705D /* Default-Landscape@2x.png */, + B208BBF915BF63A80080705D /* Default-Portrait.png */, + B208BBFA15BF63A80080705D /* Default-Portrait@2x.png */, + B208BBFB15BF63A80080705D /* Default.png */, + B208BBFC15BF63A80080705D /* Default@2x.png */, + B208BBFD15BF63A80080705D /* disclosure-highlighted.png */, + B208BBFE15BF63A80080705D /* disclosure-highlighted@2x.png */, + B208BBFF15BF63A80080705D /* disclosure.png */, + B208BC0015BF63A80080705D /* disclosure@2x.png */, + B208BC0115BF63A80080705D /* Icon-100.png */, + B208BC0215BF63A80080705D /* Icon-114.png */, + B208BC0315BF63A80080705D /* Icon-144.png */, + B208BC0415BF63A80080705D /* Icon-29.png */, + B208BC0515BF63A80080705D /* Icon-50.png */, + B208BC0615BF63A80080705D /* Icon-57.png */, + B208BC0715BF63A80080705D /* Icon-58.png */, + B208BC0815BF63A80080705D /* Icon-72.png */, + B208BC0915BF63A80080705D /* list-icon.png */, + B208BC0A15BF63A80080705D /* list-icon@2x.png */, + B208BC0B15BF63A80080705D /* nav-back-highlighted.png */, + B208BC0C15BF63A80080705D /* nav-back-highlighted@2x.png */, + B208BC0D15BF63A80080705D /* nav-back.png */, + B208BC0E15BF63A80080705D /* nav-back@2x.png */, + B208BC0F15BF63A80080705D /* nav-background.png */, + B208BC1015BF63A80080705D /* nav-background@2x.png */, + B208BC1115BF63A80080705D /* nav-button-highlighted.png */, + B208BC1215BF63A80080705D /* nav-button-highlighted@2x.png */, + B208BC1315BF63A80080705D /* nav-button.png */, + B208BC1415BF63A80080705D /* nav-button@2x.png */, + B208BC1515BF63A80080705D /* nav-title.png */, + B208BC1615BF63A80080705D /* nav-title@2x.png */, + B208BC1715BF63A80080705D /* plus.png */, + B208BC1815BF63A80080705D /* plus@2x.png */, + B208BC1915BF63A80080705D /* settings.png */, + B208BC1A15BF63A80080705D /* settings@2x.png */, + B208BC1B15BF63A80080705D /* small-check.png */, + B208BC1C15BF63A80080705D /* small-check@2x.png */, + B208BC1D15BF63A80080705D /* tag-x.png */, + B208BC1E15BF63A80080705D /* tag-x@2x.png */, + B208BC1F15BF63A80080705D /* tag.png */, + B208BC2015BF63A80080705D /* tag@2x.png */, + B208BC2115BF63A80080705D /* task-icon.png */, + B208BC2215BF63A80080705D /* task-icon@2x.png */, + B208BC2315BF63A80080705D /* textfield-focused.png */, + B208BC2415BF63A80080705D /* textfield-focused@2x.png */, + B208BC2515BF63A80080705D /* textfield.png */, + B208BC2615BF63A80080705D /* textfield@2x.png */, + B208BC2715BF63A80080705D /* x.png */, + B208BC2815BF63A80080705D /* x@2x.png */, + ); + path = Images; + sourceTree = ""; + }; + B208BC9D15BF63E00080705D /* Vendor */ = { + isa = PBXGroup; + children = ( + B208C1FD15BF65490080705D /* CheddarKit */, + B208BE5E15BF63E00080705D /* Localytics */, + B208BEBF15BF63E00080705D /* SSPullToRefresh */, + B208BECA15BF63E00080705D /* SSToolkit */, + B208BF7915BF63E00080705D /* TTTAttributedLabel */, + B208BE4315BF63E00080705D /* Crashlytics.framework */, + ); + path = Vendor; + sourceTree = ""; + }; + B208BE5E15BF63E00080705D /* Localytics */ = { + isa = PBXGroup; + children = ( + B208BE5F15BF63E00080705D /* LocalyticsDatabase.h */, + B208BE6015BF63E00080705D /* LocalyticsDatabase.m */, + B208BE6115BF63E00080705D /* LocalyticsSession.h */, + B208BE6215BF63E00080705D /* LocalyticsSession.m */, + B208BE6315BF63E00080705D /* LocalyticsUploader.h */, + B208BE6415BF63E00080705D /* LocalyticsUploader.m */, + B208BE6515BF63E00080705D /* LocalyticsUtilities.h */, + B208BE6615BF63E00080705D /* LocalyticsUtilities.m */, + B208BE6715BF63E00080705D /* Readme.markdown */, + B208BE6815BF63E00080705D /* WebserviceConstants.h */, + ); + path = Localytics; + sourceTree = ""; + }; + B208BEBF15BF63E00080705D /* SSPullToRefresh */ = { + isa = PBXGroup; + children = ( + B208BEC215BF63E00080705D /* SSPullToRefresh.h */, + B208BEC415BF63E00080705D /* SSPullToRefreshDefaultContentView.h */, + B208BEC515BF63E00080705D /* SSPullToRefreshDefaultContentView.m */, + B208BEC615BF63E00080705D /* SSPullToRefreshSimpleContentView.h */, + B208BEC715BF63E00080705D /* SSPullToRefreshSimpleContentView.m */, + B208BEC815BF63E00080705D /* SSPullToRefreshView.h */, + B208BEC915BF63E00080705D /* SSPullToRefreshView.m */, + ); + path = SSPullToRefresh; + sourceTree = ""; + }; + B208BECA15BF63E00080705D /* SSToolkit */ = { + isa = PBXGroup; + children = ( + B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */, + ); + path = SSToolkit; + sourceTree = ""; + }; + B208BF6815BF63E00080705D /* Products */ = { + isa = PBXGroup; + children = ( + B208C1DF15BF63E30080705D /* libSSToolkit.a */, + B208C1E115BF63E30080705D /* SSToolkitTests.app */, + B208C1E315BF63E30080705D /* SSToolkitResources.bundle */, + ); + name = Products; + sourceTree = ""; + }; + B208BF7915BF63E00080705D /* TTTAttributedLabel */ = { + isa = PBXGroup; + children = ( + B208BF7D15BF63E00080705D /* TTTAttributedLabel.h */, + B208BF7E15BF63E00080705D /* TTTAttributedLabel.m */, + ); + path = TTTAttributedLabel; + sourceTree = ""; + }; + B208C1FC15BF64690080705D /* Frameworks */ = { + isa = PBXGroup; + children = ( + B28FD2D015BF739300365CD6 /* libicucore.dylib */, + B28FD2C715BF732F00365CD6 /* libsqlite3.dylib */, + B28FD2C515BF732800365CD6 /* StoreKit.framework */, + B28FD2C315BF732100365CD6 /* libz.dylib */, + B28FD2C115BF731B00365CD6 /* MessageUI.framework */, + B28FD2BF15BF731000365CD6 /* CoreGraphics.framework */, + B28FD2BD15BF730100365CD6 /* CFNetwork.framework */, + B208C1EC15BF64630080705D /* CoreData.framework */, + B208C1ED15BF64630080705D /* CoreText.framework */, + B208C1EE15BF64630080705D /* Foundation.framework */, + B208C1EF15BF64630080705D /* MobileCoreServices.framework */, + B208C1F015BF64630080705D /* QuartzCore.framework */, + B208C1F115BF64630080705D /* Security.framework */, + B208C1F215BF64630080705D /* SystemConfiguration.framework */, + B208C1F315BF64630080705D /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + B208C1FD15BF65490080705D /* CheddarKit */ = { + isa = PBXGroup; + children = ( + B28FD2DF15BF755600365CD6 /* Other Sources */, + B208C21215BF65490080705D /* CheddarKit.xcodeproj */, + ); + path = CheddarKit; + sourceTree = ""; + }; + B208C21315BF65490080705D /* Products */ = { + isa = PBXGroup; + children = ( + B208C5BF15BF654B0080705D /* libCheddarKit.a */, + B2A2B05D15C0B64700772CF6 /* CheddarKit.framework */, + ); + name = Products; + sourceTree = ""; + }; + B23FA74A151FE0710069A0D1 = { + isa = PBXGroup; + children = ( + B208BB9115BF63A80080705D /* Classes */, + B208BBD015BF63A80080705D /* Other Sources */, + B208BBD315BF63A80080705D /* Resources */, + B208BC9D15BF63E00080705D /* Vendor */, + B208C1FC15BF64690080705D /* Frameworks */, + B23FA756151FE0710069A0D1 /* Products */, + ); + sourceTree = ""; + }; + B23FA756151FE0710069A0D1 /* Products */ = { + isa = PBXGroup; + children = ( + B23FA755151FE0710069A0D1 /* Cheddar.app */, + ); + name = Products; + sourceTree = ""; + }; + B28FD2D315BF742D00365CD6 /* Fonts */ = { + isa = PBXGroup; + children = ( + B28FD2D515BF742D00365CD6 /* Gotham-Bold.otf */, + B28FD2D615BF742D00365CD6 /* Gotham-BoldItalic.otf */, + B28FD2D715BF742D00365CD6 /* Gotham-Book.otf */, + B28FD2D815BF742D00365CD6 /* Gotham-BookItalic.otf */, + ); + path = Fonts; + sourceTree = ""; + }; + B28FD2DF15BF755600365CD6 /* Other Sources */ = { + isa = PBXGroup; + children = ( + B28FD2E015BF755600365CD6 /* Cheddar.xcdatamodeld */, + ); + path = "Other Sources"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + B23FA754151FE0710069A0D1 /* Cheddar for iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = B23FA772151FE0710069A0D1 /* Build configuration list for PBXNativeTarget "Cheddar for iOS" */; + buildPhases = ( + B23FA751151FE0710069A0D1 /* Sources */, + B23FA752151FE0710069A0D1 /* Frameworks */, + B23FA753151FE0710069A0D1 /* Resources */, + B2A2D00F154799020098B28F /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + B208C5FB15BF656C0080705D /* PBXTargetDependency */, + B208C1E815BF64240080705D /* PBXTargetDependency */, + B208C1EA15BF64240080705D /* PBXTargetDependency */, + ); + name = "Cheddar for iOS"; + productName = Cheddar; + productReference = B23FA755151FE0710069A0D1 /* Cheddar.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + B23FA74C151FE0710069A0D1 /* Project object */ = { + isa = PBXProject; + attributes = { + CLASSPREFIX = CDI; + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = "Nothing Magical"; + }; + buildConfigurationList = B23FA74F151FE0710069A0D1 /* Build configuration list for PBXProject "Cheddar for iOS" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + de, + es, + fr, + id, + it, + ja, + ko, + ms, + nl, + pt, + pt_PT, + ru, + sv, + zh_Hans, + zh_Hant, + ); + mainGroup = B23FA74A151FE0710069A0D1; + productRefGroup = B23FA756151FE0710069A0D1 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = B208C21315BF65490080705D /* Products */; + ProjectRef = B208C21215BF65490080705D /* CheddarKit.xcodeproj */; + }, + { + ProductGroup = B208BF6815BF63E00080705D /* Products */; + ProjectRef = B208BF6715BF63E00080705D /* SSToolkit.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + B23FA754151FE0710069A0D1 /* Cheddar for iOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + B208C1DF15BF63E30080705D /* libSSToolkit.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSSToolkit.a; + remoteRef = B208C1DE15BF63E30080705D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B208C1E115BF63E30080705D /* SSToolkitTests.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = SSToolkitTests.app; + remoteRef = B208C1E015BF63E30080705D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B208C1E315BF63E30080705D /* SSToolkitResources.bundle */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = SSToolkitResources.bundle; + remoteRef = B208C1E215BF63E30080705D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B208C5BF15BF654B0080705D /* libCheddarKit.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libCheddarKit.a; + remoteRef = B208C5BE15BF654B0080705D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + B2A2B05D15C0B64700772CF6 /* CheddarKit.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = CheddarKit.framework; + remoteRef = B2A2B05C15C0B64700772CF6 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + B23FA753151FE0710069A0D1 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B208BC4B15BF63A80080705D /* add-list-arrow.png in Resources */, + B208BC4C15BF63A80080705D /* add-list-arrow@2x.png in Resources */, + B208BC4D15BF63A80080705D /* add-task-arrow.png in Resources */, + B208BC4E15BF63A80080705D /* add-task-arrow@2x.png in Resources */, + B208BC4F15BF63A80080705D /* arches.png in Resources */, + B208BC5015BF63A80080705D /* arches@2x.png in Resources */, + B208BC5115BF63A80080705D /* archive-button-highlighted.png in Resources */, + B208BC5215BF63A80080705D /* archive-button-highlighted@2x.png in Resources */, + B208BC5315BF63A80080705D /* archive-button.png in Resources */, + B208BC5415BF63A80080705D /* archive-button@2x.png in Resources */, + B208BC5515BF63A80080705D /* big-button-highlighted.png in Resources */, + B208BC5615BF63A80080705D /* big-button-highlighted@2x.png in Resources */, + B208BC5715BF63A80080705D /* big-button.png in Resources */, + B208BC5815BF63A80080705D /* big-button@2x.png in Resources */, + B208BC5915BF63A80080705D /* big-gray-button-highlighted.png in Resources */, + B208BC5A15BF63A80080705D /* big-gray-button-highlighted@2x.png in Resources */, + B208BC5B15BF63A80080705D /* big-gray-button.png in Resources */, + B208BC5C15BF63A80080705D /* big-gray-button@2x.png in Resources */, + B208BC5D15BF63A80080705D /* big-orange-button-highlighted.png in Resources */, + B208BC5E15BF63A80080705D /* big-orange-button-highlighted@2x.png in Resources */, + B208BC5F15BF63A80080705D /* big-orange-button.png in Resources */, + B208BC6015BF63A80080705D /* big-orange-button@2x.png in Resources */, + B208BC6115BF63A80080705D /* checkbox.png in Resources */, + B208BC6215BF63A80080705D /* checkbox@2x.png in Resources */, + B208BC6315BF63A80080705D /* corner-bl.png in Resources */, + B208BC6415BF63A80080705D /* corner-bl@2x.png in Resources */, + B208BC6515BF63A80080705D /* corner-br.png in Resources */, + B208BC6615BF63A80080705D /* corner-br@2x.png in Resources */, + B208BC6715BF63A80080705D /* corner-tl.png in Resources */, + B208BC6815BF63A80080705D /* corner-tl@2x.png in Resources */, + B208BC6915BF63A80080705D /* corner-tr.png in Resources */, + B208BC6A15BF63A80080705D /* corner-tr@2x.png in Resources */, + B208BC6B15BF63A80080705D /* Default-Landscape.png in Resources */, + B208BC6C15BF63A80080705D /* Default-Landscape@2x.png in Resources */, + B208BC6D15BF63A80080705D /* Default-Portrait.png in Resources */, + B208BC6E15BF63A80080705D /* Default-Portrait@2x.png in Resources */, + B208BC6F15BF63A80080705D /* Default.png in Resources */, + B208BC7015BF63A80080705D /* Default@2x.png in Resources */, + B208BC7115BF63A80080705D /* disclosure-highlighted.png in Resources */, + B208BC7215BF63A80080705D /* disclosure-highlighted@2x.png in Resources */, + B208BC7315BF63A80080705D /* disclosure.png in Resources */, + B208BC7415BF63A80080705D /* disclosure@2x.png in Resources */, + B208BC7515BF63A80080705D /* Icon-100.png in Resources */, + B208BC7615BF63A80080705D /* Icon-114.png in Resources */, + B208BC7715BF63A80080705D /* Icon-144.png in Resources */, + B208BC7815BF63A80080705D /* Icon-29.png in Resources */, + B208BC7915BF63A80080705D /* Icon-50.png in Resources */, + B208BC7A15BF63A80080705D /* Icon-57.png in Resources */, + B208BC7B15BF63A80080705D /* Icon-58.png in Resources */, + B208BC7C15BF63A80080705D /* Icon-72.png in Resources */, + B208BC7D15BF63A80080705D /* list-icon.png in Resources */, + B208BC7E15BF63A80080705D /* list-icon@2x.png in Resources */, + B208BC7F15BF63A80080705D /* nav-back-highlighted.png in Resources */, + B208BC8015BF63A80080705D /* nav-back-highlighted@2x.png in Resources */, + B208BC8115BF63A80080705D /* nav-back.png in Resources */, + B208BC8215BF63A80080705D /* nav-back@2x.png in Resources */, + B208BC8315BF63A80080705D /* nav-background.png in Resources */, + B208BC8415BF63A80080705D /* nav-background@2x.png in Resources */, + B208BC8515BF63A80080705D /* nav-button-highlighted.png in Resources */, + B208BC8615BF63A80080705D /* nav-button-highlighted@2x.png in Resources */, + B208BC8715BF63A80080705D /* nav-button.png in Resources */, + B208BC8815BF63A80080705D /* nav-button@2x.png in Resources */, + B208BC8915BF63A80080705D /* nav-title.png in Resources */, + B208BC8A15BF63A80080705D /* nav-title@2x.png in Resources */, + B208BC8B15BF63A80080705D /* plus.png in Resources */, + B208BC8C15BF63A80080705D /* plus@2x.png in Resources */, + B208BC8D15BF63A80080705D /* settings.png in Resources */, + B208BC8E15BF63A80080705D /* settings@2x.png in Resources */, + B208BC8F15BF63A80080705D /* small-check.png in Resources */, + B208BC9015BF63A80080705D /* small-check@2x.png in Resources */, + B208BC9115BF63A80080705D /* tag-x.png in Resources */, + B208BC9215BF63A80080705D /* tag-x@2x.png in Resources */, + B208BC9315BF63A80080705D /* tag.png in Resources */, + B208BC9415BF63A80080705D /* tag@2x.png in Resources */, + B208BC9515BF63A80080705D /* task-icon.png in Resources */, + B208BC9615BF63A80080705D /* task-icon@2x.png in Resources */, + B208BC9715BF63A80080705D /* textfield-focused.png in Resources */, + B208BC9815BF63A80080705D /* textfield-focused@2x.png in Resources */, + B208BC9915BF63A80080705D /* textfield.png in Resources */, + B208BC9A15BF63A80080705D /* textfield@2x.png in Resources */, + B208BC9B15BF63A80080705D /* x.png in Resources */, + B208BC9C15BF63A80080705D /* x@2x.png in Resources */, + B208C11315BF63E20080705D /* Readme.markdown in Resources */, + B28FD2D915BF742D00365CD6 /* Cheddar.entitlements in Resources */, + B28FD2DB15BF742D00365CD6 /* Gotham-Bold.otf in Resources */, + B28FD2DC15BF742D00365CD6 /* Gotham-BoldItalic.otf in Resources */, + B28FD2DD15BF742D00365CD6 /* Gotham-Book.otf in Resources */, + B28FD2DE15BF742D00365CD6 /* Gotham-BookItalic.otf in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + B2A2D00F154799020098B28F /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "./Vendor/Crashlytics.framework/run d719996ce2f7809259d6b116a1e5b1cf5d0f316d"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + B23FA751151FE0710069A0D1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B208BC2915BF63A80080705D /* CDIAddListTableViewCell.m in Sources */, + B208BC2A15BF63A80080705D /* CDIAddTaskAnimationView.m in Sources */, + B208BC2B15BF63A80080705D /* CDIAddTaskView.m in Sources */, + B208BC2C15BF63A80080705D /* CDIAppDelegate.m in Sources */, + B208BC2D15BF63A80080705D /* CDIAttributedLabel.m in Sources */, + B208BC2E15BF63A80080705D /* CDICreateListViewController.m in Sources */, + B208BC2F15BF63A80080705D /* CDIListsViewController.m in Sources */, + B208BC3015BF63A80080705D /* CDIListTableViewCell.m in Sources */, + B208BC3115BF63A80080705D /* CDIListViewController.m in Sources */, + B208BC3215BF63A80080705D /* CDILoadingView.m in Sources */, + B208BC3315BF63A80080705D /* CDIManagedTableViewController.m in Sources */, + B208BC3415BF63A80080705D /* CDINoListsView.m in Sources */, + B208BC3515BF63A80080705D /* CDINoTasksView.m in Sources */, + B208BC3615BF63A80080705D /* CDIPullToRefreshContentView.m in Sources */, + B208BC3715BF63A80080705D /* CDIPullToRefreshView.m in Sources */, + B208BC3815BF63A80080705D /* CDIRenameTaskViewController.m in Sources */, + B208BC3915BF63A80080705D /* CDISessionsViewController.m in Sources */, + B208BC3A15BF63A80080705D /* CDISettingsViewController.m in Sources */, + B208BC3B15BF63A80080705D /* CDISignInViewController.m in Sources */, + B208BC3C15BF63A80080705D /* CDISignUpViewController.m in Sources */, + B208BC3D15BF63A80080705D /* CDISplitViewController.m in Sources */, + B208BC3E15BF63A80080705D /* CDITableViewCell.m in Sources */, + B208BC3F15BF63A80080705D /* CDITableViewCellDeleteConfirmationControl.m in Sources */, + B208BC4015BF63A80080705D /* CDITagView.m in Sources */, + B208BC4115BF63A80080705D /* CDITaskTableViewCell.m in Sources */, + B208BC4215BF63A80080705D /* CDITransactionObserver.m in Sources */, + B208BC4315BF63A80080705D /* CDIUpgradeViewController.m in Sources */, + B208BC4415BF63A80080705D /* SKPaymentTransaction+Cheddar.m in Sources */, + B208BC4515BF63A80080705D /* UIButton+Cheddar.m in Sources */, + B208BC4615BF63A80080705D /* UIColor+Cheddar.m in Sources */, + B208BC4715BF63A80080705D /* UIFont+Cheddar.m in Sources */, + B208BC4815BF63A80080705D /* main.m in Sources */, + B208C10F15BF63E20080705D /* LocalyticsDatabase.m in Sources */, + B208C11015BF63E20080705D /* LocalyticsSession.m in Sources */, + B208C11115BF63E20080705D /* LocalyticsUploader.m in Sources */, + B208C11215BF63E20080705D /* LocalyticsUtilities.m in Sources */, + B208C14015BF63E20080705D /* SSPullToRefreshDefaultContentView.m in Sources */, + B208C14115BF63E20080705D /* SSPullToRefreshSimpleContentView.m in Sources */, + B208C14215BF63E20080705D /* SSPullToRefreshView.m in Sources */, + B208C1A515BF63E20080705D /* TTTAttributedLabel.m in Sources */, + B28FD2E215BF755600365CD6 /* Cheddar.xcdatamodeld in Sources */, + B28FD2E815BF774D00365CD6 /* CDIDefines.m in Sources */, + B2A2B07B15C0BE7300772CF6 /* CDKTask+CheddariOSAdditions.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + B208C1E815BF64240080705D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SSToolkit; + targetProxy = B208C1E715BF64240080705D /* PBXContainerItemProxy */; + }; + B208C1EA15BF64240080705D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SSToolkitResources; + targetProxy = B208C1E915BF64240080705D /* PBXContainerItemProxy */; + }; + B208C5FB15BF656C0080705D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CheddarKit; + targetProxy = B208C5FA15BF656C0080705D /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + B23FA770151FE0710069A0D1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + SDKROOT = iphoneos; + }; + name = Debug; + }; + B23FA771151FE0710069A0D1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B23FA773151FE0710069A0D1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = ""; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COMBINE_HIDPI_IMAGES = NO; + COMPRESS_PNG_FILES = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Vendor\"", + "\"$(SRCROOT)/Vendor/SSToolkit/Tests\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Other Sources/Cheddar-Prefix.pch"; + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/Vendor/SSToolkit\"", + "\"$(SRCROOT)/Vendor/Bully\"", + "\"$(SRCROOT)/Vendor/CheddarKit\"/**", + ); + INFOPLIST_FILE = "Resources/Cheddar-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_CFLAGS = "-DDEBUG"; + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + ); + PRODUCT_NAME = Cheddar; + PROVISIONING_PROFILE = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + B23FA774151FE0710069A0D1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = Resources/Cheddar.entitlements; + CODE_SIGN_IDENTITY = "iPhone Distribution"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; + COMBINE_HIDPI_IMAGES = NO; + COMPRESS_PNG_FILES = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/Vendor\"", + "\"$(SRCROOT)/Vendor/SSToolkit/Tests\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Other Sources/Cheddar-Prefix.pch"; + HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/Vendor/SSToolkit\"", + "\"$(SRCROOT)/Vendor/Bully\"", + "\"$(SRCROOT)/Vendor/CheddarKit\"/**", + ); + INFOPLIST_FILE = "Resources/Cheddar-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + ); + PRODUCT_NAME = Cheddar; + PROVISIONING_PROFILE = ""; + "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + B23FA74F151FE0710069A0D1 /* Build configuration list for PBXProject "Cheddar for iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B23FA770151FE0710069A0D1 /* Debug */, + B23FA771151FE0710069A0D1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B23FA772151FE0710069A0D1 /* Build configuration list for PBXNativeTarget "Cheddar for iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B23FA773151FE0710069A0D1 /* Debug */, + B23FA774151FE0710069A0D1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + B28FD2E015BF755600365CD6 /* Cheddar.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + B28FD2E315BF756800365CD6 /* Cheddar 2.xcdatamodel */, + B28FD2E115BF755600365CD6 /* Cheddar.xcdatamodel */, + ); + currentVersion = B28FD2E315BF756800365CD6 /* Cheddar 2.xcdatamodel */; + path = Cheddar.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = B23FA74C151FE0710069A0D1 /* Project object */; +} diff --git a/Classes/CDIAddListTableViewCell.h b/Classes/CDIAddListTableViewCell.h new file mode 100644 index 0000000..a47ed43 --- /dev/null +++ b/Classes/CDIAddListTableViewCell.h @@ -0,0 +1,14 @@ +// +// CDIAddListTableViewCell.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDIAddListTableViewCell : UITableViewCell + +@property (nonatomic, strong, readonly) SSTextField *textField; +@property (nonatomic, strong, readonly) UIButton *closeButton; + +@end diff --git a/Classes/CDIAddListTableViewCell.m b/Classes/CDIAddListTableViewCell.m new file mode 100644 index 0000000..1e5bcc2 --- /dev/null +++ b/Classes/CDIAddListTableViewCell.m @@ -0,0 +1,54 @@ +// +// CDIAddListTableViewCell.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIAddListTableViewCell.h" +#import "UIFont+Cheddar.h" +#import "UIColor+Cheddar.h" + +@implementation CDIAddListTableViewCell + +@synthesize textField = _textField; +@synthesize closeButton = _closeButton; + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { + self.selectionStyle = UITableViewCellSelectionStyleNone; + + SSBorderedView *background = [[SSBorderedView alloc] initWithFrame:CGRectZero]; + background.backgroundColor = [UIColor whiteColor]; + background.bottomBorderColor = [UIColor colorWithWhite:0.92f alpha:1.0f]; + background.contentMode = UIViewContentModeRedraw; + self.backgroundView = background; + + _textField = [[SSTextField alloc] initWithFrame:CGRectZero]; + _textField.textColor = [UIColor cheddarTextColor]; + _textField.placeholderTextColor = [UIColor cheddarLightTextColor]; + _textField.font = [UIFont cheddarFontOfSize:20.0f]; + _textField.backgroundColor = [UIColor whiteColor]; + _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _textField.returnKeyType = UIReturnKeyDone; + _textField.placeholder = @"Name your list"; + _textField.autocapitalizationType = UITextAutocapitalizationTypeWords; + [self.contentView addSubview:_textField]; + + _closeButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 15.0f, 15.0f)]; + [_closeButton setImage:[UIImage imageNamed:@"x.png"] forState:UIControlStateNormal]; + self.accessoryView = _closeButton; + } + return self; +} + + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGSize size = self.contentView.bounds.size; + _textField.frame = CGRectMake(10.0f, 1.0f, size.width - 20.0f, size.height - 2.0f); +} + +@end diff --git a/Classes/CDIAddTaskAnimationView.h b/Classes/CDIAddTaskAnimationView.h new file mode 100644 index 0000000..c38304d --- /dev/null +++ b/Classes/CDIAddTaskAnimationView.h @@ -0,0 +1,15 @@ +// +// CDIAddTaskAnimationView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/29/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDIAddTaskAnimationView : UIView + +@property (nonatomic, strong) NSString *title; + +- (void)animationToPoint:(CGPoint)point height:(CGFloat)height insertTask:(void(^)(void))insertTask completion:(void(^)(void))completion; + +@end diff --git a/Classes/CDIAddTaskAnimationView.m b/Classes/CDIAddTaskAnimationView.m new file mode 100644 index 0000000..2332e49 --- /dev/null +++ b/Classes/CDIAddTaskAnimationView.m @@ -0,0 +1,118 @@ +// +// CDIAddTaskAnimationView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/29/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIAddTaskAnimationView.h" +#import "CDITableViewCell.h" +#import "UIFont+Cheddar.h" +#import "UIColor+Cheddar.h" +#import + +@implementation CDIAddTaskAnimationView + +@synthesize title = _title; + +#pragma mark - Animation + +- (void)animationToPoint:(CGPoint)point height:(CGFloat)height insertTask:(void(^)(void))insertTask completion:(void(^)(void))completion { + CGSize size = self.bounds.size; + CGFloat cellHeight = [CDITableViewCell cellHeight]; + CGFloat topShadowHeight = 6.0f; + CGFloat bottomShadowHeight = 6.0f; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0.0f, -topShadowHeight, size.width, cellHeight + topShadowHeight + bottomShadowHeight)]; + container.alpha = 0.0f; + [self addSubview:container]; + + // Top shadow + SSGradientView *topShadow = [[SSGradientView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, size.width, topShadowHeight)]; + topShadow.backgroundColor = [UIColor clearColor]; + topShadow.alpha = 0.0f; + topShadow.colors = [NSArray arrayWithObjects: + [UIColor colorWithWhite:0.0f alpha:0.0f], + [UIColor colorWithWhite:0.0f alpha:0.09f], + nil]; + [container addSubview:topShadow]; + + // Bottom shadow + SSGradientView *bottomShadow = [[SSGradientView alloc] initWithFrame:CGRectMake(0.0f, cellHeight + topShadowHeight, size.width, bottomShadowHeight)]; + bottomShadow.backgroundColor = [UIColor clearColor]; + bottomShadow.alpha = 0.0f; + bottomShadow.colors = [NSArray arrayWithObjects: + [UIColor colorWithWhite:0.0f alpha:0.13f], + [UIColor colorWithWhite:0.0f alpha:0.0f], + nil]; + [container addSubview:bottomShadow]; + + // Background + SSBorderedView *background = [[SSBorderedView alloc] initWithFrame:CGRectMake(0.0f, topShadowHeight, size.width, cellHeight)]; + background.backgroundColor = [UIColor whiteColor]; + background.bottomBorderColor = [UIColor colorWithWhite:0.92f alpha:1.0f]; + background.contentMode = UIViewContentModeRedraw; + [container addSubview:background]; + + // Checkbox + UIImageView *checkbox = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"checkbox.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:4]]; + checkbox.frame = CGRectMake(-34.0f, 13.0f, 24.0f, 24.0f); + [background addSubview:checkbox]; + + // Label + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(16.0f, 7.0f, size.width - 32.0f, 38.0f)]; + label.font = [UIFont cheddarFontOfSize:18.0f]; + label.textColor = [UIColor cheddarTextColor]; + label.backgroundColor = [UIColor clearColor]; + label.text = self.title; + [background addSubview:label]; + + // Adjust point + point.y = fminf(point.y, size.height); + + // Animate + UIViewAnimationOptions options = UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction; + [UIView animateWithDuration:0.2 delay:0.0 options:options animations:^{ + container.alpha = 1.0f; + } completion:nil]; + + NSTimeInterval boxDuration = 0.2f; + NSTimeInterval moveDuration = fmax(0.2, 0.3 * (point.y / height)); + + [UIView animateWithDuration:boxDuration delay:0.10 options:options animations:^{ + topShadow.alpha = 1.0f; + bottomShadow.alpha = 1.0f; + + CGRect frame = checkbox.frame; + frame.origin.x = 10.0f; + checkbox.frame = frame; + + label.frame = CGRectMake(44.0f, 13.0f, size.width - 54.0f, 24.0f); + label.font = [UIFont cheddarFontOfSize:20.0f]; + + frame = container.frame; + frame.origin.y += 20.0f; + container.frame = frame; + } completion:^(BOOL finished) { + [UIView animateWithDuration:moveDuration delay:0.0 options:options animations:^{ + CGRect frame = container.frame; + frame.origin.y = point.y - topShadowHeight; + container.frame = frame; + } completion:^(BOOL finished) { + if (insertTask) { + insertTask(); + } + }]; + + [UIView animateWithDuration:0.2 delay:moveDuration options:options animations:^{ + container.alpha = 0.0f; + } completion:^(BOOL finished) { + if (completion) { + completion(); + } + }]; + }]; +} + +@end diff --git a/Classes/CDIAddTaskView.h b/Classes/CDIAddTaskView.h new file mode 100644 index 0000000..1c0e5b3 --- /dev/null +++ b/Classes/CDIAddTaskView.h @@ -0,0 +1,44 @@ +// +// CDIAddTaskView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/16/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@protocol CDIAddTaskViewDelegate; + +@interface CDIAddTaskView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong, readonly) SSTextField *textField; +@property (nonatomic, strong, readonly) SSGradientView *shadowView; +@property (nonatomic, strong, readonly) UIButton *renameListButton; +@property (nonatomic, strong, readonly) UIButton *archiveTasksButton; +@property (nonatomic, strong, readonly) UIButton *archiveAllTasksButton; +@property (nonatomic, strong, readonly) UIButton *archiveCompletedTasksButton; +@property (nonatomic, assign) BOOL editing; + ++ (CGFloat)height; ++ (CGFloat)margin; +- (void)setEditing:(BOOL)editing animated:(BOOL)animated; + +- (void)showTag:(NSString *)tagName; +- (void)hideTag; + +@end + + +@protocol CDIAddTaskViewDelegate + +@required + +- (void)addTaskView:(CDIAddTaskView *)addTaskView didReturnWithTitle:(NSString *)title; + +@optional + +- (void)addTaskViewDidBeginEditing:(CDIAddTaskView *)addTaskView; +- (void)addTaskViewDidEndEditing:(CDIAddTaskView *)addTaskView; +- (void)addTaskViewShouldCloseTag:(CDIAddTaskView *)addTaskView; + +@end \ No newline at end of file diff --git a/Classes/CDIAddTaskView.m b/Classes/CDIAddTaskView.m new file mode 100644 index 0000000..5acea0d --- /dev/null +++ b/Classes/CDIAddTaskView.m @@ -0,0 +1,297 @@ +// +// CDIAddTaskView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/16/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIAddTaskView.h" +#import "CDITableViewCell.h" +#import "CDITagView.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" +#import "UIButton+Cheddar.h" + +@interface CDIAddTaskView () +- (void)_closeTag; +@end + +@implementation CDIAddTaskView { + UIView *_tagContainer; + UIView *_tagViewShadow; + CDITagView *_tagView; +} + +@synthesize delegate = _delegate; +@synthesize textField = _textField; +@synthesize shadowView = _shadowView; +@synthesize editing = _editing; +@synthesize renameListButton = _renameListButton; +@synthesize archiveTasksButton = _archiveTasksButton; +@synthesize archiveAllTasksButton = _archiveAllTasksButton; +@synthesize archiveCompletedTasksButton = _archiveCompletedTasksButton; + + +#pragma mark - Accessors + +- (void)setEditing:(BOOL)editing { + [self setEditing:editing animated:YES]; +} + + +#pragma mark - Class Methods + ++ (CGFloat)height { + return [CDITableViewCell cellHeight]; +} + + ++ (CGFloat)margin { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return 7.0f; + } + return 5.0f; +} + + +#pragma mark - UIView + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.backgroundColor = [UIColor redColor]; + + CGSize size = self.bounds.size; + + SSGradientView *backgroundView = [[SSGradientView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, size.width, [[self class] height])]; + backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth; + backgroundView.colors = [NSArray arrayWithObjects: + [UIColor colorWithRed:0.941f green:0.941f blue:0.941f alpha:1.0f], + [UIColor colorWithRed:0.890f green:0.890f blue:0.890f alpha:1.0f], + nil]; + backgroundView.bottomInsetColor = [UIColor colorWithWhite:0.914f alpha:1.0f]; + backgroundView.bottomBorderColor = [UIColor colorWithWhite:0.706f alpha:1.0f]; + [self addSubview:backgroundView]; + + _renameListButton = [UIButton cheddarBigButton]; + [_renameListButton setTitle:@"Rename List" forState:UIControlStateNormal]; + _renameListButton.alpha = 0.0f; + [self addSubview:_renameListButton]; + + _archiveTasksButton = [UIButton cheddarBigButton]; + [_archiveTasksButton setTitle:@"Archive Tasks" forState:UIControlStateNormal]; + _archiveTasksButton.alpha = 0.0f; + [self addSubview:_archiveTasksButton]; + + _archiveAllTasksButton = [UIButton cheddarBigButton]; + [_archiveAllTasksButton setTitle:@"Archive All" forState:UIControlStateNormal]; + _archiveAllTasksButton.alpha = 0.0f; + [self addSubview:_archiveAllTasksButton]; + + _archiveCompletedTasksButton = [UIButton cheddarBigButton]; + [_archiveCompletedTasksButton setTitle:@"Archive Completed" forState:UIControlStateNormal]; + _archiveCompletedTasksButton.alpha = 0.0f; + [self addSubview:_archiveCompletedTasksButton]; + + _textField = [[SSTextField alloc] initWithFrame:CGRectZero]; + _textField.delegate = self; + _textField.background = [[UIImage imageNamed:@"textfield.png"] stretchableImageWithLeftCapWidth:8 topCapHeight:0]; + _textField.textEdgeInsets = UIEdgeInsetsMake(0.0f, 13.0f, 0.0f, 13.0f); + _textField.autocapitalizationType = UITextAutocapitalizationTypeSentences; + _textField.autocorrectionType = UITextAutocorrectionTypeYes; + _textField.textColor = [UIColor cheddarTextColor]; + _textField.placeholderTextColor = [UIColor cheddarLightTextColor]; + _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _textField.placeholder = @"What do you have to do?"; + _textField.returnKeyType = UIReturnKeyGo; + _textField.font = [UIFont cheddarFontOfSize:18.0f]; + [self addSubview:_textField]; + + _shadowView = [[SSGradientView alloc] initWithFrame:CGRectMake(0.0f, [[self class] height], size.width, 3.0f)]; + _shadowView.autoresizingMask = UIViewAutoresizingFlexibleWidth; + _shadowView.backgroundColor = [UIColor clearColor]; + _shadowView.colors = [NSArray arrayWithObjects: + [UIColor colorWithWhite:0.0f alpha:0.1f], + [UIColor colorWithWhite:0.0f alpha:0.0f], + nil]; + _shadowView.alpha = 0.0f; + [self addSubview:_shadowView]; + } + return self; +} + + +- (void)layoutSubviews { + CGFloat margin = [[self class] margin]; + CGSize size = self.bounds.size; + _textField.frame = CGRectMake(margin - 3.0f, 2.0f, size.width - margin - margin + 6.0f, 46.0f); + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + CGFloat spacing = 6.0f; + if (size.width < 500.0f) { + CGFloat width = roundf((size.width - margin - margin + 2.0f - spacing) / 2.0f); + _renameListButton.frame = CGRectMake(margin - 1.0f, 5.0f, width, 42.0f); + _archiveTasksButton.frame = CGRectMake(margin - 1.0f + spacing + width, 5.0f, width, 42.0f); + _archiveAllTasksButton.frame = _archiveTasksButton.frame; + _archiveCompletedTasksButton.frame = _archiveTasksButton.frame; + } else { + CGFloat width = roundf((size.width - margin - margin + 2.0f - spacing - spacing) / 3.0f); + _renameListButton.frame = CGRectMake(margin - 1.0f, 5.0f, width, 42.0f); + _archiveTasksButton.frame = CGRectMake(margin - 1.0f + spacing + width, 5.0f, width, 42.0f); + _archiveAllTasksButton.frame = CGRectMake(margin - 1.0f + spacing + width, 5.0f, width, 42.0f); + _archiveCompletedTasksButton.frame = CGRectMake(margin - 1.0f + spacing + width + spacing + width, 5.0f, width, 42.0f); + } + } else { + _renameListButton.frame = CGRectMake(margin - 1.0f, 5.0f, 153.0f, 42.0f); + _archiveTasksButton.frame = CGRectMake(158.0f + margin, 5.0f, 153.0f, 42.0f); + } +} + + +- (void)setFrame:(CGRect)frame { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + if (frame.size.width < 500.0f && _archiveAllTasksButton.alpha > 0.0f) { + [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^{ + _archiveTasksButton.alpha = 1.0f; + _archiveAllTasksButton.alpha = 0.0f; + _archiveCompletedTasksButton.alpha = 0.0f; + } completion:nil]; + } else if (frame.size.width >= 500.0f && _archiveTasksButton.alpha > 0.0f) { + [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^{ + _archiveTasksButton.alpha = 0.0f; + _archiveAllTasksButton.alpha = 1.0f; + _archiveCompletedTasksButton.alpha = 1.0f; + } completion:nil]; + } + } + [super setFrame:frame]; +} + + +#pragma mark - Editing + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + _editing = editing; + self.textField.enabled = !_editing; + + void (^change)(void) = ^{ + _textField.alpha = _editing ? 0.0f : 1.0f; + _renameListButton.alpha = _editing ? 1.0f : 0.0f; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + if (self.frame.size.width < 500.0f) { + _archiveTasksButton.alpha = _renameListButton.alpha; + _archiveAllTasksButton.alpha = 0.0f; + _archiveCompletedTasksButton.alpha = 0.0f; + } else { + _archiveTasksButton.alpha = 0.0f; + _archiveAllTasksButton.alpha = _renameListButton.alpha; + _archiveCompletedTasksButton.alpha = _renameListButton.alpha; + } + } else { + _archiveTasksButton.alpha = _renameListButton.alpha; + } + }; + + if (animated) { + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:change completion:nil]; + } else { + change(); + } +} + + +#pragma mark - Tag + +- (void)showTag:(NSString *)tagName { + _textField.enabled = NO; + + if (!_tagContainer) { + _tagContainer = [[UIView alloc] initWithFrame:self.bounds]; + _tagContainer.backgroundColor = [UIColor clearColor]; + _tagContainer.clipsToBounds = YES; + [self addSubview:_tagContainer]; + + CGSize size = self.bounds.size; + + _tagViewShadow = [[UIView alloc] initWithFrame:self.bounds]; + _tagViewShadow.backgroundColor = [UIColor blackColor]; + _tagViewShadow.alpha = 0.0f; + [_tagContainer addSubview:_tagViewShadow]; + + _tagView = [[CDITagView alloc] initWithFrame:CGRectMake(0.0f, size.height, size.width, size.height)]; + _tagView.textLabel.text = [NSString stringWithFormat:@"#%@", tagName]; + [_tagContainer addSubview:_tagView]; + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_closeTag)]; + [_tagView addGestureRecognizer:tap]; + + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ + _tagView.frame = CGRectMake(0.0f, 0.0f, size.width, size.height); + _tagViewShadow.alpha = 0.55f; + } completion:nil]; + } else { + _tagView.textLabel.text = [NSString stringWithFormat:@"#%@", tagName]; + } +} + + +- (void)hideTag { + _textField.enabled = YES; + + CGSize size = self.bounds.size; + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ + _tagView.frame = CGRectMake(0.0f, size.height, size.width, size.height); + _tagViewShadow.alpha = 0.0f; + } completion:^(BOOL finished) { + [_tagView removeFromSuperview]; + _tagView = nil; + + [_tagViewShadow removeFromSuperview]; + _tagViewShadow = nil; + + [_tagContainer removeFromSuperview]; + _tagContainer = nil; + }]; +} + + +- (void)_closeTag { + if ([self.delegate respondsToSelector:@selector(addTaskViewShouldCloseTag:)]) { + [self.delegate addTaskViewShouldCloseTag:self]; + } +} + + +#pragma mark - UITextFieldDelegate + +- (void)textFieldDidBeginEditing:(UITextField *)textField { + _textField.background = [[UIImage imageNamed:@"textfield-focused.png"] stretchableImageWithLeftCapWidth:8 topCapHeight:0]; + + if ([self.delegate respondsToSelector:@selector(addTaskViewDidBeginEditing:)]) { + [self.delegate addTaskViewDidBeginEditing:self]; + } +} + + +- (void)textFieldDidEndEditing:(UITextField *)textField { + _textField.background = [[UIImage imageNamed:@"textfield.png"] stretchableImageWithLeftCapWidth:8 topCapHeight:0]; + + if ([self.delegate respondsToSelector:@selector(addTaskViewDidEndEditing:)]) { + [self.delegate addTaskViewDidEndEditing:self]; + } +} + + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField.text.length == 0) { + return NO; + } + + NSString *title = textField.text; + textField.text = nil; + [self.delegate addTaskView:self didReturnWithTitle:title]; + return NO; +} + +@end diff --git a/Classes/CDIAppDelegate.h b/Classes/CDIAppDelegate.h new file mode 100644 index 0000000..75a5a22 --- /dev/null +++ b/Classes/CDIAppDelegate.h @@ -0,0 +1,16 @@ +// +// CDIAppDelegate.h +// Cheddar for iOS +// +// Created by Sam Soffes on 3/25/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDIAppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + ++ (void)applyStylesheet; ++ (CDIAppDelegate *)sharedAppDelegate; + +@end diff --git a/Classes/CDIAppDelegate.m b/Classes/CDIAppDelegate.m new file mode 100644 index 0000000..e6af4ae --- /dev/null +++ b/Classes/CDIAppDelegate.m @@ -0,0 +1,148 @@ +// +// CDIAppDelegate.m +// Cheddar for iOS +// +// Created by Sam Soffes on 3/25/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIAppDelegate.h" +#import "CDISplitViewController.h" +#import "CDIListsViewController.h" +#import "CDITransactionObserver.h" +#import "CDIDefines.h" +#import "UIFont+Cheddar.h" +#import "LocalyticsUtilities.h" +#import +#import + +@implementation CDIAppDelegate + +@synthesize window = _window; + + ++ (CDIAppDelegate *)sharedAppDelegate { + return (CDIAppDelegate *)[[UIApplication sharedApplication] delegate]; +} + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Configure analytics +#if CHEDDAR_PRODUCTION_MODE + #ifdef CHEDDAR_CRASHLYTICS_KEY + [Crashlytics startWithAPIKey:CHEDDAR_CRASHLYTICS_KEY]; + #endif + + #ifdef CHEDDAR_LOCALYTICS_KEY + LLStartSession(CHEDDAR_LOCALYTICS_KEY); + #endif +#endif + + // Optionally enable development mode +#ifdef CHEDDAR_API_DEVELOPMENT_MODE + [CDKHTTPClient setDevelopmentMode:YES]; + [CDKPushController setDevelopmentMode:YES]; +#endif + + // Initialize the window + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + self.window.backgroundColor = [UIColor blackColor]; + + [[self class] applyStylesheet]; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + self.window.rootViewController = [[CDISplitViewController alloc] init]; + [self.window makeKeyAndVisible]; + } else { + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[CDIListsViewController alloc] init]]; + self.window.rootViewController = navigationController; + [self.window makeKeyAndVisible]; + + UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 20.0f, 5.0f, 5.0f)]; + imageView.image = [UIImage imageNamed:@"corner-tl.png"]; + [self.window addSubview:imageView]; + + imageView = [[UIImageView alloc] initWithFrame:CGRectMake(315.0f, 20.0f, 5.0f, 5.0f)]; + imageView.image = [UIImage imageNamed:@"corner-tr.png"]; + [self.window addSubview:imageView]; + + imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 475.0f, 5.0f, 5.0f)]; + imageView.image = [UIImage imageNamed:@"corner-bl.png"]; + [self.window addSubview:imageView]; + + imageView = [[UIImageView alloc] initWithFrame:CGRectMake(315, 475.0f, 5.0f, 5.0f)]; + imageView.image = [UIImage imageNamed:@"corner-br.png"]; + [self.window addSubview:imageView]; + } + + // Defer some stuff to make launching faster + dispatch_async(dispatch_get_main_queue(), ^{ + // Setup status bar network indicator + [AFNetworkActivityIndicatorManager sharedManager].enabled = YES; + + // Set the OAuth client + [[CDKHTTPClient sharedClient] setClientID:kCDIAPIClientID secret:kCDIAPIClientSecret]; + + // Initialize the connection to Pusher + [CDKPushController sharedController]; + + // Add the transaction observer + [[SKPaymentQueue defaultQueue] addTransactionObserver:[CDITransactionObserver defaultObserver]]; + }); + + return YES; +} + + +#if ANALYTICS_ENABLED +- (void)applicationWillEnterForeground:(UIApplication *)application { + [[LocalyticsSession sharedLocalyticsSession] resume]; + [[LocalyticsSession sharedLocalyticsSession] upload]; +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + [[LocalyticsSession sharedLocalyticsSession] close]; + [[LocalyticsSession sharedLocalyticsSession] upload]; +} +#endif + + +- (void)applicationWillTerminate:(UIApplication *)application { + [[SSManagedObject mainContext] save:nil]; + #if ANALYTICS_ENABLED + [[LocalyticsSession sharedLocalyticsSession] close]; + #endif +} + + ++ (void)applyStylesheet { + // Navigation bar + id navigationBar = [UINavigationBar appearance]; + [navigationBar setBackgroundImage:[UIImage imageNamed:@"nav-background.png"] forBarMetrics:UIBarMetricsDefault]; + [navigationBar setTitleVerticalPositionAdjustment:-1.0f forBarMetrics:UIBarMetricsDefault]; + [navigationBar setTitleTextAttributes:[[NSDictionary alloc] initWithObjectsAndKeys: + [UIFont cheddarFontOfSize:22.0f], UITextAttributeFont, + [UIColor colorWithWhite:0.0f alpha:0.2f], UITextAttributeTextShadowColor, + [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset, + [UIColor whiteColor], UITextAttributeTextColor, + nil]]; + + // Navigation bar button + NSDictionary *barButtonTitleTextAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: + [UIFont cheddarFontOfSize:14.0f], UITextAttributeFont, + [UIColor colorWithWhite:0.0f alpha:0.2f], UITextAttributeTextShadowColor, + [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset, + nil]; + id barButton = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]; + [barButton setBackButtonTitlePositionAdjustment:UIOffsetMake(1.0f, -2.0f) forBarMetrics:UIBarMetricsDefault]; + [barButton setTitlePositionAdjustment:UIOffsetMake(0.0f, 1.0f) forBarMetrics:UIBarMetricsDefault]; + [barButton setTitleTextAttributes:barButtonTitleTextAttributes forState:UIControlStateNormal]; + [barButton setTitleTextAttributes:barButtonTitleTextAttributes forState:UIControlStateHighlighted]; + [barButton setBackButtonBackgroundImage:[[UIImage imageNamed:@"nav-back.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; + [barButton setBackButtonBackgroundImage:[[UIImage imageNamed:@"nav-back-highlighted.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; + [barButton setBackgroundImage:[[UIImage imageNamed:@"nav-button.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; + [barButton setBackgroundImage:[[UIImage imageNamed:@"nav-button-highlighted.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; +} + +@end diff --git a/Classes/CDIAttributedLabel.h b/Classes/CDIAttributedLabel.h new file mode 100644 index 0000000..aa9f3b0 --- /dev/null +++ b/Classes/CDIAttributedLabel.h @@ -0,0 +1,12 @@ +// +// CDIAttributedLabel.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "TTTAttributedLabel.h" + +@interface CDIAttributedLabel : TTTAttributedLabel +@end diff --git a/Classes/CDIAttributedLabel.m b/Classes/CDIAttributedLabel.m new file mode 100644 index 0000000..7ba9ece --- /dev/null +++ b/Classes/CDIAttributedLabel.m @@ -0,0 +1,82 @@ +// +// CDIAttributedLabel.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIAttributedLabel.h" +#import + +@implementation CDIAttributedLabel + +- (void)drawStrike:(CTFrameRef)frame inRect:(CGRect)rect context:(CGContextRef)c { + NSArray *lines = (NSArray *)CTFrameGetLines(frame); + CGPoint origins[[lines count]]; + CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), origins); + + CFIndex lineIndex = 0; + for (id line in lines) { + CGRect lineBounds = CTLineGetImageBounds((CTLineRef)line, c); + lineBounds.origin.x = origins[lineIndex].x; + lineBounds.origin.y = origins[lineIndex].y; + + for (id glyphRun in (NSArray *)CTLineGetGlyphRuns((CTLineRef)line)) { + NSDictionary *attributes = (NSDictionary *)CTRunGetAttributes((CTRunRef) glyphRun); + BOOL strikeOut = [[attributes objectForKey:kTTTStrikeOutAttributeName] boolValue]; + NSInteger superscriptStyle = [[attributes objectForKey:(id)kCTSuperscriptAttributeName] integerValue]; + + if (strikeOut) { + CGRect runBounds = CGRectZero; + CGFloat ascent = 0.0f; + CGFloat descent = 0.0f; + + runBounds.size.width = CTRunGetTypographicBounds((CTRunRef)glyphRun, CFRangeMake(0, 0), &ascent, &descent, NULL); + runBounds.size.height = ascent + descent; + + CGFloat xOffset = CTLineGetOffsetForStringIndex((CTLineRef)line, CTRunGetStringRange((CTRunRef)glyphRun).location, NULL); + runBounds.origin.x = origins[lineIndex].x + rect.origin.x + xOffset; + runBounds.origin.y = origins[lineIndex].y; // + rect.origin.y; + runBounds.origin.y -= descent; + + // Don't draw strikeout too far to the right + if (CGRectGetWidth(runBounds) > CGRectGetWidth(lineBounds)) { + runBounds.size.width = CGRectGetWidth(lineBounds); + } + + switch (superscriptStyle) { + case 1: + runBounds.origin.y -= ascent * 0.47f; + break; + case -1: + runBounds.origin.y += ascent * 0.25f; + break; + default: + break; + } + + // Use text color, or default to black + id color = [attributes objectForKey:(id)kCTForegroundColorAttributeName]; + + if (color) { + CGContextSetStrokeColorWithColor(c, (CGColorRef)color); + } else { + CGContextSetGrayStrokeColor(c, 0.0f, 1.0); + } + + // CTFontRef font = CTFontCreateWithName((CFStringRef)self.font.fontName, self.font.pointSize, NULL); + CGContextSetLineWidth(c, 2.0f); // CTFontGetUnderlineThickness(font)); + CGFloat y = roundf(runBounds.origin.y + runBounds.size.height / 2.0f) - 1.0f; + CGContextMoveToPoint(c, runBounds.origin.x, y); + CGContextAddLineToPoint(c, runBounds.origin.x + runBounds.size.width, y); + + CGContextStrokePath(c); + } + } + + lineIndex++; + } +} + +@end diff --git a/Classes/CDICreateListViewController.h b/Classes/CDICreateListViewController.h new file mode 100644 index 0000000..a75b4b4 --- /dev/null +++ b/Classes/CDICreateListViewController.h @@ -0,0 +1,18 @@ +// +// CDICreateListViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/7/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@class CDKList; + +@interface CDICreateListViewController : UITableViewController + +@property (nonatomic, strong) CDKList *list; + +- (void)create:(id)sender; +- (void)cancel:(id)sender; + +@end diff --git a/Classes/CDICreateListViewController.m b/Classes/CDICreateListViewController.m new file mode 100644 index 0000000..383b217 --- /dev/null +++ b/Classes/CDICreateListViewController.m @@ -0,0 +1,174 @@ +// +// CDICreateListViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/7/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDICreateListViewController.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" + +@interface CDICreateListViewController () +@property (nonatomic, strong) UITextField *titleTextField; +@end + +@implementation CDICreateListViewController + +@synthesize titleTextField = _titleTextField; +@synthesize list = _list; + +- (UITextField *)titleTextField { + if (!_titleTextField) { + _titleTextField = [[UITextField alloc] initWithFrame:CGRectMake(10.0f, 7.0f, 280.0f, 30.0f)]; + _titleTextField.autocapitalizationType = UITextAutocapitalizationTypeWords; + _titleTextField.autocorrectionType = UITextAutocorrectionTypeYes; + _titleTextField.textColor = [UIColor cheddarBlueColor]; + _titleTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _titleTextField.placeholder = @"Name Your List"; + _titleTextField.delegate = self; + _titleTextField.returnKeyType = UIReturnKeyGo; + _titleTextField.font = [UIFont cheddarFontOfSize:18.0f]; + _titleTextField.backgroundColor = [UIColor colorWithWhite:0.969f alpha:1.0f]; + + if (self.list) { + _titleTextField.text = self.list.title; + } + } + return _titleTextField; +} + + +#pragma mark - NSObject + +- (id)init { + return (self = [super initWithStyle:UITableViewStyleGrouped]); +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + if (self.list) { + self.title = @"Rename List"; + } else { + self.title = @"Create List"; + } + + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:(self.list ? @"Save" : @"Create") style:UIBarButtonItemStyleDone target:self action:@selector(create:)]; + + UIView *background = [[UIView alloc] initWithFrame:CGRectZero]; + background.backgroundColor = [UIColor cheddarArchesColor]; + self.tableView.backgroundView = background; +} + + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self.titleTextField becomeFirstResponder]; +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + + +#pragma mark - Actions + +- (void)create:(id)sender { + NSString *title = self.titleTextField.text; + if (title.length == 0) { + return; + } + + self.titleTextField.enabled = NO; + + // Update list + if (self.list) { + self.list.title = title; + [self.list save]; + [self.list update]; + [self.navigationController dismissModalViewControllerAnimated:YES]; + return; + } + + // Create list + SSHUDView *hud = [[SSHUDView alloc] initWithTitle:@"Creating..." loading:YES]; + [hud show]; + + CDKList *list = [[CDKList alloc] init]; + list.title = title; + list.position = [NSNumber numberWithInteger:INT32_MAX]; + + [list createWithSuccess:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + [hud completeAndDismissWithTitle:@"Created!"]; + [self.navigationController dismissModalViewControllerAnimated:YES]; + }); + } failure:^(AFJSONRequestOperation *remoteOperation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.titleTextField.enabled = YES; + + NSDictionary *responseObject = remoteOperation.responseJSON; + if ([responseObject isKindOfClass:[NSDictionary class]] && [[responseObject objectForKey:@"error"] isEqualToString:@"plus_required"]) { + [hud dismiss]; + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Plus Required" message:@"You need Cheddar Plus to create more than 2 lists. Please upgrade to continue." delegate:self cancelButtonTitle:@"Later" otherButtonTitles:@"Upgrade", nil]; + [alert show]; + } else { + [hud failAndDismissWithTitle:@"Failed"]; + [self.titleTextField becomeFirstResponder]; + } + }); + }]; +} + + +- (void)cancel:(id)sender { + [self.navigationController dismissModalViewControllerAnimated:YES]; +} + + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 1; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *const cellIdentifier = @"cellIdentifier"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + [cell.contentView addSubview:self.titleTextField]; + } + + return cell; +} + + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == _titleTextField) { + [self create:textField]; + } + return NO; +} + + +#pragma mark - UIAlertViewDelegate + +- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex == 1) { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://cheddarapp.com/account#plus"]]; + } +} + +@end diff --git a/Classes/CDIListTableViewCell.h b/Classes/CDIListTableViewCell.h new file mode 100644 index 0000000..b0753f1 --- /dev/null +++ b/Classes/CDIListTableViewCell.h @@ -0,0 +1,17 @@ +// +// CDIListTableViewCell.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITableViewCell.h" + +@class CDKList; + +@interface CDIListTableViewCell : CDITableViewCell + +@property (nonatomic, strong) CDKList *list; + +@end diff --git a/Classes/CDIListTableViewCell.m b/Classes/CDIListTableViewCell.m new file mode 100644 index 0000000..69f02e8 --- /dev/null +++ b/Classes/CDIListTableViewCell.m @@ -0,0 +1,75 @@ +// +// CDIListTableViewCell.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIListTableViewCell.h" +#import "UIColor+Cheddar.h" + +@implementation CDIListTableViewCell + +@synthesize list = _list; + +- (void)setList:(CDKList *)list { + _list = list; + + self.textLabel.text = list.title; + [self setNeedsLayout]; +} + + +- (void)setEditingText:(BOOL)editingText { + self.textField.text = self.list.title; + [super setEditingText:editingText]; +} + + +#pragma mark - UITableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { + self.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + UIImageView *disclosureImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 10.0f, 15.0f)]; + disclosureImageView.image = [UIImage imageNamed:@"disclosure.png"]; + self.accessoryView = disclosureImageView; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + self.textLabel.highlightedTextColor = [UIColor cheddarTextColor]; + + SSGradientView *selected = [[SSGradientView alloc] initWithFrame:CGRectZero]; + selected.colors = [[NSArray alloc] initWithObjects: + [UIColor colorWithWhite:0.929f alpha:1.0f], + [UIColor colorWithWhite:0.969f alpha:1.0f], + [UIColor colorWithWhite:0.969f alpha:1.0f], + [UIColor colorWithWhite:0.929f alpha:1.0f], + nil]; + selected.locations = [[NSArray alloc] initWithObjects: + [NSNumber numberWithFloat:0.0f], + [NSNumber numberWithFloat:0.098f], + [NSNumber numberWithFloat:0.902f], + [NSNumber numberWithFloat:1.0f], + nil]; + selected.bottomBorderColor = [UIColor colorWithWhite:0.906f alpha:1.0f]; + self.selectedBackgroundView = selected; + } else { + disclosureImageView.highlightedImage = [UIImage imageNamed:@"disclosure-highlighted.png"]; + SSGradientView *selectedBackground = [[SSGradientView alloc] initWithFrame:CGRectZero]; + selectedBackground.colors = [[NSArray alloc] initWithObjects: + [UIColor colorWithRed:0.0f green:0.722f blue:0.918f alpha:1.0f], + [UIColor colorWithRed:0.0f green:0.631f blue:0.835f alpha:1.0f], + nil]; +// selectedBackground.topBorderColor = [UIColor colorWithRed:0.392f green:0.808f blue:0.945f alpha:1.0f]; +// selectedBackground.bottomInsetColor = [UIColor colorWithRed:0.306f green:0.745f blue:0.886f alpha:1.0f]; + selectedBackground.bottomBorderColor = [UIColor colorWithRed:0.0f green:0.502f blue:0.725f alpha:1.0f]; + selectedBackground.contentMode = UIViewContentModeRedraw; + self.selectedBackgroundView = selectedBackground; + } + } + return self; +} + +@end diff --git a/Classes/CDIListViewController.h b/Classes/CDIListViewController.h new file mode 100644 index 0000000..1675ff2 --- /dev/null +++ b/Classes/CDIListViewController.h @@ -0,0 +1,20 @@ +// +// CDIListViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 3/31/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIManagedTableViewController.h" + +@class CDKList; +@class CDKTag; + +@interface CDIListViewController : CDIManagedTableViewController + +@property (nonatomic, strong, readonly) CDKList *list; +@property (nonatomic, strong) CDKTag *currentTag; +@property (nonatomic, assign) BOOL focusKeyboard; + +@end diff --git a/Classes/CDIListViewController.m b/Classes/CDIListViewController.m new file mode 100644 index 0000000..605220c --- /dev/null +++ b/Classes/CDIListViewController.m @@ -0,0 +1,560 @@ +// +// CDIListViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 3/31/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIListViewController.h" +#import "CDITaskTableViewCell.h" +#import "CDIAddTaskView.h" +#import "CDIAddTaskAnimationView.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" +#import "CDIAttributedLabel.h" +#import "CDICreateListViewController.h" +#import "CDINoTasksView.h" +#import "CDIRenameTaskViewController.h" + +@interface CDIListViewController () +@property (nonatomic, strong) CDIAddTaskView *addTaskView; +- (void)_renameList:(id)sender; +- (void)_archiveTasks:(id)sender; +- (void)_archiveAllTasks:(id)sender; +- (void)_archiveCompletedTasks:(id)sender; +@end + +@implementation CDIListViewController { + NSIndexPath *_textEditingIndexPath; + dispatch_semaphore_t _createTaskSemaphore; +} + +@synthesize addTaskView = _addTaskView; +@synthesize currentTag = _currentTag; +@synthesize focusKeyboard = _focusKeyboard; + +- (void)setManagedObject:(SSManagedObject *)managedObject { + CDKList *list = (CDKList *)self.managedObject; + + void *context = (__bridge void *)self; + if (list) { + [list removeObserver:self forKeyPath:@"title" context:context]; + [list removeObserver:self forKeyPath:@"archivedAt" context:context]; + } + + [super setManagedObject:managedObject]; + list = (CDKList *)self.managedObject; + + self.title = self.list.title; + self.tableView.hidden = self.list == nil; + + if (list == nil) { + return; + } + + [list addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:context]; + [list addObserver:self forKeyPath:@"archivedAt" options:NSKeyValueObservingOptionNew context:context]; + + self.ignoreChange = YES; + self.currentTag = nil; + + self.fetchedResultsController.fetchRequest.predicate = self.predicate; + [self.fetchedResultsController performFetch:nil]; + [self.tableView reloadData]; + self.ignoreChange = NO; + + [self setEditing:NO animated:NO]; + [self setLoading:NO animated:NO]; + + [SSRateLimit executeBlock:^{ + [self refresh:nil]; + } name:[NSString stringWithFormat:@"refresh-list-%@", self.list.remoteID] limit:30.0]; +} + + +- (CDKList *)list { + return (CDKList *)self.managedObject; +} + + +- (CDIAddTaskView *)addTaskView { + if (!_addTaskView) { + _addTaskView = [[CDIAddTaskView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, [CDIAddTaskView height])]; + _addTaskView.delegate = self; + [_addTaskView.renameListButton addTarget:self action:@selector(_renameList:) forControlEvents:UIControlEventTouchUpInside]; + [_addTaskView.archiveTasksButton addTarget:self action:@selector(_archiveTasks:) forControlEvents:UIControlEventTouchUpInside]; + [_addTaskView.archiveAllTasksButton addTarget:self action:@selector(_archiveAllTasks:) forControlEvents:UIControlEventTouchUpInside]; + [_addTaskView.archiveCompletedTasksButton addTarget:self action:@selector(_archiveCompletedTasks:) forControlEvents:UIControlEventTouchUpInside]; + } + return _addTaskView; +} + + +- (void)setCurrentTag:(CDKTag *)tag { + if ((!_currentTag && !tag) || [_currentTag isEqual:tag]) { + return; + } + + _currentTag = tag; + + SSFilterableFetchedResultsController *controller = (SSFilterableFetchedResultsController *)self.fetchedResultsController; + + if (_currentTag) { + NSString *filterName = [NSString stringWithFormat:@"tag-%@", tag.name]; + [self.addTaskView showTag:_currentTag.name]; + [controller addFilterPredicate:^BOOL(id obj) { + return [(CDKTask *)obj hasTag:_currentTag]; + } forKey:filterName]; + [controller setActiveFilterByKey:filterName]; + self.navigationItem.rightBarButtonItem.enabled = NO; + [self setEditing:NO animated:YES]; + } else { + [self.addTaskView hideTag]; + [controller removeCurrentFilter]; + self.navigationItem.rightBarButtonItem.enabled = YES; + } +} + + +#pragma mark - NSObject + +- (id)init { + if ((self = [super init])) { + _createTaskSemaphore = dispatch_semaphore_create(0); + dispatch_semaphore_signal(_createTaskSemaphore); + } + return self; +} + + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + self.managedObject = nil; + + dispatch_semaphore_wait(_createTaskSemaphore, DISPATCH_TIME_FOREVER); + dispatch_release(_createTaskSemaphore); +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + [self setEditing:NO animated:NO]; + self.view.backgroundColor = [UIColor cheddarArchesColor]; + self.tableView.hidden = self.list == nil; + self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake([CDIAddTaskView height], 0.0f, 0.0f, 0.0f); + self.pullToRefreshView.bottomBorderColor = [UIColor colorWithWhite:0.8f alpha:1.0f]; + + self.noContentView = [[CDINoTasksView alloc] initWithFrame:CGRectZero]; +} + + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + + [SSRateLimit executeBlock:^{ + [self refresh:nil]; + } name:[NSString stringWithFormat:@"refresh-list-%@", self.list.remoteID] limit:30.0]; + + if (_focusKeyboard) { + [self.addTaskView.textField becomeFirstResponder]; + _focusKeyboard = NO; + } +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [super setEditing:editing animated:animated]; + + if (!self.navigationItem.rightBarButtonItem) { + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleEditMode:)]; + } + self.navigationItem.rightBarButtonItem.title = editing ? @"Done" : @"Edit"; + self.navigationItem.rightBarButtonItem.enabled = !self.currentTag && self.list && self.fetchedResultsController.fetchedObjects.count > 0; + [self.addTaskView setEditing:editing animated:animated]; + +// NSMutableArray *rows = [[NSMutableArray alloc] init]; +// for (NSInteger i = 0; i < [self.tableView numberOfRowsInSection:0]; i++) { +// [rows addObject:[NSIndexPath indexPathForRow:i inSection:0]]; +// } +// [self.tableView reloadRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationAutomatic]; +} + + +#pragma mark - SSManagedViewController + ++ (Class)fetchedResultsControllerClass { + return [SSFilterableFetchedResultsController class]; +} + + +- (Class)entityClass { + return [CDKTask class]; +} + + +- (NSPredicate *)predicate { + if (self.currentTag) { + return [NSPredicate predicateWithFormat:@"list = %@ AND archivedAt = nil AND ANY taggings.tag = %@", self.list, self.currentTag]; + } + + return [NSPredicate predicateWithFormat:@"list = %@ AND archivedAt = nil", self.list]; +} + + +#pragma mark - SSManagedTableViewController + +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { + CDITaskTableViewCell *taskCell = (CDITaskTableViewCell *)cell; + taskCell.task = [self objectForViewIndexPath:indexPath]; + taskCell.attributedLabel.tag = indexPath.row; +} + + +#pragma mark - CDIManagedTableViewController + +- (void)editRow:(UITapGestureRecognizer *)editingTapGestureRecognizer { + NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)editingTapGestureRecognizer.view]; + if (!indexPath) { + return; + } + + CDIRenameTaskViewController *viewController = [[CDIRenameTaskViewController alloc] init]; + viewController.task = [self objectForViewIndexPath:indexPath]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + navigationController.modalPresentationStyle = UIModalPresentationFormSheet; + [self.navigationController presentModalViewController:navigationController animated:YES]; +} + + +- (void)coverViewTapped:(id)sender { + [self.addTaskView.textField resignFirstResponder]; +} + + +#pragma mark - Actions + +- (void)refresh:(id)sender { + if (self.list == nil || self.loading) { + return; + } + + CDKList *list = self.list; + self.loading = YES; + [[CDKHTTPClient sharedClient] getTasksWithList:list success:^(AFJSONRequestOperation *operation, id responseObject) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.loading = NO; + }); + } failure:^(AFJSONRequestOperation *operation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [SSRateLimit resetLimitForName:[NSString stringWithFormat:@"refresh-list-%@", self.list.remoteID]]; + self.loading = NO; + }); + }]; +} + + +#pragma mark - Private + +- (void)updateTableViewOffsets { + CGFloat offset = self.tableView.contentOffset.y; + CGFloat top = [CDIAddTaskView height] - fminf(0.0f, offset); + CGFloat bottom = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? self.keyboardRect.size.height : 0.0f; + self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(top, 0.0f, bottom, 0.0f); + self.pullToRefreshView.defaultContentInset = UIEdgeInsetsMake(0.0f, 0.0f, bottom, 0.0f); + self.addTaskView.shadowView.alpha = fmaxf(0.0f, fminf(offset / 24.0f, 1.0f)); +} + + +- (void)_renameList:(id)sender { + CDICreateListViewController *viewController = [[CDICreateListViewController alloc] init]; + viewController.list = self.list; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + navigationController.modalPresentationStyle = UIModalPresentationFormSheet; + [self.navigationController presentModalViewController:navigationController animated:YES]; +} + + +- (void)_archiveTasks:(id)sender { + // TODO: This is super ugly + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Archive Completed", @"Archive All", nil]; + [actionSheet showFromRect:[sender frame] inView:self.view animated:YES]; + } else { + UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Archive Completed", @"Archive All", nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.navigationController.view]; + } +} + + +- (void)_archiveAllTasks:(id)sender { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Archive All Tasks" message:@"Do you want to archive all of the tasks in this list?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Archive", nil]; + alert.tag = 1; + [alert show]; +} + + +- (void)_archiveCompletedTasks:(id)sender { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Archive Completed Tasks" message:@"Do you want to archive all of the completed tasks in this list?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Archive", nil]; + alert.tag = 2; + [alert show]; +} + + +#pragma mark - UITableViewDataSource + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *const cellIdentifier = @"cellIdentifier"; + + CDITaskTableViewCell *cell = (CDITaskTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[CDITaskTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.attributedLabel.delegate = self; + [cell.editingTapGestureRecognizer addTarget:self action:@selector(editRow:)]; + } + + [self configureCell:cell atIndexPath:indexPath]; + + return cell; +} + + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { + return self.addTaskView; +} + + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + CDKTask *task = [self objectForViewIndexPath:indexPath]; + [task toggleCompleted]; +} + + +- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath { + return @"Archive"; +} + + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle != UITableViewCellEditingStyleDelete) { + return; + } + + CDKTask *task = [self objectForViewIndexPath:indexPath]; + task.archivedAt = [NSDate date]; + [task save]; + [task update]; +} + + +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { + if (sourceIndexPath.row == destinationIndexPath.row) { + return; + } + + self.ignoreChange = YES; + NSMutableArray *tasks = [self.fetchedResultsController.fetchedObjects mutableCopy]; + CDKTask *task = [self objectForViewIndexPath:sourceIndexPath]; + [tasks removeObject:task]; + [tasks insertObject:task atIndex:destinationIndexPath.row]; + + NSInteger i = 0; + for (task in tasks) { + task.position = [NSNumber numberWithInteger:i++]; + } + + [self.managedObjectContext save:nil]; + self.ignoreChange = NO; + + [CDKTask sortWithObjects:tasks]; +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { + return [CDIAddTaskView height]; +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + CDKTask *task = [self objectForViewIndexPath:indexPath]; +// CGFloat offset = self.editing ? 29.0f : 0.0f; +// return [CDITaskTableViewCell cellHeightForTask:task width:tableView.frame.size.width - offset]; + return [CDITaskTableViewCell cellHeightForTask:task width:tableView.frame.size.width]; +} + + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + if ([self showingCoverView]) { + [self.addTaskView.textField resignFirstResponder]; + } + + [super scrollViewDidScroll:scrollView]; +} + + +#pragma mark - CDIAddTaskViewDelegate + +- (void)addTaskView:(CDIAddTaskView *)addTaskView didReturnWithTitle:(NSString *)title { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ + dispatch_semaphore_wait(_createTaskSemaphore, DISPATCH_TIME_FOREVER); + dispatch_async(dispatch_get_main_queue(), ^{ + CDIAddTaskAnimationView *animation = [[CDIAddTaskAnimationView alloc] initWithFrame:self.view.bounds]; + animation.title = title; + [self.view addSubview:animation]; + + self.ignoreChange = YES; + + NSInteger numberOfRows = [self.tableView numberOfRowsInSection:0]; + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:numberOfRows inSection:0]; + + CDKTask *task = [[CDKTask alloc] init]; + task.text = title; + task.displayText = title; + task.list = self.list; + task.position = [NSNumber numberWithInteger:self.list.highestPosition + 1]; + + CGPoint point = CGPointZero; + if (numberOfRows > 0) { + CGRect rect = [self.tableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:numberOfRows - 1 inSection:0]]; + point = rect.origin; + point.y += rect.size.height; + } else { + point.y = [CDIAddTaskView height]; + } + + [animation animationToPoint:point height:self.tableView.bounds.size.height insertTask:^{ + [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; + self.ignoreChange = NO; + } completion:^{ + [animation removeFromSuperview]; + dispatch_semaphore_signal(_createTaskSemaphore); + }]; + + [task createWithSuccess:nil failure:^(AFJSONRequestOperation *remoteOperation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + addTaskView.textField.text = title; + SSHUDView *hud = [[SSHUDView alloc] init]; + [hud failQuicklyWithTitle:@"Failed to create task"]; + }); + }]; + }); + }); +} + + +- (void)addTaskViewDidBeginEditing:(CDIAddTaskView *)addTaskView { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { + [self showCoverView]; + } +} + + +- (void)addTaskViewDidEndEditing:(CDIAddTaskView *)addTaskView { + [self hideCoverView]; +} + + +- (void)addTaskViewShouldCloseTag:(CDIAddTaskView *)addTaskView; { + self.currentTag = nil; +} + + +#pragma mark - TTTAttributedLabelDelegate + +- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { + if ([url.scheme isEqualToString:@"x-cheddar-tag"]) { + CDKTag *tag = [CDKTag existingTagWithName:url.host]; + self.currentTag = tag; + return; + } + + [[UIApplication sharedApplication] openURL:url]; +} + + +#pragma mark - UIActionSheetDelegate + +- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex == 0) { + [self setEditing:NO animated:YES]; + [self.list archiveCompletedTasks]; + } else if (buttonIndex == 1) { + [self setEditing:NO animated:YES]; + [self.list archiveAllTasks]; + } +} + + +#pragma mark - UIAlertViewDelegate + +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex == 0) { + return; + } + + [self setEditing:NO animated:YES]; + + if (alertView.tag == 1) { + [self.list archiveAllTasks]; + [self setEditing:NO animated:YES]; + } else if (alertView.tag == 2) { + [self.list archiveCompletedTasks]; + } +} + + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + CDKTask *task = [self objectForViewIndexPath:self.editingIndexPath]; + task.text = textField.text; + task.displayText = textField.text; + task.entities = nil; + [task save]; + [task update]; + + [self endCellTextEditing]; + return NO; +} + + +#pragma mark - NSKeyValueObserving + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context != (__bridge void *)self) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + if ([keyPath isEqualToString:@"title"]) { + self.title = [change objectForKey:NSKeyValueChangeNewKey]; + } else if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad && [keyPath isEqualToString:@"archivedAt"]) { + if ([change objectForKey:NSKeyValueChangeNewKey] != [NSNull null]) { + [self.navigationController popToRootViewControllerAnimated:YES]; + } + } +} + + +#pragma mark - NSFetchedResultsController + +- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { + [super controllerDidChangeContent:controller]; + self.navigationItem.rightBarButtonItem.enabled = [self hasContent]; +} + +@end diff --git a/Classes/CDIListsViewController.h b/Classes/CDIListsViewController.h new file mode 100644 index 0000000..99eb1bc --- /dev/null +++ b/Classes/CDIListsViewController.h @@ -0,0 +1,16 @@ +// +// CDIListsViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 3/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIManagedTableViewController.h" + +@interface CDIListsViewController : CDIManagedTableViewController + +- (void)showSettings:(id)sender; +- (void)createList:(id)sender; + +@end diff --git a/Classes/CDIListsViewController.m b/Classes/CDIListsViewController.m new file mode 100644 index 0000000..8b21773 --- /dev/null +++ b/Classes/CDIListsViewController.m @@ -0,0 +1,478 @@ +// +// CDIListsViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 3/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIListsViewController.h" +#import "CDISignUpViewController.h" +#import "CDIListTableViewCell.h" +#import "CDIListViewController.h" +#import "CDICreateListViewController.h" +#import "CDISettingsViewController.h" +#import "CDISplitViewController.h" +#import "UIColor+Cheddar.h" +#import "CDIUpgradeViewController.h" +#import "CDINoListsView.h" +#import "CDIAddListTableViewCell.h" +#import + +@interface CDIListsViewController () +- (void)_listUpdated:(NSNotification *)notification; +- (void)_currentUserDidChange:(NSNotification *)notification; +- (void)_createList:(id)sender; +- (void)_cancelAddingList:(id)sender; +- (void)_selectListAtIndexPath:(NSIndexPath *)indexPath newList:(BOOL)newList; +- (void)_checkUser; +@end + +@implementation CDIListsViewController { + CDKList *_selectedList; + BOOL _adding; + BOOL _checkForOneList; +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + UIImageView *title = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav-title.png"]]; + title.frame = CGRectMake(0.0f, 0.0f, 116.0f, 21.0f); + self.navigationItem.titleView = title; + self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Lists" style:UIBarButtonItemStyleBordered target:nil action:nil]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(createList:)]; + + [self setEditing:NO animated:NO]; + + self.noContentView = [[CDINoListsView alloc] initWithFrame:CGRectZero]; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_listUpdated:) name:kCDKListDidUpdateNotificationName object:nil]; + } + + _checkForOneList = YES; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_currentUserDidChange:) name:kCDKCurrentUserChangedNotificationName object:nil]; +} + + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { + [self _checkUser]; + } +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [self _checkUser]; + } + + [SSRateLimit executeBlock:^{ + [self refresh:nil]; + } name:@"refresh-lists" limit:30.0]; +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [super setEditing:editing animated:animated]; + + if (editing) { + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleEditMode:)]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:UIBarButtonItemStyleBordered target:self action:@selector(showSettings:)]; + } else { + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleEditMode:)]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(createList:)]; + } + + self.navigationItem.leftBarButtonItem.enabled = [self hasContent]; + + if (!editing && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [self.tableView selectRowAtIndexPath:[self.fetchedResultsController indexPathForObject:_selectedList] animated:YES scrollPosition:UITableViewScrollPositionNone]; + } +} + + +#pragma mark - SSManagedViewController + +- (Class)entityClass { + return [CDKList class]; +} + + +- (NSPredicate *)predicate { + return [NSPredicate predicateWithFormat:@"archivedAt = nil && user = %@", [CDKUser currentUser]]; +} + + +#pragma mark - SSManagedTableViewController + +- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { + CDKList *list = [self objectForViewIndexPath:indexPath]; + [(CDIListTableViewCell *)cell setList:list]; +} + + +- (NSIndexPath *)viewIndexPathForFetchedIndexPath:(NSIndexPath *)fetchedIndexPath { + if (_adding) { + return [NSIndexPath indexPathForRow:fetchedIndexPath.row + 1 inSection:fetchedIndexPath.section]; + } + + return fetchedIndexPath; +} + + +- (NSIndexPath *)fetchedIndexPathForViewIndexPath:(NSIndexPath *)viewIndexPath { + if (_adding) { + return [NSIndexPath indexPathForRow:viewIndexPath.row - 1 inSection:viewIndexPath.section]; + } + + return viewIndexPath; +} + + +#pragma mark - CDIManagedTableViewController + +- (void)coverViewTapped:(id)sender { + [self _cancelAddingList:sender]; +} + + +#pragma mark - Actions + +- (void)refresh:(id)sender { + if (self.loading || ![CDKUser currentUser]) { + return; + } + + self.loading = YES; + [[CDKHTTPClient sharedClient] getListsWithSuccess:^(AFJSONRequestOperation *operation, id responseObject) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.loading = NO; + }); + } failure:^(AFJSONRequestOperation *operation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [SSRateLimit resetLimitForName:@"refresh-lists"]; + self.loading = NO; + }); + }]; + + // Also update their user incase push for updates failed + [[CDKHTTPClient sharedClient] updateCurrentUserWithSuccess:nil failure:nil]; +} + + +- (void)showSettings:(id)sender { + CDISettingsViewController *viewController = [[CDISettingsViewController alloc] init]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + navigationController.modalPresentationStyle = UIModalPresentationFormSheet; + [self.navigationController presentModalViewController:navigationController animated:YES]; +} + + +- (void)createList:(id)sender { + if (self.fetchedResultsController.fetchedObjects.count >= 2 && [[CDKUser currentUser] hasPlus].boolValue == NO) { + UIViewController *viewController = [[CDIUpgradeViewController alloc] init]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + navigationController.modalPresentationStyle = UIModalPresentationFormSheet; + [self.navigationController presentModalViewController:navigationController animated:YES]; + return; + } + + [self hideNoContentView:YES]; + UIView *coverView = self.coverView; + coverView.frame = self.view.bounds; + [self setEditing:NO animated:YES]; + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(_cancelAddingList:)]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Create" style:UIBarButtonItemStyleDone target:self action:@selector(_createList:)]; + [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ + [self.tableView scrollToTopAnimated:NO]; + coverView.alpha = 1.0f; + + _adding = YES; + [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationTop]; + coverView.frame = CGRectMake(0.0f, [CDIListTableViewCell cellHeight], self.tableView.bounds.size.width, self.tableView.bounds.size.height - [CDIListTableViewCell cellHeight]); + } completion:nil]; + return; +} + + +#pragma mark - Private + +- (void)_listUpdated:(NSNotification *)notification { + if ([notification.object isEqual:_selectedList.remoteID] == NO) { + return; + } + + if (_selectedList.archivedAt != nil) { + [CDISplitViewController sharedSplitViewController].listViewController.managedObject = nil; + _selectedList = nil; + } +} + + +- (void)_currentUserDidChange:(NSNotification *)notification { + self.fetchedResultsController = nil; + _checkForOneList = YES; + [self.tableView reloadData]; +} + + +- (void)_createList:(id)sender { + CDIAddListTableViewCell *cell = (CDIAddListTableViewCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; + UITextField *textField = cell.textField; + if (textField.text.length == 0) { + return; + } + + SSHUDView *hud = [[SSHUDView alloc] initWithTitle:@"Creating..." loading:YES]; + [hud show]; + + CDKList *list = [[CDKList alloc] init]; + list.title = textField.text; + list.position = [NSNumber numberWithInteger:INT32_MAX]; + list.user = [CDKUser currentUser]; + + [list createWithSuccess:^{ + dispatch_async(dispatch_get_main_queue(), ^{ + [hud completeAndDismissWithTitle:@"Created!"]; + [self _cancelAddingList:nil]; + textField.text = nil; + NSIndexPath *indexPath = [self.fetchedResultsController indexPathForObject:list]; + [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; + [self _selectListAtIndexPath:indexPath newList:YES]; + }); + } failure:^(AFJSONRequestOperation *remoteOperation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + NSDictionary *responseObject = remoteOperation.responseJSON; + if ([responseObject isKindOfClass:[NSDictionary class]] && [[responseObject objectForKey:@"error"] isEqualToString:@"plus_required"]) { + [hud dismiss]; + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Plus Required" message:@"You need Cheddar Plus to create more than 2 lists. Please upgrade to continue." delegate:self cancelButtonTitle:@"Later" otherButtonTitles:@"Upgrade", nil]; + [alert show]; + } else { + [hud failAndDismissWithTitle:@"Failed"]; + [textField becomeFirstResponder]; + } + }); + }]; +} + + +- (void)_cancelAddingList:(id)sender { + if (!_adding) { + return; + } + + _adding = NO; + + CDIAddListTableViewCell *cell = (CDIAddListTableViewCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; + if ([cell.textField isFirstResponder]) { + [cell.textField resignFirstResponder]; + } + + [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationTop]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"plus.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(createList:)]; + [self setEditing:NO animated:NO]; + [self hideCoverView]; + [self updatePlaceholderViews:YES]; +} + + +- (void)_selectListAtIndexPath:(NSIndexPath *)indexPath newList:(BOOL)newList { + if (_adding) { + return; + } + + if ([[self.tableView indexPathForSelectedRow] isEqual:indexPath] == NO) { + [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; + } + + CDKList *list = [self objectForViewIndexPath:indexPath]; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [CDISplitViewController sharedSplitViewController].listViewController.managedObject = list; + _selectedList = list; + } else { + CDIListViewController *viewController = [[CDIListViewController alloc] init]; + viewController.managedObject = list; + viewController.focusKeyboard = newList; + [self.navigationController pushViewController:viewController animated:YES]; + } +} + + +- (void)_checkUser { + if (![CDKUser currentUser]) { + UIViewController *viewController = [[CDISignUpViewController alloc] init]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + navigationController.modalPresentationStyle = UIModalPresentationFormSheet; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [self.splitViewController presentModalViewController:navigationController animated:YES]; + } else { + [self.navigationController presentModalViewController:navigationController animated:NO]; + } + return; + } +} + + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + NSInteger rows = [super tableView:tableView numberOfRowsInSection:section]; + + if (_adding) { + return rows + 1; + } + + return rows; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *const cellIdentifier = @"cellIdentifier"; + static NSString *const addCellIdentifier = @"addCellIdentifier"; + + if (_adding && indexPath.row == 0) { + CDIAddListTableViewCell *cell = (CDIAddListTableViewCell *)[tableView dequeueReusableCellWithIdentifier:addCellIdentifier]; + if (!cell) { + cell = [[CDIAddListTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:addCellIdentifier]; + cell.textField.delegate = self; + [cell.closeButton addTarget:self action:@selector(_cancelAddingList:) forControlEvents:UIControlEventTouchUpInside]; + } + [cell.textField becomeFirstResponder]; + + return cell; + } + + CDIListTableViewCell *cell = (CDIListTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[CDIListTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; + [cell.editingTapGestureRecognizer addTarget:self action:@selector(editRow:)]; + } + + cell.list = [self objectForViewIndexPath:indexPath]; + + return cell; +} + + +#pragma mark - UITableViewDelegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + [self _selectListAtIndexPath:indexPath newList:NO]; +} + + +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath { + if (sourceIndexPath.row == destinationIndexPath.row) { + return; + } + + self.ignoreChange = YES; + NSMutableArray *lists = [self.fetchedResultsController.fetchedObjects mutableCopy]; + CDKList *list = [self objectForViewIndexPath:sourceIndexPath]; + [lists removeObject:list]; + [lists insertObject:list atIndex:destinationIndexPath.row]; + + NSInteger i = 0; + for (list in lists) { + list.position = [NSNumber numberWithInteger:i++]; + } + + [self.managedObjectContext save:nil]; + self.ignoreChange = NO; + + [CDKList sortWithObjects:lists]; +} + + +- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath { + return @"Archive"; +} + + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + if (editingStyle != UITableViewCellEditingStyleDelete) { + return; + } + + CDKList *list = [self objectForViewIndexPath:indexPath]; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + CDIListViewController *listViewController = [CDISplitViewController sharedSplitViewController].listViewController; + if ([listViewController.managedObject isEqual:list]) { + listViewController.managedObject = nil; + } + } + + list.archivedAt = [NSDate date]; + [list save]; + [list update]; +} + + +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { + return YES; +} + + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + if (_adding) { + [self _cancelAddingList:scrollView]; + } +} + + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (_adding) { + [self _createList:textField]; + return NO; + } + + CDKList *list = [self objectForViewIndexPath:self.editingIndexPath]; + list.title = textField.text; + [list save]; + [list update]; + + [self endCellTextEditing]; + return NO; +} + + +- (void)textFieldDidEndEditing:(UITextField *)textField { + if (_adding) { + [self _cancelAddingList:textField]; + } +} + + +#pragma mark - NSFetchedResultsController + +- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { + [super controllerDidChangeContent:controller]; + + self.navigationItem.leftBarButtonItem.enabled = [self hasContent]; + + if (_checkForOneList) { + if (self.fetchedResultsController.fetchedObjects.count == 1) { + [self _selectListAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] newList:NO]; + } + _checkForOneList = NO; + } +} + +@end diff --git a/Classes/CDILoadingView.h b/Classes/CDILoadingView.h new file mode 100644 index 0000000..5372b2e --- /dev/null +++ b/Classes/CDILoadingView.h @@ -0,0 +1,10 @@ +// +// CDILoadingView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/28/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDILoadingView : SSLoadingView +@end diff --git a/Classes/CDILoadingView.m b/Classes/CDILoadingView.m new file mode 100644 index 0000000..bdf4e97 --- /dev/null +++ b/Classes/CDILoadingView.m @@ -0,0 +1,23 @@ +// +// CDILoadingView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/28/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDILoadingView.h" +#import "UIFont+Cheddar.h" +#import "UIColor+Cheddar.h" + +@implementation CDILoadingView + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.textLabel.font = [UIFont cheddarFontOfSize:16.0f]; + self.backgroundColor = [UIColor clearColor]; + } + return self; +} + +@end diff --git a/Classes/CDIManagedTableViewController.h b/Classes/CDIManagedTableViewController.h new file mode 100644 index 0000000..0a9b43c --- /dev/null +++ b/Classes/CDIManagedTableViewController.h @@ -0,0 +1,33 @@ +// +// CDIManagedTableViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/10/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIPullToRefreshView.h" + +@interface CDIManagedTableViewController : SSManagedTableViewController + +@property (nonatomic, strong, readonly) CDIPullToRefreshView *pullToRefreshView; +@property (nonatomic, strong, readonly) NSIndexPath *editingIndexPath; +@property (nonatomic, assign, readonly) CGRect keyboardRect; +@property (nonatomic, strong) UIView *coverView; + +- (void)refresh:(id)sender; +- (void)toggleEditMode:(id)sender; +- (void)endCellTextEditing; +- (void)editRow:(UITapGestureRecognizer *)editingTapGestureRecognizer; + +- (void)updateTableViewOffsets; +- (void)keyboardDidShow:(NSNotification *)notification; +- (void)keyboardDidHide:(NSNotification *)notification; +- (void)reachabilityChanged:(NSNotification *)notification; + +- (void)showCoverView; +- (BOOL)showingCoverView; +- (void)hideCoverView; +- (void)coverViewTapped:(id)sender; + +@end diff --git a/Classes/CDIManagedTableViewController.m b/Classes/CDIManagedTableViewController.m new file mode 100644 index 0000000..3a8e445 --- /dev/null +++ b/Classes/CDIManagedTableViewController.m @@ -0,0 +1,328 @@ +// +// CDIManagedTableViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/10/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIManagedTableViewController.h" +#import "CDITableViewCell.h" +#import "UIColor+Cheddar.h" +#import "CDILoadingView.h" + +@implementation CDIManagedTableViewController { + UITapGestureRecognizer *_tableViewTapGestureRecognizer; + BOOL _allowScrolling; +} + +@synthesize pullToRefreshView = _pullToRefreshView; +@synthesize editingIndexPath = _editingIndexPath; +@synthesize keyboardRect = _keyboardRect; +@synthesize coverView = _coverView; + + +- (UIView *)coverView { + if (!_coverView) { + CGRect frame = self.tableView.bounds; + frame.origin.y += [CDITableViewCell cellHeight]; + frame.size.height -= [CDITableViewCell cellHeight]; + _coverView = [[UIView alloc] initWithFrame:frame]; + _coverView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; + _coverView.backgroundColor = [UIColor colorWithWhite:1.0f alpha:0.9f]; + _coverView.alpha = 0.0f; + + [_coverView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(coverViewTapped:)]]; + [self.tableView addSubview:_coverView]; + } + return _coverView; +} + + +#pragma mark - NSObject + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + _pullToRefreshView.delegate = nil; + [_pullToRefreshView removeFromSuperview]; + _pullToRefreshView = nil; +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.rowHeight = [CDITableViewCell cellHeight]; + + UIView *background = [[UIView alloc] initWithFrame:CGRectZero]; + background.backgroundColor = [UIColor cheddarArchesColor]; + self.tableView.backgroundView = background; + + SSGradientView *footer = [[SSGradientView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 3.0f)]; + footer.backgroundColor = [UIColor clearColor]; + footer.colors = [NSArray arrayWithObjects: + [UIColor colorWithWhite:0.937f alpha:1.0f], + [UIColor colorWithWhite:0.937f alpha:0.0f], + nil]; + self.tableView.tableFooterView = footer; + + _tableViewTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(endCellTextEditing)]; + _tableViewTapGestureRecognizer.enabled = NO; + _tableViewTapGestureRecognizer.cancelsTouchesInView = NO; + [self.tableView addGestureRecognizer:_tableViewTapGestureRecognizer]; + + _pullToRefreshView = [[CDIPullToRefreshView alloc] initWithScrollView:self.tableView delegate:self]; + + self.loadingView = [[CDILoadingView alloc] initWithFrame:self.view.bounds]; + self.loadingView.userInteractionEnabled = NO; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refresh:) name:UIApplicationDidBecomeActiveNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refresh:) name:kCDKCurrentUserChangedNotificationName object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; +} + + +- (void)viewDidUnload { + [super viewDidUnload]; + _tableViewTapGestureRecognizer = nil; + + _pullToRefreshView.delegate = nil; + [_pullToRefreshView removeFromSuperview]; + _pullToRefreshView = nil; +} + + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [super setEditing:editing animated:animated]; + _tableViewTapGestureRecognizer.enabled = editing; + if (!editing) { + [self endCellTextEditing]; + } +} + + +- (void)viewWillAppear:(BOOL)animated { + [self refresh:nil]; + [super viewWillAppear:animated]; +} + + +#pragma mark - SSManagedViewController + +- (void)setLoading:(BOOL)loading animated:(BOOL)animated { + [super setLoading:loading animated:animated]; + + if (self.loading) { + [self.pullToRefreshView startLoading]; + } else { + [self.pullToRefreshView finishLoading]; + } +} + + +- (void)showLoadingView:(BOOL)animated { + if (!self.loadingView || self.loadingView.superview) { + return; + } + + self.loadingView.alpha = 0.0f; + self.loadingView.frame = self.view.bounds; + [self.tableView addSubview:self.loadingView]; + + void (^change)(void) = ^{ + self.loadingView.alpha = 1.0f; + }; + + + if (animated) { + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:change completion:nil]; + } else { + change(); + } +} + + +- (void)showNoContentView:(BOOL)animated { + if (!self.noContentView || self.noContentView.superview) { + return; + } + + self.noContentView.alpha = 0.0f; + self.noContentView.frame = self.view.bounds; + [self.tableView addSubview:self.noContentView]; + + void (^change)(void) = ^{ + self.noContentView.alpha = 1.0f; + }; + + + if (animated) { + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:change completion:nil]; + } else { + change(); + } +} + + +#pragma mark - Actions + +- (void)refresh:(id)sender { + // Subclasses should override this +} + + +#pragma mark - Editing + +- (void)toggleEditMode:(id)sender { + [self setEditing:!self.editing animated:YES]; +} + + +- (void)editRow:(UITapGestureRecognizer *)editingTapGestureRecognizer { + CDITableViewCell *cell = (CDITableViewCell *)[self.tableView cellForRowAtIndexPath:_editingIndexPath]; + cell.editingText = NO; + cell.textField.delegate = nil; + + cell = (CDITableViewCell *)editingTapGestureRecognizer.view; + cell.editingText = YES; + cell.textField.delegate = self; + + _editingIndexPath = [self.tableView indexPathForCell:cell]; +} + + +#pragma mark - Keyboard + +- (void)updateTableViewOffsets { + CGFloat offset = self.tableView.contentOffset.y; + CGFloat top = fminf(0.0f, offset); + CGFloat bottom = fmaxf(_keyboardRect.origin.x, _keyboardRect.origin.y); + + self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(top, 0.0f, bottom, 0.0f); + self.pullToRefreshView.defaultContentInset = UIEdgeInsetsMake(0.0f, 0.0f, bottom, 0.0f); +} + + +- (void)keyboardDidShow:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + _keyboardRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + _allowScrolling = YES; + CGFloat duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; + [UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ + [self updateTableViewOffsets]; + + // TODO: Once there are flexible row heights, change this to use better calculations + if (_editingIndexPath && _editingIndexPath.row > 2) { + CGRect cellRect = [self.tableView rectForRowAtIndexPath:_editingIndexPath]; + CGPoint offset = cellRect.origin; + offset.y -= 51.0f; + [self.tableView setContentOffset:offset animated:NO]; + } + } completion:^(BOOL finished) { + _allowScrolling = NO; + }]; +} + + +- (void)keyboardDidHide:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + _keyboardRect = CGRectZero; + + [UIView beginAnimations:@"hideKeyboard" context:NULL]; + [UIView setAnimationDuration:[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]]; + [UIView setAnimationCurve:[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]]; + [self updateTableViewOffsets]; + [UIView commitAnimations]; +} + + +- (void)reachabilityChanged:(NSNotification *)notification { + if ([notification.object isReachable]) { + [self refresh:nil]; + } +} + + +#pragma mark - Private + +- (void)endCellTextEditing { + CDITableViewCell *cell = (CDITableViewCell *)[self.tableView cellForRowAtIndexPath:_editingIndexPath]; + cell.editingText = NO; + cell.textField.delegate = nil; + _editingIndexPath = nil; +} + + +- (void)showCoverView { + UIView *coverView = self.coverView; + [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ + coverView.alpha = 1.0f; + } completion:nil]; +} + + +- (BOOL)showingCoverView { + return _coverView != nil; +} + + +- (void)hideCoverView { + [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ + _coverView.alpha = 0.0f; + } completion:^(BOOL finished) { + [_coverView removeFromSuperview]; + _coverView = nil; + }]; +} + + +- (void)coverViewTapped:(id)sender { + // Subclasses should override this method +} + + +#pragma mark - UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + [self updateTableViewOffsets]; + + if (_allowScrolling) { + return; + } + + [self endCellTextEditing]; +} + + +#pragma mark - SSPullToRefreshViewDelegate + +- (void)pullToRefreshViewDidStartLoading:(SSPullToRefreshView *)view { + [self refresh:view]; +} + + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + return NO; +} + + +#pragma mark - NSFetchedResultsControllerDelegate + +- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { + [super controllerDidChangeContent:controller]; + + if (self.editing && !self.hasContent) { + [self setEditing:NO animated:YES]; + } +} + +@end diff --git a/Classes/CDINoListsView.h b/Classes/CDINoListsView.h new file mode 100644 index 0000000..808732b --- /dev/null +++ b/Classes/CDINoListsView.h @@ -0,0 +1,10 @@ +// +// CDINoListsView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDINoListsView : UIView +@end diff --git a/Classes/CDINoListsView.m b/Classes/CDINoListsView.m new file mode 100644 index 0000000..3f8466e --- /dev/null +++ b/Classes/CDINoListsView.m @@ -0,0 +1,52 @@ +// +// CDINoListsView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDINoListsView.h" +#import "UIFont+Cheddar.h" + +@implementation CDINoListsView + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.userInteractionEnabled = NO; + + UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(115.0f, 106.0f, 90.0f, 110.0f)]; + imageView.image = [UIImage imageNamed:@"list-icon.png"]; + [self addSubview:imageView]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 230.0f, 280.0f, 60.0f)]; + label.backgroundColor = [UIColor clearColor]; + label.numberOfLines = 2; + label.textAlignment = UITextAlignmentCenter; + label.textColor = [UIColor colorWithRed:0.702f green:0.694f blue:0.686f alpha:1.0f]; + label.text = @"You don't have any lists."; + label.font = [UIFont cheddarFontOfSize:22.0f]; + label.shadowColor = [UIColor whiteColor]; + label.shadowOffset = CGSizeMake(0.0f, 1.0f); + [self addSubview:label]; + + // iPad's nav bar buttons are 7pt from the edge instead of iPhone's 5pt + CGFloat offset = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 2.0f : 0.0f; + + imageView = [[UIImageView alloc] initWithFrame:CGRectMake(272.0f - offset, 5.0f, 34.0f, 40.0f)]; + imageView.image = [UIImage imageNamed:@"add-list-arrow.png"]; + [self addSubview:imageView]; + + label = [[UILabel alloc] initWithFrame:CGRectMake(200.0f - offset, 30.0f, 75.0f, 22.0f)]; + label.text = @"Add a list"; + label.textAlignment = UITextAlignmentRight; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont fontWithName:@"Noteworthy" size:19.0f]; + label.textColor = [UIColor colorWithWhite:0.294f alpha:0.45f]; + label.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-4.0f)); + [self addSubview:label]; + } + return self; +} + +@end diff --git a/Classes/CDINoTasksView.h b/Classes/CDINoTasksView.h new file mode 100644 index 0000000..28060f8 --- /dev/null +++ b/Classes/CDINoTasksView.h @@ -0,0 +1,10 @@ +// +// CDINoTasksView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDINoTasksView : UIView +@end diff --git a/Classes/CDINoTasksView.m b/Classes/CDINoTasksView.m new file mode 100644 index 0000000..513d9cc --- /dev/null +++ b/Classes/CDINoTasksView.m @@ -0,0 +1,56 @@ +// +// CDINoTasksView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDINoTasksView.h" +#import "UIFont+Cheddar.h" + +@implementation CDINoTasksView + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.userInteractionEnabled = NO; + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(roundf((frame.size.width - 108.0f) / 2.0f), 136.0f, 108.0f, 83.0f)]; + imageView.image = [UIImage imageNamed:@"task-icon.png"]; + imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; + [self addSubview:imageView]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(roundf((frame.size.width - 280.0f) / 2.0f), 260.0f, 280.0f, 60.0f)]; + label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; + label.backgroundColor = [UIColor clearColor]; + label.numberOfLines = 2; + label.textAlignment = UITextAlignmentCenter; + label.textColor = [UIColor colorWithRed:0.702f green:0.694f blue:0.686f alpha:1.0f]; + label.text = @"You don't have any\ntasks in this list."; + label.font = [UIFont cheddarFontOfSize:22.0f]; + label.shadowColor = [UIColor whiteColor]; + label.shadowOffset = CGSizeMake(0.0f, 1.0f); + [self addSubview:label]; + + // iPad's nav bar buttons are 7pt from the edge instead of iPhone's 5pt + CGFloat offset = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 2.0f : 0.0f; + + imageView = [[UIImageView alloc] initWithFrame:CGRectMake(13.0f + offset, 56.0f, 34.0f, 40.0f)]; + imageView.image = [UIImage imageNamed:@"add-task-arrow.png"]; + [self addSubview:imageView]; + + label = [[UILabel alloc] initWithFrame:CGRectMake(41.0f + offset, 80.0f, 85.0f, 22.0f)]; + label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; + label.text = @"Add a task"; + label.textAlignment = UITextAlignmentCenter; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont fontWithName:@"Noteworthy" size:19.0f]; + label.textColor = [UIColor colorWithWhite:0.294f alpha:0.45f]; + label.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-2.0f)); + [self addSubview:label]; + } + return self; +} + +@end diff --git a/Classes/CDIPullToRefreshContentView.h b/Classes/CDIPullToRefreshContentView.h new file mode 100644 index 0000000..a050a59 --- /dev/null +++ b/Classes/CDIPullToRefreshContentView.h @@ -0,0 +1,12 @@ +// +// CDIPullToRefreshContentView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/9/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "SSPullToRefreshSimpleContentView.h" + +@interface CDIPullToRefreshContentView : SSPullToRefreshSimpleContentView +@end diff --git a/Classes/CDIPullToRefreshContentView.m b/Classes/CDIPullToRefreshContentView.m new file mode 100644 index 0000000..c7d35c2 --- /dev/null +++ b/Classes/CDIPullToRefreshContentView.m @@ -0,0 +1,24 @@ +// +// CDIPullToRefreshContentView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/9/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIPullToRefreshContentView.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" + +@implementation CDIPullToRefreshContentView + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.statusLabel.font = [UIFont cheddarFontOfSize:15.0f]; + self.statusLabel.textColor = [UIColor cheddarTextColor]; + self.statusLabel.backgroundColor = [UIColor whiteColor]; + } + return self; +} + +@end diff --git a/Classes/CDIPullToRefreshView.h b/Classes/CDIPullToRefreshView.h new file mode 100644 index 0000000..84faf75 --- /dev/null +++ b/Classes/CDIPullToRefreshView.h @@ -0,0 +1,15 @@ +// +// CDIPullToRefreshView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/9/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "SSPullToRefreshView.h" + +@interface CDIPullToRefreshView : SSPullToRefreshView + +@property (nonatomic, strong) UIColor *bottomBorderColor; + +@end diff --git a/Classes/CDIPullToRefreshView.m b/Classes/CDIPullToRefreshView.m new file mode 100644 index 0000000..998e1c5 --- /dev/null +++ b/Classes/CDIPullToRefreshView.m @@ -0,0 +1,35 @@ +// +// CDIPullToRefreshView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/9/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIPullToRefreshView.h" +#import "CDIPullToRefreshContentView.h" + +@implementation CDIPullToRefreshView + +@synthesize bottomBorderColor = _bottomBorderColor; + +#pragma mark - UIView + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.backgroundColor = [UIColor whiteColor]; + self.contentView = [[CDIPullToRefreshContentView alloc] initWithFrame:CGRectZero]; + self.bottomBorderColor = [UIColor colorWithWhite:0.92f alpha:1.0f]; + } + return self; +} + + +- (void)drawRect:(CGRect)rect { + [self.bottomBorderColor setFill]; + + CGSize size = self.bounds.size; + CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0.0f, size.height - 1.0f, size.width, 1.0f)); +} + +@end diff --git a/Classes/CDIRenameTaskViewController.h b/Classes/CDIRenameTaskViewController.h new file mode 100644 index 0000000..c1bfe62 --- /dev/null +++ b/Classes/CDIRenameTaskViewController.h @@ -0,0 +1,19 @@ +// +// CDIRenameTaskViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@class CDKTask; + +@interface CDIRenameTaskViewController : UIViewController + +@property (nonatomic, strong) CDKTask *task; +@property (nonatomic, strong, readonly) SSTextView *textView; + +- (void)save:(id)sender; +- (void)cancel:(id)sender; + +@end diff --git a/Classes/CDIRenameTaskViewController.m b/Classes/CDIRenameTaskViewController.m new file mode 100644 index 0000000..5a769c6 --- /dev/null +++ b/Classes/CDIRenameTaskViewController.m @@ -0,0 +1,134 @@ +// +// CDIRenameTaskViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIRenameTaskViewController.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" + +@interface CDIRenameTaskViewController () +- (void)_keyboardDidShow:(NSNotification *)notification; +- (void)_keyboardDidHide:(NSNotification *)notification; +- (void)_updateTextViewFrame; +@end + +@implementation CDIRenameTaskViewController { + CGRect _keyboardRect; +} + +@synthesize task = _task; +@synthesize textView = _textView; + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"Edit Task"; + + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStyleDone target:self action:@selector(save:)]; + + self.view.backgroundColor = [UIColor whiteColor]; + + _textView = [[SSTextView alloc] initWithFrame:self.view.bounds]; + _textView.delegate = self; + _textView.autocapitalizationType = UITextAutocapitalizationTypeSentences; + _textView.autocorrectionType = UITextAutocorrectionTypeYes; + _textView.textColor = [UIColor cheddarTextColor]; + _textView.placeholderTextColor = [UIColor cheddarLightTextColor]; + _textView.placeholder = @"What do you have to do?"; + _textView.returnKeyType = UIReturnKeyGo; + _textView.font = [UIFont cheddarFontOfSize:18.0f]; + _textView.text = self.task.text; + [self.view addSubview:_textView]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; +} + + +- (void)viewDidUnload { + [super viewDidUnload]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [_textView becomeFirstResponder]; +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + + +- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { + [UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ + [self _updateTextViewFrame]; + } completion:nil]; +} + + +#pragma mark - Actions + +- (void)save:(id)sender { + self.task.text = self.textView.text; + [self.task save]; + [self.task update]; + [self.navigationController dismissModalViewControllerAnimated:YES]; +} + + +- (void)cancel:(id)sender { + [self.navigationController dismissModalViewControllerAnimated:YES]; +} + + +#pragma mark - Private + +- (void)_updateTextViewFrame { + CGSize size = self.view.bounds.size; + CGFloat heightAdjust = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 0.0f : fminf(_keyboardRect.size.width, _keyboardRect.size.height); + _textView.frame = CGRectMake(0.0f, 0.0f, size.width, size.height - heightAdjust); +} + + +- (void)_keyboardDidShow:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + _keyboardRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + CGFloat duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + [UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ + [self _updateTextViewFrame]; + } completion:nil]; +} + + +- (void)_keyboardDidHide:(NSNotification *)notification { + NSDictionary *userInfo = [notification userInfo]; + _keyboardRect = CGRectZero; + + CGFloat duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + [UIView animateWithDuration:duration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ + [self _updateTextViewFrame]; + } completion:nil]; +} + + +#pragma mark - UITextViewDelegate + +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { + if ([text isEqual:@"\n"]) { + [self save:textView]; + return NO; + } + return YES; +} + +@end diff --git a/Classes/CDISessionsViewController.h b/Classes/CDISessionsViewController.h new file mode 100644 index 0000000..c2653fa --- /dev/null +++ b/Classes/CDISessionsViewController.h @@ -0,0 +1,16 @@ +// +// CDISessionsViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDISessionsViewController : UITableViewController + +@property (nonatomic, strong, readonly) UITextField *usernameTextField; +@property (nonatomic, strong, readonly) UITextField *passwordTextField; + ++ (CGFloat)textFieldWith; + +@end diff --git a/Classes/CDISessionsViewController.m b/Classes/CDISessionsViewController.m new file mode 100644 index 0000000..71355f3 --- /dev/null +++ b/Classes/CDISessionsViewController.m @@ -0,0 +1,89 @@ +// +// CDISessionsViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISessionsViewController.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" + +@implementation CDISessionsViewController + +@synthesize usernameTextField = _usernameTextField; +@synthesize passwordTextField = _passwordTextField; + +- (UITextField *)usernameTextField { + if (!_usernameTextField) { + _usernameTextField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [[self class] textFieldWith], 30.0f)]; + _usernameTextField.keyboardType = UIKeyboardTypeEmailAddress; + _usernameTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _usernameTextField.autocorrectionType = UITextAutocorrectionTypeNo; + _usernameTextField.textColor = [UIColor cheddarBlueColor]; + _usernameTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _usernameTextField.delegate = self; + _usernameTextField.returnKeyType = UIReturnKeyNext; + _usernameTextField.font = [UIFont cheddarFontOfSize:18.0f]; + } + return _usernameTextField; +} + + +- (UITextField *)passwordTextField { + if (!_passwordTextField) { + _passwordTextField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [[self class] textFieldWith], 30.0f)]; + _passwordTextField.secureTextEntry = YES; + _passwordTextField.textColor = [UIColor cheddarBlueColor]; + _passwordTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _passwordTextField.delegate = self; + _passwordTextField.returnKeyType = UIReturnKeyGo; + _passwordTextField.font = [UIFont cheddarFontOfSize:18.0f]; + } + return _passwordTextField; +} + + +#pragma mark - Class Methods + ++ (CGFloat)textFieldWith { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 360.0f : 180.0f; +} + + +#pragma mark - NSObject + +- (id)init { + if ((self = [super initWithStyle:UITableViewStyleGrouped])) { + self.title = @"Cheddar"; + UIImageView *title = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav-title.png"]]; + title.frame = CGRectMake(0.0f, 0.0f, 116.0f, 21.0f); + self.navigationItem.titleView = title; + } + return self; +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + UIView *background = [[UIView alloc] initWithFrame:CGRectZero]; + background.backgroundColor = [UIColor cheddarArchesColor]; + self.tableView.backgroundView = background; +} + + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self.usernameTextField becomeFirstResponder]; +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + +@end diff --git a/Classes/CDISettingsViewController.h b/Classes/CDISettingsViewController.h new file mode 100644 index 0000000..37323f8 --- /dev/null +++ b/Classes/CDISettingsViewController.h @@ -0,0 +1,16 @@ +// +// CDISettingsViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/20/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDISettingsViewController : UIViewController + +- (void)done:(id)sender; +- (void)upgrade:(id)sender; +- (void)support:(id)sender; +- (void)signOut:(id)sender; + +@end diff --git a/Classes/CDISettingsViewController.m b/Classes/CDISettingsViewController.m new file mode 100644 index 0000000..54286e8 --- /dev/null +++ b/Classes/CDISettingsViewController.m @@ -0,0 +1,211 @@ +// +// CDISettingsViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/20/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISettingsViewController.h" +#import "CDIUpgradeViewController.h" +#import "TTTAttributedLabel.h" +#import "UIColor+Cheddar.h" +#import "UIButton+Cheddar.h" +#import "UIFont+Cheddar.h" +#import +#import "CDIAppDelegate.h" +#import "CDISplitViewController.h" +#import "CDIListsViewController.h" + +@interface CDISettingsViewController () +@end + +@implementation CDISettingsViewController { + TTTAttributedLabel *_label; + UIButton *_upgradeButton; + UIButton *_supportButton; + UIButton *_signOutButton; +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"Settings"; + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(done:)]; + self.view.backgroundColor = [UIColor cheddarArchesColor]; + + CGFloat width = self.view.bounds.size.width; + _label = [[TTTAttributedLabel alloc] initWithFrame:CGRectMake(20.0f, 10.0f, width - 40.0f, 240.0f)]; + _label.autoresizingMask = UIViewAutoresizingFlexibleWidth; + _label.backgroundColor = [UIColor clearColor]; + _label.font = [UIFont cheddarFontOfSize:18.0f]; + _label.numberOfLines = 0; + _label.textColor = [UIColor cheddarTextColor]; + _label.verticalAlignment = TTTAttributedLabelVerticalAlignmentTop; + _label.userInteractionEnabled = YES; + [self.view addSubview:_label]; + + _upgradeButton = [UIButton cheddarBigOrangeButton]; + _upgradeButton.frame = CGRectMake(roundf((width - 280.0f) / 2.0f), 238.0f, 280.0f, 45.0f); + _upgradeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + [_upgradeButton setTitle:@"Upgrade to Cheddar Plus" forState:UIControlStateNormal]; + [_upgradeButton addTarget:self action:@selector(upgrade:) forControlEvents:UIControlEventTouchUpInside]; + _upgradeButton.alpha = 0.0f; + [self.view addSubview:_upgradeButton]; + + _supportButton = [UIButton cheddarBigGrayButton]; + _supportButton.frame = CGRectMake(roundf((width - 280.0f) / 2.0f), 292.0f, 280.0f, 45.0f); + _supportButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + [_supportButton setTitle:@"Support" forState:UIControlStateNormal]; + [_supportButton addTarget:self action:@selector(support:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_supportButton]; + + _signOutButton = [UIButton cheddarBigGrayButton]; + _signOutButton.frame = CGRectMake(roundf((width - 280.0f) / 2.0f), 346.0f, 280.0f, 45.0f); + _signOutButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + [_signOutButton setTitle:@"Sign Out" forState:UIControlStateNormal]; + [_signOutButton addTarget:self action:@selector(signOut:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_signOutButton]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_updateUI) name:kCDKPlusDidChangeNotificationName object:nil]; + [self _updateUI]; +} + + +- (void)viewDidUnload { + [super viewDidUnload]; + + [_label removeFromSuperview]; + _label = nil; + + [_upgradeButton removeFromSuperview]; + _upgradeButton = nil; + + [_supportButton removeFromSuperview]; + _supportButton = nil; + + [_signOutButton removeFromSuperview]; + _signOutButton = nil; +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + + +#pragma mark - Actions + +- (void)done:(id)sender { + [self.navigationController dismissModalViewControllerAnimated:YES]; +} + + +- (void)upgrade:(id)sender { + UIViewController *viewController = [[CDIUpgradeViewController alloc] init]; + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; + navigationController.modalPresentationStyle = UIModalPresentationFormSheet; + [self.navigationController presentModalViewController:navigationController animated:YES]; +} + + +- (void)support:(id)sender { + if ([MFMailComposeViewController canSendMail] == NO) { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://cheddarapp.com/support"]]; + return; + } + + MFMailComposeViewController *viewController = [[MFMailComposeViewController alloc] init]; + viewController.toRecipients = [NSArray arrayWithObject:@"support@cheddarapp.com"]; + viewController.subject = @"Cheddar for iOS Help"; + viewController.mailComposeDelegate = self; + [self.navigationController presentModalViewController:viewController animated:YES]; +} + + +- (void)signOut:(id)sender { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sign Out" message:@"Are you sure you want to sign out of Cheddar?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Sign Out", nil]; + [alert show]; +} + + +#pragma mark - Private + +- (void)_updateUI { + CDKUser *user = [CDKUser currentUser]; + if (user.hasPlus.boolValue) { + NSString *text = @"You currently have a Plus account. You're awesome! You can create unlimited lists!"; + [_label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { + CTFontRef boldFont = CTFontCreateWithName((__bridge CFStringRef)kCDIBoldFontName, 20.0f, NULL); + if (boldFont) { + [mutableAttributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)boldFont range:NSMakeRange(51, 31)]; + CFRelease(boldFont); + } + return mutableAttributedString; + }]; + _upgradeButton.enabled = NO; + _upgradeButton.alpha = 0.0f; + } else { + NSString *text = @"You currently have a free account.\n\nWith a plus account, you can create unlimited lists. You only get two lists with a free account."; + [_label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { + CTFontRef boldFont = CTFontCreateWithName((__bridge CFStringRef)kCDIBoldFontName, 20.0f, NULL); + if (boldFont) { + [mutableAttributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)boldFont range:NSMakeRange(36, 52)]; + CFRelease(boldFont); + } + return mutableAttributedString; + }]; + _upgradeButton.enabled = YES; + _upgradeButton.alpha = 1.0f; + } +} + + +#pragma mark - MFMailComposeViewControllerDelegate + +- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { + [controller dismissModalViewControllerAnimated:YES]; + + if (result == MFMailComposeResultSent) { + SSHUDView *hud = [[SSHUDView alloc] init]; + [hud completeQuicklyWithTitle:@"Sent!"]; + } +} + + +#pragma mark - UIAlertViewDelegate + +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex != 1) { + return; + } + + // Sign out + [CDKUser setCurrentUser:nil]; + CDIAppDelegate *appDelegate = [CDIAppDelegate sharedAppDelegate]; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + appDelegate.window.rootViewController = [[CDISplitViewController alloc] init]; + } else { + UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[CDIListsViewController alloc] init]]; + appDelegate.window.rootViewController = navigationController; + } +} + + +#pragma mark - NSKeyValueObserving + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (context != (__bridge void *)self) { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + return; + } + + if ([keyPath isEqualToString:@"hasPlus"]) { + [self _updateUI]; + } +} + +@end diff --git a/Classes/CDISignInViewController.h b/Classes/CDISignInViewController.h new file mode 100644 index 0000000..3c5b541 --- /dev/null +++ b/Classes/CDISignInViewController.h @@ -0,0 +1,15 @@ +// +// CDISignInViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 3/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISessionsViewController.h" + +@interface CDISignInViewController : CDISessionsViewController + +- (void)forgot:(id)sender; + +@end diff --git a/Classes/CDISignInViewController.m b/Classes/CDISignInViewController.m new file mode 100644 index 0000000..b5db6fc --- /dev/null +++ b/Classes/CDISignInViewController.m @@ -0,0 +1,101 @@ +// +// CDISignInViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 3/30/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISignInViewController.h" +#import "CDISignUpViewController.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" + +@implementation CDISignInViewController + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Sign In" style:UIBarButtonItemStyleBordered target:nil action:nil]; +// self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Sign In" style:UIBarButtonItemStyleBordered target:self action:@selector(signIn:)]; + + UIButton *footer = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)]; + [footer setTitle:@"Forgot your password? Reset it →" forState:UIControlStateNormal]; + [footer setTitleColor:[UIColor cheddarBlueColor] forState:UIControlStateNormal]; + [footer setTitleColor:[UIColor cheddarTextColor] forState:UIControlStateHighlighted]; + [footer addTarget:self action:@selector(forgot:) forControlEvents:UIControlEventTouchUpInside]; + footer.titleLabel.font = [UIFont cheddarFontOfSize:16.0f]; + self.tableView.tableFooterView = footer; +} + + +#pragma mark - Actions + +- (void)signIn:(id)sender { + SSHUDView *hud = [[SSHUDView alloc] initWithTitle:@"Signing in..." loading:YES]; + [hud show]; + + [[CDKHTTPClient sharedClient] signInWithLogin:self.usernameTextField.text password:self.passwordTextField.text success:^(AFJSONRequestOperation *operation, id responseObject) { + dispatch_async(dispatch_get_main_queue(), ^{ + [hud completeAndDismissWithTitle:@"Signed In!"]; + [self.navigationController dismissModalViewControllerAnimated:YES]; + }); + } failure:^(AFJSONRequestOperation *operation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [hud failAndDismissWithTitle:[[operation response] statusCode] == 401 ? @"Invalid" : @"Failed"]; + }); + }]; +} + + +- (void)forgot:(id)sender { + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://cheddarapp.com/forgot"]]; +} + + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 2; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *const cellIdentifier = @"cellIdentifier"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.textColor = [UIColor cheddarTextColor]; + cell.textLabel.font = [UIFont cheddarFontOfSize:18.0f]; + } + + if (indexPath.row == 0) { + cell.textLabel.text = @"Username"; + cell.accessoryView = self.usernameTextField; + self.usernameTextField.placeholder = @"Username or Email"; + } else if (indexPath.row == 1) { + cell.textLabel.text = @"Password"; + cell.accessoryView = self.passwordTextField; + self.passwordTextField.placeholder = @"Your Password"; + } + + return cell; +} + + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == self.usernameTextField) { + [self.passwordTextField becomeFirstResponder]; + } else if (textField == self.passwordTextField) { + [self signIn:textField]; + } + return NO; +} + +@end diff --git a/Classes/CDISignUpViewController.h b/Classes/CDISignUpViewController.h new file mode 100644 index 0000000..f9d420f --- /dev/null +++ b/Classes/CDISignUpViewController.h @@ -0,0 +1,15 @@ +// +// CDISignUpViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISessionsViewController.h" + +@interface CDISignUpViewController : CDISessionsViewController + +- (void)signUp:(id)sender; + +@end diff --git a/Classes/CDISignUpViewController.m b/Classes/CDISignUpViewController.m new file mode 100644 index 0000000..2b06f55 --- /dev/null +++ b/Classes/CDISignUpViewController.m @@ -0,0 +1,129 @@ +// +// CDISignUpViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISignUpViewController.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" +#import "CDISignInViewController.h" + +@interface CDISignUpViewController () +@property (nonatomic, strong, readonly) UITextField *emailTextField; +@end + +@implementation CDISignUpViewController + +@synthesize emailTextField = _emailTextField; + +- (UITextField *)emailTextField { + if (!_emailTextField) { + _emailTextField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [[self class] textFieldWith], 30.0f)]; + _emailTextField.keyboardType = UIKeyboardTypeEmailAddress; + _emailTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; + _emailTextField.autocorrectionType = UITextAutocorrectionTypeNo; + _emailTextField.textColor = [UIColor cheddarBlueColor]; + _emailTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _emailTextField.delegate = self; + _emailTextField.returnKeyType = UIReturnKeyNext; + _emailTextField.placeholder = @"Your email address"; + _emailTextField.font = [UIFont cheddarFontOfSize:18.0f]; + } + return _emailTextField; +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"Cheddar"; + self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Sign Up" style:UIBarButtonItemStyleBordered target:nil action:nil]; +// self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Sign Up" style:UIBarButtonItemStyleBordered target:self action:@selector(signUp:)]; + + UIButton *footer = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)]; + [footer setTitle:@"Already have an account? Sign In →" forState:UIControlStateNormal]; + [footer setTitleColor:[UIColor cheddarBlueColor] forState:UIControlStateNormal]; + [footer setTitleColor:[UIColor cheddarTextColor] forState:UIControlStateHighlighted]; + [footer addTarget:self action:@selector(signIn:) forControlEvents:UIControlEventTouchUpInside]; + footer.titleLabel.font = [UIFont cheddarFontOfSize:16.0f]; + self.tableView.tableFooterView = footer; +} + + +#pragma mark - Actions + +- (void)signIn:(id)sender { + [self.navigationController pushViewController:[[CDISignInViewController alloc] init] animated:YES]; +} + + +- (void)signUp:(id)sender { + SSHUDView *hud = [[SSHUDView alloc] initWithTitle:@"Signing up..." loading:YES]; + [hud show]; + + [[CDKHTTPClient sharedClient] signUpWithUsername:self.usernameTextField.text email:self.emailTextField.text password:self.passwordTextField.text success:^(AFJSONRequestOperation *operation, id responseObject) { + dispatch_async(dispatch_get_main_queue(), ^{ + [hud completeAndDismissWithTitle:@"Signed Up!"]; + [self.navigationController dismissModalViewControllerAnimated:YES]; + }); + } failure:^(AFJSONRequestOperation *operation, NSError *error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [hud failAndDismissWithTitle:@"Failed"]; + }); + }]; +} + + +#pragma mark - UITableViewDataSource + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return 3; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString *const cellIdentifier = @"cellIdentifier"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.textColor = [UIColor cheddarTextColor]; + cell.textLabel.font = [UIFont cheddarFontOfSize:18.0f]; + } + + if (indexPath.row == 0) { + cell.textLabel.text = @"Username"; + cell.accessoryView = self.usernameTextField; + self.usernameTextField.placeholder = @"Choose a username"; + } else if (indexPath.row == 1) { + cell.textLabel.text = @"Email"; + cell.accessoryView = self.emailTextField; + } else if (indexPath.row == 2) { + cell.textLabel.text = @"Password"; + cell.accessoryView = self.passwordTextField; + self.passwordTextField.placeholder = @"Choose a password"; + } + + return cell; +} + + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (textField == self.usernameTextField) { + [self.emailTextField becomeFirstResponder]; + } else if (textField == self.emailTextField) { + [self.passwordTextField becomeFirstResponder]; + } else if (textField == self.passwordTextField) { + [self signUp:textField]; + } + return NO; +} + +@end diff --git a/Classes/CDISplitViewController.h b/Classes/CDISplitViewController.h new file mode 100644 index 0000000..6c4022d --- /dev/null +++ b/Classes/CDISplitViewController.h @@ -0,0 +1,19 @@ +// +// UISplitViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@class CDIListsViewController; +@class CDIListViewController; + +@interface CDISplitViewController : UISplitViewController + ++ (CDISplitViewController *)sharedSplitViewController; + +@property (nonatomic, strong, readonly) CDIListsViewController *listsViewController; +@property (nonatomic, strong, readonly) CDIListViewController *listViewController; + +@end diff --git a/Classes/CDISplitViewController.m b/Classes/CDISplitViewController.m new file mode 100644 index 0000000..cbf1a69 --- /dev/null +++ b/Classes/CDISplitViewController.m @@ -0,0 +1,61 @@ +// +// UISplitViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDISplitViewController.h" +#import "CDIListsViewController.h" +#import "CDIListViewController.h" +#import "CDIAppDelegate.h" + +@interface CDISplitViewController () +@end + +@implementation CDISplitViewController + +@synthesize listsViewController = _listsViewController; +@synthesize listViewController = _listViewController; + + +#pragma mark - Class Methods + ++ (CDISplitViewController *)sharedSplitViewController { + return (CDISplitViewController *)[[[CDIAppDelegate sharedAppDelegate] window] rootViewController]; +} + + +#pragma mark - NSObject + +- (id)init { + if ((self = [super init])) { + _listsViewController = [[CDIListsViewController alloc] init]; + _listViewController = [[CDIListViewController alloc] init]; + + self.viewControllers = [[NSArray alloc] initWithObjects: + [[UINavigationController alloc] initWithRootViewController:_listsViewController], + [[UINavigationController alloc] initWithRootViewController:_listViewController], + nil]; + + self.delegate = self; + } + return self; +} + + +#pragma mark - UIViewController + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + return YES; +} + + +#pragma mark - UISplitViewControllerDelegate + +- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { + return NO; +} + +@end diff --git a/Classes/CDITableViewCell.h b/Classes/CDITableViewCell.h new file mode 100644 index 0000000..9be9f61 --- /dev/null +++ b/Classes/CDITableViewCell.h @@ -0,0 +1,17 @@ +// +// CDITableViewCell.h +// Cheddar for iOS +// +// Created by Sam Soffes on 3/31/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDITableViewCell : UITableViewCell + +@property (nonatomic, strong, readonly) SSTextField *textField; +@property (nonatomic, assign) BOOL editingText; +@property (nonatomic, strong, readonly) UITapGestureRecognizer *editingTapGestureRecognizer; + ++ (CGFloat)cellHeight; + +@end diff --git a/Classes/CDITableViewCell.m b/Classes/CDITableViewCell.m new file mode 100644 index 0000000..141d9db --- /dev/null +++ b/Classes/CDITableViewCell.m @@ -0,0 +1,128 @@ +// +// CDITableViewCell.m +// Cheddar for iOS +// +// Created by Sam Soffes on 3/31/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITableViewCell.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" +#import + +@interface CDITableViewCell () +@end + +@implementation CDITableViewCell + +@synthesize editingText = _editingText; +@synthesize textField = _textField; +@synthesize editingTapGestureRecognizer = _editingTapGestureRecognizer; + +- (UITextField *)textField { + if (!_textField) { + _textField = [[SSTextField alloc] initWithFrame:CGRectZero]; + _textField.textColor = self.textLabel.textColor; + _textField.placeholderTextColor = [UIColor cheddarLightTextColor]; + _textField.font = self.textLabel.font; + _textField.backgroundColor = [UIColor whiteColor]; + _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; + _textField.returnKeyType = UIReturnKeyDone; + _textField.alpha = 0.0f; + [self.contentView addSubview:_textField]; + } + return _textField; +} + + +- (void)setEditingText:(BOOL)editingText { + _editingText = editingText; + if (_editingText) { + [self.contentView addSubview:self.textField]; + [self setNeedsLayout]; + [_textField becomeFirstResponder]; + + [UIView animateWithDuration:0.2 delay:0.0f options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ + _textField.alpha = 1.0f; + } completion:nil]; + } else { + [_textField resignFirstResponder]; + [UIView animateWithDuration:0.2 delay:0.0f options:UIViewAnimationCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction animations:^{ + _textField.alpha = 0.0f; + } completion:^(BOOL finished) { + [_textField removeFromSuperview]; + _textField = nil; + }]; + } +} + + +#pragma mark - Class Methods + ++ (CGFloat)cellHeight { + return 51.0f; +} + + +#pragma mark - UIView + +- (void)layoutSubviews { + [super layoutSubviews]; + CGSize size = self.contentView.bounds.size; + + if (self.editing) { + _textField.frame = CGRectMake(10.0f, 1.0f, size.width - 46.0f, size.height - 2.0f); + } +} + + +#pragma mark - UITableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if ((self = [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier])) { + self.textLabel.textColor = [UIColor cheddarTextColor]; + self.textLabel.font = [UIFont cheddarFontOfSize:20.0f]; + + SSBorderedView *background = [[SSBorderedView alloc] initWithFrame:CGRectZero]; + background.backgroundColor = [UIColor whiteColor]; + background.bottomBorderColor = [UIColor colorWithWhite:0.92f alpha:1.0f]; + background.contentMode = UIViewContentModeRedraw; + self.backgroundView = background; + self.contentView.clipsToBounds = YES; + + _editingTapGestureRecognizer = [[UITapGestureRecognizer alloc] init]; + _editingTapGestureRecognizer.delegate = self; + [self addGestureRecognizer:_editingTapGestureRecognizer]; + } + return self; +} + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + if (!selected) { + self.textLabel.backgroundColor = [UIColor whiteColor]; + } +} + + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [super setEditing:editing animated:animated]; + _editingTapGestureRecognizer.enabled = editing; +} + + +- (void)prepareForReuse { + [super prepareForReuse]; + [self setEditingText:NO]; +} + + +#pragma mark - UIGestureRecognizerDelegate + +- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { + return [touch.view isKindOfClass:[UIControl class]] == NO; +} + +@end diff --git a/Classes/CDITableViewCellDeleteConfirmationControl.h b/Classes/CDITableViewCellDeleteConfirmationControl.h new file mode 100644 index 0000000..e21aaa3 --- /dev/null +++ b/Classes/CDITableViewCellDeleteConfirmationControl.h @@ -0,0 +1,10 @@ +// +// CDITableViewCellDeleteConfirmationControl.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDITableViewCellDeleteConfirmationControl : UIControl +@end diff --git a/Classes/CDITableViewCellDeleteConfirmationControl.m b/Classes/CDITableViewCellDeleteConfirmationControl.m new file mode 100644 index 0000000..414a27c --- /dev/null +++ b/Classes/CDITableViewCellDeleteConfirmationControl.m @@ -0,0 +1,38 @@ +// +// CDITableViewCellDeleteConfirmationControl.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITableViewCellDeleteConfirmationControl.h" +#import "UIFont+Cheddar.h" +#import + +@implementation CDITableViewCellDeleteConfirmationControl + +- (void)drawRectCustom:(CGRect)rect { + UIImage *image = nil; + if (self.highlighted) { + image = [UIImage imageNamed:@"archive-button-highlighted.png"]; + } else { + image = [UIImage imageNamed:@"archive-button.png"]; + } + [[image stretchableImageWithLeftCapWidth:5 topCapHeight:0] drawInRect:rect]; + + NSString *text = [self valueForKey:@"title"]; + UIFont *font = [UIFont cheddarFontOfSize:15.0f]; + UILineBreakMode lineBreakMode = UILineBreakModeClip; + UITextAlignment alignment = UITextAlignmentCenter; + + rect.origin.y += 8.0f; + [[UIColor colorWithRed:0.588f green:0.090f blue:0.125f alpha:1.0f] set]; + [text drawInRect:rect withFont:font lineBreakMode:lineBreakMode alignment:alignment]; + + [[UIColor whiteColor] set]; + rect.origin.y -= 1.0f; + [text drawInRect:rect withFont:font lineBreakMode:lineBreakMode alignment:alignment]; +} + +@end diff --git a/Classes/CDITagView.h b/Classes/CDITagView.h new file mode 100644 index 0000000..5868ca8 --- /dev/null +++ b/Classes/CDITagView.h @@ -0,0 +1,13 @@ +// +// CDITagView.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/29/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDITagView : SSGradientView + +@property (nonatomic, strong, readonly) UILabel *textLabel; + +@end diff --git a/Classes/CDITagView.m b/Classes/CDITagView.m new file mode 100644 index 0000000..80e748e --- /dev/null +++ b/Classes/CDITagView.m @@ -0,0 +1,48 @@ +// +// CDITagView.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/29/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITagView.h" +#import "UIFont+Cheddar.h" + +@implementation CDITagView + +@synthesize textLabel = _textLabel; + +- (id)initWithFrame:(CGRect)frame { + if ((self = [super initWithFrame:frame])) { + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.colors = [[NSArray alloc] initWithObjects: + [UIColor colorWithRed:0.0f green:0.722f blue:0.918f alpha:1.0f], + [UIColor colorWithRed:0.0f green:0.631f blue:0.835f alpha:1.0f], + nil]; + self.topBorderColor = [UIColor colorWithRed:0.392f green:0.808f blue:0.945f alpha:1.0f]; + self.bottomInsetColor = [UIColor colorWithRed:0.306f green:0.745f blue:0.886f alpha:1.0f]; + self.bottomBorderColor = [UIColor colorWithRed:0.0f green:0.502f blue:0.725f alpha:1.0f]; + + UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, 13.0f, 24.0f, 24.0f)]; + imageView.image = [UIImage imageNamed:@"tag.png"]; + [self addSubview:imageView]; + + _textLabel = [[UILabel alloc] initWithFrame:CGRectMake(44.0f, 13.0f, self.bounds.size.width - 54.0f, 24.0f)]; + _textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; + _textLabel.backgroundColor = [UIColor clearColor]; + _textLabel.textColor = [UIColor whiteColor]; + _textLabel.shadowColor = [UIColor colorWithWhite:0.0f alpha:0.2f]; + _textLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + _textLabel.font = [UIFont cheddarFontOfSize:24.0f]; + [self addSubview:_textLabel]; + + imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.bounds.size.width - 26.0f, 18.0f, 16.0f, 16.0f)]; + imageView.image = [UIImage imageNamed:@"tag-x.png"]; + imageView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; + [self addSubview:imageView]; + } + return self; +} + +@end diff --git a/Classes/CDITaskTableViewCell.h b/Classes/CDITaskTableViewCell.h new file mode 100644 index 0000000..00781a1 --- /dev/null +++ b/Classes/CDITaskTableViewCell.h @@ -0,0 +1,21 @@ +// +// CDITaskTableViewCell.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/5/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITableViewCell.h" + +@class CDKTask; +@class CDIAttributedLabel; + +@interface CDITaskTableViewCell : CDITableViewCell + ++ (CGFloat)cellHeightForTask:(CDKTask *)task width:(CGFloat)width; + +@property (nonatomic, strong) CDKTask *task; +@property (nonatomic, strong, readonly) CDIAttributedLabel *attributedLabel; + +@end diff --git a/Classes/CDITaskTableViewCell.m b/Classes/CDITaskTableViewCell.m new file mode 100644 index 0000000..3e6adb6 --- /dev/null +++ b/Classes/CDITaskTableViewCell.m @@ -0,0 +1,154 @@ +// +// CDITaskTableViewCell.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/5/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITaskTableViewCell.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" +#import "CDIAttributedLabel.h" +#import "CDKTask+CheddariOSAdditions.h" + +@implementation CDITaskTableViewCell { + UIImageView *_checkbox; + UIImageView *_checkmark; +} + +@synthesize task = _task; +@synthesize attributedLabel = _attributedLabel; + + +- (void)setTask:(CDKTask *)task { + _task = task; + + if (_task.isCompleted) { + _attributedLabel.textColor = [UIColor cheddarLightTextColor]; + _checkmark.hidden = NO; + _attributedLabel.linkAttributes =[NSDictionary dictionaryWithObjectsAndKeys: + (id)[UIColor colorWithWhite:0.45f alpha:1.0f].CGColor, (NSString *)kCTForegroundColorAttributeName, + nil]; + } else { + _attributedLabel.textColor = [UIColor cheddarTextColor]; + _checkmark.hidden = YES; + _attributedLabel.linkAttributes =[NSDictionary dictionaryWithObjectsAndKeys: + (id)[UIColor cheddarBlueColor].CGColor, (NSString *)kCTForegroundColorAttributeName, + nil]; + } + + [_attributedLabel setText:_task.displayText afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { + [task addEntitiesToAttributedString:mutableAttributedString]; + return mutableAttributedString; + }]; + + // Add links + for (NSDictionary *entity in _task.entities) { + NSArray *indices = [entity objectForKey:@"display_indices"]; + NSRange range = NSMakeRange([[indices objectAtIndex:0] unsignedIntegerValue], 0); + range.length = [[indices objectAtIndex:1] unsignedIntegerValue] - range.location; + range = [_attributedLabel.text composedRangeWithRange:range]; + + NSString *type = [entity objectForKey:@"type"]; + + // Tag + if ([type isEqualToString:@"tag"]) { + NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"x-cheddar-tag://%@", [entity objectForKey:@"tag_name"]]]; + [_attributedLabel addLinkToURL:url withRange:range]; + } + + // Link + else if ([type isEqualToString:@"link"]) { + NSURL *url = [NSURL URLWithString:[entity objectForKey:@"url"]]; + [_attributedLabel addLinkToURL:url withRange:range]; + } + } +} + + +#pragma mark - Class Methods + ++ (CGFloat)cellHeightForTask:(CDKTask *)task width:(CGFloat)width { + static TTTAttributedLabel *label = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + label = [[TTTAttributedLabel alloc] initWithFrame:CGRectZero]; + label.font = [UIFont cheddarFontOfSize:20.0f]; + label.numberOfLines = 0; + }); + label.text = task.attributedDisplayText; + CGSize size = [label sizeThatFits:CGSizeMake(width - 54.0f, 2000.0f)]; + label.text = nil; + return fmaxf(size.height + 27.0f, [self cellHeight]); +} + + +#pragma mark - UITableViewCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if ((self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier])) { + self.textLabel.hidden = YES; + + _checkbox = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"checkbox.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:4]]; + [self.contentView addSubview:_checkbox]; + + _checkmark = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"small-check.png"]]; + _checkmark.hidden = YES; + [self.contentView addSubview:_checkmark]; + + _attributedLabel = [[CDIAttributedLabel alloc] initWithFrame:CGRectZero]; + _attributedLabel.textColor = [UIColor cheddarTextColor]; + _attributedLabel.font = [UIFont cheddarFontOfSize:20.0f]; + _attributedLabel.backgroundColor = [UIColor clearColor]; + _attributedLabel.numberOfLines = 0; + _attributedLabel.verticalAlignment = TTTAttributedLabelVerticalAlignmentTop; + [self.contentView addSubview:_attributedLabel]; + + self.contentView.clipsToBounds = YES; + } + return self; +} + + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGSize size = self.contentView.bounds.size; + + if (self.editing) { // TODO: Only match reordering and not swipe to delete + _checkbox.frame = CGRectMake(-34.0f, 13.0f, 24.0f, 24.0f); + _checkmark.frame = CGRectMake(-30.0f, 16.0f, 22.0f, 18.0f); + _attributedLabel.frame = CGRectMake(12.0f, 13.0f, size.width - 20.0f, size.height - 27.0f); + } else { + _checkbox.frame = CGRectMake(10.0f, 13.0f, 24.0f, 24.0f); + _checkmark.frame = CGRectMake(12.0f, 16.0f, 22.0f, 18.0f); + _attributedLabel.frame = CGRectMake(44.0f, 13.0f, size.width - 54.0f, size.height - 27.0f); + } +} + + +#pragma mark - UITableViewCell + +- (void)setEditing:(BOOL)editing animated:(BOOL)animated { + [super setEditing:editing animated:animated]; + + void (^change)(void) = ^{ + _checkbox.alpha = editing ? 0.0f : 1.0f; + _checkmark.alpha = _checkbox.alpha; + }; + + if (animated) { + [UIView animateWithDuration:0.18 delay:0.0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:change completion:nil]; + } else { + change(); + } +} + + +- (void)prepareForReuse { + [super prepareForReuse]; + self.task = nil; +} + +@end diff --git a/Classes/CDITransactionObserver.h b/Classes/CDITransactionObserver.h new file mode 100644 index 0000000..fe1949c --- /dev/null +++ b/Classes/CDITransactionObserver.h @@ -0,0 +1,23 @@ +// +// CDITransactionObserver.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/15/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import + +extern NSString *const kCDITransactionObserverDidUpdateProductsNotificationName; +extern NSString *const kCDIPaymentTransactionDidCompleteNotificationName; +extern NSString *const kCDIPaymentTransactionDidFailNotificationName; +extern NSString *const kCDIPaymentTransactionDidCancelNotificationName; + +@interface CDITransactionObserver : NSObject + +@property (nonatomic, strong, readonly) NSDictionary *products; + ++ (CDITransactionObserver *)defaultObserver; +- (void)updateProducts; + +@end diff --git a/Classes/CDITransactionObserver.m b/Classes/CDITransactionObserver.m new file mode 100644 index 0000000..f8a0245 --- /dev/null +++ b/Classes/CDITransactionObserver.m @@ -0,0 +1,111 @@ +// +// CDITransactionObserver.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/15/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDITransactionObserver.h" +#import "SKPaymentTransaction+Cheddar.h" + +NSString *const kCDITransactionObserverDidUpdateProductsNotificationName = @"CDITransactionObserverDidUpdateProductsNotification"; +NSString *const kCDIPaymentTransactionDidCompleteNotificationName = @"CDIPaymentTransactionDidCompleteNotification"; +NSString *const kCDIPaymentTransactionDidFailNotificationName = @"CDIPaymentTransactionDidFailNotification"; +NSString *const kCDIPaymentTransactionDidCancelNotificationName = @"CDIPaymentTransactionDidCancelNotification"; + +@interface CDITransactionObserver () +@end + +@implementation CDITransactionObserver { + NSMutableDictionary *_products; + BOOL _requestingProducts; +} + +@synthesize products = _products; + ++ (CDITransactionObserver *)defaultObserver { + static CDITransactionObserver *defaultObserver = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + defaultObserver = [[self alloc] init]; + }); + return defaultObserver; +} + + +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { + for (SKPaymentTransaction *transaction in transactions) { + if (transaction.transactionState == SKPaymentTransactionStateFailed) { + [[NSNotificationCenter defaultCenter] postNotificationName:kCDIPaymentTransactionDidFailNotificationName object:transaction]; + } + + BOOL valid = (transaction.transactionState == SKPaymentTransactionStatePurchased || transaction.transactionState == SKPaymentTransactionStateRestored); + if (!transaction.transactionReceipt || !valid) { + continue; + } + + NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys: + transaction.transactionReceiptString, @"itunes_receipt", + nil]; + [[CDKHTTPClient sharedClient] postPath:@"receipts" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { + __weak NSManagedObjectContext *context = [CDKUser mainContext]; + [context performBlockAndWait:^{ + CDKUser *user = [CDKUser currentUser]; + user.hasPlus = [NSNumber numberWithBool:YES]; + [user save]; + }]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; + [[NSNotificationCenter defaultCenter] postNotificationName:kCDIPaymentTransactionDidCompleteNotificationName object:transaction]; + [[NSNotificationCenter defaultCenter] postNotificationName:kCDKPlusDidChangeNotificationName object:[CDKUser currentUser]]; + + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Cheddar Plus" message:@"Thanks for upgrading to Cheddar Plus. Enjoy!" delegate:nil cancelButtonTitle:@"I'm Awesome" otherButtonTitles:nil]; + [alert show]; + }); + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + [[NSNotificationCenter defaultCenter] postNotificationName:kCDIPaymentTransactionDidFailNotificationName object:transaction]; + }]; + } +} + + +- (void)updateProducts { + if (_products || _requestingProducts) { + return; + } + + _requestingProducts = YES; + + NSSet *identifiers = [[NSSet alloc] initWithObjects:@"cheddar_plus_3mo", @"cheddar_plus_6mo", @"cheddar_plus_1yr", nil]; + SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:identifiers]; + request.delegate = self; + [request start]; +} + + +#pragma mark - SKProductsRequestDelegate + +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { + _products = [[NSMutableDictionary alloc] init]; + for (SKProduct *product in response.products) { + [_products setObject:product forKey:product.productIdentifier]; + } + + [[NSNotificationCenter defaultCenter] postNotificationName:kCDITransactionObserverDidUpdateProductsNotificationName object:nil]; +} + + +- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Restore Failed" message:@"Restoring your transactions failed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; + [alert show]; +} + + +- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Transactions Restored" message:@"Your transactions have been restored." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; + [alert show]; +} + +@end diff --git a/Classes/CDIUpgradeViewController.h b/Classes/CDIUpgradeViewController.h new file mode 100644 index 0000000..9f8f3ce --- /dev/null +++ b/Classes/CDIUpgradeViewController.h @@ -0,0 +1,19 @@ +// +// CDIUpgradeViewController.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/16/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface CDIUpgradeViewController : UIViewController + +- (void)cancel:(id)sender; +- (void)upgrade:(id)sender; + +- (void)buyThreeMonths:(id)sender; +- (void)buySixMonths:(id)sender; +- (void)buyOneYear:(id)sender; +- (void)restore:(id)sender; + +@end diff --git a/Classes/CDIUpgradeViewController.m b/Classes/CDIUpgradeViewController.m new file mode 100644 index 0000000..bb24279 --- /dev/null +++ b/Classes/CDIUpgradeViewController.m @@ -0,0 +1,237 @@ +// +// CDIUpgradeViewController.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/16/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIUpgradeViewController.h" +#import "UIColor+Cheddar.h" +#import "UIFont+Cheddar.h" +#import "UIButton+Cheddar.h" +#import "TTTAttributedLabel.h" +#import +#import +#import "CDITransactionObserver.h" + +@interface CDIUpgradeViewController () +- (void)_purchaseProductIdentifier:(NSString *)identifier; +- (void)_animateView:(UIView *)view xDisplacement:(CGFloat)displacement delay:(NSTimeInterval)delay; +@end + +@implementation CDIUpgradeViewController { + BOOL _animating; + BOOL _purchasing; + UIButton *_laterButton; + UIButton *_upgradeButton; + UIButton *_restoreButton; +} + + +#pragma mark - UIViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = @"Plus Required"; + self.view.backgroundColor = [UIColor cheddarArchesColor]; +// self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Restore" style:UIBarButtonItemStyleBordered target:self action:@selector(restore:)]; + + CGFloat width = self.view.frame.size.width; + + TTTAttributedLabel *label = [[TTTAttributedLabel alloc] initWithFrame:CGRectMake(20.0f, 10.0f, width - 40.0f, 300.0f)]; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont cheddarFontOfSize:18.0f]; + label.numberOfLines = 0; + label.textColor = [UIColor cheddarTextColor]; + label.verticalAlignment = TTTAttributedLabelVerticalAlignmentTop; + NSString *text = @"You need Cheddar Plus to create more than 2 lists. Upgrading only takes a minute.\n\nWith a Plus account, you can create unlimited lists. You only get two lists with a free account."; + [label setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { + CTFontRef boldFont = CTFontCreateWithName((__bridge CFStringRef)kCDIBoldFontName, 20.0f, NULL); + if (boldFont) { + [mutableAttributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)boldFont range:NSMakeRange(119, 15)]; + CFRelease(boldFont); + } + + [mutableAttributedString addAttribute:(__bridge NSString *)kCTForegroundColorAttributeName value:(__bridge id)[UIColor cheddarLightTextColor].CGColor range:NSMakeRange(136, 43)]; + + return mutableAttributedString; + }]; + [self.view addSubview:label]; + + CGFloat vOffset = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 30.0f : 0.0f; + + _laterButton = [UIButton cheddarBigGrayButton]; + _laterButton.frame = CGRectMake(roundf((width - 280.0f) / 2.0f), 292.0f + vOffset, 280.0f, 45.0f); + _laterButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + [_laterButton setTitle:@"Later" forState:UIControlStateNormal]; + [_laterButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_laterButton]; + + _upgradeButton = [UIButton cheddarBigOrangeButton]; + _upgradeButton.frame = CGRectMake(roundf((width - 280.0f) / 2.0f), 346.0f + vOffset, 280.0f, 45.0f); + _upgradeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + [_upgradeButton setTitle:@"Upgrade Now" forState:UIControlStateNormal]; + [_upgradeButton addTarget:self action:@selector(upgrade:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_upgradeButton]; +} + + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + if (!_restoreButton) { + CGFloat width = self.view.bounds.size.width; + CGFloat hOffset = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 2.0f : 0.0f; + _restoreButton = [UIButton cheddarBarButton]; + _restoreButton.frame = CGRectMake(width - 79.0f - hOffset, 7.0f, 74.0f, 30.0f); + _restoreButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin; + [_restoreButton setTitle:@"Restore" forState:UIControlStateNormal]; + [_restoreButton addTarget:self action:@selector(restore:) forControlEvents:UIControlEventTouchUpInside]; + [self.navigationController.navigationBar addSubview:_restoreButton]; + } +} + + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + [[CDITransactionObserver defaultObserver] updateProducts]; +} + + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { + return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : toInterfaceOrientation == UIInterfaceOrientationPortrait; +} + + +#pragma mark - Actions + +- (void)cancel:(id)sender { + [self.navigationController dismissModalViewControllerAnimated:YES]; +} + + +- (void)upgrade:(id)sender { + if (_animating) { + return; + } + _animating = YES; + + CGFloat width = self.view.frame.size.width; + CGFloat x = roundf((width - 280.0f) / 2.0f); + CGFloat offset = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 30.0f : 0.0f; + + // Setup new buttons + UIButton *threeMonthsButton = [UIButton cheddarBigGrayButton]; + threeMonthsButton.frame = CGRectMake(-280.0f, 238.0f + offset, 280.0f, 45.0f); + [threeMonthsButton setTitle:@"3 months for $5.99" forState:UIControlStateNormal]; + [threeMonthsButton addTarget:self action:@selector(buyThreeMonths:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:threeMonthsButton]; + + UIButton *sixMonthsButton = [UIButton cheddarBigGrayButton]; + sixMonthsButton.frame = CGRectMake(-280.0f, 292.0f + offset, 280.0f, 45.0f); + [sixMonthsButton setTitle:@"6 months for $9.99" forState:UIControlStateNormal]; + [sixMonthsButton addTarget:self action:@selector(buySixMonths:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:sixMonthsButton]; + + UIButton *yearButton = [UIButton cheddarBigOrangeButton]; + yearButton.frame = CGRectMake(-280.0f, 346.0f + offset, 280.0f, 45.0f); + [yearButton setTitle:@"1 year for $19.99" forState:UIControlStateNormal]; + [yearButton addTarget:self action:@selector(buyOneYear:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:yearButton]; + + UIButton *cancelButton = [UIButton cheddarBarButton]; + cancelButton.frame = CGRectMake(-63.0f, 7.0f, 63.0f, 30.0f); + [cancelButton setTitle:@"Cancel" forState:UIControlStateNormal]; + [cancelButton addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside]; + [self.navigationController.navigationBar addSubview:cancelButton]; + + NSTimeInterval step = 0.1; + CGFloat displacement = x + 280.0f; + CGFloat cancelDisplacement = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 70.0f : 68.0f; + + [self _animateView:_laterButton xDisplacement:displacement delay:0.0]; + [self _animateView:_upgradeButton xDisplacement:displacement delay:step]; + [self _animateView:threeMonthsButton xDisplacement:displacement delay:(step * 2.0)]; + [self _animateView:sixMonthsButton xDisplacement:displacement delay:(step * 3.0)]; + [self _animateView:yearButton xDisplacement:displacement delay:(step * 4.0)]; + [self _animateView:cancelButton xDisplacement:cancelDisplacement delay:(step * 4.0)]; + [self _animateView:_restoreButton xDisplacement:cancelDisplacement delay:0.0]; +} + + +- (void)buyThreeMonths:(id)sender { + [self _purchaseProductIdentifier:@"cheddar_plus_3mo"]; +} + + +- (void)buySixMonths:(id)sender { + [self _purchaseProductIdentifier:@"cheddar_plus_6mo"]; +} + + +- (void)buyOneYear:(id)sender { + [self _purchaseProductIdentifier:@"cheddar_plus_1yr"]; +} + + +- (void)restore:(id)sender { + [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; +} + + +#pragma mark - Private + +- (void)_purchaseProductIdentifier:(NSString *)identifier { + if (_purchasing) { + return; + } + _purchasing = YES; + + SSHUDView *hud = [[SSHUDView alloc] initWithTitle:@"Upgrading..."]; + [hud show]; + + NSDictionary *products = [[CDITransactionObserver defaultObserver] products]; + SKProduct *product = [products objectForKey:identifier]; + + if (!product) { + // TODO: Handle + NSLog(@"Unknown product"); + } + + SKPayment *payment = [SKPayment paymentWithProduct:product]; + [[SKPaymentQueue defaultQueue] addPayment:payment]; + + __weak NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + [notificationCenter addObserverForName:kCDIPaymentTransactionDidCompleteNotificationName object:nil queue:nil usingBlock:^(NSNotification *notificaiton) { + [hud dismiss]; + _purchasing = NO; + [self.navigationController dismissModalViewControllerAnimated:YES]; + [notificationCenter removeObserver:self]; + }]; + + [notificationCenter addObserverForName:kCDIPaymentTransactionDidFailNotificationName object:nil queue:nil usingBlock:^(NSNotification *notificaiton) { + [hud failAndDismissWithTitle:@"Failed"]; + [notificationCenter removeObserver:self]; + _purchasing = NO; + }]; + + [notificationCenter addObserverForName:kCDIPaymentTransactionDidCancelNotificationName object:nil queue:nil usingBlock:^(NSNotification *notificaiton) { + [hud dismiss]; + [notificationCenter removeObserver:self]; + _purchasing = NO; + }]; +} + + +- (void)_animateView:(UIView *)view xDisplacement:(CGFloat)c delay:(NSTimeInterval)delay { + [UIView animateWithDuration:0.4 delay:delay options:UIViewAnimationOptionAllowUserInteraction animations:^{ + CGRect frame = view.frame; + frame.origin.x += c; + view.frame = frame; + } completion:nil]; +} + +@end diff --git a/Classes/CDKTask+CheddariOSAdditions.h b/Classes/CDKTask+CheddariOSAdditions.h new file mode 100644 index 0000000..d85fa75 --- /dev/null +++ b/Classes/CDKTask+CheddariOSAdditions.h @@ -0,0 +1,16 @@ +// +// CDKTask+CheddariOSAdditions.h +// Cheddar for iOS +// +// Created by Sam Soffes on 7/25/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import + +@interface CDKTask (CheddariOSAdditions) + +- (NSAttributedString *)attributedDisplayText; +- (void)addEntitiesToAttributedString:(NSMutableAttributedString *)attributedString; + +@end diff --git a/Classes/CDKTask+CheddariOSAdditions.m b/Classes/CDKTask+CheddariOSAdditions.m new file mode 100644 index 0000000..fc4fab9 --- /dev/null +++ b/Classes/CDKTask+CheddariOSAdditions.m @@ -0,0 +1,107 @@ +// +// CDKTask+CheddariOSAdditions.m +// Cheddar for iOS +// +// Created by Sam Soffes on 7/25/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDKTask+CheddariOSAdditions.h" +#import "TTTAttributedLabel.h" + +@implementation CDKTask (CheddariOSAdditions) +- (NSAttributedString *)attributedDisplayText { + if (!self.displayText) { + if (!self.text) { + return nil; + } + return [[NSAttributedString alloc] initWithString:self.text]; + } + + NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.displayText]; + CTFontRef regularFont = CTFontCreateWithName((__bridge CFStringRef)kCDIRegularFontName, 20.0f, NULL); + if (regularFont) { + [attributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)regularFont range:NSMakeRange(0, self.displayText.length)]; + } + [self addEntitiesToAttributedString:attributedString]; + return attributedString; +} + + +- (void)addEntitiesToAttributedString:(NSMutableAttributedString *)attributedString { + // TODO: Cache fonts + CTFontRef italicFont = NULL; + CTFontRef boldFont = NULL; + CTFontRef boldItalicFont = NULL; + CTFontRef codeFont = NULL; + + // Add entities + for (NSDictionary *entity in self.entities) { + NSArray *indices = [entity objectForKey:@"display_indices"]; + NSRange range = NSMakeRange([[indices objectAtIndex:0] unsignedIntegerValue], 0); + range.length = [[indices objectAtIndex:1] unsignedIntegerValue] - range.location; + range = [attributedString.string composedRangeWithRange:range]; + + // Skip malformed entities + if (range.length > self.displayText.length) { + continue; + } + + NSString *type = [entity objectForKey:@"type"]; + + // Italic + if ([type isEqualToString:@"emphasis"]) { + if (!italicFont) { + italicFont = CTFontCreateWithName((__bridge CFStringRef)kCDIItalicFontName, 20.0f, NULL); + } + [attributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)italicFont range:range]; + } + + // Bold + else if ([type isEqualToString:@"double_emphasis"]) { + if (!boldFont) { + boldFont = CTFontCreateWithName((__bridge CFStringRef)kCDIBoldFontName, 20.0f, NULL); + } + [attributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)boldFont range:range]; + } + + // Bold Italic + else if ([type isEqualToString:@"triple_emphasis"]) { + if (!boldItalicFont) { + boldItalicFont = CTFontCreateWithName((__bridge CFStringRef)kCDIBoldItalicFontName, 20.0f, NULL); + } + [attributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)boldItalicFont range:range]; + } + + // Strikethrough + else if ([type isEqualToString:@"strikethrough"]) { + [attributedString addAttribute:kTTTStrikeOutAttributeName value:[NSNumber numberWithBool:YES] range:range]; + } + + // Code + else if ([type isEqualToString:@"code"]) { + if (!codeFont) { + codeFont = CTFontCreateWithName((__bridge CFStringRef)@"Courier", 20.0f, NULL); + } + [attributedString addAttribute:(__bridge NSString *)kCTFontAttributeName value:(__bridge id)codeFont range:range]; + } + } + + if (italicFont) { + CFRelease(italicFont); + } + + if (boldFont) { + CFRelease(boldFont); + } + + if (boldItalicFont) { + CFRelease(boldItalicFont); + } + + if (codeFont) { + CFRelease(codeFont); + } +} + +@end diff --git a/Classes/SKPaymentTransaction+Cheddar.h b/Classes/SKPaymentTransaction+Cheddar.h new file mode 100644 index 0000000..4a9d077 --- /dev/null +++ b/Classes/SKPaymentTransaction+Cheddar.h @@ -0,0 +1,15 @@ +// +// SKPaymentTransaction+Cheddar.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/15/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import + +@interface SKPaymentTransaction (Cheddar) + +- (NSString *)transactionReceiptString; + +@end diff --git a/Classes/SKPaymentTransaction+Cheddar.m b/Classes/SKPaymentTransaction+Cheddar.m new file mode 100644 index 0000000..e304abb --- /dev/null +++ b/Classes/SKPaymentTransaction+Cheddar.m @@ -0,0 +1,42 @@ +// +// SKPaymentTransaction+Cheddar.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/15/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "SKPaymentTransaction+Cheddar.h" + +@implementation SKPaymentTransaction (Cheddar) + +// From http://stackoverflow.com/a/1314501/118631 +- (NSString *)transactionReceiptString { + static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + uint8_t *input = (uint8_t *)self.transactionReceipt.bytes; + NSInteger length = self.transactionReceipt.length; + NSMutableData *data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; + uint8_t *output = (uint8_t *)data.mutableBytes; + + for (NSInteger i = 0; i < length; i += 3) { + NSInteger value = 0; + for (NSInteger j = i; j < (i + 3); j++) { + value <<= 8; + + if (j < length) { + value |= (0xFF & input[j]); + } + } + + NSInteger index = (i / 3) * 4; + output[index + 0] = table[(value >> 18) & 0x3F]; + output[index + 1] = table[(value >> 12) & 0x3F]; + output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; + output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; + } + + return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; +} + +@end diff --git a/Classes/UIButton+Cheddar.h b/Classes/UIButton+Cheddar.h new file mode 100644 index 0000000..4d1b30e --- /dev/null +++ b/Classes/UIButton+Cheddar.h @@ -0,0 +1,16 @@ +// +// UIButton+Cheddar.h +// Cheddar for iOS +// +// Created by Sam Soffes on 5/16/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface UIButton (Cheddar) + ++ (UIButton *)cheddarBigButton; // Used in add task bar ++ (UIButton *)cheddarBigOrangeButton; // Used in Plus upgrade ++ (UIButton *)cheddarBigGrayButton; // Used in Plus upgrade ++ (UIButton *)cheddarBarButton; + +@end diff --git a/Classes/UIButton+Cheddar.m b/Classes/UIButton+Cheddar.m new file mode 100644 index 0000000..35299f7 --- /dev/null +++ b/Classes/UIButton+Cheddar.m @@ -0,0 +1,65 @@ +// +// UIButton+Cheddar.m +// Cheddar for iOS +// +// Created by Sam Soffes on 5/16/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "UIButton+Cheddar.h" +#import "UIFont+Cheddar.h" +#import "UIColor+Cheddar.h" + +@implementation UIButton (Cheddar) + ++ (UIButton *)cheddarBigButton { + UIButton *button = [[self alloc] initWithFrame:CGRectZero]; + [button setBackgroundImage:[[UIImage imageNamed:@"big-button.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0] forState:UIControlStateNormal]; + [button setBackgroundImage:[[UIImage imageNamed:@"big-button-highlighted.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0] forState:UIControlStateHighlighted]; + [button setTitleColor:[UIColor colorWithRed:0.384 green:0.412 blue:0.455 alpha:1] forState:UIControlStateNormal]; + [button setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal]; + button.titleLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + button.titleLabel.font = [UIFont cheddarFontOfSize:18.0f]; + return button; +} + + ++ (UIButton *)cheddarBigOrangeButton { + UIButton *button = [[self alloc] initWithFrame:CGRectZero]; + [button setBackgroundImage:[[UIImage imageNamed:@"big-orange-button.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0] forState:UIControlStateNormal]; + [button setBackgroundImage:[[UIImage imageNamed:@"big-orange-button-highlighted.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0] forState:UIControlStateHighlighted]; + [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [button setTitleShadowColor:[UIColor colorWithWhite:0.0f alpha:0.2f] forState:UIControlStateNormal]; + button.titleLabel.font = [UIFont cheddarFontOfSize:20.0f]; + button.titleLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + button.titleEdgeInsets = UIEdgeInsetsMake(-1.0f, 0.0f, 0.0f, 0.0f); + return button; +} + + ++ (UIButton *)cheddarBigGrayButton { + UIButton *button = [[self alloc] initWithFrame:CGRectZero]; + [button setBackgroundImage:[[UIImage imageNamed:@"big-gray-button.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0] forState:UIControlStateNormal]; + [button setBackgroundImage:[[UIImage imageNamed:@"big-gray-button-highlighted.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0] forState:UIControlStateHighlighted]; + [button setTitleColor:[UIColor cheddarSteelColor] forState:UIControlStateNormal]; + [button setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal]; + button.titleLabel.font = [UIFont cheddarFontOfSize:20.0f]; + button.titleLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); + button.titleEdgeInsets = UIEdgeInsetsMake(-1.0f, 0.0f, 0.0f, 0.0f); + return button; +} + + ++ (UIButton *)cheddarBarButton { + UIButton *button = [[self alloc] initWithFrame:CGRectZero]; + [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [button setTitleShadowColor:[UIColor colorWithWhite:0.0f alpha:0.2f] forState:UIControlStateNormal]; + [button setBackgroundImage:[[UIImage imageNamed:@"nav-button.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0] forState:UIControlStateNormal]; + [button setBackgroundImage:[[UIImage imageNamed:@"nav-button-highlighted.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0] forState:UIControlStateHighlighted]; + button.titleLabel.font = [UIFont cheddarFontOfSize:14.0f]; + button.titleLabel.shadowOffset = CGSizeMake(0.0f, 1.0f); +// button.titleEdgeInsets = UIEdgeInsetsMake(-1.0f, 0.0f, 0.0f, 0.0f); + return button; +} + +@end diff --git a/Classes/UIColor+Cheddar.h b/Classes/UIColor+Cheddar.h new file mode 100644 index 0000000..3627d86 --- /dev/null +++ b/Classes/UIColor+Cheddar.h @@ -0,0 +1,18 @@ +// +// UIColor+Cheddar.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/8/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface UIColor (Cheddar) + ++ (UIColor *)cheddarArchesColor; ++ (UIColor *)cheddarTextColor; ++ (UIColor *)cheddarLightTextColor; ++ (UIColor *)cheddarBlueColor; ++ (UIColor *)cheddarSteelColor; ++ (UIColor *)cheddarHighlightColor; + +@end diff --git a/Classes/UIColor+Cheddar.m b/Classes/UIColor+Cheddar.m new file mode 100644 index 0000000..d130d05 --- /dev/null +++ b/Classes/UIColor+Cheddar.m @@ -0,0 +1,42 @@ +// +// UIColor+Cheddar.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/8/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "UIColor+Cheddar.h" + +@implementation UIColor (Cheddar) + ++ (UIColor *)cheddarArchesColor { + return [self colorWithPatternImage:[UIImage imageNamed:@"arches.png"]]; +} + + ++ (UIColor *)cheddarTextColor { + return [self colorWithWhite:0.267f alpha:1.0f]; +} + + ++ (UIColor *)cheddarLightTextColor { + return [self colorWithWhite:0.651f alpha:1.0f]; +} + + ++ (UIColor *)cheddarBlueColor { + return [self colorWithRed:0.031f green:0.506f blue:0.702f alpha:1.0f]; +} + + ++ (UIColor *)cheddarSteelColor { + return [self colorWithRed:0.376f green:0.408f blue:0.463f alpha:1.0f]; +} + + ++ (UIColor *)cheddarHighlightColor { + return [self colorWithRed:1.000f green:0.996f blue:0.792f alpha:1.0f]; +} + +@end diff --git a/Classes/UIFont+Cheddar.h b/Classes/UIFont+Cheddar.h new file mode 100644 index 0000000..c8d832d --- /dev/null +++ b/Classes/UIFont+Cheddar.h @@ -0,0 +1,16 @@ +// +// UIFont+Cheddar.h +// Cheddar for iOS +// +// Created by Sam Soffes on 4/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +@interface UIFont (Cheddar) + ++ (UIFont *)cheddarFontOfSize:(CGFloat)fontSize; ++ (UIFont *)boldCheddarFontOfSize:(CGFloat)fontSize; ++ (UIFont *)boldItalicCheddarFontOfSize:(CGFloat)fontSize; ++ (UIFont *)italicCheddarFontOfSize:(CGFloat)fontSize; + +@end diff --git a/Classes/UIFont+Cheddar.m b/Classes/UIFont+Cheddar.m new file mode 100644 index 0000000..0a51983 --- /dev/null +++ b/Classes/UIFont+Cheddar.m @@ -0,0 +1,32 @@ +// +// UIFont+Cheddar.m +// Cheddar for iOS +// +// Created by Sam Soffes on 4/23/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "UIFont+Cheddar.h" + +@implementation UIFont (Cheddar) + ++ (UIFont *)cheddarFontOfSize:(CGFloat)fontSize { + return [self fontWithName:kCDIRegularFontName size:fontSize]; +} + + ++ (UIFont *)boldCheddarFontOfSize:(CGFloat)fontSize { + return [self fontWithName:kCDIBoldFontName size:fontSize]; +} + + ++ (UIFont *)boldItalicCheddarFontOfSize:(CGFloat)fontSize { + return [self fontWithName:kCDIBoldItalicFontName size:fontSize]; +} + + ++ (UIFont *)italicCheddarFontOfSize:(CGFloat)fontSize { + return [self fontWithName:kCDIItalicFontName size:fontSize]; +} + +@end diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2e60d71 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2012, Nothing Magical +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Other Sources/CDIDefinesExample.h b/Other Sources/CDIDefinesExample.h new file mode 100644 index 0000000..f9c0f9f --- /dev/null +++ b/Other Sources/CDIDefinesExample.h @@ -0,0 +1,24 @@ +// +// CDIDefines.h +// Cheddar for iOS +// +// Created by Sam Soffes on 7/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#ifndef CDIDEFINES +#define CDIDEFINES + +#pragma mark - API + +extern NSString *const kCDIAPIClientID; +extern NSString *const kCDIAPIClientSecret; + +#pragma mark - Fonts + +extern NSString *const kCDIRegularFontName; +extern NSString *const kCDIBoldFontName; +extern NSString *const kCDIBoldItalicFontName; +extern NSString *const kCDIItalicFontName; + +#endif diff --git a/Other Sources/CDIDefinesExample.m b/Other Sources/CDIDefinesExample.m new file mode 100644 index 0000000..352ac86 --- /dev/null +++ b/Other Sources/CDIDefinesExample.m @@ -0,0 +1,29 @@ +// +// CDIDefines.m +// Cheddar for iOS +// +// Created by Sam Soffes on 7/24/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIDefines.h" + +#pragma mark - API + +// Remove the next line after you have filled in your API credentials +#error You need to fill in CDIDefines.m with your API credentials + +NSString *const kCDIAPIClientID = @"YOUR_API_KEY"; +NSString *const kCDIAPIClientSecret = @"YOUR_API_SECRET"; + + +#pragma mark - Fonts + +// Since we cannot distribute Gotham for licensing reasons, you get to use +// Helvetica Neue in development. If you're feeling fancy, feel free to use +// different fonts here. + +NSString *const kCDIRegularFontName = @"HelveticaNeue"; +NSString *const kCDIBoldFontName = @"HelveticaNeue-Bold"; +NSString *const kCDIBoldItalicFontName = @"HelveticaNeue-BoldItalic"; +NSString *const kCDIItalicFontName = @"HelveticaNeue-Italic"; diff --git a/Other Sources/Cheddar-Prefix.pch b/Other Sources/Cheddar-Prefix.pch new file mode 100644 index 0000000..d1fd85d --- /dev/null +++ b/Other Sources/Cheddar-Prefix.pch @@ -0,0 +1,22 @@ +// +// Cheddar for iOS-Prefix.pch +// Cheddar for iOS +// +// Created by Sam Soffes on 3/25/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import + +#ifndef __IPHONE_3_0 +#warning "This project uses features only available in iOS SDK 3.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import + #import + #import + #import + #import "CDIDefines.h" +#endif diff --git a/Other Sources/main.m b/Other Sources/main.m new file mode 100644 index 0000000..5e9c2b8 --- /dev/null +++ b/Other Sources/main.m @@ -0,0 +1,25 @@ +// +// main.m +// Cheddar for iOS +// +// Created by Sam Soffes on 3/25/12. +// Copyright (c) 2012 Nothing Magical. All rights reserved. +// + +#import "CDIAppDelegate.h" +#import "CDITableViewCellDeleteConfirmationControl.h" +#import + +int main(int argc, char *argv[]) { + @autoreleasepool { + // Swizzle archive button + Class deleteControl = NSClassFromString([NSString stringWithFormat:@"_%@DeleteConfirmationControl", @"UITableViewCell"]); + if (deleteControl) { + Method drawRectCustom = class_getInstanceMethod(deleteControl, @selector(drawRect:)); + Method drawRect = class_getInstanceMethod([CDITableViewCellDeleteConfirmationControl class], @selector(drawRectCustom:)); + method_exchangeImplementations(drawRect, drawRectCustom); + } + + return UIApplicationMain(argc, argv, nil, NSStringFromClass([CDIAppDelegate class])); + } +} diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..06af2e9 --- /dev/null +++ b/Rakefile @@ -0,0 +1,16 @@ +desc 'Setup private files so it will compile' +task :setup do + # Update and initialize the submodules in case they forget + `git submodule update --init --recursive` + + # Copy examples defines + `cp Other\\ Sources/CDIDefinesExample.h Other\\ Sources/CDIDefines.h` + `cp Other\\ Sources/CDIDefinesExample.m Other\\ Sources/CDIDefines.m` + + # Make placeholder fonts + `mkdir -p Resources/Fonts` + `touch Resources/Fonts/Gotham-Bold.otf` + `touch Resources/Fonts/Gotham-BoldItalic.otf` + `touch Resources/Fonts/Gotham-Book.otf` + `touch Resources/Fonts/Gotham-BookItalic.otf` +end diff --git a/Readme.markdown b/Readme.markdown new file mode 100644 index 0000000..fec5844 --- /dev/null +++ b/Readme.markdown @@ -0,0 +1,35 @@ +# Cheddar for iOS + +[Cheddar for iOS](http://cheddarapp.com/apps) is the universal iPhone and iPad application for [Cheddar](http://cheddarapp.com), a simple & instant task manager. + +**You can download Cheddar for iOS [free on the App Store](http://itunes.apple.com/app/id524382948?partnerId=30&siteID=gCug0Bwa2R0).** + + +## Getting Started + +Run the following commands to get start: + + $ git clone https://github.com/nothingmagical/cheddar-ios.git + $ cd cheddar-ios + $ rake setup + +Now open the Xcode project and build. You will see one error telling you to fill in your API credentials. If you don't already have API credentials, head over to the [Cheddar developer site](http://cheddarapp.com/developer). + + +## Why is this open source? + +This is open source since the app is free already. It is indended to be a source of sample code for everyone to benefit from. You can make cool apps that use Cheddar and I hopefully get more users because you built something awesome. + +Also, if you want to help out and fix some bugs, I'll love you forever. Maybe you'll even get a shirt or something :) + + +## License + +Cheddar for iOS is released under the [Simplified BSD License](https://github.com/nothingmagical/cheddar-ios/blob/master/LICENSE). + +While it is not strictly forbidden by the license, I would greatly appreciate it if you didn't redistribute this app exactly the way it is in the App Store. There's nothing stopping you, but don't please be a jerk. + + +## Contributing + +If you want to fix bugs, I'll love you forever! If you want to add some features, I may not merge it. I'm sure it will be awesome, but defending Cheddar's simplicity is my upmost duty. If you're feeling like implementing a feature, check out the [issues](https://github.com/nothingmagical/cheddar-ios/issues) for things tagged with "feature". diff --git a/Resources/Cheddar-Info.plist b/Resources/Cheddar-Info.plist new file mode 100644 index 0000000..eed5877 --- /dev/null +++ b/Resources/Cheddar-Info.plist @@ -0,0 +1,67 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIcons + + CFBundlePrimaryIcon + + CFBundleIconFiles + + Icon-29.png + Icon-50.png + Icon-57.png + Icon-58.png + Icon-72.png + Icon-100.png + Icon-114.png + Icon-144.png + + UIPrerenderedIcon + + + + CFBundleIdentifier + com.nothingmagical.cheddar-ios + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0.0.3 + LSRequiresIPhoneOS + + UIAppFonts + + Gotham-Bold.otf + Gotham-BoldItalic.otf + Gotham-Book.otf + Gotham-BookItalic.otf + + UIStatusBarStyle + UIStatusBarStyleBlackOpaque + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Resources/Cheddar.entitlements b/Resources/Cheddar.entitlements new file mode 100644 index 0000000..6ae6360 --- /dev/null +++ b/Resources/Cheddar.entitlements @@ -0,0 +1,10 @@ + + + + + application-identifier + UP9C8XM22A.com.nothingmagical.cheddar-ios + get-task-allow + + + diff --git a/Resources/Images/Default-Landscape.png b/Resources/Images/Default-Landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..680b877b70be4c902eec423b4c34d35fc55ff065 GIT binary patch literal 5772 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 KyZLtvpZ*{FWeSS` literal 0 HcmV?d00001 diff --git a/Resources/Images/Default-Portrait.png b/Resources/Images/Default-Portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..fdfcb81eeef2442d34d95738db5c6d75f29f71c4 GIT binary patch literal 6366 zcmeHLc~DdL7QQqXc*rV&5% zvZJ^FMPv~OC|WRVN|mZnL4x2ySc-sI=}kh@KHB$BAIv;wn90n|eD~%%=X~dP&-eQ! z)ydITNkLly001R>JG2V`K)|n%5qZ(&-qVd3@G|Ixa}`~88|iS;eEOr^u}16bd~h6! z4?EF|Lm_g>1a7J~H}xntF)`85&_Jit9UL53EY{G_5DteUkx0qO$tfu*P$)Dh zDQR+Yvazv|gtvprLP*#xw;~9m7vf$~!#Qcb+~SmYdvhFW!)_D91bg$WU}!4iso7W&Vx3VknkASCBtF;!s5DRDH&F|m?whHRJoxl?dI^v5RdKD#Yo7x^ ztgdQHi@+yD-a|h))UbW<%Htm)t!Mx+mWR~q3k}?4)z4VKhY;o#ykMLx0DNY0joB1) zFU51f*CH|4=7TZGiU^pDG@Gaafa0CzYmb`x$({q7bIEO}z?FgRcW*#izW|#c-|}&| z4+*Qa+Xq+ZcAb8c2L-{Mx-uiVzo^om*UDSNVV4GXK**I4IWuu=|5#4Wmud}m;iV}E zbvLydT(|PtN8oRC<%{A3Ozk^4Yi!}LZuHZ*1Z@CVofwzh%s+oY{;+LaJ@2lA`R z9*7t2ReIH)ezag5M-YRas?dGQCdYzdp_w1-Fy6FUaxG!tkI1+AYyL}QWv<*`BkOcD zb^ST=TL}{&8>jJOjDyX`AXXcCkY@PhH%{PUPB5;(eixIYew$L1GbibXk>;IBV5afb z1y6Pqe;!#E=neZ7M_sqo@H0>z-OCCB8--VdpaB*LLDrdHaDI%cfcLN4Kdu6(x)Yo1tyEGit|V;v-o%zV(4FN%!Q zxL7Iy!QL~xgi4OG$gK6hx6DFPL#*xtiw`Qk@*XGFs*`+-q=iL)7ZW8a%+?6jes}NP zP3nDJ>qhMYY-CnXEq}e8q^XHz&cs~x%erRSRT-mDaBKR$N|9IO*!~qsoVK**1+mqR zt>RYRruF1tX49(-*vU_3Ob$og)6-^84-fI0t7y;V z48IP~+x3ITt|lLkmn_!UdpgBerDAmm${#)>!=MTpV1D(1^{kuY+>)P!!5H-Q^7GqH zSmAoBABJ?&?nlLDA7p7O`pYidtD3kDw)Z{u^wsOgrTg>S*;fD(QwsAX* z=V}Obk9r}H0m@f z?3jCf=@!78LILg$gi6Z*?Q0NZ8*2BqvIfbk5afJ#)*P}s%VxO|#oi*{^_wQ*Szd)~(76BTt=B$O4JYK#H5F{7v6k+Nq~?gW7##HaF=Rd=J`Fk;Qai5sV<|>4&pH3xrUhi(sIX zpl;ATDhw%=66XPFh+ZN94_X=c0MUaYIzU}xh)hO=(hMY?wT#k(LS3yCAtaHdy#y_b zE;{PxhmU+aXJh1!?I6cJnIq2d`}$i!`w~Zt$7J6AolOee|My?9zj^GRKn6RZl)sJn zPsl*U{=`L7lSu@Z@~`-#2~uo;>gVjE8YAO(C}*F>-UjfWbpWu(IHJqG@{Iot>usiI literal 0 HcmV?d00001 diff --git a/Resources/Images/Default-Portrait@2x.png b/Resources/Images/Default-Portrait@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff4decb4e9a1179a41a1f680703794de9ab459a GIT binary patch literal 63713 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 PNf`Jyjef}<$MF9Fe|fn( literal 0 HcmV?d00001 diff --git a/Resources/Images/Icon-100.png b/Resources/Images/Icon-100.png new file mode 100644 index 0000000000000000000000000000000000000000..f72eb0da2260f4b08b161c19c0750072d69baa73 GIT binary patch literal 5602 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 P00000NkvXXu0mjfh=o6W literal 0 HcmV?d00001 diff --git a/Resources/Images/Icon-144.png b/Resources/Images/Icon-144.png new file mode 100644 index 0000000000000000000000000000000000000000..3c56ee291648f79100a172a04e3cb66cb2e6b399 GIT binary patch literal 8518 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 A_W%F@ literal 0 HcmV?d00001 diff --git a/Resources/Images/Icon-29.png b/Resources/Images/Icon-29.png new file mode 100644 index 0000000000000000000000000000000000000000..894b8aba0a6c6d65a6f4f5c265209ea4c149854a GIT binary patch literal 1262 zcmV$L|GakR~y48QSX?agjf#AM>Eyv}F7^PS(rS+XexjJA+je4{@h}S;ui>^K#V9hIvq$O@LH@z$b{R5 zsYwVu*mWU|C6^F6^FfB;i?y>4`SXejRs%*f*tw2OHl8L@rsqT8$;Bm+X4gz|c^Md_ z6ikXO#u4nbz_dVDk;ycQ_Y;T$v`FG8sl<|ljp)b9$&t<_ho{J7K!L|G9o#b6=P#+7 zTHWj!LbA_kiZo<0K?&!a;!>0rN^{9jvjT=Kpt7hdgh+LRLAP6=xg5x3f{T6$gGWBh z4PAGeyP=y9Ll2X{nVkgRtIm`QRt8G`@1hn4z0U)y>W15F#nc!*dlne=E_~U(y6w!| z34vc~5HvGL6yZ`(${h^dMgi5GmsaWAL-d}*jZ@2FV#?kAyRbN;QK+e{9F#6A(&z!G z*K8%!a89q%nRz;Xmz+~`)^jg+w{L*LdMH{d6;+U{YS&Nq{`e~5Mz$jm71DXwZIdMWwMhX2Z_b zzJ0UGK1{`K$Y$rs-G|6+cSz%y1`j@BEuD*g{mFWKkxt*=2Ynx*kvZCs&>lqe{1xSK zac+z`V)M87=kJTsqZxSI%Hb2{v#<6k4FmUsRgHw^s5KOt`%oKh+kW&!=f?|Zw0?3) zhFXS}2ZAxAumbww>r6yOuJnLW`jBTcM#sjQef)Um;(64oKY2=`rAD=Q9HAe*!FboO z%~B~;GI=(K#~D`3D{J<#qsb5Fql;f>p#wdr_sN?oLK_A&x5}vJwd=lf%S)&HHcLOk zVSUY7IO<*c7IQ~?;(4iBLf>Msr<FQ`7%UQ^=tjIb!5T2^qtI= z$DZ~-ds{*cY%_mWrB0Ofq$mqj$0PqNE{r%fQ&m}iF|}yfgz^&nz!Cq-@2TtQvoo4b zVdq+ZJrb40JX6Yf632eK!?0MUX`(2K@oS~3Kue8L7$K8+QH1vtg__hPXaX;xi zEx}SFQJrk`_2Yxz9;*H%_BR#u1DR|iBC}K;Ce}}#2xah%=D!WhpHL8w%beYc$iD&% Y0PY9FSHKnlAOHXW07*qoM6N<$f}rJKBLDyZ literal 0 HcmV?d00001 diff --git a/Resources/Images/Icon-50.png b/Resources/Images/Icon-50.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e5711d303ae763b85b9f66fd512e80edf517f2 GIT binary patch literal 2389 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 Hu0mjfW*Bos literal 0 HcmV?d00001 diff --git a/Resources/Images/Icon-58.png b/Resources/Images/Icon-58.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe7bb253b2ae58d7e89b387b602c58de210b8a0 GIT binary patch literal 2840 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 JPDHLkV1mi-B)0$n literal 0 HcmV?d00001 diff --git a/Resources/Images/add-list-arrow@2x.png b/Resources/Images/add-list-arrow@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd91a1cb7fb5571d2d38127c4ced4f5f3ae657e2 GIT binary patch literal 1369 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 literal 0 HcmV?d00001 diff --git a/Resources/Images/arches.png b/Resources/Images/arches.png new file mode 100644 index 0000000000000000000000000000000000000000..111c8445f3d7fc8093296a96b305755b41860339 GIT binary patch literal 499 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 literal 0 HcmV?d00001 diff --git a/Resources/Images/big-button-highlighted.png b/Resources/Images/big-button-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..60c0eae8825d4d82371b0ba168c1f8c2e8f5d851 GIT binary patch literal 339 zcmV-Z0j&OsP)|~Il*9b-g|h7`;V`gNKxtK{ERuKE#SEkMu~cxFVymDrP9?8 zRr(JVMzLaUf=)Mhx?u3ROfmlx=PVT8r3PKuGGQZzB5?zJ_<<^N?@V8*NX+r!2l99{ zgEHa6zc*Cf5vp3qLKd=+g$@q#c8Hqqztp(z52u7yS*YRDP^H=OuZYL8_{66}%@rNr zbq4KloT&Fas58t|{*VLA@#*+K% literal 0 HcmV?d00001 diff --git a/Resources/Images/big-button-highlighted@2x.png b/Resources/Images/big-button-highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2199e08ccb9851384437d754d9f410d5ecc8253b GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^;y@h2!3HEVpRGw^U|?eMba4!+xb^ntUG2kx66_z& zZo7Z$sE5n4mTcdiRGt&iq+wn8c$=)>C#o&^PdmQwqFyspG=On%9+-ICy47ZVqJdEk`;{11bJugSYDs7L05jU zjK#BvgRUR@S(Govv<19qPv&!(BNCq*>#QI$@BY>N+Un;F<(<>#eEGDYZ`VEPSy4Bf z?Pa_gE$xaQUwJj_*QtjeZ@%znt5<$JvGv)sYg%76KQ<^-Ke|XH@RZf=>f0|T%se^s z2It>Bc5f7H_h0xW_$t=6R`$mES}_@6bN&y(UYbv*aCsfzSwH>rJ}2v(N6#4Zy88Jw zmra@Ru+;v2akhnQp4_8F6&hm4vwz<|{I#iM@}2n8=3%b?mgXp1ONa4 literal 0 HcmV?d00001 diff --git a/Resources/Images/big-button.png b/Resources/Images/big-button.png new file mode 100644 index 0000000000000000000000000000000000000000..c50181d707928d915b45812a2214a45101cb5823 GIT binary patch literal 780 zcmV+n1M~ceP)_kDZLm!Y z@<$2QbuGr}_j~t#^*jMUu3WqM&aq?5#bh~;T|A%j=$F~~<%b`<_dN;#xpMvH%TZPzb1ef;EUZ{5DzE7xvbMga2lw>RFsb?0sm4qkT7b{@5JwsW?f?TdqT zZ{5DzuddvRlRRBT}01SXO+DZZnAgF?X0SP)qn3DiN5mW*U zD5j!>0E&PjT3~>p5L7`>1pvSRsx1mys05-dih==26hu`LFjbTU1u&pRs|qLxfC7L4 zLK^@D1q8GOFd%3rf+7GYpa2H6Q~&`0RS^UM1E8(8ga`nbCZJ#dH9LVxRT2PIAOQo2 zG(by20f+#A0aO(THGz^u6(}$ui8%|BC?eV_BB~N#KwAKFPDxaORsjG5hzS5Ff&zlJ zV1SSofK~un&_oh2AZTex0B9?Twt}``K+EhTQ2-=NB~$?npdu82wj_eK2!H`ZTZKXq z6abY341igHA`&J5f)-d%`uyndP@oZ*WRj9{xH&@qLl@Yr*T3%V|7*6Ys%C1Ys;c(( z_Z_Y`_h7;N>+fe*A3c0xv)%}l6cc6ra^um%C!Xy+yNY=Xe){qD@8{oq`<2bnd~1wh zXJ>~cj*gD({j=}>{og!z@Zg(IFMV_sFM?o&-AkW+apCmoSKr^-+J0k6j?Xy{Hk0XAp=5G)v205EZgiNgPdq^>L0JO!=*0000< KMNUMnLSTYE7{^U;*%7>30?{J2l#sqexAh64x~ZF>yFNyx$x@rHy$~uU)J-7-MHit2b+4%r zY5B6dv(CP`Z!^26|6}LWG;W^V2kL+WKiN6Y|NmR&tXFe7gb*FguEe9KLtq3ffeH`` zdA}&BIF?9w35BwCP*($c}s3-8qvrm41Vmh|B z74siZXtWLWs861tyc3VKOv6;lX342Xee#gcFYm&j3WV!=EIIY4Pag95zBOV;Nq8C|4rWgTVChlmv=XndkAsS%e^`i({dLf7Ut!y$3-u%A;iMGyykJy z%d0h)i)ne)<)W8Y5Mp6mUar)*9A)ABSzT=eoxo{M353L!3fxt(Xyl03&nFHa)GMK4e1xaj5E2(d6P zPi492Mq0i3F9zin&Kg!}xVXF~HnyF% zp&s>dAhNvg{rO02VuFUR-psS))T2H;4}$XWwd*&|s-v8x)%CW-lvhVN)>mkL@$%L4l$Sk=Jk8{4dngbA$3PUE0)qhtz*y#tISHUIzs M07*qoM6N<$g8TE96951J literal 0 HcmV?d00001 diff --git a/Resources/Images/big-gray-button-highlighted.png b/Resources/Images/big-gray-button-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa3420cbf8d1f32f48953489b0f8439b8453265 GIT binary patch literal 540 zcmV+%0^|LOP)7a%?j#C@rW;ak9pK#FJ0ThX#(_o4p}A3gp5&F_;?s(q$LwgT1EfU7hp_5X!D1bl(= eePL<<0t^6kfA3vv5yxc!0000E{`5RF=KOH#c@PF!mQq2KzI;6 zh-ZlBSFc=J3Flzp#7KGpo4be-h)%vEZXtPlL}DZqvAKh|N&Wo19B?`9;B@AL)nWlr z6u92%>Tg(FS_1F5A4bQ#Fg`Jx)c%@8Ab88NmOd{+{ z-^+2Zyc9lt9)yk$y`b5W_iG-bw@rB6N(1N4o`Kw)EQk>Lh{70ve{u$1yn3w-HKW&U zqTN+ai}DhY)=*aig>FaGq?)9rS|K?(89ZJebx(Hp4m_a1H6t7pQ~GJ!CDlSjw#0#A zN3;lxu}12-T~3Us%%i$9$l!K6)$p)J0T<&maF=bMgO$UPXVVt=ln@L`nbfgZ_JCfo zU|Ny{gTYLbBuP9$l{}So5sM<@tt82U0CAE8Czf@DINUaF9L0!dbT0Abg5;zoc3?gAXd4DU9`Mau~gKy)8Y^0k(yw&j^!_`Z? ztS~{Gj*tXDOk;SK#xLEBM>@ea`d$8W1G4t<=RbWZG_t}tr8fsTq0=q&W8%)9WFy^- zJl?^Zke)wekv(QHdcTSo3Z|blLGw5%Nm)OtA?b~UBuNUXAb?<1D*?;P%j)f&)++!4 z$U$PYT0qFiNawElCa3tsY@0r7`c!k8nDFzl?5qq)a60m)sWUq2MFqC59<`%PwP5gT zY@A;s=d4gt?0TD$Vg;Xn3cd{uQ#ohd1-1pBszWwp>+?-Q3WlMi$n{1riDG+0T{WMn zv#TFwX6HaaMa713Bc}CL5)M$tNSAELmZYJ+hDt*1RL`Tb+i*u`pQHcdSAMhhNF|h& zl_6 z<#i}QSS$BHAg~M*K0jX<3L!~Fc`2MgZ*j5~?6!s$W2xqOW8|j?-gouE{QN>xS&^2O z3Ux=Tpin8f-2=768A?pW*!zfUl;}T3#^C3u2d1azU~wt1A^B;6va>V5UEqMCLMI49U?8={AM)L?R}b5tk8dh!Mm}2+@i<)~4#1BXRr@U;ww-8-nb- RCJX=o002ovPDHLkV1i3F;@toM literal 0 HcmV?d00001 diff --git a/Resources/Images/big-gray-button.png b/Resources/Images/big-gray-button.png new file mode 100644 index 0000000000000000000000000000000000000000..cec689ef192fdc01d7076d07d6f5281793dc0de6 GIT binary patch literal 555 zcmV+`0@VG9P)~NwIxMS zp&sc*SP8#CZLKZ*0Be?PZ6zdZ*@}fkLRd+N4Y9Clo7fQJ)dgnm9QTZws@IrXoXMA) zIrp3IJnmx{A_Cd+>UvrZ(-K1xRT6oLLy3i{$%##yMC7HFwYjbBeaz-A@bT#hg%I|b z$zCA&X`Xmx&27D7@s`-)$nX%<)zt!L94Hu#HPuzn5^I9H`-jopy@O*O3|7qdBok0x z9-ug%K>nWYPNAL@)))=LvtjgUrYXuaO#`>kuZ-r2$3ej~yCcryi(IJ3 zpRzBmtBkMs2W6$46}#b;GJ8k%na5j!9$aL_+_O9ELE8fyXUrJ>fPXhfV|a(35}n)V-xNU8oL#9L$Y tk~3?cY6s&II}&+(wY>A5b~!Hs3;;0PIC~!tqlo|j002ovPDHLkV1nY<|9t=e literal 0 HcmV?d00001 diff --git a/Resources/Images/big-gray-button@2x.png b/Resources/Images/big-gray-button@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8076e7d8537affd47117ede11c84c3e013432e7a GIT binary patch literal 1149 zcmV-@1cLjCP)AMR3Iv#Mi=f(TquezT)A*(;z~{Y0WNgoLRT(as{~_WbmzuIgHKRUBMJmtkcUc) zVtI6~=iHg8)23kQOo!Bye7TRg=ey^g`)m&rLO`Nizi~4MlS2k}A<7Ur#^;}i5aJc$ z4&v^qlgDQhIanewk{-t75~2!HlaGk=NZy&07zq_jE+WoRxvaDV0{(LF`^&)V@qnUm z*=}xb9)3+vLwIBihChd4WOUr*B4aLK2T>}hmQG@%Ejt@wOWkJ7>77#FrU9y|!0N(P z67{v!(EIiSbUo_^QqhM_uCu1K-lQ)1}@s+JNCwQ+KjcRMCkmt#xfq_Vy zRv?E*=AzN)8dcLYxj+@J80#v1ixsY~bxjjSE(4M=V%6%S_;jhl;&jz`_uHF11}r&o zY~6zmqciQ}%uk+hz!S+=g}FI|Gpi!|T;ambbJ%3Jd~9!1Ten{J`B=@+8RXhQ@0>5< zSB0=~RFM9Eavlo@Tp?VTJa^6tNb_aElIS_RrG?u&PuM&-*@CWc(8=!J(!&1SB|Zv; zy;nVBS?mgzFH;9hR+DXy^m)bq;0mXY`fPbuh{Z3{bT3rl#_8tLSz*@|i~ss}<_dA| zU6JmBV=28W9N5xs>^yrf3$eUE$Fjo5b`2KGa7!C~rh8bh_;WM+T;a~nv+WBvmfHfi zwEeBell?Gpc8awv>4uPl1UbL) zs>;A)3PO!xZv%rv=pP2$s<4nxEp14LbcrJ$-B48#c*Ipj>1=IolnUKFy)ZR31zgb^ zQ8Tpd1 zzW9t$=oagicK7tjPusTEK+BGXFlH;w&}KWPx1Mypg1&eCvQbG%G5E?$Wtx|phgRxK zUT7LbW+HN;LgCTagw@qn!)~+|J3EHO+ty$##XQdr4u#<9iyrv#<7Y~1xS(JqG;iMq zn}Rarb{UKirIqP)D#tJ#a8a z7YXhR3`K)9vRy3-oY}c;*V0An!bLdS{sI4mR{mH7(Iy2=XrUm~CL$L>I1cz`&>7!7 zp7VYT4vg~}B`6Pk+;{Hz&UxpadoD*25k$5gc?DixGVU`xhR@h$yq#Y6SB0a5%*4gq z_=8vZdo%C`hoBt?_Vg6~ub=q+WdoJntr9!DR+}^KY;J6NW%%hFOydM-)B&;_Mgy51 z1eqK7@%|kuJDWu((?3v>h^BE2)ERMFp+h}@0U@IVxO5w_YE_E<72Uh5e;B%l`HU+!`5! zo9l;WvgJcm56d|CwhM3S35H%Q6q6=eEPq<1z4>SK`SAepAPra1%j;_-c8V^J5)>I9 j89qhg$9f^*oCz=hkg0w%36P3r00000NkvXXu0mjf0B#SL literal 0 HcmV?d00001 diff --git a/Resources/Images/big-orange-button-highlighted@2x.png b/Resources/Images/big-orange-button-highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3a8157abb4773c0719fff1a1f4d2888b90235057 GIT binary patch literal 1349 zcmV-L1-kl)P)MWJc@OF;3bNn`Ar#8z4p4e?DA;twxELNG>SjL3^VNc7PcAEdT{XN|uh8WRyU zQmxVm#UH3Z*cNtYcjtP}otbuaySCfy?2t9y=F9Znd(L;yJ@?F+nLR=&h0^xbeT@;i zJnUc_VLc(@OwSOe2*(Lygd=x-F=Li;h*DxA9iYqWgqu)V`-QNV$VbZ(6JdxhuM+lf zKY8=5XzsoftLYk!Cm}*o%N0x$`I*bOJb4lqfBXjNpTBdt*qD8^K%tcQfJ@r(&`z{& z?E}mVkk11a$tue+g%*%xgJF&vzd?>#X+B>#Cfz~_j0j{K> za#`B9Ywbc}Z8edLa1KsF8P|9em zmpiMvx=AQ!`_$e3QjKLuR_l=Ns;j`PcI_*Fj^8&85t~JYOuGOkAHzemL;n`v}O%S#b&V&#OFsw^TF__^3Di5fMdXjQDhVifBIU~$p$spUsRiH=d0vszyDZ&BeRb3jp{ zP<>Rmx&cOoCx)xCICvjpHzxX8V=d0|17Z^?@$`nr1N)nTId;oS}Dzwr34?Wcl& z50F5zTm2ngtU~IC0DEmTcPAKh2#>6W>F`;t-K2gux3)kI`jfoaab}Wwj3JUYf8=aI5d` zzaZE4KYA?E+J^MxIHt!>=zyNDHo$9Rrq8k@Ba>vHRS_5froKFakx zU3NQtXn*@3@4cZX+a4G|%jVmlxTePiDvB886bc1f%(Xl^dEWl?$rG6RXiU#t|JZKa zulLI_u#J&-qAwI4V%!ku?NZaE`*~oI~3W&mO?I@p@TX_KK((v zklS^GPoi`8L9UDqQ}?j97|S)!=P!J61ZUoU0U1)Pq{V3Aj;CHms*el8I0&aa>LunF zV_!V2X#0PEJcf&(9mVWV-@-iqJ5)YryMm&C4~Rkv&Ar>Prf)#s5Y*lxJjeH%bDOJD zJVKaIl{c2%QOZ+}m=Pg7P8cCf5=;+~>5PpyGLdo|{|GPu(8bVs)notR-~9H zA{3#t(9&WKqNukXv|w`UwKtC*dT!~Vm}~!m{tG>|_Ta@!6=Hi36uc;CQ4lPMG}~0- zzW1ET%a$ydZdOQV`FJ}!-_9>~c7!noEL(GaiH=uq~k)X5W(p&er|8#Vt1=TFT4@eS#NRh$<*h23oqbYT>@7Pz-V$KflL-E zlf#d-kGR;Wmfg(VLWMm#4I(!F5YeUu&NXR)h-M#yLAz=p5HiLq$j(;T~nhX}{^!rezc^6+15oi%9 zGCO@9r1xM#)dE_1*&JfUMp3eTsMP{^4~t6X7hmq39quE%GX&&lSMuiI(0q~}4h(_q z%;Tk5I{EPKQ@y%|!uWj*cs``CpYSh=cy@Gv{^@y)Exj#+H!NZ0{OhXOTYhf7Ju4Vm zq|KA{^NlZt?Z&2NB9sa1guqw{T6!tsTnjJ&wCj!tEB@op00000NkvXXu0mjfdhQ!^ literal 0 HcmV?d00001 diff --git a/Resources/Images/big-orange-button@2x.png b/Resources/Images/big-orange-button@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1534ddc0f14506e3df673c37b9ad7df841d5562a GIT binary patch literal 1341 zcmV-D1;YA?P)P7S zn-DcEq*PT^At+RkN;wd5p`xJ)5(sevsp6*>S_y$vA%rNsz<~;mTsY8>s=f3GEr=f> zLB*w{KZ!y^Yf{px!J*FD-r>FRZtQh!*G{~aEHToPJ+tq9^Y(jhX6$)FDTVU((-Sd+ zKAy2<7s+}O!+xA5nIZX=*Y-ox%52dr_ST%`CstQh2I=3cIGXbAYTrA!~yMj z`bBi^90be^kjnuU=_<>1g(i^XgWpf&gfRQ_8C*H_`4Tt*A6fz?(0%m%I1g;ue;CoV zT|nkv0yUxX1k95=lnJ3l_z2ifw1*;CxSqoA#|}H-BLqGsetbO2LAgxQ-LvN?AyDRXA?k0ss#@#Sb0F32haOF7EPc+K-J0$EW=~e$_lSI_BJb;hWr1~)Y22gyR1;| zt+V0Xt?HTQDJDFAUzFUJKR^a_4Qbr98GSH#R^Cj zcjFk#*yvH~npc-0O0}BCu_$>TQNP#1w&SaKQDj#7>pqpM4skQyCN!;{9ro3wi5QVc6d=<^J+AdlU7lJ~en+k#}#aA%3NOg5xB#=cQB#S^Al8o~~2CjuhFo6TZ zoS&PS+yo->3pcmx3&oYo*(pz#}8OS+^sf(I7t%8vP|+km$EE{nqIWs$^GiVLKb*2Un*LfnA0?sq9~-Q zDyi#Qnx>(q2ZzQ2TD%0z?6o-sA;z|CrRzHB`<|K}92$R|Suku{B2DI1ISm6wdn^PF z4O%>S2{Ar-fh5)u*~q&hJBIOH5^V9hzC_Cvm7^+wL74{i!& fEJ=9{49pC(g;}%L$;|lz)WqQF>gTe~DWM4fIQu8z literal 0 HcmV?d00001 diff --git a/Resources/Images/corner-bl@2x.png b/Resources/Images/corner-bl@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..593a847b94d98597bb44c250e98ea6c90ee0a321 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3C60 zhyTdxj!=$6OOI&%VLoDcM5E=QslytloYgr+Ar-fh5)QD~_(ZVyZtO73aS~s__UOL?o4J6sQ)mOr cKV}vQhNSzfIZe&}APX5hUHx3vIVCg!0FjO)h5!Hn literal 0 HcmV?d00001 diff --git a/Resources/Images/corner-br@2x.png b/Resources/Images/corner-br@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c2109628a36d7ab2b14d1e6637123ac4119a807f GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3CmdKI;Vst0ID)4n*aa+ literal 0 HcmV?d00001 diff --git a/Resources/Images/corner-tl@2x.png b/Resources/Images/corner-tl@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fb39cf47ebec374f537a6111e62265db18fbaa65 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3CgTe~DWM4fy9hTU literal 0 HcmV?d00001 diff --git a/Resources/Images/corner-tr.png b/Resources/Images/corner-tr.png new file mode 100644 index 0000000000000000000000000000000000000000..c72aba2f65e21a106d51708ab6fbc6a52f442b1f GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G>Ygr+Ar-fh5)u*~FebSx+~Ya&f1w0xNU|_XqwkprmiUC= dliUIc4D)`oDW?mCcLTLBc)I$ztaD0e0szH)CGP+L literal 0 HcmV?d00001 diff --git a/Resources/Images/corner-tr@2x.png b/Resources/Images/corner-tr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5d5f8a0b4312a2c329217362219437c24ce4cf GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3Czopr01tUJ5C8xG literal 0 HcmV?d00001 diff --git a/Resources/Images/disclosure-highlighted.png b/Resources/Images/disclosure-highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..c63b391f663ab1dc37b745f0187a9bfb082022c6 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^AT~b-8<4#FKaLMb<#@U{hE&{YJ%5n1!GOmhaP@;# zehN$9`b)y z-rdf4`v>z8^AArBvc9;&6!=A;JSO|Zp|x!~Z?>*(vnV_!we60WM-ueT}~^( zmG}0R72w+Iz4$(WBDfRG07bA<1yBUX-p#XCR1cF1G^POsP|#}z1+WH2@4Y_|9A4ykydcahY)u>U`VZP2Z0UMW$^7EJCU8i|sFadg-{CY9 zTt@F`kpZrvHtM1epa^aS>i|XYpb(%4j-#6*jPea98EBmWD1d@q9TdPEv`#8oXDIqr zv`!i-U>Z6nNLvH=h?;+}mN56p8|P;3r|bZ`3x?p{#~3{N7=tGtWAN-_3|@SU!6th7 t7=yK0^kj^|9uzPH6=jS;MF9gau^-daHsC)lKV$#^002ovPDHLkV1mGETx9?N literal 0 HcmV?d00001 diff --git a/Resources/Images/list-icon.png b/Resources/Images/list-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..49ee0e56b295e5ea1985b172b8e3dfc07248aaeb GIT binary patch literal 13212 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 O0000W!2pS{+e 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 Eg6!%z>;M1& literal 0 HcmV?d00001 diff --git a/Resources/Images/nav-back-highlighted@2x.png b/Resources/Images/nav-back-highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..45ce438bf2312afc0d2591f5bf6c1b7941123a1b GIT binary patch literal 1376 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 literal 0 HcmV?d00001 diff --git a/Resources/Images/nav-background.png b/Resources/Images/nav-background.png new file mode 100644 index 0000000000000000000000000000000000000000..b4dce18ada27767ec2e90e03d754bf5b87465c85 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfz!2~3=U0uz9l!K>>V+cod@{g@snqU6^%zopr02WLrX#fBK literal 0 HcmV?d00001 diff --git a/Resources/Images/nav-background@2x.png b/Resources/Images/nav-background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..443d16230c73b77e705a687fdf6cbf2e27032bcf GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^Oh6pL0U`qqZhQo!;yhg(Lp07O|J=Hzxv{aam60dn zpM5>U!@umo|0O3pNoWeVSFh95vqEcQ*70ThdC%&dq$E1SI`8`A{F3Orz`nUrt8L<| z3b#pnJ$u-44tlx#dD!{yf6ywAJ3 zO-lk%6vpxS2DWY)<))w_0%=uArlJ`Qh4@mL6hdfCR`zb1U!$+0;3^UcYV9I7m9IhB z_B7Ara6%Z);>YFQ^S>~&m{EwxP;`&@bw%Bmj~yLM1dywRC{qbDPvC#IPEB zoMUdpxQT2qi)J+ z33GJHQzo3KsuR@OpQq2%;vnN3b9DG4*&cRX_f>VA>Tw5ka4ET9to0oS;T&^xh++6S zx2KiWsfzw=KX@6e*uUfx8s_K_nuc_C-L!57YkzMun_nG`RsZOP;Hm%s002ovPDHLk FV1kloy>|cr literal 0 HcmV?d00001 diff --git a/Resources/Images/nav-button-highlighted@2x.png b/Resources/Images/nav-button-highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..12f88227f9df0125c375cfcfcb850ac09f19a9f7 GIT binary patch literal 778 zcmV+l1NHogP)|e(NJmVx`}M z8FnO&#$YILBKo#0r_mElYxUISBpQ7aUFIxPl{QsSGh z!UWtviD{2rL`MT=f+6unz^`yK-{zp9-&FJW91?zQgv!n=<7REZBQ|JgCK#|_8WUxw zcX1OPZWJ3MO{RhYi_AX;E+`uKSd!i${M5&g7H;IoN_e<|BOP4Nk_r#ibELwtp*ogS zc+ks{m2l9@kQVl^q{0Jkj;w_HYdO-vH5{q%&%SDotc0JqIMTsY9O>ZOEU9qsEsiXN zH+!5M>EKG1RJgl>BP-#qn;hxja+XxMvy3Av;m4&Msc@Vga-_nKN*U6^H&{~PhYpS` zg-bX(ghS2 zy-osA5QgEs1FS8L(kij@0*D$Y6o}$tP$NoIM5M405XAoaaQXoo!X^+TlKU~=(Nhr==YC$ZIlwWut$f_AmctR zLiZmRcSRiE#Y7wzb|f5k3fm%%Z?{Ao-$X?mUvEk{?p{Si9AB=BIKEgDaeTfi;rRD# zMa1!GSj6$kvWVk+NWyV1za--LI4I&cw%IsLPllD_DyI`x64&Xo7)T+Mmm&Tr( zdPf0U*rU_l4)ka(=py5Ajz}#AVU9gIjffo25%&`YpK&*JQ}aX_zj-#)9dqo_A%@{v zb|X>sO}wgaYvIS>#Qh@|O<<1>p=C&MDlTObXaDZ7nm-~DgQ_A35U9#U5rl$@K~TXK?zkv!Y z2(D_wN)lsgTQrieK)JSDj^}B3QzGx8GAFb6Co^--`^!MP0fUG(HFPR%JLlxya6vB0 z(R#Dom-Sf@c6EjhwR2yABpG(k>0kwJ<9zCXzbu=+x16Qly>+xW&_vN!-gpcBjWpw{ z#tb_OM?M%DIDrP63n}{2n^f4{h$~N_4mF(as!A4B;mk(d0aJZY5srdhylL}R!dV4R z!UXK*$nVak=s>fXU?{u{@LP^TEp{F@nJUz3SMWPyIB!oFH-CC+D8@rG!GHzR7|Pon z#m!P*1I1okHx&$6Y{m>+a6D)fNqGslzfmA9+#r#aaNjkFba1^y8u)p=KpJ?N9}1*{ zuS#Sk{OpQEI=D_E4g9oLA}ir1H4^FIYKb<(E4`N`vJ&pOB#{ojD3J#Cc_h-nkE

  • n@c@19z1Qq=ic)(!lqNC9)KD zNtA$x^Y_lfJTz0ll^KUWx47Dj`N+5Z{OVJ95UI`GGK#Y>hEMOC znhQ>(8$^^k-d+`dYc%7{C+aNvuW&}4hXoUG3YYQ8bMmzshHG;8fFr3QysOT^VCyhU zz{s{dKbtjHnLCID^*hIhvB=++)sFKD!Zn^@h8=~{SVhht3|KIMs&;Tk$M1MrM+y#v zv7AiU9Zo?(U^?5?A`VCZ0# zjXQ+pB*U)lA43bPw@>BLxD4)yf^dyzm|+LII^!?U1RHt>A^x%e0000oywln8=sGLA4X`@GZp-kW*vzQ+u<$@r)D{h4#_x%Zs!+;hHr z0pN)P$Kht~OGOWG)4&@YE zZ)av=O-62{vX>+ClE{X8eQS%+%t_!m!=pus+V6FhlSP zIvdAXs5H=?7v15n=lYX?b{>2RKvBt5IkvUxj%O(2Ppn{UcEt)QQ1`ffGSK!zPXVYc zR|Ha(3;qD%fflVDc*Fk&D2`yvB9MHp^)a0)-!M5)oP_zPCdK|erpfk-!d+N`l~{&H zaS?h;IN%LDj6dL)n1-ItfnpNo;we0dSs36PD2C$)ScpI3ZVV@qFRCzueB49(bTQ zoH70fpvaiShP21XSg8}eZm$yM^q0E=?oE&H`RoWY3zypGM>s$lX)xf}}EJ3Qm5f~4~X6nFg7~GeaX`mNh z1E>zBo=-)r#lsIp&CNI26SlT-xxD|*$ks*TT;opG`mZ@spoGT6#9icEdfQAgplTsT zGkCF@M`f;oKKvCx^N9!x&87nAkkEi-YyUv269C#qi}K&wSc@i#xx4bnd%1-p#`^7Z z!1IoZO3QB6x8+Qr^OkY4r4LQLXidr5u0ce)js5c4>q3^#m=R~BB+O= zD>CbkYpEJ4<|187LuZ?>}gtiB~J{#YaBnyi64X0Tf=T+YsMqkO0SVykTO3;-aypg zfC2&MPd*>9HkC(~8(Ur7QksghTZAV*f1;P=Hri{OQ^+3e&enI|+BU!HphRW6xJy$( zD>}{>X4)i|eA_v79xWRh4=vX>NSdRuIFm6^n;LbsGN4X|-_*pKV`h!4&l>BBcQ1wr z7*w)etJc-9-;HR1!Ue__2LtMA>x%N0!Whzxe$jCi`!tmzUmDw6&J<@tBn*IIr`JB_ z%bR(uCb}U>G0ng5>C-n}*clK3{+m=CW&CYyXuA4YNCbqc_ggve7H#c`nTg<+lu%b} z>Ei3B{^X3w5K!>0fh&5OzU{Xisi}$gPj}yDqio#k`faa(5h1a;OUn1$%C9<5w)0fh zyqToW!eAgb8$_VIzgN-)GG+JTj5&kji6#t`_B}jFFGK`RT9%xx%2rKGg7Gk# z+=~1Ngt1emWvddBU@WKegi+IoJbgOxGK916h3CU2uSt1*7DV&?4WYy1vQ=rbl(FzE zD7YBIl(Ffv(`PFu!gHL)AEMJ|FH0U458))8UNDlRm5p*(|9{AMkdTMKaAG!?1m@MR ztq)0o4|q7;#hV1}%eH@?Wcq@lADLb2EAh+9-hDj#$YgK$7yrxp2hWhZKO-VVzyJUM M07*qoM6N<$f`b7`D*ylh literal 0 HcmV?d00001 diff --git a/Resources/Images/nav-title@2x.png b/Resources/Images/nav-title@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..824b3cdb26565686e037be29eb22fd372bf6e50d GIT binary patch literal 3587 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 literal 0 HcmV?d00001 diff --git a/Resources/Images/plus.png b/Resources/Images/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..53026c27be0726d106b969d5892625292c59dfb2 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp@K+MO%1|+}KPrC%9@;qG}Ln>}vop_L|!GOp4w|&*; z|MtlbmR1P7&~2KHLkuM#l2wK z9ZQB^x?P4vUN66V)Bh^_?&Ovk;rW6)85Mu?eK-C$nb(d%v3;Rg*>9=8425&~tbfkU R*$T9o!PC{xWt~$(69CfTLTvy5 literal 0 HcmV?d00001 diff --git a/Resources/Images/plus@2x.png b/Resources/Images/plus@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f70318fcb3a4fdecfddd4b023b7f843d64a49c1f GIT binary patch literal 233 zcmV4Fd zKS-2u0LS6)d)jrLV1GIYLTD(YXtK$n5WzuQ zj*8@phKz#pQm#R+mdw+8yI1kv_x<#H-wW=AJ9-`|5L1(+7IjLplvF*>w%;Gr-l^+< z7PN17_tW#LVJY_V04z;9-yuJ3e{r&kt5H!Gb{;wY_!<$V#i7%ePRLRfy`Jrt36xkQ zeo;8at^fe+^^xgBlbXY{$d! z##P0k;#+WwXO1eVn6}N_#`yV=7DY6#WH9V+53U^SnYdLhVC2Un#nq^a%^sGq36)o< zSaQ>9zBzF5m=a1zqJc!=FcBLI>>4@u=&H9~{B-AR>J*j&b{p%Ax*6aJ6MnicvH6RC zoOx9cr$eHPSs9;q+!(;eWr!3wIqg@i_pKQ7!!mxS!Fi`zwD~XabK~kzr=9g(MpRF# v6=OM5%E880)kha^_())m=lUOBb626iW~&`UXe69S00000NkvXXu0mjf5@*zm literal 0 HcmV?d00001 diff --git a/Resources/Images/settings@2x.png b/Resources/Images/settings@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ce4c791f7b0019697a051b0aad4c71db8aec69b GIT binary patch literal 1231 zcmV;=1Tg!FP)vF;BOrojotS7hZ1fuJ^{&2Y%cn+CcpP-9z!dd4ef7iY`kE%+soKO(t-;M3ohbf?FFuo*w_dYm&fC|QCC;@epOXf!RF>>grHC;bTej#_|_ZPYlp*O zB|%tljWlR-a`FaZ7PeftzyVyOO(9^6#!zxF7_@C+IGJEF7*PD6_Wq^;dQ)47kI2`u!#=2J}V0wRle-$a~A~+FErB3MW z?Y%$>5;}e=*aLO}1K1Ca01GotGNITGvC|uE>v%FhKmS#wc7dH+#ZU5qaAHn!EWFLM zk%BM{+~oJf>o$blNt>CO>7@VH=J4?Fk7Z?L?__3Xo`zns*=(OLE-v0vX(3?@a^-lL z$QL&733Q*9N?k!3h5j@L{G?q6_`<2uu4*y#90-H^;1+F9W8gY|YXAKF{576;DOp)r zFS6p>)YMdh_s;+m*bSZl2}%>=VX0RwFE4+~r$Aj=Sy}lF7c)&^6*RnM^N; zqcJ!J;?!p9B+NEG-CHv@c8Nc4?CR?Jigkd}($cpE2M24{*VmVbYi@4N!R9Zk)%u3p z?XE2@F3wgp1YQQB?vt_t;7_rq^5@Tzio_Gl^YV9G64VTx20_5|9@qnN5a3@SUL7!l zIB*v*{mhP)6oB#ja0ns@f`TBzEdCj`1wn){wzNf?ajVM)!`e(^xUgU_nYOmF6`L^21KYqX zD7c+{FI;#W@Zx>G@Z;QY`NH9tr_uN*A`*$-K{TyY!puwjpqW}2*VsX@Mk|eQ*G6Nu zI6o%Z!yg3NB5CvvvPXz|lIXo7x1dz=Ij)dUH||9 literal 0 HcmV?d00001 diff --git a/Resources/Images/small-check@2x.png b/Resources/Images/small-check@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b54104c5f287c0729153bc55d57ad8830fcf15b5 GIT binary patch literal 532 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 M07*qoM6N<$f-VcyjsO4v literal 0 HcmV?d00001 diff --git a/Resources/Images/task-icon@2x.png b/Resources/Images/task-icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..950fa77332269da17fd3a0fa68cb34e16a18bc48 GIT binary patch literal 30096 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 DArXS6 literal 0 HcmV?d00001 diff --git a/Resources/Images/textfield-focused.png b/Resources/Images/textfield-focused.png new file mode 100644 index 0000000000000000000000000000000000000000..8371d964daf2ba24332b178358992101d4610e0b GIT binary patch literal 874 zcmV-w1C{)VP)JnG=|t|qKP&{3Z=Et zf(D`TAco(Q+v9+{-3y=JtaI#T@0MM2n|zs_H#6UxH}BosISXT!1!L7^2jw{;!S^JQ z;(J$gbi z?}6#NLO8Dz^%7}`7m|dobpVDl&5UAWWd&PXdngq4v0t=N*xSc8^^KLEz|1|+cT)T{ zE@9~|^my#!)^h3VC+sq)d~k?LrHYEviX zhj85*PEJlBk4V?4ar_9o`8>o={B_q-mTp;=a)`j6LQ!T`0)3RIa$NP6Mt`V(R^la- z^L*(ih6%3*RW6~`BTEyz_^E%t#50pqk`V$$y96hM#1RtOm1IQYnn`TCOy^n%Ney=K z;2()m5)(?|hLE_llf*=2LMNx%nuOz;iISK)i3yO+yk6{KX4U<+7~WcNT*@6zX2)^7v)SC_P?vGM90#7= z$a((8Z@2u$Z|=cmOkG{T>;&+A2~MdfOQW=@e}OkXb!EZx8`H**@%0|I6GmImch9fk z#jQC!%B*qiRV`xG({s1y@RoM^5q=BW(2gh7(2F-uF5&a5n^=5(hw{EiPoJN zEA0056cka=7C}4gx86PL)pm;hcF|Knhys(rby2aNnczAz5yI#Kh@!v}P+nV>!1w?e zMB=qgS(bDOg!D`mSW#xeOe6&+JjmQM=_w$z3mUn$_U`#GVMct2mS;`x9wCel)`Slc zc@}$ZAEqcHK19=5!;RZ?zCMfvM3@mDB6d~>YQPF$E3h6|?0kw!6F3k20(=D=b7M{f z8Ep9rR~KYMc_1A?H}DRy#r02DB4CNL*MMEX`@of8`f^{C4%UbArl9U1J_6PNj6CuT zS64hwbHM|MsD_XNDe|*pTMgpjzvw=?kGV(pN#GTrA9y49iZT;`5O(|eEDPG3iVmO? z*a5scF?%6rUU-w%qNPMyp;T%@h}8T=VlCEMk|aS553*>_hs0NgK!`7~b_Z}17z4)L z+Gzoa46>oTH8S9)gR>jo!t^bpUW=*KYR+Qn&T91(nN7Y97U6L6cK5iwAi8Kb0cGB!y=0KXg^bag#_{?Z{RFv(kSyqs7 z9iNr_R)J7%ML!8w&%BNQF+LZo|zkOI-34skn#=bzO=xMyU}PZs^QDLQ>~MP>uK z{X)1uMG!uWb-tnmIE*K!b4W*Xo0edT-$Ny_MDT>Q#V1<1WB6-WhAfm9$BNCi@XR3H^d1yX@jAQeajQh`(;6-WhAfm9$BNCi@XR3H^d z1yX_hPe6pQGX?Q=Vt1?9sX*=pK;SBq1>dN!(U=nA>Uj@qm*~-9WBjR2G*@q?*|!`O#i?v3oSMcM z;^H7`|8DBpl+-)_WbI2ksm*F|{J?n+q&+plZeJg2&>~W`W*w-rdecgd|F(^*!_RW( zA`(k??@z4RypuT#t}}k~EZ=;5j8w_l^w)~ov93Q9Qs;wR92{ls%ctm`f0&6|&}z=Y zn2yqOO2`ILe39M(iCr3zHjj1w{E!<*Zt&VFvy=58Qy^Bej zidIu%jlv{g+j<|1R3K!6jtnYFh-xk3dW&1v&hh={C%G}2Wuir1!HIBk^qEPGA6zw? zrH?P7t7jfccR1lve%BPzAY~KFIAhmG7(94^!#`gmFEuXIvxeJcw!Qlgv;f8FLk&(J zy23vfUz;Kb$m`HTm~c>EM6uLSzH9a_3%AVFT$j|T*I c;a?X12B;sL!>*1thyVZp07*qoM6N<$g4s^JLI3~& literal 0 HcmV?d00001 diff --git a/Resources/Images/textfield.png b/Resources/Images/textfield.png new file mode 100644 index 0000000000000000000000000000000000000000..05f8940c6a50d860d8a6377f8b04227eaef2bef0 GIT binary patch literal 584 zcmV-O0=NB%P)2^)=!F2t=EKu|t|{N{s{Rb_f% zgl>~&!6coUscK%oe)QD52mol0H3dnU#}UJ_BZg`3;(Y<{he^{0ikK_lh^asbfPfO& zlPho@s?cb*;iJ>T*aF9?0_F)Yp#q6zaANJX34_51CX*?6p3iaM4&kNNglsMk#B?c$ zb(k&Tiu{8xn8DY44tQ}4f)Ig+%+N|@OEM;-dZSG%3jn$V5a+3GSecPbSk$1;TUc;m zK7jX5k8}YkNEbnTe<29xyWKwEyyYM$7)~OPU@?dn&?0gsSd@WqUd@C-TscUGL3Ege zTsKUmu$tRR3Sm7N6Iaf}P=W;i*^Ur4lz_OJny8tm|Kh+8wNI>IqJDRJf{9cU?PKpM zxAWh_rpctE-3o*zn!@%}nqX1h3Ou2Sy@GS11G4(grq(3XI`*q!qOXZ)N}hg?Rd+T^ z-IP?HQ6&hO8p#LUr@DMQ`v;kEz0qO|G5c*T_<1s(l6xX1lcgZ3^y$6xz$S-G4S5m) z!2R_T-IL=y0nJ+qa*;2`f9%%VU%NFJQl9PB<#jnOv!KyTE^p!h=kb{gADJGG$dHX6 z)oGqgSc;p)o7=sk^jQUM)s#fU{PZY&UMZID_NcCMj{;}|#}Alpvni!~w#S*9Pv+;OpL=Sap7v|gb1uPHE<=vyKlKXh@AcgitP_^J(c_0 znH8h%f4KDJjFa*On7F3DTOy#sXSE&1_}@$KwG*2fIk zXZ!ZMH6PC7{JblF&2>Hwg?F5i9Gf<6^Zb_}aWHj}i;-*lN)uVxRE@cI%SzO^AIc`r zXztze^~az3Z7Zi!9&TGqPYlO+3^{TVxaVJMP?^NFRf&7dvv3%k%H&yq(Fxd?al1 z<>lwS`=leq#P)j&Tz~S0L$EZO^<~K2ihl`5%Ch;T5<`ApUsk^Rcu_XLiNTw9&Jz}1 z%;aiYH05k$cG)3E`NG;M3dxU+^@^jdbedZZRhzT7-C6zW$a(#m$!Gm{);zrPO+Q3e zZ`Fn!TYOIWABhm()_?ZjqO#Kp6D*dLA5%+-E;rHL^NAB*B jU6yP8-Nx8M`wREgTe~DWM4fG=G(4 literal 0 HcmV?d00001 diff --git a/Resources/Images/x.png b/Resources/Images/x.png new file mode 100644 index 0000000000000000000000000000000000000000..03968d77f72add6104206df073cdc2c1185a2d8f GIT binary patch literal 323 zcmV-J0lfZ+P)R8;E*}EBo4c8! zC_2&DL{DglPSJ12H&)OC>Y^hwk_k%CSG0!q(S5kUgFd5ew1r+!FNFnNjV{~`_@V>t zNAGO}qbG0~8sh^cUWUq87o6e83e_w=paSQU@e}5o~LLP+!kJm*1=x97Hxv9cq5tv^O#3V z3V0dKHGQZF*6dRmJ30Sq)H0fl(-hDwoTh{};^aVi^}btia-h6rj;%O3&`H?mCY&5- ze8{MA3irKz=ZU1nuPB@}Z5)Fdyvy(b`tqK=3jBk=kHTZcUInf}b8tov(O6cs;6o=` zhySDeVm6u>g=eN4^v$=RMl{8*(L(qUW10LDU;x0thp}b7cufER002ovPDHLkV1jhu B$+iFh literal 0 HcmV?d00001 diff --git a/Vendor/CheddarKit b/Vendor/CheddarKit new file mode 160000 index 0000000..4552e9f --- /dev/null +++ b/Vendor/CheddarKit @@ -0,0 +1 @@ +Subproject commit 4552e9f02ab9b34de5d1b4a3ff35042e5db64937 diff --git a/Vendor/Crashlytics.framework/Crashlytics b/Vendor/Crashlytics.framework/Crashlytics new file mode 120000 index 0000000..7074275 --- /dev/null +++ b/Vendor/Crashlytics.framework/Crashlytics @@ -0,0 +1 @@ +Versions/Current/Crashlytics \ No newline at end of file diff --git a/Vendor/Crashlytics.framework/Headers b/Vendor/Crashlytics.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/Vendor/Crashlytics.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/Vendor/Crashlytics.framework/Resources b/Vendor/Crashlytics.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Vendor/Crashlytics.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Vendor/Crashlytics.framework/Versions/A/Crashlytics b/Vendor/Crashlytics.framework/Versions/A/Crashlytics new file mode 100644 index 0000000000000000000000000000000000000000..73274b61cdf1a642eea4690d608e0c3196d31277 GIT binary patch literal 698858 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�TC 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�Q4 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¬&iWTpy$lBMuax-^{ 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