diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..1a9ee472 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index cc66daab..d93c5054 100755 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,8 @@ xcuserdata *.moved-aside *.xcuserstate *.xcscmblueprint -*.xcscheme +.DS_Store +##*.xcscheme ## Obj-C/Swift specific *.hmap @@ -34,14 +35,14 @@ xcuserdata # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # -Pods/ +Pods/* # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts -Carthage/Build +Carthage/* # fastlane # @@ -50,5 +51,54 @@ Carthage/Build # For more information about the recommended setup visit: # https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md -fastlane/report.xml -fastlane/screenshots \ No newline at end of file +fastlane/* + +.idea/* + +cmake-build-*/ +.idea/**/mongoSettings.xml +*.iws +out/ +.idea_modules/ +atlassian-ide-plugin.xml +.idea/replstate.xml +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties +xcuserdata/ +*.xcscmblueprint +*.xccheckout +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.hmap +*.ipa +*.dSYM.zip +*.dSYM +iOSInjectionProject/ +xcuserdata/ +*.xcscmblueprint +*.xccheckout +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +*.hmap +*.ipa +*.dSYM.zip +*.dSYM +timeline.xctimeline +playground.xcworkspace +.accio/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..5c98b428 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/Calendar.iml b/.idea/Calendar.iml new file mode 100644 index 00000000..74121dcb --- /dev/null +++ b/.idea/Calendar.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..a2a42357 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/UniversalCalendar.xml b/.idea/runConfigurations/UniversalCalendar.xml new file mode 100644 index 00000000..0802ef6e --- /dev/null +++ b/.idea/runConfigurations/UniversalCalendar.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/xcode.xml b/.idea/xcode.xml new file mode 100644 index 00000000..518b0cac --- /dev/null +++ b/.idea/xcode.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 585dc798..7940b6f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # CHANGELOG +## v. 3.0 +- Drop EventKit/EventKitUI Dependencies. +- Drop MonthPlannerEKViewController/DayPlannerEKViewController. +- Support Carthage. +- Support Mac Catalyst. +- Deployment target is now iOS 11.0 + ## v. 2.0 - Deployment target is now iOS 8.0 diff --git a/Calendar.xcodeproj/project.pbxproj b/Calendar.xcodeproj/project.pbxproj old mode 100755 new mode 100644 index cf96f263..8dadf758 --- a/Calendar.xcodeproj/project.pbxproj +++ b/Calendar.xcodeproj/project.pbxproj @@ -7,14 +7,16 @@ objects = { /* Begin PBXBuildFile section */ + 19290194C082371F9D97B3DF /* WeekViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19290C2D82B4D6236BB822BA /* WeekViewController.swift */; }; + 1929092530FF5A55803D2505 /* MonthViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19290FFD11D912E695FEDDCA /* MonthViewController.swift */; }; + 19290AB66D0A8FF66FBB260B /* DayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192904E8074D812872DD4926 /* DayViewController.swift */; }; + 270216F224FAC05400022A24 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F3180D73E0004ADB86 /* CoreGraphics.framework */; }; 720041BA1879B2B600F3C497 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 720041B91879B2B600F3C497 /* Settings.bundle */; }; - 721CA1B41A9382990083F41A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 721CA1B21A9382990083F41A /* Localizable.strings */; }; 721DC18918219C4D00F9470C /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 721DC18818219C4D00F9470C /* MainViewController.m */; }; 7258E8B11A5A98DD007F88AF /* WeekSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7258E8B01A5A98DD007F88AF /* WeekSettingsViewController.m */; }; 72734BB71B32E93800B2BA49 /* main-iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 72734BB61B32E93800B2BA49 /* main-iPhone.storyboard */; }; 7275C4A01C46E87B0036C9A3 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7275C49F1C46E87B0036C9A3 /* Launch Screen.storyboard */; }; 72B5D8F2180D73E0004ADB86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F1180D73E0004ADB86 /* Foundation.framework */; }; - 72B5D8F4180D73E0004ADB86 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F3180D73E0004ADB86 /* CoreGraphics.framework */; }; 72B5D8F6180D73E0004ADB86 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F5180D73E0004ADB86 /* UIKit.framework */; }; 72B5D8FC180D73E0004ADB86 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 72B5D8FA180D73E0004ADB86 /* InfoPlist.strings */; }; 72B5D8FE180D73E0004ADB86 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 72B5D8FD180D73E0004ADB86 /* main.m */; }; @@ -25,20 +27,93 @@ 72B5D90D180D73E0004ADB86 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F5180D73E0004ADB86 /* UIKit.framework */; }; 72B5D915180D73E0004ADB86 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 72B5D913180D73E0004ADB86 /* InfoPlist.strings */; }; 72B5D917180D73E0004ADB86 /* CalendarTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 72B5D916180D73E0004ADB86 /* CalendarTests.m */; }; - 72B5D922180D73F3004ADB86 /* EventKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D920180D73F3004ADB86 /* EventKit.framework */; }; - 72B5D923180D73F3004ADB86 /* EventKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D921180D73F3004ADB86 /* EventKitUI.framework */; }; 72B5D928180D7476004ADB86 /* main-iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 72B5D927180D7476004ADB86 /* main-iPad.storyboard */; }; 72E9B9161C919EF20070EDD3 /* settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 72E9B9151C919EF20070EDD3 /* settings.storyboard */; }; 72E9B9191C91E3520070EDD3 /* MonthSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 72E9B9181C91E3520070EDD3 /* MonthSettingsViewController.m */; }; - 72EF07FF1A3D9DF8005699CA /* WeekViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 72EF07FE1A3D9DF8005699CA /* WeekViewController.m */; }; - 72EF08151A3DB8C6005699CA /* MonthViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 72EF080C1A3DB8C6005699CA /* MonthViewController.m */; }; 72EF08181A3DB8C6005699CA /* YearViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 72EF080E1A3DB8C6005699CA /* YearViewController.m */; }; - 96A3FD1C9E6707E46CB36A87 /* Pods_CalendarDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F06A59852B476A0AA324A957 /* Pods_CalendarDemo.framework */; }; - BC32A4601D30FED600AB19D7 /* DayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC32A45F1D30FED600AB19D7 /* DayViewController.m */; }; - BC32A4681D3101BB00AB19D7 /* MGCCalendarHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC32A4671D3101BB00AB19D7 /* MGCCalendarHeaderCell.xib */; }; + CA15378724065AA6000A14C7 /* UniversalCalendar.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15378524065AA6000A14C7 /* UniversalCalendar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537D924065AE2000A14C7 /* MGCDayPlannerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15378B24065AD8000A14C7 /* MGCDayPlannerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537DA24065AE2000A14C7 /* MGCYearCalendarMonthHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15378C24065AD8000A14C7 /* MGCYearCalendarMonthHeaderView.h */; }; + CA1537DB24065AE2000A14C7 /* MGCAlignedGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15378D24065AD9000A14C7 /* MGCAlignedGeometry.h */; }; + CA1537DC24065AE2000A14C7 /* MGCAllDayEventsViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15378E24065AD9000A14C7 /* MGCAllDayEventsViewLayout.h */; }; + CA1537DD24065AE2000A14C7 /* MGCMonthPlannerViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15378F24065AD9000A14C7 /* MGCMonthPlannerViewLayout.h */; }; + CA1537DE24065AE2000A14C7 /* MGCCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379024065AD9000A14C7 /* MGCCalendarHeaderView.m */; }; + CA1537DF24065AE2000A14C7 /* MGCMonthPlannerWeekView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379124065AD9000A14C7 /* MGCMonthPlannerWeekView.m */; }; + CA1537E024065AE2000A14C7 /* MGCMonthPlannerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15379224065AD9000A14C7 /* MGCMonthPlannerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537E124065AE2000A14C7 /* OSCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379324065AD9000A14C7 /* OSCache.m */; }; + CA1537E224065AE2000A14C7 /* MGCYearCalendarMonthHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379424065AD9000A14C7 /* MGCYearCalendarMonthHeaderView.m */; }; + CA1537E324065AE2000A14C7 /* MGCAllDayEventsViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379524065AD9000A14C7 /* MGCAllDayEventsViewLayout.m */; }; + CA1537E424065AE2000A14C7 /* MGCMonthPlannerHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379624065AD9000A14C7 /* MGCMonthPlannerHeaderView.m */; }; + CA1537E524065AE2000A14C7 /* MGCMonthPlannerHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15379724065AD9000A14C7 /* MGCMonthPlannerHeaderView.h */; }; + CA1537E624065AE2000A14C7 /* MGCMonthPlannerView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15379824065AD9000A14C7 /* MGCMonthPlannerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537E724065AE2000A14C7 /* MGCStandardEventView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379924065AD9000A14C7 /* MGCStandardEventView.m */; }; + CA1537E824065AE2000A14C7 /* MGCMonthPlannerWeekView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15379A24065AD9000A14C7 /* MGCMonthPlannerWeekView.h */; }; + CA1537E924065AE2000A14C7 /* MGCYearCalendarMonthCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15379B24065AD9000A14C7 /* MGCYearCalendarMonthCell.h */; }; + CA1537EA24065AE2000A14C7 /* MGCEventsRowView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379C24065ADA000A14C7 /* MGCEventsRowView.m */; }; + CA1537EB24065AE2000A14C7 /* MGCMonthPlannerViewDayCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379D24065ADA000A14C7 /* MGCMonthPlannerViewDayCell.m */; }; + CA1537EC24065AE2000A14C7 /* MGCMonthPlannerBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA15379E24065ADA000A14C7 /* MGCMonthPlannerBackgroundView.h */; }; + CA1537ED24065AE2000A14C7 /* MGCDayPlannerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA15379F24065ADA000A14C7 /* MGCDayPlannerViewController.m */; }; + CA1537EE24065AE2000A14C7 /* Constant.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537A024065ADA000A14C7 /* Constant.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537F024065AE2000A14C7 /* MGCMonthPlannerViewDayCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537A224065ADA000A14C7 /* MGCMonthPlannerViewDayCell.h */; }; + CA1537F124065AE2000A14C7 /* MGCTimeRowsView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537A324065ADA000A14C7 /* MGCTimeRowsView.m */; }; + CA1537F224065AE2000A14C7 /* MGCYearCalendarMonthCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537A424065ADA000A14C7 /* MGCYearCalendarMonthCell.m */; }; + CA1537F324065AE2000A14C7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CA1537A624065ADA000A14C7 /* Localizable.strings */; }; + CA1537F424065AE2000A14C7 /* MGCDayPlannerView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537A824065ADA000A14C7 /* MGCDayPlannerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537F524065AE2000A14C7 /* NSAttributedString+MGCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537A924065ADB000A14C7 /* NSAttributedString+MGCAdditions.m */; }; + CA1537F624065AE2000A14C7 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = CA1537AB24065ADB000A14C7 /* Localizable.strings */; }; + CA1537F724065AE2000A14C7 /* MGCAlignedGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537AD24065ADB000A14C7 /* MGCAlignedGeometry.m */; }; + CA1537F824065AE2000A14C7 /* MGCInteractiveEventView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537AE24065ADB000A14C7 /* MGCInteractiveEventView.m */; }; + CA1537F924065AE2000A14C7 /* MGCDayColumnCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537AF24065ADB000A14C7 /* MGCDayColumnCell.h */; }; + CA1537FA24065AE2000A14C7 /* MGCMonthPlannerViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537B024065ADC000A14C7 /* MGCMonthPlannerViewLayout.m */; }; + CA1537FB24065AE2000A14C7 /* MGCMonthPlannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537B124065ADC000A14C7 /* MGCMonthPlannerView.m */; }; + CA1537FC24065AE2000A14C7 /* MGCInteractiveEventView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537B224065ADC000A14C7 /* MGCInteractiveEventView.h */; }; + CA1537FD24065AE2000A14C7 /* MGCDateRange.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537B324065ADC000A14C7 /* MGCDateRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1537FE24065AE2000A14C7 /* NSCalendar+MGCAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537B424065ADC000A14C7 /* NSCalendar+MGCAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15380024065AE2000A14C7 /* MGCMonthPlannerBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537B624065ADD000A14C7 /* MGCMonthPlannerBackgroundView.m */; }; + CA15380124065AE2000A14C7 /* MGCTimedEventsViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537B724065ADD000A14C7 /* MGCTimedEventsViewLayout.h */; }; + CA15380324065AE2000A14C7 /* MGCEventCellLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537B924065ADE000A14C7 /* MGCEventCellLayoutAttributes.h */; }; + CA15380424065AE2000A14C7 /* MGCEventCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537BA24065ADE000A14C7 /* MGCEventCell.h */; }; + CA15380524065AE2000A14C7 /* MGCStandardEventView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537BB24065ADE000A14C7 /* MGCStandardEventView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15380624065AE2000A14C7 /* MGCEventKitSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537BC24065ADE000A14C7 /* MGCEventKitSupport.h */; }; + CA15380724065AE2000A14C7 /* NSAttributedString+MGCAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537BD24065ADE000A14C7 /* NSAttributedString+MGCAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15380824065AE2000A14C7 /* MGCDayColumnCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537BE24065ADE000A14C7 /* MGCDayColumnCell.m */; }; + CA15380924065AE2000A14C7 /* MGCEventCellLayoutAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537BF24065ADF000A14C7 /* MGCEventCellLayoutAttributes.m */; }; + CA15380A24065AE2000A14C7 /* NSCalendar+MGCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537C024065ADF000A14C7 /* NSCalendar+MGCAdditions.m */; }; + CA15380B24065AE2000A14C7 /* MGCEventCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537C124065ADF000A14C7 /* MGCEventCell.m */; }; + CA15380C24065AE2000A14C7 /* MGCReusableObjectQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537C224065ADF000A14C7 /* MGCReusableObjectQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15380D24065AE2000A14C7 /* MGCReusableObjectQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537C324065ADF000A14C7 /* MGCReusableObjectQueue.m */; }; + CA15380F24065AE2000A14C7 /* MGCYearCalendarView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537C524065ADF000A14C7 /* MGCYearCalendarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15381024065AE2000A14C7 /* MGCTimeRowsView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537C624065AE0000A14C7 /* MGCTimeRowsView.h */; }; + CA15381124065AE2000A14C7 /* OSCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537C724065AE0000A14C7 /* OSCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15381224065AE2000A14C7 /* MGCCalendarHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537C824065AE0000A14C7 /* MGCCalendarHeaderView.h */; }; + CA15381324065AE2000A14C7 /* MGCYearCalendarView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537C924065AE0000A14C7 /* MGCYearCalendarView.m */; }; + CA15381424065AE2000A14C7 /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537CA24065AE0000A14C7 /* OrderedDictionary.m */; }; + CA15381524065AE2000A14C7 /* MGCEventView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537CB24065AE0000A14C7 /* MGCEventView.m */; }; + CA15381624065AE2000A14C7 /* MGCMonthMiniCalendarView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537CC24065AE0000A14C7 /* MGCMonthMiniCalendarView.m */; }; + CA15381724065AE2000A14C7 /* MGCTimedEventsViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537CD24065AE1000A14C7 /* MGCTimedEventsViewLayout.m */; }; + CA15381824065AE2000A14C7 /* MGCMonthPlannerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537CE24065AE1000A14C7 /* MGCMonthPlannerViewController.m */; }; + CA15381924065AE2000A14C7 /* MGCEventKitSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537CF24065AE1000A14C7 /* MGCEventKitSupport.m */; }; + CA15381A24065AE2000A14C7 /* MGCCalendarHeaderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537D024065AE1000A14C7 /* MGCCalendarHeaderCell.m */; }; + CA15381B24065AE2000A14C7 /* OrderedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537D124065AE1000A14C7 /* OrderedDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15381C24065AE2000A14C7 /* MGCCalendarHeaderCell.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537D224065AE1000A14C7 /* MGCCalendarHeaderCell.h */; }; + CA15381D24065AE2000A14C7 /* MGCEventView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537D324065AE2000A14C7 /* MGCEventView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15381E24065AE2000A14C7 /* MGCEventsRowView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537D424065AE2000A14C7 /* MGCEventsRowView.h */; }; + CA15382024065AE2000A14C7 /* MGCMonthMiniCalendarView.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1537D624065AE2000A14C7 /* MGCMonthMiniCalendarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA15382124065AE2000A14C7 /* MGCDateRange.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537D724065AE2000A14C7 /* MGCDateRange.m */; }; + CA15382224065AE2000A14C7 /* MGCDayPlannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1537D824065AE2000A14C7 /* MGCDayPlannerView.m */; }; + CA15382524065C80000A14C7 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F3180D73E0004ADB86 /* CoreGraphics.framework */; }; + CA15382624065C88000A14C7 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F5180D73E0004ADB86 /* UIKit.framework */; }; + CA15382724065C91000A14C7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72B5D8F1180D73E0004ADB86 /* Foundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 270216F324FAC06B00022A24 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 72B5D8E6180D73E0004ADB86 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CA15378224065AA6000A14C7; + remoteInfo = UniversalCalendar; + }; 72B5D90E180D73E0004ADB86 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72B5D8E6180D73E0004ADB86 /* Project object */; @@ -49,62 +124,23 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 072E5EFE1C338559007711A0 /* Constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constant.h; sourceTree = ""; }; - 1F0C1F1B722A7E607C88C0FE /* Pods-CalendarDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CalendarDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CalendarDemo/Pods-CalendarDemo.debug.xcconfig"; sourceTree = ""; }; - 28486480EAA57CF147A3825F /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 192904E8074D812872DD4926 /* DayViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DayViewController.swift; sourceTree = ""; }; + 19290C2D82B4D6236BB822BA /* WeekViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeekViewController.swift; sourceTree = ""; }; + 19290C8C215F90F0DF0256D5 /* CalendarDemo-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CalendarDemo-Bridging-Header.h"; sourceTree = ""; }; + 19290FFD11D912E695FEDDCA /* MonthViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MonthViewController.swift; sourceTree = ""; }; + 27CD957524FB5D7A000C5A97 /* CalendarDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = CalendarDemo.entitlements; path = CalendarDemo/CalendarDemo.entitlements; sourceTree = ""; }; 720041B91879B2B600F3C497 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = ""; }; - 720DAE511C6269D900DF8AAA /* NSAttributedString+MGCAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+MGCAdditions.h"; sourceTree = ""; }; - 720DAE521C6269D900DF8AAA /* NSAttributedString+MGCAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+MGCAdditions.m"; sourceTree = ""; }; - 720DAE541C66531300DF8AAA /* MGCEventKitSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventKitSupport.m; sourceTree = ""; }; - 720DAE561C66534A00DF8AAA /* MGCEventKitSupport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGCEventKitSupport.h; sourceTree = ""; }; 721A12A11CB585CF00749F18 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; - 721CA1B31A9382990083F41A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 721CA1B51A9382A80083F41A /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 721DC18718219C4D00F9470C /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; 721DC18818219C4D00F9470C /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; - 72271A501815C33600DE96FE /* MGCDateRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDateRange.h; sourceTree = ""; }; - 72271A511815C33600DE96FE /* MGCDateRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDateRange.m; sourceTree = ""; }; - 722A55F71892B58B0097B8FB /* MGCMonthPlannerViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewLayout.h; sourceTree = ""; }; - 722A55F81892B58B0097B8FB /* MGCMonthPlannerViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewLayout.m; sourceTree = ""; }; 722ABE331CB19BAC00713ED3 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 722ABE391CB19C6600713ED3 /* CalendarLib.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = CalendarLib.podspec; sourceTree = ""; }; - 7233530F18397DD90079B240 /* MGCEventCellLayoutAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventCellLayoutAttributes.h; sourceTree = ""; }; - 7233531018397DD90079B240 /* MGCEventCellLayoutAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventCellLayoutAttributes.m; sourceTree = ""; }; 723925AF188B0AE800DE9578 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 723A2BAB181449F500834697 /* NSCalendar+MGCAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCalendar+MGCAdditions.h"; sourceTree = ""; }; - 723A2BAC181449F500834697 /* NSCalendar+MGCAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCalendar+MGCAdditions.m"; sourceTree = ""; }; - 7248240C18D352AE0067D0D7 /* MGCYearCalendarMonthCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarMonthCell.h; sourceTree = ""; }; - 7248240D18D352AE0067D0D7 /* MGCYearCalendarMonthCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarMonthCell.m; sourceTree = ""; }; - 7248241118D355D10067D0D7 /* MGCYearCalendarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarView.h; sourceTree = ""; }; - 7248241218D355D10067D0D7 /* MGCYearCalendarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarView.m; sourceTree = ""; }; - 7248241618D36DFE0067D0D7 /* MGCYearCalendarMonthHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarMonthHeaderView.h; sourceTree = ""; }; - 7248241718D36DFE0067D0D7 /* MGCYearCalendarMonthHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarMonthHeaderView.m; sourceTree = ""; }; - 724E03C4183F8F6A00490FC5 /* MGCDayColumnCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayColumnCell.h; sourceTree = ""; }; - 724E03C5183F8F6A00490FC5 /* MGCDayColumnCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayColumnCell.m; sourceTree = ""; }; 7258E8AF1A5A98DD007F88AF /* WeekSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeekSettingsViewController.h; sourceTree = ""; }; 7258E8B01A5A98DD007F88AF /* WeekSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WeekSettingsViewController.m; sourceTree = ""; }; 726C2037182D6F66004AEE13 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; 726C2038182D6F66004AEE13 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - 72707CDB18858F9600830A8E /* MGCMonthPlannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerView.h; sourceTree = ""; }; - 72707CDC18858F9600830A8E /* MGCMonthPlannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerView.m; sourceTree = ""; }; - 72707CE0188592AC00830A8E /* MGCMonthPlannerViewDayCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewDayCell.h; sourceTree = ""; }; - 72707CE1188592AC00830A8E /* MGCMonthPlannerViewDayCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewDayCell.m; sourceTree = ""; }; 72734BB61B32E93800B2BA49 /* main-iPhone.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "main-iPhone.storyboard"; sourceTree = ""; }; 7275C49F1C46E87B0036C9A3 /* Launch Screen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; - 72780F8F1CB6D0DF00CA5513 /* MGCAlignedGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCAlignedGeometry.h; sourceTree = ""; }; - 72780F901CB6D0DF00CA5513 /* MGCAlignedGeometry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCAlignedGeometry.m; sourceTree = ""; }; - 727A94B018F3B9C300260D6E /* MGCEventsRowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventsRowView.h; sourceTree = ""; }; - 727A94B118F3B9C300260D6E /* MGCEventsRowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventsRowView.m; sourceTree = ""; }; - 727A94B618F3D28F00260D6E /* MGCEventView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventView.h; sourceTree = ""; }; - 727A94B718F3D28F00260D6E /* MGCEventView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventView.m; sourceTree = ""; }; - 727A94BB18F3D2E000260D6E /* MGCStandardEventView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCStandardEventView.h; sourceTree = ""; }; - 727A94BC18F3D2E000260D6E /* MGCStandardEventView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCStandardEventView.m; sourceTree = ""; }; - 728438151A3A308900477A5C /* MGCAllDayEventsViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCAllDayEventsViewLayout.h; sourceTree = ""; }; - 728438161A3A308900477A5C /* MGCAllDayEventsViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCAllDayEventsViewLayout.m; sourceTree = ""; }; - 7290307C1A5031EF008C58D3 /* MGCTimeRowsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCTimeRowsView.h; sourceTree = ""; }; - 7290307D1A5031EF008C58D3 /* MGCTimeRowsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCTimeRowsView.m; sourceTree = ""; }; - 72AE50281A641419004DAF44 /* MGCInteractiveEventView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCInteractiveEventView.h; sourceTree = ""; }; - 72AE50291A641419004DAF44 /* MGCInteractiveEventView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCInteractiveEventView.m; sourceTree = ""; }; 72B5D8EE180D73E0004ADB86 /* CalendarDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CalendarDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 72B5D8F1180D73E0004ADB86 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 72B5D8F3180D73E0004ADB86 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -121,51 +157,85 @@ 72B5D912180D73E0004ADB86 /* CalendarTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CalendarTests-Info.plist"; sourceTree = ""; }; 72B5D914180D73E0004ADB86 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 72B5D916180D73E0004ADB86 /* CalendarTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CalendarTests.m; sourceTree = ""; }; - 72B5D920180D73F3004ADB86 /* EventKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKit.framework; path = System/Library/Frameworks/EventKit.framework; sourceTree = SDKROOT; }; - 72B5D921180D73F3004ADB86 /* EventKitUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKitUI.framework; path = System/Library/Frameworks/EventKitUI.framework; sourceTree = SDKROOT; }; 72B5D927180D7476004ADB86 /* main-iPad.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = "main-iPad.storyboard"; sourceTree = ""; }; - 72B5D92C180D7840004ADB86 /* MGCEventCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventCell.h; sourceTree = ""; }; - 72B5D92D180D7840004ADB86 /* MGCEventCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventCell.m; sourceTree = ""; }; - 72B5D951180D9A93004ADB86 /* MGCTimedEventsViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCTimedEventsViewLayout.h; sourceTree = ""; }; - 72B5D952180D9A93004ADB86 /* MGCTimedEventsViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCTimedEventsViewLayout.m; sourceTree = ""; }; - 72DD627418155AAD00D270DB /* MGCDayPlannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerView.h; sourceTree = ""; }; - 72DD627518155AAD00D270DB /* MGCDayPlannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerView.m; sourceTree = ""; }; - 72E13E8D18EDA1A200F1D740 /* MGCMonthPlannerBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerBackgroundView.h; sourceTree = ""; }; - 72E13E8E18EDA1A200F1D740 /* MGCMonthPlannerBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerBackgroundView.m; sourceTree = ""; }; - 72E13E9318EE0D7A00F1D740 /* MGCMonthPlannerWeekView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerWeekView.h; sourceTree = ""; }; - 72E13E9418EE0D7A00F1D740 /* MGCMonthPlannerWeekView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerWeekView.m; sourceTree = ""; }; - 72E82BBB1A80E197008B3E2F /* MGCDayPlannerEKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerEKViewController.h; sourceTree = ""; }; - 72E82BBC1A80E197008B3E2F /* MGCDayPlannerEKViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerEKViewController.m; sourceTree = ""; }; - 72E82BC91A83A3FF008B3E2F /* MGCMonthPlannerEKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerEKViewController.h; sourceTree = ""; }; - 72E82BCA1A83A3FF008B3E2F /* MGCMonthPlannerEKViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerEKViewController.m; sourceTree = ""; }; - 72E8D24D18F98F1C00024582 /* MGCMonthMiniCalendarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthMiniCalendarView.h; sourceTree = ""; }; - 72E8D24E18F98F1C00024582 /* MGCMonthMiniCalendarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthMiniCalendarView.m; sourceTree = ""; }; - 72E8D25718FC474500024582 /* MGCReusableObjectQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCReusableObjectQueue.h; sourceTree = ""; }; - 72E8D25818FC474500024582 /* MGCReusableObjectQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCReusableObjectQueue.m; sourceTree = ""; }; - 72E9B90E1C8E34020070EDD3 /* MGCMonthPlannerHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerHeaderView.h; sourceTree = ""; }; - 72E9B90F1C8E34020070EDD3 /* MGCMonthPlannerHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerHeaderView.m; sourceTree = ""; }; 72E9B9151C919EF20070EDD3 /* settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = settings.storyboard; sourceTree = ""; }; 72E9B9171C91E3520070EDD3 /* MonthSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MonthSettingsViewController.h; sourceTree = ""; }; 72E9B9181C91E3520070EDD3 /* MonthSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MonthSettingsViewController.m; sourceTree = ""; }; - 72EF07F21A3D8D13005699CA /* MGCDayPlannerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerViewController.h; sourceTree = ""; }; - 72EF07F31A3D8D13005699CA /* MGCDayPlannerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerViewController.m; sourceTree = ""; }; - 72EF07FD1A3D9DF8005699CA /* WeekViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeekViewController.h; sourceTree = ""; }; - 72EF07FE1A3D9DF8005699CA /* WeekViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WeekViewController.m; sourceTree = ""; }; - 72EF08031A3DA597005699CA /* MGCMonthPlannerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewController.h; sourceTree = ""; }; - 72EF08041A3DA597005699CA /* MGCMonthPlannerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewController.m; sourceTree = ""; }; - 72EF080B1A3DB8C6005699CA /* MonthViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MonthViewController.h; sourceTree = ""; }; - 72EF080C1A3DB8C6005699CA /* MonthViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MonthViewController.m; sourceTree = ""; }; 72EF080D1A3DB8C6005699CA /* YearViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YearViewController.h; sourceTree = ""; }; 72EF080E1A3DB8C6005699CA /* YearViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YearViewController.m; sourceTree = ""; }; - BC32A45E1D30FED500AB19D7 /* DayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DayViewController.h; sourceTree = ""; }; - BC32A45F1D30FED600AB19D7 /* DayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DayViewController.m; sourceTree = ""; }; - BC32A4611D31003C00AB19D7 /* MGCCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCCalendarHeaderView.h; sourceTree = ""; }; - BC32A4621D31003C00AB19D7 /* MGCCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCCalendarHeaderView.m; sourceTree = ""; }; - BC32A4641D3100D600AB19D7 /* MGCCalendarHeaderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCCalendarHeaderCell.h; sourceTree = ""; }; - BC32A4651D3100D600AB19D7 /* MGCCalendarHeaderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCCalendarHeaderCell.m; sourceTree = ""; }; - BC32A4671D3101BB00AB19D7 /* MGCCalendarHeaderCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MGCCalendarHeaderCell.xib; sourceTree = ""; }; - EA537021B8BB04EA0A609FA9 /* Pods-CalendarDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CalendarDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-CalendarDemo/Pods-CalendarDemo.release.xcconfig"; sourceTree = ""; }; - F06A59852B476A0AA324A957 /* Pods_CalendarDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CalendarDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CA15378324065AA6000A14C7 /* UniversalCalendar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UniversalCalendar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CA15378524065AA6000A14C7 /* UniversalCalendar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UniversalCalendar.h; sourceTree = ""; }; + CA15378624065AA6000A14C7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CA15378B24065AD8000A14C7 /* MGCDayPlannerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerViewController.h; sourceTree = ""; }; + CA15378C24065AD8000A14C7 /* MGCYearCalendarMonthHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarMonthHeaderView.h; sourceTree = ""; }; + CA15378D24065AD9000A14C7 /* MGCAlignedGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCAlignedGeometry.h; sourceTree = ""; }; + CA15378E24065AD9000A14C7 /* MGCAllDayEventsViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCAllDayEventsViewLayout.h; sourceTree = ""; }; + CA15378F24065AD9000A14C7 /* MGCMonthPlannerViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewLayout.h; sourceTree = ""; }; + CA15379024065AD9000A14C7 /* MGCCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCCalendarHeaderView.m; sourceTree = ""; }; + CA15379124065AD9000A14C7 /* MGCMonthPlannerWeekView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerWeekView.m; sourceTree = ""; }; + CA15379224065AD9000A14C7 /* MGCMonthPlannerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewController.h; sourceTree = ""; }; + CA15379324065AD9000A14C7 /* OSCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OSCache.m; sourceTree = ""; }; + CA15379424065AD9000A14C7 /* MGCYearCalendarMonthHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarMonthHeaderView.m; sourceTree = ""; }; + CA15379524065AD9000A14C7 /* MGCAllDayEventsViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCAllDayEventsViewLayout.m; sourceTree = ""; }; + CA15379624065AD9000A14C7 /* MGCMonthPlannerHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerHeaderView.m; sourceTree = ""; }; + CA15379724065AD9000A14C7 /* MGCMonthPlannerHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerHeaderView.h; sourceTree = ""; }; + CA15379824065AD9000A14C7 /* MGCMonthPlannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerView.h; sourceTree = ""; }; + CA15379924065AD9000A14C7 /* MGCStandardEventView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCStandardEventView.m; sourceTree = ""; }; + CA15379A24065AD9000A14C7 /* MGCMonthPlannerWeekView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerWeekView.h; sourceTree = ""; }; + CA15379B24065AD9000A14C7 /* MGCYearCalendarMonthCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarMonthCell.h; sourceTree = ""; }; + CA15379C24065ADA000A14C7 /* MGCEventsRowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventsRowView.m; sourceTree = ""; }; + CA15379D24065ADA000A14C7 /* MGCMonthPlannerViewDayCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewDayCell.m; sourceTree = ""; }; + CA15379E24065ADA000A14C7 /* MGCMonthPlannerBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerBackgroundView.h; sourceTree = ""; }; + CA15379F24065ADA000A14C7 /* MGCDayPlannerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerViewController.m; sourceTree = ""; }; + CA1537A024065ADA000A14C7 /* Constant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constant.h; sourceTree = ""; }; + CA1537A124065ADA000A14C7 /* MGCCalendarHeaderCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MGCCalendarHeaderCell.xib; sourceTree = ""; }; + CA1537A224065ADA000A14C7 /* MGCMonthPlannerViewDayCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewDayCell.h; sourceTree = ""; }; + CA1537A324065ADA000A14C7 /* MGCTimeRowsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCTimeRowsView.m; sourceTree = ""; }; + CA1537A424065ADA000A14C7 /* MGCYearCalendarMonthCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarMonthCell.m; sourceTree = ""; }; + CA1537A724065ADA000A14C7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Localizable.strings; sourceTree = ""; }; + CA1537A824065ADA000A14C7 /* MGCDayPlannerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerView.h; sourceTree = ""; }; + CA1537A924065ADB000A14C7 /* NSAttributedString+MGCAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+MGCAdditions.m"; sourceTree = ""; }; + CA1537AC24065ADB000A14C7 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localizable.strings; sourceTree = ""; }; + CA1537AD24065ADB000A14C7 /* MGCAlignedGeometry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCAlignedGeometry.m; sourceTree = ""; }; + CA1537AE24065ADB000A14C7 /* MGCInteractiveEventView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCInteractiveEventView.m; sourceTree = ""; }; + CA1537AF24065ADB000A14C7 /* MGCDayColumnCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDayColumnCell.h; sourceTree = ""; }; + CA1537B024065ADC000A14C7 /* MGCMonthPlannerViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewLayout.m; sourceTree = ""; }; + CA1537B124065ADC000A14C7 /* MGCMonthPlannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerView.m; sourceTree = ""; }; + CA1537B224065ADC000A14C7 /* MGCInteractiveEventView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCInteractiveEventView.h; sourceTree = ""; }; + CA1537B324065ADC000A14C7 /* MGCDateRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCDateRange.h; sourceTree = ""; }; + CA1537B424065ADC000A14C7 /* NSCalendar+MGCAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCalendar+MGCAdditions.h"; sourceTree = ""; }; + CA1537B624065ADD000A14C7 /* MGCMonthPlannerBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerBackgroundView.m; sourceTree = ""; }; + CA1537B724065ADD000A14C7 /* MGCTimedEventsViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCTimedEventsViewLayout.h; sourceTree = ""; }; + CA1537B924065ADE000A14C7 /* MGCEventCellLayoutAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventCellLayoutAttributes.h; sourceTree = ""; }; + CA1537BA24065ADE000A14C7 /* MGCEventCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventCell.h; sourceTree = ""; }; + CA1537BB24065ADE000A14C7 /* MGCStandardEventView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCStandardEventView.h; sourceTree = ""; }; + CA1537BC24065ADE000A14C7 /* MGCEventKitSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventKitSupport.h; sourceTree = ""; }; + CA1537BD24065ADE000A14C7 /* NSAttributedString+MGCAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+MGCAdditions.h"; sourceTree = ""; }; + CA1537BE24065ADE000A14C7 /* MGCDayColumnCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayColumnCell.m; sourceTree = ""; }; + CA1537BF24065ADF000A14C7 /* MGCEventCellLayoutAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventCellLayoutAttributes.m; sourceTree = ""; }; + CA1537C024065ADF000A14C7 /* NSCalendar+MGCAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCalendar+MGCAdditions.m"; sourceTree = ""; }; + CA1537C124065ADF000A14C7 /* MGCEventCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventCell.m; sourceTree = ""; }; + CA1537C224065ADF000A14C7 /* MGCReusableObjectQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCReusableObjectQueue.h; sourceTree = ""; }; + CA1537C324065ADF000A14C7 /* MGCReusableObjectQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCReusableObjectQueue.m; sourceTree = ""; }; + CA1537C524065ADF000A14C7 /* MGCYearCalendarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarView.h; sourceTree = ""; }; + CA1537C624065AE0000A14C7 /* MGCTimeRowsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCTimeRowsView.h; sourceTree = ""; }; + CA1537C724065AE0000A14C7 /* OSCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSCache.h; sourceTree = ""; }; + CA1537C824065AE0000A14C7 /* MGCCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCCalendarHeaderView.h; sourceTree = ""; }; + CA1537C924065AE0000A14C7 /* MGCYearCalendarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarView.m; sourceTree = ""; }; + CA1537CA24065AE0000A14C7 /* OrderedDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OrderedDictionary.m; sourceTree = ""; }; + CA1537CB24065AE0000A14C7 /* MGCEventView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventView.m; sourceTree = ""; }; + CA1537CC24065AE0000A14C7 /* MGCMonthMiniCalendarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthMiniCalendarView.m; sourceTree = ""; }; + CA1537CD24065AE1000A14C7 /* MGCTimedEventsViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCTimedEventsViewLayout.m; sourceTree = ""; }; + CA1537CE24065AE1000A14C7 /* MGCMonthPlannerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewController.m; sourceTree = ""; }; + CA1537CF24065AE1000A14C7 /* MGCEventKitSupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCEventKitSupport.m; sourceTree = ""; }; + CA1537D024065AE1000A14C7 /* MGCCalendarHeaderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCCalendarHeaderCell.m; sourceTree = ""; }; + CA1537D124065AE1000A14C7 /* OrderedDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderedDictionary.h; sourceTree = ""; }; + CA1537D224065AE1000A14C7 /* MGCCalendarHeaderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCCalendarHeaderCell.h; sourceTree = ""; }; + CA1537D324065AE2000A14C7 /* MGCEventView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventView.h; sourceTree = ""; }; + CA1537D424065AE2000A14C7 /* MGCEventsRowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCEventsRowView.h; sourceTree = ""; }; + CA1537D624065AE2000A14C7 /* MGCMonthMiniCalendarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCMonthMiniCalendarView.h; sourceTree = ""; }; + CA1537D724065AE2000A14C7 /* MGCDateRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDateRange.m; sourceTree = ""; }; + CA1537D824065AE2000A14C7 /* MGCDayPlannerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerView.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -173,12 +243,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 72B5D922180D73F3004ADB86 /* EventKit.framework in Frameworks */, - 72B5D923180D73F3004ADB86 /* EventKitUI.framework in Frameworks */, - 72B5D8F4180D73E0004ADB86 /* CoreGraphics.framework in Frameworks */, + 270216F224FAC05400022A24 /* CoreGraphics.framework in Frameworks */, 72B5D8F6180D73E0004ADB86 /* UIKit.framework in Frameworks */, 72B5D8F2180D73E0004ADB86 /* Foundation.framework in Frameworks */, - 96A3FD1C9E6707E46CB36A87 /* Pods_CalendarDemo.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -192,131 +259,31 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + CA15378024065AA6000A14C7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CA15382724065C91000A14C7 /* Foundation.framework in Frameworks */, + CA15382624065C88000A14C7 /* UIKit.framework in Frameworks */, + CA15382524065C80000A14C7 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 072E5EFD1C338534007711A0 /* Header&Constants */ = { - isa = PBXGroup; - children = ( - 072E5EFE1C338559007711A0 /* Constant.h */, - ); - name = "Header&Constants"; - sourceTree = ""; - }; - 723345D81A3BA75300BAE7A9 /* Events view */ = { - isa = PBXGroup; - children = ( - 727A94B618F3D28F00260D6E /* MGCEventView.h */, - 727A94B718F3D28F00260D6E /* MGCEventView.m */, - 727A94BB18F3D2E000260D6E /* MGCStandardEventView.h */, - 727A94BC18F3D2E000260D6E /* MGCStandardEventView.m */, - ); - name = "Events view"; - sourceTree = ""; - }; - 723925AB188B040200DE9578 /* EventKit */ = { - isa = PBXGroup; - children = ( - 720DAE541C66531300DF8AAA /* MGCEventKitSupport.m */, - 720DAE561C66534A00DF8AAA /* MGCEventKitSupport.h */, - 72E82BBB1A80E197008B3E2F /* MGCDayPlannerEKViewController.h */, - 72E82BBC1A80E197008B3E2F /* MGCDayPlannerEKViewController.m */, - 72E82BC91A83A3FF008B3E2F /* MGCMonthPlannerEKViewController.h */, - 72E82BCA1A83A3FF008B3E2F /* MGCMonthPlannerEKViewController.m */, - ); - name = EventKit; - sourceTree = ""; - }; - 723A2BA9181432F700834697 /* Collection view layouts */ = { - isa = PBXGroup; - children = ( - 728438151A3A308900477A5C /* MGCAllDayEventsViewLayout.h */, - 728438161A3A308900477A5C /* MGCAllDayEventsViewLayout.m */, - 72B5D951180D9A93004ADB86 /* MGCTimedEventsViewLayout.h */, - 72B5D952180D9A93004ADB86 /* MGCTimedEventsViewLayout.m */, - 7233530F18397DD90079B240 /* MGCEventCellLayoutAttributes.h */, - 7233531018397DD90079B240 /* MGCEventCellLayoutAttributes.m */, - ); - name = "Collection view layouts"; - sourceTree = ""; - }; - 723A2BAA1814331000834697 /* Collection view cells & subviews */ = { - isa = PBXGroup; - children = ( - BC32A4641D3100D600AB19D7 /* MGCCalendarHeaderCell.h */, - BC32A4651D3100D600AB19D7 /* MGCCalendarHeaderCell.m */, - BC32A4671D3101BB00AB19D7 /* MGCCalendarHeaderCell.xib */, - 724E03C4183F8F6A00490FC5 /* MGCDayColumnCell.h */, - 724E03C5183F8F6A00490FC5 /* MGCDayColumnCell.m */, - 72B5D92C180D7840004ADB86 /* MGCEventCell.h */, - 72B5D92D180D7840004ADB86 /* MGCEventCell.m */, - 7290307C1A5031EF008C58D3 /* MGCTimeRowsView.h */, - 7290307D1A5031EF008C58D3 /* MGCTimeRowsView.m */, - 72AE50281A641419004DAF44 /* MGCInteractiveEventView.h */, - 72AE50291A641419004DAF44 /* MGCInteractiveEventView.m */, - ); - name = "Collection view cells & subviews"; - sourceTree = ""; - }; - 7248240A18D351F90067D0D7 /* Year calendar */ = { - isa = PBXGroup; - children = ( - 72E8D24D18F98F1C00024582 /* MGCMonthMiniCalendarView.h */, - 72E8D24E18F98F1C00024582 /* MGCMonthMiniCalendarView.m */, - 7248240C18D352AE0067D0D7 /* MGCYearCalendarMonthCell.h */, - 7248240D18D352AE0067D0D7 /* MGCYearCalendarMonthCell.m */, - 7248241118D355D10067D0D7 /* MGCYearCalendarView.h */, - 7248241218D355D10067D0D7 /* MGCYearCalendarView.m */, - 7248241618D36DFE0067D0D7 /* MGCYearCalendarMonthHeaderView.h */, - 7248241718D36DFE0067D0D7 /* MGCYearCalendarMonthHeaderView.m */, - ); - name = "Year calendar"; - sourceTree = ""; - }; - 72707CDF1885925100830A8E /* cells */ = { - isa = PBXGroup; - children = ( - 72707CE0188592AC00830A8E /* MGCMonthPlannerViewDayCell.h */, - 72707CE1188592AC00830A8E /* MGCMonthPlannerViewDayCell.m */, - 72E13E8D18EDA1A200F1D740 /* MGCMonthPlannerBackgroundView.h */, - 72E13E8E18EDA1A200F1D740 /* MGCMonthPlannerBackgroundView.m */, - 72E13E9318EE0D7A00F1D740 /* MGCMonthPlannerWeekView.h */, - 72E13E9418EE0D7A00F1D740 /* MGCMonthPlannerWeekView.m */, - 72E9B90E1C8E34020070EDD3 /* MGCMonthPlannerHeaderView.h */, - 72E9B90F1C8E34020070EDD3 /* MGCMonthPlannerHeaderView.m */, - ); - name = cells; - sourceTree = ""; - }; - 72936D7F185671DB00635BD9 /* Month planner */ = { - isa = PBXGroup; - children = ( - 72707CDB18858F9600830A8E /* MGCMonthPlannerView.h */, - 72707CDC18858F9600830A8E /* MGCMonthPlannerView.m */, - 72EF08031A3DA597005699CA /* MGCMonthPlannerViewController.h */, - 72EF08041A3DA597005699CA /* MGCMonthPlannerViewController.m */, - 72707CDF1885925100830A8E /* cells */, - 722A55F71892B58B0097B8FB /* MGCMonthPlannerViewLayout.h */, - 722A55F81892B58B0097B8FB /* MGCMonthPlannerViewLayout.m */, - 727A94B018F3B9C300260D6E /* MGCEventsRowView.h */, - 727A94B118F3B9C300260D6E /* MGCEventsRowView.m */, - ); - name = "Month planner"; - sourceTree = ""; - }; 72B5D8E5180D73E0004ADB86 = { isa = PBXGroup; children = ( - 722ABE391CB19C6600713ED3 /* CalendarLib.podspec */, + 27CD957524FB5D7A000C5A97 /* CalendarDemo.entitlements */, 723925AF188B0AE800DE9578 /* README.md */, 722ABE331CB19BAC00713ED3 /* LICENSE */, 721A12A11CB585CF00749F18 /* CHANGELOG.md */, - 72CD8BAA18228A7500F12339 /* Lib */, 72B5D8F7180D73E0004ADB86 /* Demo */, 72B5D910180D73E0004ADB86 /* Tests */, + CA15378424065AA6000A14C7 /* UniversalCalendar */, 72B5D8F0180D73E0004ADB86 /* Frameworks */, 72B5D8EF180D73E0004ADB86 /* Products */, - F2CB583699A83B6039A63559 /* Pods */, ); sourceTree = ""; }; @@ -325,6 +292,7 @@ children = ( 72B5D8EE180D73E0004ADB86 /* CalendarDemo.app */, 72B5D909180D73E0004ADB86 /* CalendarTests.xctest */, + CA15378324065AA6000A14C7 /* UniversalCalendar.framework */, ); name = Products; sourceTree = ""; @@ -332,14 +300,10 @@ 72B5D8F0180D73E0004ADB86 /* Frameworks */ = { isa = PBXGroup; children = ( - 72B5D920180D73F3004ADB86 /* EventKit.framework */, - 72B5D921180D73F3004ADB86 /* EventKitUI.framework */, 72B5D8F1180D73E0004ADB86 /* Foundation.framework */, 72B5D8F3180D73E0004ADB86 /* CoreGraphics.framework */, 72B5D8F5180D73E0004ADB86 /* UIKit.framework */, 72B5D90A180D73E0004ADB86 /* XCTest.framework */, - 28486480EAA57CF147A3825F /* Pods.framework */, - F06A59852B476A0AA324A957 /* Pods_CalendarDemo.framework */, ); name = Frameworks; sourceTree = ""; @@ -354,14 +318,8 @@ 72B5D927180D7476004ADB86 /* main-iPad.storyboard */, 72734BB61B32E93800B2BA49 /* main-iPhone.storyboard */, 72E9B9151C919EF20070EDD3 /* settings.storyboard */, - 72EF080B1A3DB8C6005699CA /* MonthViewController.h */, - 72EF080C1A3DB8C6005699CA /* MonthViewController.m */, 72EF080D1A3DB8C6005699CA /* YearViewController.h */, 72EF080E1A3DB8C6005699CA /* YearViewController.m */, - BC32A45E1D30FED500AB19D7 /* DayViewController.h */, - BC32A45F1D30FED600AB19D7 /* DayViewController.m */, - 72EF07FD1A3D9DF8005699CA /* WeekViewController.h */, - 72EF07FE1A3D9DF8005699CA /* WeekViewController.m */, 7258E8AF1A5A98DD007F88AF /* WeekSettingsViewController.h */, 7258E8B01A5A98DD007F88AF /* WeekSettingsViewController.m */, 72E9B9171C91E3520070EDD3 /* MonthSettingsViewController.h */, @@ -369,6 +327,10 @@ 72B5D903180D73E0004ADB86 /* Images.xcassets */, 72B5D8F8180D73E0004ADB86 /* Supporting Files */, 7275C49F1C46E87B0036C9A3 /* Launch Screen.storyboard */, + 19290C2D82B4D6236BB822BA /* WeekViewController.swift */, + 19290FFD11D912E695FEDDCA /* MonthViewController.swift */, + 192904E8074D812872DD4926 /* DayViewController.swift */, + 19290C8C215F90F0DF0256D5 /* CalendarDemo-Bridging-Header.h */, ); name = Demo; path = CalendarDemo; @@ -405,72 +367,161 @@ name = "Supporting Files"; sourceTree = ""; }; - 72B5D954180DB304004ADB86 /* Day planner */ = { + CA15378424065AA6000A14C7 /* UniversalCalendar */ = { isa = PBXGroup; children = ( - 72DD627418155AAD00D270DB /* MGCDayPlannerView.h */, - 72DD627518155AAD00D270DB /* MGCDayPlannerView.m */, - BC32A4611D31003C00AB19D7 /* MGCCalendarHeaderView.h */, - BC32A4621D31003C00AB19D7 /* MGCCalendarHeaderView.m */, - 72EF07F21A3D8D13005699CA /* MGCDayPlannerViewController.h */, - 72EF07F31A3D8D13005699CA /* MGCDayPlannerViewController.m */, - 723A2BAA1814331000834697 /* Collection view cells & subviews */, - 723A2BA9181432F700834697 /* Collection view layouts */, - ); - name = "Day planner"; + CA1537A024065ADA000A14C7 /* Constant.h */, + CA1537A524065ADA000A14C7 /* en.lproj */, + CA1537AA24065ADB000A14C7 /* fr.lproj */, + CA15378D24065AD9000A14C7 /* MGCAlignedGeometry.h */, + CA1537AD24065ADB000A14C7 /* MGCAlignedGeometry.m */, + CA15378E24065AD9000A14C7 /* MGCAllDayEventsViewLayout.h */, + CA15379524065AD9000A14C7 /* MGCAllDayEventsViewLayout.m */, + CA1537D224065AE1000A14C7 /* MGCCalendarHeaderCell.h */, + CA1537D024065AE1000A14C7 /* MGCCalendarHeaderCell.m */, + CA1537A124065ADA000A14C7 /* MGCCalendarHeaderCell.xib */, + CA1537C824065AE0000A14C7 /* MGCCalendarHeaderView.h */, + CA15379024065AD9000A14C7 /* MGCCalendarHeaderView.m */, + CA1537B324065ADC000A14C7 /* MGCDateRange.h */, + CA1537D724065AE2000A14C7 /* MGCDateRange.m */, + CA1537AF24065ADB000A14C7 /* MGCDayColumnCell.h */, + CA1537BE24065ADE000A14C7 /* MGCDayColumnCell.m */, + CA1537A824065ADA000A14C7 /* MGCDayPlannerView.h */, + CA1537D824065AE2000A14C7 /* MGCDayPlannerView.m */, + CA15378B24065AD8000A14C7 /* MGCDayPlannerViewController.h */, + CA15379F24065ADA000A14C7 /* MGCDayPlannerViewController.m */, + CA1537BA24065ADE000A14C7 /* MGCEventCell.h */, + CA1537C124065ADF000A14C7 /* MGCEventCell.m */, + CA1537B924065ADE000A14C7 /* MGCEventCellLayoutAttributes.h */, + CA1537BF24065ADF000A14C7 /* MGCEventCellLayoutAttributes.m */, + CA1537BC24065ADE000A14C7 /* MGCEventKitSupport.h */, + CA1537CF24065AE1000A14C7 /* MGCEventKitSupport.m */, + CA1537D424065AE2000A14C7 /* MGCEventsRowView.h */, + CA15379C24065ADA000A14C7 /* MGCEventsRowView.m */, + CA1537D324065AE2000A14C7 /* MGCEventView.h */, + CA1537CB24065AE0000A14C7 /* MGCEventView.m */, + CA1537B224065ADC000A14C7 /* MGCInteractiveEventView.h */, + CA1537AE24065ADB000A14C7 /* MGCInteractiveEventView.m */, + CA1537D624065AE2000A14C7 /* MGCMonthMiniCalendarView.h */, + CA1537CC24065AE0000A14C7 /* MGCMonthMiniCalendarView.m */, + CA15379E24065ADA000A14C7 /* MGCMonthPlannerBackgroundView.h */, + CA1537B624065ADD000A14C7 /* MGCMonthPlannerBackgroundView.m */, + CA15379724065AD9000A14C7 /* MGCMonthPlannerHeaderView.h */, + CA15379624065AD9000A14C7 /* MGCMonthPlannerHeaderView.m */, + CA15379824065AD9000A14C7 /* MGCMonthPlannerView.h */, + CA1537B124065ADC000A14C7 /* MGCMonthPlannerView.m */, + CA15379224065AD9000A14C7 /* MGCMonthPlannerViewController.h */, + CA1537CE24065AE1000A14C7 /* MGCMonthPlannerViewController.m */, + CA1537A224065ADA000A14C7 /* MGCMonthPlannerViewDayCell.h */, + CA15379D24065ADA000A14C7 /* MGCMonthPlannerViewDayCell.m */, + CA15378F24065AD9000A14C7 /* MGCMonthPlannerViewLayout.h */, + CA1537B024065ADC000A14C7 /* MGCMonthPlannerViewLayout.m */, + CA15379A24065AD9000A14C7 /* MGCMonthPlannerWeekView.h */, + CA15379124065AD9000A14C7 /* MGCMonthPlannerWeekView.m */, + CA1537C224065ADF000A14C7 /* MGCReusableObjectQueue.h */, + CA1537C324065ADF000A14C7 /* MGCReusableObjectQueue.m */, + CA1537BB24065ADE000A14C7 /* MGCStandardEventView.h */, + CA15379924065AD9000A14C7 /* MGCStandardEventView.m */, + CA1537B724065ADD000A14C7 /* MGCTimedEventsViewLayout.h */, + CA1537CD24065AE1000A14C7 /* MGCTimedEventsViewLayout.m */, + CA1537C624065AE0000A14C7 /* MGCTimeRowsView.h */, + CA1537A324065ADA000A14C7 /* MGCTimeRowsView.m */, + CA15379B24065AD9000A14C7 /* MGCYearCalendarMonthCell.h */, + CA1537A424065ADA000A14C7 /* MGCYearCalendarMonthCell.m */, + CA15378C24065AD8000A14C7 /* MGCYearCalendarMonthHeaderView.h */, + CA15379424065AD9000A14C7 /* MGCYearCalendarMonthHeaderView.m */, + CA1537C524065ADF000A14C7 /* MGCYearCalendarView.h */, + CA1537C924065AE0000A14C7 /* MGCYearCalendarView.m */, + CA1537BD24065ADE000A14C7 /* NSAttributedString+MGCAdditions.h */, + CA1537A924065ADB000A14C7 /* NSAttributedString+MGCAdditions.m */, + CA1537B424065ADC000A14C7 /* NSCalendar+MGCAdditions.h */, + CA1537C024065ADF000A14C7 /* NSCalendar+MGCAdditions.m */, + CA1537D124065AE1000A14C7 /* OrderedDictionary.h */, + CA1537CA24065AE0000A14C7 /* OrderedDictionary.m */, + CA1537C724065AE0000A14C7 /* OSCache.h */, + CA15379324065AD9000A14C7 /* OSCache.m */, + CA15378524065AA6000A14C7 /* UniversalCalendar.h */, + CA15378624065AA6000A14C7 /* Info.plist */, + ); + path = UniversalCalendar; sourceTree = ""; }; - 72CD8BAA18228A7500F12339 /* Lib */ = { + CA1537A524065ADA000A14C7 /* en.lproj */ = { isa = PBXGroup; children = ( - 072E5EFD1C338534007711A0 /* Header&Constants */, - 721CA1B21A9382990083F41A /* Localizable.strings */, - 72E8D25718FC474500024582 /* MGCReusableObjectQueue.h */, - 72E8D25818FC474500024582 /* MGCReusableObjectQueue.m */, - 72271A501815C33600DE96FE /* MGCDateRange.h */, - 72271A511815C33600DE96FE /* MGCDateRange.m */, - 723A2BAB181449F500834697 /* NSCalendar+MGCAdditions.h */, - 723A2BAC181449F500834697 /* NSCalendar+MGCAdditions.m */, - 720DAE511C6269D900DF8AAA /* NSAttributedString+MGCAdditions.h */, - 720DAE521C6269D900DF8AAA /* NSAttributedString+MGCAdditions.m */, - 72780F8F1CB6D0DF00CA5513 /* MGCAlignedGeometry.h */, - 72780F901CB6D0DF00CA5513 /* MGCAlignedGeometry.m */, - 723925AB188B040200DE9578 /* EventKit */, - 723345D81A3BA75300BAE7A9 /* Events view */, - 72B5D954180DB304004ADB86 /* Day planner */, - 72936D7F185671DB00635BD9 /* Month planner */, - 7248240A18D351F90067D0D7 /* Year calendar */, - ); - name = Lib; - path = CalendarLib; + CA1537A624065ADA000A14C7 /* Localizable.strings */, + ); + path = en.lproj; sourceTree = ""; }; - F2CB583699A83B6039A63559 /* Pods */ = { + CA1537AA24065ADB000A14C7 /* fr.lproj */ = { isa = PBXGroup; children = ( - 1F0C1F1B722A7E607C88C0FE /* Pods-CalendarDemo.debug.xcconfig */, - EA537021B8BB04EA0A609FA9 /* Pods-CalendarDemo.release.xcconfig */, + CA1537AB24065ADB000A14C7 /* Localizable.strings */, ); - name = Pods; + path = fr.lproj; sourceTree = ""; }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + CA15377E24065AA6000A14C7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CA1537EE24065AE2000A14C7 /* Constant.h in Headers */, + CA15381B24065AE2000A14C7 /* OrderedDictionary.h in Headers */, + CA15381124065AE2000A14C7 /* OSCache.h in Headers */, + CA1537FE24065AE2000A14C7 /* NSCalendar+MGCAdditions.h in Headers */, + CA15380724065AE2000A14C7 /* NSAttributedString+MGCAdditions.h in Headers */, + CA15380F24065AE2000A14C7 /* MGCYearCalendarView.h in Headers */, + CA15380524065AE2000A14C7 /* MGCStandardEventView.h in Headers */, + CA15380C24065AE2000A14C7 /* MGCReusableObjectQueue.h in Headers */, + CA1537E624065AE2000A14C7 /* MGCMonthPlannerView.h in Headers */, + CA1537E024065AE2000A14C7 /* MGCMonthPlannerViewController.h in Headers */, + CA15382024065AE2000A14C7 /* MGCMonthMiniCalendarView.h in Headers */, + CA1537FD24065AE2000A14C7 /* MGCDateRange.h in Headers */, + CA1537F424065AE2000A14C7 /* MGCDayPlannerView.h in Headers */, + CA1537D924065AE2000A14C7 /* MGCDayPlannerViewController.h in Headers */, + CA15381224065AE2000A14C7 /* MGCCalendarHeaderView.h in Headers */, + CA15381D24065AE2000A14C7 /* MGCEventView.h in Headers */, + CA15381E24065AE2000A14C7 /* MGCEventsRowView.h in Headers */, + CA1537E924065AE2000A14C7 /* MGCYearCalendarMonthCell.h in Headers */, + CA1537DA24065AE2000A14C7 /* MGCYearCalendarMonthHeaderView.h in Headers */, + CA1537F024065AE2000A14C7 /* MGCMonthPlannerViewDayCell.h in Headers */, + CA15380624065AE2000A14C7 /* MGCEventKitSupport.h in Headers */, + CA15380424065AE2000A14C7 /* MGCEventCell.h in Headers */, + CA1537FC24065AE2000A14C7 /* MGCInteractiveEventView.h in Headers */, + CA15380124065AE2000A14C7 /* MGCTimedEventsViewLayout.h in Headers */, + CA1537DC24065AE2000A14C7 /* MGCAllDayEventsViewLayout.h in Headers */, + CA1537E524065AE2000A14C7 /* MGCMonthPlannerHeaderView.h in Headers */, + CA15380324065AE2000A14C7 /* MGCEventCellLayoutAttributes.h in Headers */, + CA1537EC24065AE2000A14C7 /* MGCMonthPlannerBackgroundView.h in Headers */, + CA15381C24065AE2000A14C7 /* MGCCalendarHeaderCell.h in Headers */, + CA1537DB24065AE2000A14C7 /* MGCAlignedGeometry.h in Headers */, + CA15378724065AA6000A14C7 /* UniversalCalendar.h in Headers */, + CA1537F924065AE2000A14C7 /* MGCDayColumnCell.h in Headers */, + CA15381024065AE2000A14C7 /* MGCTimeRowsView.h in Headers */, + CA1537DD24065AE2000A14C7 /* MGCMonthPlannerViewLayout.h in Headers */, + CA1537E824065AE2000A14C7 /* MGCMonthPlannerWeekView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ 72B5D8ED180D73E0004ADB86 /* CalendarDemo */ = { isa = PBXNativeTarget; buildConfigurationList = 72B5D91A180D73E0004ADB86 /* Build configuration list for PBXNativeTarget "CalendarDemo" */; buildPhases = ( - D502B293157A24324B0C1F8D /* [CP] Check Pods Manifest.lock */, 72B5D8EA180D73E0004ADB86 /* Sources */, 72B5D8EB180D73E0004ADB86 /* Frameworks */, 72B5D8EC180D73E0004ADB86 /* Resources */, - 834773CCABB3FAEA9BD07C84 /* [CP] Embed Pods Frameworks */, - BB74956EF84371AD80E5FE3C /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( + 270216F424FAC06B00022A24 /* PBXTargetDependency */, ); name = CalendarDemo; productName = Calendar; @@ -495,17 +546,41 @@ productReference = 72B5D909180D73E0004ADB86 /* CalendarTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; + CA15378224065AA6000A14C7 /* UniversalCalendar */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA15378A24065AA6000A14C7 /* Build configuration list for PBXNativeTarget "UniversalCalendar" */; + buildPhases = ( + CA15377E24065AA6000A14C7 /* Headers */, + CA15377F24065AA6000A14C7 /* Sources */, + CA15378024065AA6000A14C7 /* Frameworks */, + CA15378124065AA6000A14C7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = UniversalCalendar; + productName = UniversalCalendar; + productReference = CA15378324065AA6000A14C7 /* UniversalCalendar.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 72B5D8E6180D73E0004ADB86 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0810; + LastUpgradeCheck = 1160; ORGANIZATIONNAME = "Julien Martin"; TargetAttributes = { 72B5D8ED180D73E0004ADB86 = { - DevelopmentTeam = 9L2H2A796T; + DevelopmentTeam = 48YJ4C47HX; + LastSwiftMigration = 1160; + }; + CA15378224065AA6000A14C7 = { + CreatedOnToolsVersion = 10.3; + DevelopmentTeam = 48YJ4C47HX; + ProvisioningStyle = Manual; }; }; }; @@ -514,6 +589,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, fr, Base, @@ -525,6 +601,7 @@ targets = ( 72B5D8ED180D73E0004ADB86 /* CalendarDemo */, 72B5D908180D73E0004ADB86 /* CalendarTests */, + CA15378224065AA6000A14C7 /* UniversalCalendar */, ); }; /* End PBXProject section */ @@ -536,10 +613,8 @@ files = ( 720041BA1879B2B600F3C497 /* Settings.bundle in Resources */, 72E9B9161C919EF20070EDD3 /* settings.storyboard in Resources */, - BC32A4681D3101BB00AB19D7 /* MGCCalendarHeaderCell.xib in Resources */, 7275C4A01C46E87B0036C9A3 /* Launch Screen.storyboard in Resources */, 72B5D8FC180D73E0004ADB86 /* InfoPlist.strings in Resources */, - 721CA1B41A9382990083F41A /* Localizable.strings in Resources */, 72B5D904180D73E0004ADB86 /* Images.xcassets in Resources */, 72B5D928180D7476004ADB86 /* main-iPad.storyboard in Resources */, 72734BB71B32E93800B2BA49 /* main-iPhone.storyboard in Resources */, @@ -554,55 +629,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 834773CCABB3FAEA9BD07C84 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CalendarDemo/Pods-CalendarDemo-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - BB74956EF84371AD80E5FE3C /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CalendarDemo/Pods-CalendarDemo-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - D502B293157A24324B0C1F8D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; + CA15378124065AA6000A14C7 /* Resources */ = { + isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - inputPaths = ( - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( + CA1537F624065AE2000A14C7 /* Localizable.strings in Resources */, + CA1537F324065AE2000A14C7 /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ +/* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 72B5D8EA180D73E0004ADB86 /* Sources */ = { @@ -610,14 +646,14 @@ buildActionMask = 2147483647; files = ( 72E9B9191C91E3520070EDD3 /* MonthSettingsViewController.m in Sources */, - 72EF07FF1A3D9DF8005699CA /* WeekViewController.m in Sources */, - 72EF08151A3DB8C6005699CA /* MonthViewController.m in Sources */, 72EF08181A3DB8C6005699CA /* YearViewController.m in Sources */, 72B5D902180D73E0004ADB86 /* AppDelegate.m in Sources */, 721DC18918219C4D00F9470C /* MainViewController.m in Sources */, 72B5D8FE180D73E0004ADB86 /* main.m in Sources */, 7258E8B11A5A98DD007F88AF /* WeekSettingsViewController.m in Sources */, - BC32A4601D30FED600AB19D7 /* DayViewController.m in Sources */, + 19290194C082371F9D97B3DF /* WeekViewController.swift in Sources */, + 1929092530FF5A55803D2505 /* MonthViewController.swift in Sources */, + 19290AB66D0A8FF66FBB260B /* DayViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -629,9 +665,54 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + CA15377F24065AA6000A14C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CA1537F524065AE2000A14C7 /* NSAttributedString+MGCAdditions.m in Sources */, + CA15380D24065AE2000A14C7 /* MGCReusableObjectQueue.m in Sources */, + CA15381724065AE2000A14C7 /* MGCTimedEventsViewLayout.m in Sources */, + CA1537E724065AE2000A14C7 /* MGCStandardEventView.m in Sources */, + CA1537F224065AE2000A14C7 /* MGCYearCalendarMonthCell.m in Sources */, + CA1537E124065AE2000A14C7 /* OSCache.m in Sources */, + CA15381824065AE2000A14C7 /* MGCMonthPlannerViewController.m in Sources */, + CA15381524065AE2000A14C7 /* MGCEventView.m in Sources */, + CA15380B24065AE2000A14C7 /* MGCEventCell.m in Sources */, + CA1537EB24065AE2000A14C7 /* MGCMonthPlannerViewDayCell.m in Sources */, + CA15382224065AE2000A14C7 /* MGCDayPlannerView.m in Sources */, + CA15381924065AE2000A14C7 /* MGCEventKitSupport.m in Sources */, + CA15381624065AE2000A14C7 /* MGCMonthMiniCalendarView.m in Sources */, + CA15381A24065AE2000A14C7 /* MGCCalendarHeaderCell.m in Sources */, + CA1537E424065AE2000A14C7 /* MGCMonthPlannerHeaderView.m in Sources */, + CA1537E324065AE2000A14C7 /* MGCAllDayEventsViewLayout.m in Sources */, + CA15380924065AE2000A14C7 /* MGCEventCellLayoutAttributes.m in Sources */, + CA15381324065AE2000A14C7 /* MGCYearCalendarView.m in Sources */, + CA1537EA24065AE2000A14C7 /* MGCEventsRowView.m in Sources */, + CA1537FB24065AE2000A14C7 /* MGCMonthPlannerView.m in Sources */, + CA15380A24065AE2000A14C7 /* NSCalendar+MGCAdditions.m in Sources */, + CA1537ED24065AE2000A14C7 /* MGCDayPlannerViewController.m in Sources */, + CA1537DF24065AE2000A14C7 /* MGCMonthPlannerWeekView.m in Sources */, + CA15380824065AE2000A14C7 /* MGCDayColumnCell.m in Sources */, + CA15380024065AE2000A14C7 /* MGCMonthPlannerBackgroundView.m in Sources */, + CA1537E224065AE2000A14C7 /* MGCYearCalendarMonthHeaderView.m in Sources */, + CA1537F824065AE2000A14C7 /* MGCInteractiveEventView.m in Sources */, + CA1537FA24065AE2000A14C7 /* MGCMonthPlannerViewLayout.m in Sources */, + CA1537F124065AE2000A14C7 /* MGCTimeRowsView.m in Sources */, + CA15381424065AE2000A14C7 /* OrderedDictionary.m in Sources */, + CA15382124065AE2000A14C7 /* MGCDateRange.m in Sources */, + CA1537F724065AE2000A14C7 /* MGCAlignedGeometry.m in Sources */, + CA1537DE24065AE2000A14C7 /* MGCCalendarHeaderView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 270216F424FAC06B00022A24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = CA15378224065AA6000A14C7 /* UniversalCalendar */; + targetProxy = 270216F324FAC06B00022A24 /* PBXContainerItemProxy */; + }; 72B5D90F180D73E0004ADB86 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 72B5D8ED180D73E0004ADB86 /* CalendarDemo */; @@ -640,15 +721,6 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 721CA1B21A9382990083F41A /* Localizable.strings */ = { - isa = PBXVariantGroup; - children = ( - 721CA1B31A9382990083F41A /* en */, - 721CA1B51A9382A80083F41A /* fr */, - ); - name = Localizable.strings; - sourceTree = ""; - }; 72B5D8FA180D73E0004ADB86 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( @@ -667,6 +739,22 @@ name = InfoPlist.strings; sourceTree = ""; }; + CA1537A624065ADA000A14C7 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + CA1537A724065ADA000A14C7 /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + CA1537AB24065ADB000A14C7 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + CA1537AC24065ADB000A14C7 /* fr */, + ); + name = Localizable.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -677,14 +765,22 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -705,7 +801,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -719,14 +815,22 @@ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -742,8 +846,9 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -751,20 +856,30 @@ }; 72B5D91B180D73E0004ADB86 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F0C1F1B722A7E607C88C0FE /* Pods-CalendarDemo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = CalendarDemo/CalendarDemo.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = 9L2H2A796T; + DEVELOPMENT_TEAM = 48YJ4C47HX; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CalendarDemo/Calendar-Prefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/CalendarDemo/Calendar-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.jmartin.${PRODUCT_NAME:rfc1034identifier}"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.haithngn.CalendarDemo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; + SUPPORTS_MACCATALYST = YES; + SWIFT_OBJC_BRIDGING_HEADER = "CalendarDemo/CalendarDemo-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; @@ -772,20 +887,32 @@ }; 72B5D91C180D73E0004ADB86 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EA537021B8BB04EA0A609FA9 /* Pods-CalendarDemo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = CalendarDemo/CalendarDemo.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = 9L2H2A796T; + CODE_SIGN_STYLE = Manual; + DEVELOPMENT_TEAM = ""; + FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "CalendarDemo/Calendar-Prefix.pch"; + HEADER_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "$(SRCROOT)/CalendarDemo/Calendar-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_BUNDLE_IDENTIFIER = "com.jmartin.${PRODUCT_NAME:rfc1034identifier}"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = com.haithngn.CalendarDemo; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; + SUPPORTS_MACCATALYST = YES; + SWIFT_OBJC_BRIDGING_HEADER = "CalendarDemo/CalendarDemo-Bridging-Header.h"; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = app; }; @@ -794,6 +921,7 @@ 72B5D91E180D73E0004ADB86 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", @@ -815,6 +943,7 @@ 72B5D91F180D73E0004ADB86 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(SDKROOT)/Developer/Library/Frameworks", "$(inherited)", @@ -829,6 +958,104 @@ }; name = Release; }; + CA15378824065AA6000A14C7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Manual; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 48YJ4C47HX; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = UniversalCalendar/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.haithngn.universalcalendar; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + CA15378924065AA6000A14C7 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 48YJ4C47HX; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + INFOPLIST_FILE = UniversalCalendar/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.haithngn.universalcalendar; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = ""; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos macosx"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -859,6 +1086,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + CA15378A24065AA6000A14C7 /* Build configuration list for PBXNativeTarget "UniversalCalendar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA15378824065AA6000A14C7 /* Debug */, + CA15378924065AA6000A14C7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 72B5D8E6180D73E0004ADB86 /* Project object */; diff --git a/Calendar.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Calendar.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/Calendar.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Calendar.xcodeproj/xcshareddata/xcschemes/UniversalCalendar.xcscheme b/Calendar.xcodeproj/xcshareddata/xcschemes/UniversalCalendar.xcscheme new file mode 100644 index 00000000..60229bd1 --- /dev/null +++ b/Calendar.xcodeproj/xcshareddata/xcschemes/UniversalCalendar.xcscheme @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Calendar.xcodeproj/xcuserdata/tritran.xcuserdatad/xcschemes/CalendarDemo.xcscheme b/Calendar.xcodeproj/xcuserdata/tritran.xcuserdatad/xcschemes/CalendarDemo.xcscheme new file mode 100644 index 00000000..eaa658cd --- /dev/null +++ b/Calendar.xcodeproj/xcuserdata/tritran.xcuserdatad/xcschemes/CalendarDemo.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Calendar.xcodeproj/xcuserdata/tritran.xcuserdatad/xcschemes/xcschememanagement.plist b/Calendar.xcodeproj/xcuserdata/tritran.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..6e55dc3f --- /dev/null +++ b/Calendar.xcodeproj/xcuserdata/tritran.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,39 @@ + + + + + SchemeUserState + + CalendarDemo.xcscheme + + isShown + + orderHint + 5 + + UniversalCalendar.xcscheme_^#shared#^_ + + orderHint + 6 + + + SuppressBuildableAutocreation + + 72B5D8ED180D73E0004ADB86 + + primary + + + 72B5D908180D73E0004ADB86 + + primary + + + CA15378224065AA6000A14C7 + + primary + + + + + diff --git a/Calendar.xcworkspace/contents.xcworkspacedata b/Calendar.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 2f7852b6..00000000 --- a/Calendar.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/Calendar.xcworkspace/xcshareddata/Calendar.xccheckout b/Calendar.xcworkspace/xcshareddata/Calendar.xccheckout deleted file mode 100644 index 4ae52494..00000000 --- a/Calendar.xcworkspace/xcshareddata/Calendar.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - IDESourceControlProjectFavoriteDictionaryKey - - IDESourceControlProjectIdentifier - FB1B9293-44FA-4831-90B6-74F8DA2E076E - IDESourceControlProjectName - Calendar - IDESourceControlProjectOriginsDictionary - - C52FA12F0F638351E8AE774D6995B04A15747832 - https://github.com/jumartin/Calendar.git - - IDESourceControlProjectPath - Calendar.xcworkspace - IDESourceControlProjectRelativeInstallPathDictionary - - C52FA12F0F638351E8AE774D6995B04A15747832 - .. - - IDESourceControlProjectURL - https://github.com/jumartin/Calendar.git - IDESourceControlProjectVersion - 111 - IDESourceControlProjectWCCIdentifier - C52FA12F0F638351E8AE774D6995B04A15747832 - IDESourceControlProjectWCConfigurations - - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - C52FA12F0F638351E8AE774D6995B04A15747832 - IDESourceControlWCCName - Calendar - - - - diff --git a/CalendarDemo/CalendarDemo-Bridging-Header.h b/CalendarDemo/CalendarDemo-Bridging-Header.h new file mode 100644 index 00000000..625004b7 --- /dev/null +++ b/CalendarDemo/CalendarDemo-Bridging-Header.h @@ -0,0 +1,8 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +#import "MainViewController.h" +#import "NSCalendar+MGCAdditions.h" +#import "NSAttributedString+MGCAdditions.h" +#import "Constant.h" diff --git a/CalendarDemo/CalendarDemo.entitlements b/CalendarDemo/CalendarDemo.entitlements new file mode 100644 index 00000000..1038fb44 --- /dev/null +++ b/CalendarDemo/CalendarDemo.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + com.apple.security.personal-information.calendars + + + diff --git a/CalendarDemo/DayViewController.h b/CalendarDemo/DayViewController.h deleted file mode 100644 index 820a35f6..00000000 --- a/CalendarDemo/DayViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// DayViewController.h -// Calendar -// -// Copyright © 2016 Julien Martin. All rights reserved. -// - -#import "MGCDayPlannerEKViewController.h" -#import "MainViewController.h" - - -@protocol DayViewControllerDelegate - -@end - - -@interface DayViewController : MGCDayPlannerEKViewController - -@property (nonatomic, weak) id delegate; - -@end - diff --git a/CalendarDemo/DayViewController.m b/CalendarDemo/DayViewController.m deleted file mode 100644 index 8979e2a4..00000000 --- a/CalendarDemo/DayViewController.m +++ /dev/null @@ -1,125 +0,0 @@ -// -// DayViewController.h -// Calendar -// -// Copyright © 2016 Julien Martin. All rights reserved. -// - -#import "DayViewController.h" -#import "MGCDateRange.h" -#import "NSCalendar+MGCAdditions.h" -#import "NSAttributedString+MGCAdditions.h" -#import "Constant.h" -#import "MGCCalendarHeaderView.h" - -@implementation DayViewController - -@dynamic delegate; - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.dayPlannerView.backgroundColor = [UIColor clearColor]; - self.dayPlannerView.backgroundView = [UIView new]; - self.dayPlannerView.backgroundView.backgroundColor = [UIColor whiteColor]; - - if (isiPad) { - //NSLog(@"---------------- iPAD ------------------"); - self.dayPlannerView.dateFormat = @"eee\nd MMM"; - self.dayPlannerView.dayHeaderHeight = 50; - } - else{ - //NSLog(@"---------------- iPhone ------------------"); - self.dayPlannerView.dateFormat = @"eee\nd \nMMM"; - self.dayPlannerView.dayHeaderHeight = 60; - } -} - -#pragma mark - MGCDayPlannerViewController - -- (BOOL)dayPlannerView:(MGCDayPlannerView*)view canCreateNewEventOfType:(MGCEventType)type atDate:(NSDate*)date -{ - NSDateComponents *comps = [self.calendar components:NSCalendarUnitWeekday fromDate:date]; - return comps.weekday != 1; -} - -- (void)dayPlannerView:(MGCDayPlannerView*)view didScroll:(MGCDayPlannerScrollType)scrollType -{ - NSDate *date = [view dateAtPoint:view.center rounded:YES]; - if (date && [self.delegate respondsToSelector:@selector(calendarViewController:didShowDate:)]) { - [self.delegate calendarViewController:self didShowDate:date]; - } -} - -- (BOOL)dayPlannerView:(MGCDayPlannerView*)view canMoveEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date toType:(MGCEventType)targetType date:(NSDate*)targetDate -{ - NSDateComponents *comps = [self.calendar components:NSCalendarUnitWeekday fromDate:targetDate]; - return (comps.weekday != 1 && comps.weekday != 7); -} - -- (NSAttributedString*)dayPlannerView:(MGCDayPlannerView *)view attributedStringForDayHeaderAtDate:(NSDate *)date -{ - - static NSDateFormatter *dateFormatter = nil; - if (dateFormatter == nil) { - dateFormatter = [NSDateFormatter new]; - dateFormatter.dateFormat = @"eee d"; - } - - NSString *dayStr = [dateFormatter stringFromDate:date]; - - UIFont *font = [UIFont systemFontOfSize:15]; - NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:dayStr attributes:@{ NSFontAttributeName: font }]; - - if ([self.calendar mgc_isDate:date sameDayAsDate:[NSDate date]]) { - UIFont *boldFont = [UIFont boldSystemFontOfSize:15]; - - MGCCircleMark *mark = [MGCCircleMark new]; - mark.yOffset = boldFont.descender - mark.margin; - - NSUInteger dayStringStart = [dayStr rangeOfString:@" "].location + 1; - [attrStr addAttributes:@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: [UIColor whiteColor], MGCCircleMarkAttributeName: mark } range:NSMakeRange(dayStringStart, dayStr.length - dayStringStart)]; - - [attrStr processCircleMarksInRange:NSMakeRange(0, attrStr.length)]; - } - - NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; - para.alignment = NSTextAlignmentCenter; - [attrStr addAttribute:NSParagraphStyleAttributeName value:para range:NSMakeRange(0, attrStr.length)]; - - return attrStr; -} - -#pragma mark - CalendarControllerNavigation - -- (void)moveToDate:(NSDate*)date animated:(BOOL)animated -{ - if (!self.dayPlannerView.dateRange || [self.dayPlannerView.dateRange containsDate:date]) { - [self.dayPlannerView scrollToDate:date options:MGCDayPlannerScrollDateTime animated:animated]; - } -} - -- (void)moveToNextPageAnimated:(BOOL)animated -{ - NSDate *date; - [self.dayPlannerView pageForwardAnimated:animated date:&date]; - //NSLog(@"paging forward to %@", date); -} - -- (void)moveToPreviousPageAnimated:(BOOL)animated -{ - NSDate *date; - [self.dayPlannerView pageBackwardsAnimated:animated date:&date]; - //NSLog(@"paging backwards to %@", date); -} - -- (NSDate*)centerDate -{ - NSDate *date = [self.dayPlannerView dateAtPoint:self.dayPlannerView.center rounded:NO]; - return date; -} - -@end diff --git a/CalendarDemo/DayViewController.swift b/CalendarDemo/DayViewController.swift new file mode 100644 index 00000000..61568503 --- /dev/null +++ b/CalendarDemo/DayViewController.swift @@ -0,0 +1,86 @@ +// +// TwoDaysViewController.swift +// CalendarDemo +// +// Created by Hai Nguyen Thanh on 8/30/20. +// Copyright © 2020 Julien Martin. All rights reserved. +// + +import UIKit +import UniversalCalendar + +class DayViewController: MGCDayPlannerViewController , CalendarViewControllerNavigation { + override func viewDidLoad() { + super.viewDidLoad() + + self.dayPlannerView.numberOfVisibleDays = 2 + } + + private(set) var centerDate: Date! = Date() + + func move(to date: Date!, animated: Bool) { + } + + func moveToNextPage(animated: Bool) { + } + + func moveToPreviousPage(animated: Bool) { + } +} + +extension DayViewController { +// open override func dayPlannerView(_ view: MGCDayPlannerView!, attributedStringFor mark: MGCDayPlannerTimeMark, time ti: TimeInterval) -> NSAttributedString! { +// fatalError("dayPlannerView(_:attributedStringFor:time:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, attributedStringForDayHeaderAt date: Date!) -> NSAttributedString! { +// fatalError("dayPlannerView(_:attributedStringForDayHeaderAt:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, numberOfDimmedTimeRangesAt date: Date!) -> Int { +// fatalError("dayPlannerView(_:numberOfDimmedTimeRangesAt:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, dimmedTimeRangeAt index: UInt, date: Date!) -> MGCDateRange! { +// fatalError("dayPlannerView(_:dimmedTimeRangeAt:date:) has not been implemented") +// } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didScroll scrollType: MGCDayPlannerScrollType) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didEndScrolling scrollType: MGCDayPlannerScrollType) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, willDisplay date: Date!) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didEndDisplaying date: Date!) { + } + + open override func dayPlannerViewDidZoom(_ view: MGCDayPlannerView!) { + } + +// open override func dayPlannerView(_ view: MGCDayPlannerView!, shouldSelectEventOf type: MGCEventType, at index: UInt, date: Date!) -> Bool { +// fatalError("dayPlannerView(_:shouldSelectEventOf:at:date:) has not been implemented") +// } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didSelectEventOf type: MGCEventType, at index: UInt, date: Date!) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didDeselectEventOf type: MGCEventType, at index: UInt, date: Date!) { + } +} + +extension DayViewController { + open override func dayPlannerView(_ view: MGCDayPlannerView!, numberOfEventsOf type: MGCEventType, at date: Date!) -> Int { + return 0 + } + +// open override func dayPlannerView(_ view: MGCDayPlannerView!, viewForEventOf type: MGCEventType, at index: UInt, date: Date!) -> MGCEventView! { +// fatalError("dayPlannerView(_:viewForEventOf:at:date:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, dateRangeForEventOf type: MGCEventType, at index: UInt, date: Date!) -> MGCDateRange! { +// fatalError("dayPlannerView(_:dateRangeForEventOf:at:date:) has not been implemented") +// } +} diff --git a/CalendarDemo/MainViewController.m b/CalendarDemo/MainViewController.m index cb15a1cb..80a46a5d 100755 --- a/CalendarDemo/MainViewController.m +++ b/CalendarDemo/MainViewController.m @@ -6,13 +6,11 @@ // #import "MainViewController.h" -#import "WeekViewController.h" -#import "MonthViewController.h" #import "YearViewController.h" -#import "DayViewController.h" #import "NSCalendar+MGCAdditions.h" #import "WeekSettingsViewController.h" #import "MonthSettingsViewController.h" +#import "CalendarDemo-Swift.h" typedef enum : NSUInteger @@ -24,7 +22,7 @@ } CalendarViewType; -@interface MainViewController () +@interface MainViewController () @property (nonatomic, strong) NSDateFormatter *dateFormatter; @property (nonatomic) EKCalendarChooser *calendarChooser; @@ -91,7 +89,7 @@ - (void)viewDidAppear:(BOOL)animated if (self.firstTimeAppears) { NSDate *date = [self.calendar mgc_startOfWeekForDate:[NSDate date]]; - [self.calendarViewController moveToDate:date animated:NO]; +// [self.calendarViewController moveToDate:date animated:NO]; self.firstTimeAppears = NO; } } @@ -136,35 +134,31 @@ - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id - -@property (nonatomic, weak) id delegate; - -@end diff --git a/CalendarDemo/MonthViewController.m b/CalendarDemo/MonthViewController.m deleted file mode 100755 index bc0074cd..00000000 --- a/CalendarDemo/MonthViewController.m +++ /dev/null @@ -1,118 +0,0 @@ -// -// MonthViewController.m -// CalendarDemo - Graphical Calendars Library for iOS -// -// Copyright (c) 2014-2015 Julien Martin. All rights reserved. -// - -#import "MonthViewController.h" -#import "NSCalendar+MGCAdditions.h" -#import "NSAttributedString+MGCAdditions.h" -#import "Constant.h" - - -@implementation MonthViewController - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - //self.monthPlannerView.dateFormat = @"dd MMM\nYYYY"; -} - -#pragma mark - MGCMonthPlannerViewController - -- (void)monthPlannerViewDidScroll:(MGCMonthPlannerView *)view -{ - [super monthPlannerViewDidScroll:view]; - - NSDate *date = [self.monthPlannerView dayAtPoint:self.monthPlannerView.center]; - if (date && [self.delegate respondsToSelector:@selector(calendarViewController:didShowDate:)]) { - [self.delegate calendarViewController:self didShowDate:date]; - } -} - -- (NSAttributedString*)monthPlannerView:(MGCMonthPlannerView *)view attributedStringForDayHeaderAtDate:(NSDate *)date -{ - //return nil; - - static NSDateFormatter *dateFormatter = nil; - if (dateFormatter == nil) { - dateFormatter = [NSDateFormatter new]; - } - - dateFormatter.dateFormat = @"d"; - NSString *dayStr = [dateFormatter stringFromDate:date]; - - NSString *str = dayStr; - - if (dayStr.integerValue == 1) { - dateFormatter.dateFormat = @"MMM d"; - str = [dateFormatter stringFromDate:date]; - } - - UIFont *font = [UIFont systemFontOfSize:isiPad ? 15 : 12]; - NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:str attributes:@{ NSFontAttributeName: font }]; - - if ([self.calendar mgc_isDate:date sameDayAsDate:[NSDate date]]) { - UIFont *boldFont = [UIFont boldSystemFontOfSize:isiPad ? 15 : 12]; - - MGCCircleMark *mark = [MGCCircleMark new]; - mark.yOffset = boldFont.descender - mark.margin; - - [attrStr addAttributes:@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: [UIColor whiteColor], MGCCircleMarkAttributeName: mark} range:[str rangeOfString:dayStr]]; - - [attrStr processCircleMarksInRange:NSMakeRange(0, attrStr.length)]; - } - - NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; - para.alignment = NSTextAlignmentRight; - para.tailIndent = -6; - - [attrStr addAttributes:@{ NSParagraphStyleAttributeName: para } range:NSMakeRange(0, attrStr.length)]; - - return attrStr; -} - -#pragma mark - CalendarViewControllerNavigation - -- (NSDate*)centerDate -{ - MGCDateRange *visibleRange = [self.monthPlannerView visibleDays]; - if (visibleRange) - { - NSUInteger dayCount = [self.calendar components:NSCalendarUnitDay fromDate:visibleRange.start toDate:visibleRange.end options:0].day; - NSDateComponents *comp = [NSDateComponents new]; - comp.day = dayCount / 2; - NSDate *centerDate = [self.calendar dateByAddingComponents:comp toDate:visibleRange.start options:0]; - return [self.calendar mgc_startOfWeekForDate:centerDate]; - } - return nil; -} - -- (void)moveToDate:(NSDate*)date animated:(BOOL)animated -{ - if (!self.monthPlannerView.dateRange || [self.monthPlannerView.dateRange containsDate:date]) { - [self.monthPlannerView scrollToDate:date alignment:MGCMonthPlannerScrollAlignmentWeekRow animated:animated]; - } -} - -- (void)moveToNextPageAnimated:(BOOL)animated -{ - NSDate *date = [self.calendar mgc_nextStartOfMonthForDate:self.monthPlannerView.visibleDays.start]; - [self moveToDate:date animated:animated]; -} - -- (void)moveToPreviousPageAnimated:(BOOL)animated -{ - NSDate *date = [self.calendar mgc_startOfMonthForDate:self.monthPlannerView.visibleDays.start]; - if ([self.monthPlannerView.visibleDays.start isEqualToDate:date]) { - NSDateComponents *comps = [NSDateComponents new]; - comps.month = -1; - date = [self.calendar dateByAddingComponents:comps toDate:date options:0]; - } - [self moveToDate:date animated:animated]; -} - -@end diff --git a/CalendarDemo/MonthViewController.swift b/CalendarDemo/MonthViewController.swift new file mode 100644 index 00000000..909286bb --- /dev/null +++ b/CalendarDemo/MonthViewController.swift @@ -0,0 +1,26 @@ +// +// Created by Hai Nguyen Thanh on 8/30/20. +// Copyright (c) 2020 Julien Martin. All rights reserved. +// + +import UniversalCalendar + +class MonthViewController: MGCMonthPlannerViewController, CalendarViewControllerNavigation { + var centerDate: Date! + + func move(to date: Date!, animated: Bool) { + + } + + func moveToNextPage(animated: Bool) { + + } + + func moveToPreviousPage(animated: Bool) { + + } + + override func viewDidLoad() { + super.viewDidLoad() + } +} diff --git a/CalendarDemo/WeekSettingsViewController.h b/CalendarDemo/WeekSettingsViewController.h index da778a35..b06e9d3f 100755 --- a/CalendarDemo/WeekSettingsViewController.h +++ b/CalendarDemo/WeekSettingsViewController.h @@ -6,7 +6,7 @@ // #import -#import "WeekViewController.h" +#import "CalendarDemo-Swift.h" @protocol WeekSettingsViewControllerDelegate; diff --git a/CalendarDemo/WeekSettingsViewController.m b/CalendarDemo/WeekSettingsViewController.m index f49c436d..bed7d992 100755 --- a/CalendarDemo/WeekSettingsViewController.m +++ b/CalendarDemo/WeekSettingsViewController.m @@ -9,7 +9,7 @@ #import "MGCDateRange.h" #import "NSCalendar+MGCAdditions.h" #import "MGCStandardEventView.h" - +#import "CalendarDemo-Swift.h" @interface CustomEventView : MGCStandardEventView @end @@ -141,7 +141,7 @@ - (void)viewDidLoad self.eventMovingSwitch.on = self.dayPlannerView.canMoveEvents; self.eventSelectionSwitch.on = self.dayPlannerView.allowsSelection; - self.dimmedTimeRangeSwitch.on = self.weekViewController.showDimmedTimeRanges; +// self.dimmedTimeRangeSwitch.on = self.weekViewController.showDimmedTimeRanges; // Uncomment the following line to preserve selection between presentations. // self.clearsSelectionOnViewWillAppear = NO; @@ -301,7 +301,7 @@ - (IBAction)switchToggled:(UISwitch*)sender [self.dayPlannerView reloadAllEvents]; } else if (sender == self.dimmedTimeRangeSwitch) { - self.weekViewController.showDimmedTimeRanges = sender.on; +// self.weekViewController.showDimmedTimeRanges = sender.on; [self.dayPlannerView reloadDimmedTimeRanges]; } } diff --git a/CalendarDemo/WeekViewController.h b/CalendarDemo/WeekViewController.h deleted file mode 100755 index 6f242b59..00000000 --- a/CalendarDemo/WeekViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// WeekViewController.h -// CalendarDemo - Graphical Calendars Library for iOS -// -// Copyright (c) 2014-2015 Julien Martin. All rights reserved. -// - -#import "MGCDayPlannerEKViewController.h" -#import "MainViewController.h" - - -@protocol WeekViewControllerDelegate - -@end - - -@interface WeekViewController : MGCDayPlannerEKViewController - -@property (nonatomic, weak) id delegate; -@property (nonatomic) BOOL showDimmedTimeRanges; - -@end diff --git a/CalendarDemo/WeekViewController.m b/CalendarDemo/WeekViewController.m deleted file mode 100755 index e7c4cb2b..00000000 --- a/CalendarDemo/WeekViewController.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// WeekViewController.m -// CalendarDemo - Graphical Calendars Library for iOS -// -// Copyright (c) 2014-2015 Julien Martin. All rights reserved. -// - -#import "WeekViewController.h" -#import "MGCDateRange.h" -#import "NSCalendar+MGCAdditions.h" -#import "NSAttributedString+MGCAdditions.h" -#import "Constant.h" - - -@implementation WeekViewController - -@dynamic delegate; - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.dayPlannerView.backgroundColor = [UIColor clearColor]; - self.dayPlannerView.backgroundView = [UIView new]; - self.dayPlannerView.backgroundView.backgroundColor = [UIColor whiteColor]; - - if (isiPad) { - //NSLog(@"---------------- iPAD ------------------"); - self.dayPlannerView.dateFormat = @"eee\nd MMM"; - self.dayPlannerView.dayHeaderHeight = 50; - } - else{ - //NSLog(@"---------------- iPhone ------------------"); - self.dayPlannerView.dateFormat = @"eee\nd \nMMM"; - self.dayPlannerView.dayHeaderHeight = 60; - } -} - -#pragma mark - MGCDayPlannerViewController - -- (BOOL)dayPlannerView:(MGCDayPlannerView*)view canCreateNewEventOfType:(MGCEventType)type atDate:(NSDate*)date -{ - NSDateComponents *comps = [self.calendar components:NSCalendarUnitWeekday fromDate:date]; - return comps.weekday != 1; -} - -- (void)dayPlannerView:(MGCDayPlannerView*)view didScroll:(MGCDayPlannerScrollType)scrollType -{ - NSDate *date = [view dateAtPoint:view.center rounded:YES]; - if (date && [self.delegate respondsToSelector:@selector(calendarViewController:didShowDate:)]) { - [self.delegate calendarViewController:self didShowDate:date]; - } -} - -- (BOOL)dayPlannerView:(MGCDayPlannerView*)view canMoveEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date toType:(MGCEventType)targetType date:(NSDate*)targetDate -{ - NSDateComponents *comps = [self.calendar components:NSCalendarUnitWeekday fromDate:targetDate]; - return (comps.weekday != 1 && comps.weekday != 7); -} - -/* -// test for custom time drawing -- (NSAttributedString*)dayPlannerView:(MGCDayPlannerView *)view attributedStringForTimeMark:(MGCDayPlannerTimeMark)mark time:(NSTimeInterval)ti -{ - if (mark == MGCDayPlannerTimeMarkFloating) return nil; - - NSDate *date = [NSDate dateWithTimeInterval:ti sinceDate:[self.calendar mgc_startOfDayForDate:[NSDate date]]]; - - NSMutableParagraphStyle *style = [NSMutableParagraphStyle new]; - style.alignment = NSTextAlignmentRight; - - UIColor *color = mark == MGCDayPlannerTimeMarkHeader ? [UIColor lightGrayColor] : [UIColor redColor]; - - static NSDateFormatter *dateFormatter = nil; - if (dateFormatter == nil) { - dateFormatter = [NSDateFormatter new]; - } - dateFormatter.dateFormat = mark == MGCDayPlannerTimeMarkHeader ? @"h a" : @"h:mm a"; - - - NSString *s = [dateFormatter stringFromDate:date]; - return [[NSAttributedString alloc]initWithString:s attributes:@{ NSParagraphStyleAttributeName: style, NSFontAttributeName: [UIFont systemFontOfSize:12], NSForegroundColorAttributeName: color }]; -} -*/ - -- (NSAttributedString*)dayPlannerView:(MGCDayPlannerView *)view attributedStringForDayHeaderAtDate:(NSDate *)date -{ - - static NSDateFormatter *dateFormatter = nil; - if (dateFormatter == nil) { - dateFormatter = [NSDateFormatter new]; - dateFormatter.dateFormat = @"eee d"; - } - - NSString *dayStr = [dateFormatter stringFromDate:date]; - - UIFont *font = [UIFont systemFontOfSize:15]; - NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:dayStr attributes:@{ NSFontAttributeName: font }]; - - if ([self.calendar mgc_isDate:date sameDayAsDate:[NSDate date]]) { - UIFont *boldFont = [UIFont boldSystemFontOfSize:15]; - - MGCCircleMark *mark = [MGCCircleMark new]; - mark.yOffset = boldFont.descender - mark.margin; - - NSUInteger dayStringStart = [dayStr rangeOfString:@" "].location + 1; - [attrStr addAttributes:@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: [UIColor whiteColor], MGCCircleMarkAttributeName: mark } range:NSMakeRange(dayStringStart, dayStr.length - dayStringStart)]; - - [attrStr processCircleMarksInRange:NSMakeRange(0, attrStr.length)]; - } - - NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; - para.alignment = NSTextAlignmentCenter; - [attrStr addAttribute:NSParagraphStyleAttributeName value:para range:NSMakeRange(0, attrStr.length)]; - - return attrStr; -} - -- (NSInteger)dayPlannerView:(MGCDayPlannerView *)view numberOfDimmedTimeRangesAtDate:(NSDate *)date -{ - if (!self.showDimmedTimeRanges) return 0; - return [self.calendar isDateInWeekend:date] ? 1 : 2; -} - -- (MGCDateRange*)dayPlannerView:(MGCDayPlannerView *)view dimmedTimeRangeAtIndex:(NSUInteger)index date:(NSDate *)date -{ - NSDate *start, *end; - - if ([self.calendar isDateInWeekend:date] || index == 0) { - start = [self.calendar dateBySettingHour:0 minute:0 second:0 ofDate:date options:0]; - } - else { - start = [self.calendar dateBySettingHour:19 minute:0 second:0 ofDate:date options:0]; - } - - if ([self.calendar isDateInWeekend:date] || index == 1) { - end = [self.calendar dateBySettingHour:23 minute:59 second:0 ofDate:date options:0]; - } - else { - end = [self.calendar dateBySettingHour:8 minute:59 second:0 ofDate:date options:0]; - } - return [MGCDateRange dateRangeWithStart:start end:end]; -} - - -#pragma mark - CalendarControllerNavigation - -- (void)moveToDate:(NSDate*)date animated:(BOOL)animated -{ - if (!self.dayPlannerView.dateRange || [self.dayPlannerView.dateRange containsDate:date]) { - [self.dayPlannerView scrollToDate:date options:MGCDayPlannerScrollDateTime animated:animated]; - } -} - -- (void)moveToNextPageAnimated:(BOOL)animated -{ - NSDate *date; - [self.dayPlannerView pageForwardAnimated:animated date:&date]; - //NSLog(@"paging forward to %@", date); -} - -- (void)moveToPreviousPageAnimated:(BOOL)animated -{ - NSDate *date; - [self.dayPlannerView pageBackwardsAnimated:animated date:&date]; - //NSLog(@"paging backwards to %@", date); -} - -- (NSDate*)centerDate -{ - NSDate *date = [self.dayPlannerView dateAtPoint:self.dayPlannerView.center rounded:NO]; - return date; -} - -@end diff --git a/CalendarDemo/WeekViewController.swift b/CalendarDemo/WeekViewController.swift new file mode 100644 index 00000000..5112b97e --- /dev/null +++ b/CalendarDemo/WeekViewController.swift @@ -0,0 +1,87 @@ +// +// WeekViewController.swift +// CalendarDemo +// +// Created by Hai Nguyen Thanh on 8/30/20. +// Copyright © 2020 Julien Martin. All rights reserved. +// + +import UIKit +import UniversalCalendar + +class WeekViewController: MGCDayPlannerViewController, CalendarViewControllerNavigation { + override func viewDidLoad() { + super.viewDidLoad() + + self.dayPlannerView.numberOfVisibleDays = 7 + } + + private(set) var centerDate: Date! = Date() + + func move(to date: Date!, animated: Bool) { + } + + func moveToNextPage(animated: Bool) { + } + + func moveToPreviousPage(animated: Bool) { + } +} + +extension WeekViewController { +// open override func dayPlannerView(_ view: MGCDayPlannerView!, attributedStringFor mark: MGCDayPlannerTimeMark, time ti: TimeInterval) -> NSAttributedString! { +// fatalError("dayPlannerView(_:attributedStringFor:time:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, attributedStringForDayHeaderAt date: Date!) -> NSAttributedString! { +// fatalError("dayPlannerView(_:attributedStringForDayHeaderAt:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, numberOfDimmedTimeRangesAt date: Date!) -> Int { +// fatalError("dayPlannerView(_:numberOfDimmedTimeRangesAt:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, dimmedTimeRangeAt index: UInt, date: Date!) -> MGCDateRange! { +// fatalError("dayPlannerView(_:dimmedTimeRangeAt:date:) has not been implemented") +// } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didScroll scrollType: MGCDayPlannerScrollType) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didEndScrolling scrollType: MGCDayPlannerScrollType) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, willDisplay date: Date!) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didEndDisplaying date: Date!) { + } + + open override func dayPlannerViewDidZoom(_ view: MGCDayPlannerView!) { + } + +// open override func dayPlannerView(_ view: MGCDayPlannerView!, shouldSelectEventOf type: MGCEventType, at index: UInt, date: Date!) -> Bool { +// fatalError("dayPlannerView(_:shouldSelectEventOf:at:date:) has not been implemented") +// } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didSelectEventOf type: MGCEventType, at index: UInt, date: Date!) { + } + + open override func dayPlannerView(_ view: MGCDayPlannerView!, didDeselectEventOf type: MGCEventType, at index: UInt, date: Date!) { + } +} + +extension WeekViewController { + open override func dayPlannerView(_ view: MGCDayPlannerView!, numberOfEventsOf type: MGCEventType, at date: Date!) -> Int { + return 0 + } + +// open override func dayPlannerView(_ view: MGCDayPlannerView!, viewForEventOf type: MGCEventType, at index: UInt, date: Date!) -> MGCEventView! { +// fatalError("dayPlannerView(_:viewForEventOf:at:date:) has not been implemented") +// } +// +// open override func dayPlannerView(_ view: MGCDayPlannerView!, dateRangeForEventOf type: MGCEventType, at index: UInt, date: Date!) -> MGCDateRange! { +// fatalError("dayPlannerView(_:dateRangeForEventOf:at:date:) has not been implemented") +// } +} + diff --git a/CalendarDemo/main-iPad.storyboard b/CalendarDemo/main-iPad.storyboard index 33d7bdb0..15a6b129 100755 --- a/CalendarDemo/main-iPad.storyboard +++ b/CalendarDemo/main-iPad.storyboard @@ -1,8 +1,10 @@ - - + + + - + + @@ -23,11 +25,11 @@ - - + + - + @@ -42,7 +44,7 @@ - + @@ -64,33 +66,33 @@ - + @@ -131,7 +133,7 @@ - + @@ -141,7 +143,7 @@ - + @@ -149,7 +151,61 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CalendarDemo/main-iPhone.storyboard b/CalendarDemo/main-iPhone.storyboard index 13b18de0..e30cec58 100644 --- a/CalendarDemo/main-iPhone.storyboard +++ b/CalendarDemo/main-iPhone.storyboard @@ -1,9 +1,10 @@ - - + + + - - + + @@ -15,15 +16,15 @@ - + - + - + - + @@ -45,7 +46,7 @@ - + @@ -61,7 +62,7 @@ - + @@ -104,7 +105,7 @@ - + @@ -116,7 +117,7 @@ - + diff --git a/CalendarDocs/DayPlannerView.png b/CalendarDocs/DayPlannerView.png index 9deba929..065cb026 100644 Binary files a/CalendarDocs/DayPlannerView.png and b/CalendarDocs/DayPlannerView.png differ diff --git a/CalendarDocs/MonthPlannerView.png b/CalendarDocs/MonthPlannerView.png index 9968a472..9d4ae1df 100644 Binary files a/CalendarDocs/MonthPlannerView.png and b/CalendarDocs/MonthPlannerView.png differ diff --git a/CalendarDocs/MonthPlannerView2.png b/CalendarDocs/MonthPlannerView2.png index 4c699fc3..5ee2a331 100644 Binary files a/CalendarDocs/MonthPlannerView2.png and b/CalendarDocs/MonthPlannerView2.png differ diff --git a/CalendarDocs/osx_2days.png b/CalendarDocs/osx_2days.png new file mode 100644 index 00000000..88b7159b Binary files /dev/null and b/CalendarDocs/osx_2days.png differ diff --git a/CalendarDocs/osx_month.png b/CalendarDocs/osx_month.png new file mode 100644 index 00000000..23627b0b Binary files /dev/null and b/CalendarDocs/osx_month.png differ diff --git a/CalendarDocs/osx_week.png b/CalendarDocs/osx_week.png new file mode 100644 index 00000000..2e5f3e78 Binary files /dev/null and b/CalendarDocs/osx_week.png differ diff --git a/CalendarDocs/osx_year.png b/CalendarDocs/osx_year.png new file mode 100644 index 00000000..2f888bcc Binary files /dev/null and b/CalendarDocs/osx_year.png differ diff --git a/CalendarLib.podspec b/CalendarLib.podspec deleted file mode 100644 index 3bf164d4..00000000 --- a/CalendarLib.podspec +++ /dev/null @@ -1,17 +0,0 @@ -Pod::Spec.new do |s| - s.name = "CalendarLib" - s.version = "2.0" - s.summary = "A set of views and controllers for displaying and scheduling events on iOS" - s.homepage = "https://github.com/jumartin/Calendar" - s.license = "MIT" - s.author = { "Julien Martin" => "julienmartin@hotmail.com" } - s.platform = :ios, "8.0" - s.source = { :git => "https://github.com/jumartin/Calendar.git", :tag => s.version.to_s } - s.screenshots = [ "https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/DayPlannerView.jpg", "https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/MonthPlannerView.jpg", "https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/YearView.jpg"] - s.source_files = "CalendarLib/**/*.{h,m}" - s.public_header_files = "CalendarLib/{MGCDateRange.h,NSCalendar+MGCAdditions.h,NSAttributedString+MGCAdditions.h,MGCDayPlannerEKViewController.h,MGCMonthPlannerEKViewController.h,MGCEventView.h,MGCStandardEventView.h,MGCDayPlannerView.h,MGCDayPlannerViewController.h,MGCMonthPlannerView.h,MGCMonthPlannerViewController.h,MGCMonthMiniCalendarView.h,MGCYearCalendarView.h,MGCReusableObjectQueue.h}" - s.resource_bundle = { 'CalendarLib' => ['CalendarLib/*.lproj'] } - s.frameworks = "EventKit", "EventKitUI", "UIKit", "Foundation", "CoreGraphics" - s.dependency "OSCache", "~> 1.2" - s.dependency "OrderedDictionary", "~> 1.2" -end diff --git a/CalendarLib/MGCDayPlannerEKViewController.h b/CalendarLib/MGCDayPlannerEKViewController.h deleted file mode 100755 index e690ad6d..00000000 --- a/CalendarLib/MGCDayPlannerEKViewController.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// MGCDayPlannerEKViewController.h -// Graphical Calendars Library for iOS -// -// Distributed under the MIT License -// Get the latest version from here: -// -// https://github.com/jumartin/Calendar -// -// Copyright (c) 2014-2015 Julien Martin -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -#import -#import -#import "MGCDayPlannerViewController.h" - - -@protocol MGCDayPlannerEKViewControllerDelegate; - - -@interface MGCDayPlannerEKViewController : MGCDayPlannerViewController - -@property (nonatomic) NSCalendar *calendar; -@property (nonatomic) NSSet *visibleCalendars; -@property (nonatomic, readonly) EKEventStore *eventStore; -@property (nonatomic, weak) id delegate; - -/** designated initializer */ -- (instancetype)initWithEventStore:(EKEventStore*)eventStore; -- (void)reloadEvents; - -@end - - -@protocol MGCDayPlannerEKViewControllerDelegate - - -@optional - -- (void)dayPlannerEKEViewController:(MGCDayPlannerEKViewController*)vc willPresentEventViewController:(EKEventViewController*)eventViewController; -- (UINavigationController*)dayPlannerEKViewController:(MGCDayPlannerEKViewController*)vc navigationControllerForPresentingEventViewController:(EKEventViewController*)eventViewController; - -@end diff --git a/CalendarLib/MGCDayPlannerEKViewController.m b/CalendarLib/MGCDayPlannerEKViewController.m deleted file mode 100755 index 257cf1b9..00000000 --- a/CalendarLib/MGCDayPlannerEKViewController.m +++ /dev/null @@ -1,542 +0,0 @@ -// -// MGCDayPlannerEKViewController.m -// Graphical Calendars Library for iOS -// -// Distributed under the MIT License -// Get the latest version from here: -// -// https://github.com/jumartin/Calendar -// -// Copyright (c) 2014-2015 Julien Martin -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -#import - -#import "MGCDayPlannerEKViewController.h" -#import "MGCStandardEventView.h" -#import "NSCalendar+MGCAdditions.h" -#import "MGCDateRange.h" -#import "OSCache.h" -#import "MGCEventKitSupport.h" - - -typedef enum { - TimedEventType = 1, - AllDayEventType = 2, - AnyEventType = TimedEventType|AllDayEventType -} EventType; - - -static const NSUInteger cacheSize = 400; // size of the cache (in days) -static NSString* const EventCellReuseIdentifier = @"EventCellReuseIdentifier"; - - -@interface MGCDayPlannerEKViewController () - -@property (nonatomic) MGCEventKitSupport *eventKitSupport; -@property (nonatomic) dispatch_queue_t bgQueue; // dispatch queue for loading events -@property (nonatomic) NSMutableOrderedSet *daysToLoad; // dates for months of which we want to load events -@property (nonatomic) NSCache *eventsCache; -@property (nonatomic) NSUInteger createdEventType; -@property (nonatomic, copy) NSDate *createdEventDate; - -@end - - -@implementation MGCDayPlannerEKViewController - -@synthesize calendar = _calendar; - -- (instancetype)initWithEventStore:(EKEventStore*)eventStore -{ - if (self = [super initWithNibName:nil bundle:nil]) { - _eventKitSupport = [[MGCEventKitSupport alloc]initWithEventStore:eventStore]; - } - return self; -} - -- (void)reloadEvents -{ - for (NSDate *date in self.daysToLoad) { - [self.dayPlannerView setActivityIndicatorVisible:NO forDate:date]; - } - [self.daysToLoad removeAllObjects]; - - [self.eventsCache removeAllObjects]; - [self fetchEventsInDateRange:self.dayPlannerView.visibleDays]; - [self.dayPlannerView reloadAllEvents]; -} - -- (void)showEditControllerForEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date -{ - EKEvent *ev = [self eventOfType:type atIndex:index date:date]; - - MGCEventView *view = [self.dayPlannerView eventViewOfType:type atIndex:index date:date]; - - MGCEKEventViewController *eventController = [MGCEKEventViewController new]; - eventController.event = ev; - eventController.delegate = self; - eventController.allowsEditing = YES; - eventController.allowsCalendarPreview = YES; - - UINavigationController *nc = nil; - if ([self.delegate respondsToSelector:@selector(dayPlannerEKViewController:navigationControllerForPresentingEventViewController:)]) { - nc = [self.delegate dayPlannerEKViewController:self navigationControllerForPresentingEventViewController:eventController]; - } - - if (nc) { - [nc pushViewController:eventController animated:YES]; - } - else { - nc = [[UINavigationController alloc]initWithRootViewController:eventController]; - nc.modalPresentationStyle = UIModalPresentationPopover; - eventController.presentationController.delegate = self; - - [self showDetailViewController:nc sender:self]; - - CGRect visibleRect = CGRectIntersection(self.dayPlannerView.bounds, [self.dayPlannerView convertRect:view.bounds fromView:view]); - UIPopoverPresentationController *popController = nc.popoverPresentationController; - popController.permittedArrowDirections = UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight; - popController.delegate = self; - popController.sourceView = self.dayPlannerView; - popController.sourceRect = visibleRect; - } -} - -- (void)showPopoverForNewEvent:(EKEvent*)ev -{ - EKEventEditViewController *eventController = [EKEventEditViewController new]; - eventController.event = ev; - eventController.eventStore = self.eventStore; - eventController.editViewDelegate = self; // called only when event is deleted - eventController.modalInPopover = YES; - eventController.modalPresentationStyle = UIModalPresentationPopover; - eventController.presentationController.delegate = self; - - [self showDetailViewController:eventController sender:self]; - - CGRect cellRect = [self.dayPlannerView rectForNewEventOfType:self.createdEventType atDate:self.createdEventDate]; - CGRect visibleRect = CGRectIntersection(self.dayPlannerView.bounds, cellRect); - - UIPopoverPresentationController *popController = eventController.popoverPresentationController; - popController.permittedArrowDirections = UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight; - popController.delegate = self; - popController.sourceView = self.dayPlannerView; - popController.sourceRect = visibleRect; -} - -#pragma mark - UIViewController - -- (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil -{ - return [self initWithEventStore:nil]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter]removeObserver:self]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reloadEvents) name:EKEventStoreChangedNotification object:self.eventStore]; - - self.eventsCache = [[OSCache alloc]init]; - self.eventsCache.countLimit = cacheSize; - //self.eventsCache.delegate = self; - - self.bgQueue = dispatch_queue_create("MGCDayPlannerEKViewController.bgQueue", NULL); - - [self.eventKitSupport checkEventStoreAccessForCalendar:^(BOOL granted) { - if (granted) { - NSArray *calendars = [self.eventStore calendarsForEntityType:EKEntityTypeEvent]; - self.visibleCalendars = [NSSet setWithArray:calendars]; - [self reloadEvents]; - } - }]; - - self.dayPlannerView.calendar = self.calendar; - [self.dayPlannerView registerClass:MGCStandardEventView.class forEventViewWithReuseIdentifier:EventCellReuseIdentifier]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; -} - -#pragma mark - Properties - -- (NSCalendar*)calendar -{ - if (_calendar == nil) { - _calendar = [NSCalendar currentCalendar]; - } - return _calendar; -} - -- (void)setCalendar:(NSCalendar*)calendar -{ - _calendar = calendar; - self.dayPlannerView.calendar = calendar; -} - -- (EKEventStore*)eventStore -{ - return self.eventKitSupport.eventStore; -} - -- (void)setVisibleCalendars:(NSSet*)visibleCalendars -{ - _visibleCalendars = visibleCalendars; - [self.dayPlannerView reloadAllEvents]; -} - -#pragma mark - Loading events - -- (void)fetchEventsInDateRange:(MGCDateRange*)range -{ - range.start = [self.calendar mgc_startOfDayForDate:range.start]; - range.end = [self.calendar mgc_nextStartOfDayForDate:range.end]; - - [range enumerateDaysWithCalendar:self.calendar usingBlock:^(NSDate *date, BOOL *stop) { - NSDate *dayEnd = [self.calendar mgc_nextStartOfDayForDate:date]; - NSArray *events = [self fetchEventsFrom:date to:dayEnd calendars:nil]; - [self.eventsCache setObject:events forKey:date]; - }]; -} - -- (NSArray*)fetchEventsFrom:(NSDate*)startDate to:(NSDate*)endDate calendars:(NSArray*)calendars -{ - NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendars]; - - if (self.eventKitSupport.accessGranted) { - NSArray *events = [self.eventStore eventsMatchingPredicate:predicate]; - if (events) { - return [events sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)]; - } - } - - return [NSArray array]; -} - -// returns the events dictionary for given date -// try to load it from the cache, or create it if needed -- (NSArray*)eventsForDay:(NSDate*)date -{ - NSDate *dayStart = [self.calendar mgc_startOfDayForDate:date]; - - NSArray *events = [self.eventsCache objectForKey:dayStart]; - - if (!events) { // cache miss: create dictionary... - NSDate *dayEnd = [self.calendar mgc_nextStartOfDayForDate:dayStart]; - events = [self fetchEventsFrom:dayStart to:dayEnd calendars:nil]; - [self.eventsCache setObject:events forKey:dayStart]; - } - - return events; -} - -- (NSArray*)eventsOfType:(EventType)type forDay:(NSDate*)date -{ - NSArray *events = [self eventsForDay:date]; - - NSMutableArray *filteredEvents = [NSMutableArray new]; - [events enumerateObjectsUsingBlock:^(EKEvent *ev, NSUInteger idx, BOOL *stop) { - - if ([self.visibleCalendars containsObject:ev.calendar]) { - if (type & AllDayEventType && ev.isAllDay) - [filteredEvents addObject:ev]; - else if (type & TimedEventType && !ev.isAllDay) - [filteredEvents addObject:ev]; - } - }]; - - return filteredEvents; -} - -- (EKEvent*)eventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date -{ - NSArray *events = nil; - - if (type == MGCAllDayEventType) { - events = [self eventsOfType:AllDayEventType forDay:date]; - } - else if (type == MGCTimedEventType) { - events = [self eventsOfType:TimedEventType forDay:date]; - } - - return [events objectAtIndex:index]; -} - -- (void)bg_loadEventsAtDate:(NSDate*)date -{ - //NSLog(@"bg_loadEventsAtDate: %@", date); - - NSDate *dayStart = [self.calendar mgc_startOfDayForDate:date]; - - [self eventsOfType:AnyEventType forDay:dayStart]; - - dispatch_async(dispatch_get_main_queue(), ^{ - [self.dayPlannerView reloadEventsAtDate:date]; - [self.dayPlannerView setActivityIndicatorVisible:NO forDate:dayStart]; - }); -} - -- (void)bg_loadOneDay -{ - __block NSDate *date; - - dispatch_sync(dispatch_get_main_queue(), ^{ - if ((date = [self.daysToLoad firstObject])) { - [self.daysToLoad removeObject:date]; - } - - if (![self.dayPlannerView.visibleDays containsDate:date]) { - date = nil; - } - }); - - if (date) { - [self bg_loadEventsAtDate:date]; - } -} - -- (BOOL)loadEventsAtDate:(NSDate*)date -{ - NSDate *dayStart = [self.calendar mgc_startOfDayForDate:date]; - - if (![self.eventsCache objectForKey:dayStart]) { - [self.dayPlannerView setActivityIndicatorVisible:YES forDate:dayStart]; - - if (!self.daysToLoad) { - self.daysToLoad = [NSMutableOrderedSet orderedSet]; - } - - [self.daysToLoad addObject:dayStart]; - - dispatch_async(self.bgQueue, ^{ [self bg_loadOneDay]; }); - - return YES; - } - return NO; -} - -#pragma mark - MGCDayPlannerViewDataSource - -- (NSInteger)dayPlannerView:(MGCDayPlannerView*)weekView numberOfEventsOfType:(MGCEventType)type atDate:(NSDate*)date -{ - NSInteger count = 0; - - if (![self loadEventsAtDate:date]) { - if (type == MGCAllDayEventType) { - count = [[self eventsOfType:AllDayEventType forDay:date]count]; - } - else { - count = [[self eventsOfType:TimedEventType forDay:date]count]; - } - } - return count; -} - -- (MGCEventView*)dayPlannerView:(MGCDayPlannerView*)view viewForEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date -{ - EKEvent *ev = [self eventOfType:type atIndex:index date:date]; - - MGCStandardEventView *evCell = (MGCStandardEventView*)[view dequeueReusableViewWithIdentifier:EventCellReuseIdentifier forEventOfType:type atIndex:index date:date]; - evCell.font = [UIFont systemFontOfSize:11]; - evCell.title = ev.title; - evCell.subtitle = ev.location; - evCell.color = [UIColor colorWithCGColor:ev.calendar.CGColor]; - evCell.style = MGCStandardEventViewStylePlain|MGCStandardEventViewStyleSubtitle; - evCell.style |= (type == MGCAllDayEventType) ?: MGCStandardEventViewStyleBorder; - return evCell; -} - -- (MGCDateRange*)dayPlannerView:(MGCDayPlannerView*)view dateRangeForEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date -{ - EKEvent *ev = [self eventOfType:type atIndex:index date:date]; - - NSDate *end = ev.endDate; - if (type == MGCAllDayEventType) { - end = [self.calendar mgc_nextStartOfDayForDate:end]; - } - - return [MGCDateRange dateRangeWithStart:ev.startDate end:end]; -} - -- (BOOL)dayPlannerView:(MGCDayPlannerView*)view shouldStartMovingEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date -{ - EKEvent *ev = [self eventOfType:type atIndex:index date:date]; - return ev.calendar.allowsContentModifications; -} - -- (BOOL)dayPlannerView:(MGCDayPlannerView*)view canMoveEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date toType:(MGCEventType)targetType date:(NSDate*)targetDate -{ - EKEvent *ev = [self eventOfType:type atIndex:index date:date]; - return ev.calendar.allowsContentModifications; -} - -- (void)dayPlannerView:(MGCDayPlannerView*)view moveEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date toType:(MGCEventType)targetType date:(NSDate*)targetDate -{ - EKEvent *ev = [self eventOfType:type atIndex:index date:date]; - - if (ev) { - NSDateComponents *duration = [self.calendar components:NSMinuteCalendarUnit fromDate:ev.startDate toDate:ev.endDate options:0]; - if (ev.allDay && targetType == MGCTimedEventType) { - duration.minute = view.durationForNewTimedEvent / 60; - } - NSDate *end = [self.calendar dateByAddingComponents:duration toDate:targetDate options:0]; - - // allDay property has to be set before start and end dates ! - ev.allDay = (targetType == MGCAllDayEventType); - ev.startDate = targetDate; - ev.endDate = end; - - [self.eventKitSupport saveEvent:ev completion:^(BOOL completion) { - [self.dayPlannerView endInteraction]; - }]; - } -} - -- (MGCEventView*)dayPlannerView:(MGCDayPlannerView*)view viewForNewEventOfType:(MGCEventType)type atDate:(NSDate*)date -{ - EKCalendar *defaultCalendar = [self.eventStore defaultCalendarForNewEvents]; - - MGCStandardEventView *evCell = [MGCStandardEventView new]; - evCell.title = NSLocalizedString(@"New Event", nil); - evCell.color = [UIColor colorWithCGColor:defaultCalendar.CGColor]; - return evCell; -} - -- (void)dayPlannerView:(MGCDayPlannerView *)view createNewEventOfType:(MGCEventType)type atDate:(NSDate*)date -{ - self.createdEventType = type; - self.createdEventDate = date; - - EKEvent *ev = [EKEvent eventWithEventStore:self.eventStore]; - ev.startDate = date; - - NSDateComponents *comps = [NSDateComponents new]; - comps.day = ((NSInteger) view.durationForNewTimedEvent) / (60 * 60 * 24); - comps.hour = (((NSInteger) view.durationForNewTimedEvent) / (60 * 60)) - (comps.day * 24); - comps.minute = (((NSInteger) view.durationForNewTimedEvent) / 60) - (comps.day * 24 * 60) - (comps.hour * 60); - comps.second = ((NSInteger) round(view.durationForNewTimedEvent)) % 60; - - ev.endDate = [self.calendar dateByAddingComponents:comps toDate:date options:0]; - ev.allDay = (type == MGCAllDayEventType) ? YES : NO; - - [self showPopoverForNewEvent:ev]; -} - -#pragma mark - MGCDayPlannerViewDelegate - -- (void)dayPlannerView:(MGCDayPlannerView*)view didSelectEventOfType:(MGCEventType)type atIndex:(NSUInteger)index date:(NSDate*)date -{ - [self showEditControllerForEventOfType:type atIndex:index date:date]; -} - -- (void)dayPlannerView:(MGCDayPlannerView*)view willDisplayDate:(NSDate*)date -{ - //NSLog(@"will display %@", date); - BOOL loading = [self loadEventsAtDate:date]; - if (!loading) { - [self.dayPlannerView setActivityIndicatorVisible:NO forDate:date]; - } -} - -- (void)dayPlannerView:(MGCDayPlannerView*)view didEndDisplayingDate:(NSDate*)date -{ - //NSLog(@"did end displaying %@", date); - [self.daysToLoad removeObject:date]; -} - -#pragma mark - EKEventEditViewDelegate - -- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action -{ - [self dismissViewControllerAnimated:YES completion:nil]; - [self.dayPlannerView endInteraction]; - self.createdEventDate = nil; -} - -#pragma mark - EKEventViewDelegate - -- (void)eventViewController:(EKEventViewController *)controller didCompleteWithAction:(EKEventViewAction)action -{ - [self.dayPlannerView deselectEvent]; - if (controller.presentingViewController) { - [self dismissViewControllerAnimated:YES completion:nil]; - } else { - [controller.navigationController popViewControllerAnimated:YES]; - } -} - -#pragma mark - UIPopoverPresentationControllerDelegate - -//- (UIViewController*)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style -//{ -// if ([controller.presentedViewController isKindOfClass:EKEventEditViewController.class]) { -// return controller.presentedViewController; -// } -// else { -// UINavigationController *nc = [[UINavigationController alloc]initWithRootViewController:controller.presentedViewController]; -// nc.delegate = self; -// return nc; -// } -//} - - -- (void)popoverPresentationController:(UIPopoverPresentationController *)popoverPresentationController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing _Nonnull *)view -{ - CGRect cellRect; - if (self.createdEventDate) { - cellRect = [self.dayPlannerView rectForNewEventOfType:self.createdEventType atDate:self.createdEventDate]; - } - else { - UIView *cell = self.dayPlannerView.selectedEventView; - cellRect = [self.dayPlannerView convertRect:cell.bounds fromView:cell]; - } - CGRect visibleRect = CGRectIntersection(self.dayPlannerView.bounds, cellRect); - if (CGRectIsNull(visibleRect)) { - rect->origin.x = cellRect.origin.x; - rect->origin.y = fminf(cellRect.origin.y, CGRectGetMaxY(self.dayPlannerView.bounds)); - rect->size.width = cellRect.size.width; - } - else { - *rect = visibleRect; - } -} - -- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController -{ - [self.dayPlannerView deselectEvent]; -} - -#pragma mark - UINavigationControllerDelegate - -//- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated -//{ -//} - -@end - diff --git a/CalendarLib/MGCMonthPlannerEKViewController.h b/CalendarLib/MGCMonthPlannerEKViewController.h deleted file mode 100755 index 6b396c67..00000000 --- a/CalendarLib/MGCMonthPlannerEKViewController.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// MGCMonthPlannerEKViewController.h -// Graphical Calendars Library for iOS -// -// Distributed under the MIT License -// Get the latest version from here: -// -// https://github.com/jumartin/Calendar -// -// Copyright (c) 2014-2015 Julien Martin -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -#import -#import "MGCMonthPlannerViewController.h" - - -@interface MGCMonthPlannerEKViewController : MGCMonthPlannerViewController - -@property (nonatomic) NSCalendar *calendar; -@property (nonatomic) NSSet *visibleCalendars; -@property (nonatomic, readonly) EKEventStore *eventStore; - -/** designated initializer */ -- (instancetype)initWithEventStore:(EKEventStore*)eventStore; -- (void)reloadEvents; - -@end diff --git a/CalendarLib/MGCMonthPlannerEKViewController.m b/CalendarLib/MGCMonthPlannerEKViewController.m deleted file mode 100755 index 9935522e..00000000 --- a/CalendarLib/MGCMonthPlannerEKViewController.m +++ /dev/null @@ -1,544 +0,0 @@ -// -// MGCMonthPlannerEKViewController.m -// Graphical Calendars Library for iOS -// -// Distributed under the MIT License -// Get the latest version from here: -// -// https://github.com/jumartin/Calendar -// -// Copyright (c) 2014-2015 Julien Martin -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -#import - -#import "MGCMonthPlannerEKViewController.h" -#import "MGCStandardEventView.h" -#import "NSCalendar+MGCAdditions.h" -#import "OSCache.h" -#import "MGCEventKitSupport.h" - - -static NSString* const EventCellReuseIdentifier = @"EventCellReuseIdentifier"; - - -@interface MGCMonthPlannerEKViewController () - -@property (nonatomic) MGCEventKitSupport *eventKitSupport; -@property (nonatomic) NSCache *cachedMonths; // cache of events: { month_startDate: { day: [events] } } -@property (nonatomic) dispatch_queue_t bgQueue; // dispatch queue for loading events -@property (nonatomic) NSMutableOrderedSet *datesForMonthsToLoad; // dates for months of which we want to load events -@property (nonatomic) MGCDateRange *visibleMonths; // range of months currently shown -@property (nonatomic) EKEvent *movedEvent; -@property (nonatomic) NSDateFormatter *dateFormatter; - -@end - - -@implementation MGCMonthPlannerEKViewController - -// designated initializer -- (instancetype)initWithEventStore:(EKEventStore*)eventStore -{ - if (self = [super initWithNibName:nil bundle:nil]) { - _eventKitSupport = [[MGCEventKitSupport alloc]initWithEventStore:eventStore]; - - } - return self; -} - -- (void)reloadEvents -{ - [self.cachedMonths removeAllObjects]; - [self loadEventsIfNeeded]; -} - -- (void)showEditControllerForEventAtIndex:(NSUInteger)index date:(NSDate*)date rect:(CGRect)rect -{ - EKEvent *ev = [self eventAtIndex:index date:date]; - if (!ev) return; - - MGCEKEventViewController *eventController = [MGCEKEventViewController new]; - eventController.event = ev; - eventController.delegate = self; - eventController.allowsEditing = YES; - eventController.allowsCalendarPreview = YES; - - UINavigationController *nc = nil; -// if ([self.delegate respondsToSelector:@selector(dayPlannerEKViewController:navigationControllerForPresentingEventViewController:)]) { -// nc = [self.delegate dayPlannerEKViewController:self navigationControllerForPresentingEventViewController:eventController]; -// } -// - if (nc) { - [nc pushViewController:eventController animated:YES]; - } - else { - nc = [[UINavigationController alloc]initWithRootViewController:eventController]; - nc.modalPresentationStyle = UIModalPresentationPopover; - eventController.presentationController.delegate = self; - - [self showDetailViewController:nc sender:self]; - - //CGRect visibleRect = CGRectIntersection(self.monthPlannerView.bounds, [self.monthPlannerView convertRect:view.bounds fromView:view]); - UIPopoverPresentationController *popController = nc.popoverPresentationController; - popController.permittedArrowDirections = UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight; - popController.delegate = self; - popController.sourceView = self.monthPlannerView; - popController.sourceRect = rect; - } -} - -- (void)showPopoverForNewEvent:(EKEvent*)ev withCell:(MGCEventView*)cell -{ - EKEventEditViewController *eventController = [EKEventEditViewController new]; - eventController.event = ev; - eventController.eventStore = self.eventStore; - eventController.editViewDelegate = self; // called only when event is deleted - eventController.modalInPopover = YES; - eventController.modalPresentationStyle = UIModalPresentationPopover; - eventController.presentationController.delegate = self; - - [self showDetailViewController:eventController sender:self]; - - UIPopoverPresentationController *popController = eventController.popoverPresentationController; - popController.permittedArrowDirections = UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight; - popController.delegate = self; - popController.sourceView = cell; - popController.sourceRect = cell.bounds; -} - -#pragma mark - UIViewController - -- (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil -{ - return [self initWithEventStore:nil]; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter]removeObserver:self]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reloadEvents) name:EKEventStoreChangedNotification object:self.eventStore]; - - self.cachedMonths = [[OSCache alloc]init]; - - self.bgQueue = dispatch_queue_create("MGCMonthPlannerEKViewController.bgQueue", NULL); - - self.dateFormatter = [NSDateFormatter new]; - self.dateFormatter.dateStyle = NSDateFormatterNoStyle; - self.dateFormatter.timeStyle = NSDateFormatterShortStyle; - - [self.eventKitSupport checkEventStoreAccessForCalendar:^(BOOL granted) { - if (granted) { - NSArray *calendars = [self.eventStore calendarsForEntityType:EKEntityTypeEvent]; - self.visibleCalendars = [NSSet setWithArray:calendars]; - [self reloadEvents]; - } - }]; - - self.monthPlannerView.calendar = self.calendar; - [self.monthPlannerView registerClass:MGCStandardEventView.class forEventCellReuseIdentifier:EventCellReuseIdentifier]; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - [self loadEventsIfNeeded]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // nothing special to do here, the cache of events cachedMonths will clear by itself. -} - -#pragma mark - Properties - - -- (void)setCalendar:(NSCalendar *)calendar -{ - _calendar = calendar; - self.dateFormatter.calendar = calendar; - self.monthPlannerView.calendar = calendar; -} - -- (EKEventStore*)eventStore -{ - return self.eventKitSupport.eventStore; -} - -- (void)setVisibleCalendars:(NSSet*)visibleCalendars -{ - _visibleCalendars = visibleCalendars; - [self.monthPlannerView reloadEvents]; -} - -#pragma mark - Events loading - -- (NSArray*)eventsAtDate:(NSDate*)date -{ - NSDate *firstOfMonth = [self.calendar mgc_startOfMonthForDate:date]; - NSMutableDictionary *days = [self.cachedMonths objectForKey:firstOfMonth]; - - NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(EKEvent *ev, NSDictionary *bindings) { - return [self.visibleCalendars containsObject:ev.calendar]; - }]; - - NSArray *events = [[days objectForKey:date]filteredArrayUsingPredicate:pred]; - - return events; -} - -- (EKEvent*)eventAtIndex:(NSUInteger)index date:(NSDate*)date -{ - NSArray *events = [self eventsAtDate:date]; - EKEvent *ev = [events objectAtIndex:index]; - return ev; -} - -- (MGCDateRange*)visibleMonthsRange -{ - MGCDateRange *visibleMonthsRange = nil; - - MGCDateRange *visibleDaysRange = [self.monthPlannerView visibleDays]; - if (visibleDaysRange) { - NSDate *start = [self.calendar mgc_startOfMonthForDate:visibleDaysRange.start]; - NSDate *end = [self.calendar mgc_nextStartOfMonthForDate:visibleDaysRange.end]; - visibleMonthsRange = [MGCDateRange dateRangeWithStart:start end:end]; - } - - return visibleMonthsRange; -} - -// returns an array of all events happening between startDate and endDate, sorted by start date -- (NSArray*)fetchEventsFrom:(NSDate*)startDate to:(NSDate*)endDate calendars:(NSArray*)calendars -{ - NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendars]; - - if (self.eventKitSupport.accessGranted) { - NSArray *events = [self.eventStore eventsMatchingPredicate:predicate]; - if (events) { - return [events sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)]; - } - } - - return [NSArray array]; -} - -- (NSDictionary*)allEventsInDateRange:(MGCDateRange*)range -{ - NSArray *events = [self fetchEventsFrom:range.start to:range.end calendars:nil]; - - NSUInteger numDaysInRange = [range components:NSCalendarUnitDay forCalendar:self.calendar].day; - NSMutableDictionary *eventsPerDay = [NSMutableDictionary dictionaryWithCapacity:numDaysInRange]; - - for (EKEvent *ev in events) - { - NSDate *start = [self.calendar mgc_startOfDayForDate:ev.startDate]; - MGCDateRange *eventRange = [MGCDateRange dateRangeWithStart:start end:ev.endDate]; - [eventRange intersectDateRange:range]; - - [eventRange enumerateDaysWithCalendar:self.calendar usingBlock:^(NSDate *date, BOOL *stop){ - NSMutableArray *events = [eventsPerDay objectForKey:date]; - if (!events) { - events = [NSMutableArray array]; - [eventsPerDay setObject:events forKey:date]; - } - - [events addObject:ev]; - }]; - } - - return eventsPerDay; -} - -//- (void)cacheEvents:(NSDictionary*)events forMonthStartingAtDate:(NSDate*)date -//{ -// [self.cachedMonths setObject:events forKey:date]; -// //[self.datesForMonthsToLoad removeObject:date]; -// -// NSDate *rangeEnd = [self.calendar mgc_nextStartOfMonthForDate:date]; -// MGCDateRange *range = [MGCDateRange dateRangeWithStart:date end:rangeEnd]; -// [self.monthPlannerView reloadEventsInRange:range]; -//} - -- (void)bg_loadMonthStartingAtDate:(NSDate*)date -{ - NSDate *end = [self.calendar mgc_nextStartOfMonthForDate:date]; - MGCDateRange *range = [MGCDateRange dateRangeWithStart:date end:end]; - - NSDictionary *dic = [self allEventsInDateRange:range]; - - dispatch_async(dispatch_get_main_queue(), ^{ - - [self.cachedMonths setObject:dic forKey:date]; - //[self.datesForMonthsToLoad removeObject:date]; - - NSDate *rangeEnd = [self.calendar mgc_nextStartOfMonthForDate:date]; - MGCDateRange *range = [MGCDateRange dateRangeWithStart:date end:rangeEnd]; - [self.monthPlannerView reloadEventsInRange:range]; - - //[self cacheEvents:dic forMonthStartingAtDate:date]; - }); -} - -- (void)bg_loadOneMonth -{ - __block NSDate *date; - - dispatch_sync(dispatch_get_main_queue(), ^{ - date = [self.datesForMonthsToLoad firstObject]; - if (date) { - [self.datesForMonthsToLoad removeObject:date]; - } - - if (![self.monthPlannerView.visibleDays intersectsDateRange:self.visibleMonths]) { - date = nil; - } - }); - - if (date) { - [self bg_loadMonthStartingAtDate:date]; - } -} - -- (void)addMonthToLoadingQueue:(NSDate*)monthStart -{ - if (!self.datesForMonthsToLoad) { - self.datesForMonthsToLoad = [NSMutableOrderedSet orderedSet]; - } - - [self.datesForMonthsToLoad addObject:monthStart]; - - dispatch_async(self.bgQueue, ^{ [self bg_loadOneMonth]; }); -} - -- (void)loadEventsIfNeeded -{ - [self.datesForMonthsToLoad removeAllObjects]; - - MGCDateRange *visibleRange = [self visibleMonthsRange]; - - NSUInteger months = [visibleRange components:NSCalendarUnitMonth forCalendar:self.calendar].month; - - for (int i = 0; i < months; i++) - { - NSDateComponents *dc = [NSDateComponents new]; - dc.month = i; - NSDate *date = [self.calendar dateByAddingComponents:dc toDate:visibleRange.start options:0]; - - if (![self.cachedMonths objectForKey:date]) - [self addMonthToLoadingQueue:date]; - } -} - -#pragma mark - MGCMonthPlannerViewDataSource - -- (NSInteger)monthPlannerView:(MGCMonthPlannerView*)view numberOfEventsAtDate:(NSDate*)date -{ - NSUInteger count = [[self eventsAtDate:date]count]; - return count; -} - -- (MGCDateRange*)monthPlannerView:(MGCMonthPlannerView *)view dateRangeForEventAtIndex:(NSUInteger)index date:(NSDate *)date -{ - NSArray *events = [self eventsAtDate:date]; - EKEvent *ev = [events objectAtIndex:index]; - - MGCDateRange *range = nil; - if (ev) - { - range = [MGCDateRange dateRangeWithStart:ev.startDate end:ev.endDate]; - } - - return range; -} - -- (MGCEventView*)monthPlannerView:(MGCMonthPlannerView*)view cellForEventAtIndex:(NSUInteger)index date:(NSDate *)date -{ - NSArray *events = [self eventsAtDate:date]; - EKEvent *ev = [events objectAtIndex:index]; - - MGCStandardEventView *evCell = nil; - if (ev) - { - evCell = (MGCStandardEventView*)[view dequeueReusableCellWithIdentifier:EventCellReuseIdentifier forEventAtIndex:index date:date]; - evCell.title = ev.title; - evCell.subtitle = ev.location; - evCell.detail = [self.dateFormatter stringFromDate:ev.startDate]; - evCell.color = [UIColor colorWithCGColor:ev.calendar.CGColor]; - - NSDate *start = [self.calendar mgc_startOfDayForDate:ev.startDate]; - NSDate *end = [self.calendar mgc_nextStartOfDayForDate:ev.endDate]; - MGCDateRange *range = [MGCDateRange dateRangeWithStart:start end:end]; - NSInteger numDays = [range components:NSCalendarUnitDay forCalendar:self.calendar].day; - - evCell.style = (ev.isAllDay || numDays > 1 ? MGCStandardEventViewStylePlain : MGCStandardEventViewStyleDefault|MGCStandardEventViewStyleDot); - evCell.style |= ev.isAllDay ?: MGCStandardEventViewStyleDetail; - } - return evCell; -} - -- (BOOL)monthPlannerView:(MGCMonthPlannerView*)view canMoveCellForEventAtIndex:(NSUInteger)index date:(NSDate*)date -{ - NSArray *events = [self eventsAtDate:date]; - EKEvent *ev = [events objectAtIndex:index]; - return (ev.calendar.allowsContentModifications); -} - -- (MGCEventView*)monthPlannerView:(MGCMonthPlannerView*)view cellForNewEventAtDate:(NSDate*)date -{ - EKCalendar *defaultCalendar = [self.eventStore defaultCalendarForNewEvents]; - - MGCStandardEventView *evCell = [MGCStandardEventView new]; - evCell.title = NSLocalizedString(@"New Event", nil); - evCell.color = [UIColor colorWithCGColor:defaultCalendar.CGColor]; - return evCell; -} - -#pragma mark - MGCMonthPlannerViewDelegate - -- (void)monthPlannerViewDidScroll:(MGCMonthPlannerView *)view -{ - MGCDateRange *visibleMonths = [self visibleMonthsRange]; - - if (![visibleMonths isEqual:self.visibleMonths]) { - self.visibleMonths = visibleMonths; - [self loadEventsIfNeeded]; - } -} - -- (void)monthPlannerView:(MGCMonthPlannerView*)view didSelectEventAtIndex:(NSUInteger)index date:(NSDate *)date -{ - MGCEventView *cell = [view cellForEventAtIndex:index date:date]; - if (cell) { - CGRect rect = [view convertRect:cell.bounds fromView:cell]; - [self showEditControllerForEventAtIndex:index date:date rect:rect]; - } -} - -- (void)monthPlannerView:(MGCMonthPlannerView*)view didDeselectEventAtIndex:(NSUInteger)index date:(NSDate *)date -{ -} - -- (void)monthPlannerView:(MGCMonthPlannerView*)view didSelectDayCellAtDate:(NSDate *)date -{ - NSLog(@"selected day at : %@", date); -} - -- (void)monthPlannerView:(MGCMonthPlannerView*)view didShowCell:(MGCEventView*)cell forNewEventAtDate:(NSDate*)date -{ - EKEvent *ev = [EKEvent eventWithEventStore:self.eventStore]; - ev.startDate = date; - ev.endDate = date; - ev.allDay = YES; - - [self showPopoverForNewEvent:ev withCell:cell]; -} - -- (void)monthPlannerView:(MGCMonthPlannerView*)view willStartMovingEventAtIndex:(NSUInteger)index date:(NSDate*)date -{ - EKEvent *ev = [self eventAtIndex:index date:date]; - NSAssert(ev, @"Can't find event at index %lu date %@", (unsigned long)index, date); - self.movedEvent = ev; -} - -- (void)monthPlannerView:(MGCMonthPlannerView*)view didMoveEventAtIndex:(NSUInteger)index date:(NSDate*)dateOld toDate:(NSDate*)dateNew -{ - NSAssert(self.movedEvent, @"moved event is nil !"); - - NSDateComponents *comp = [self.calendar components:NSCalendarUnitMinute fromDate:self.movedEvent.startDate toDate:self.movedEvent.endDate options:0]; - NSDate *endNew = [self.calendar dateByAddingComponents:comp toDate:dateNew options:0]; - - self.movedEvent.startDate = dateNew; - self.movedEvent.endDate = endNew; - - //NSLog(@"will move ev from %@ to %@", dateOld, dateNew); - [self.eventKitSupport saveEvent:self.movedEvent completion:^(BOOL completion) { - [self.monthPlannerView endInteraction]; - }]; - - self.movedEvent = nil; - - [self.monthPlannerView endInteraction]; -} - -#pragma mark - EKEventEditViewDelegate - -- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action -{ - [self dismissViewControllerAnimated:YES completion:nil]; - [self.monthPlannerView endInteraction]; -} - -#pragma mark - EKEventViewDelegate - -- (void)eventViewController:(EKEventViewController *)controller didCompleteWithAction:(EKEventViewAction)action -{ - [self.monthPlannerView deselectEvent]; - if (controller.presentingViewController) { - [self dismissViewControllerAnimated:YES completion:nil]; - } else { - [controller.navigationController popViewControllerAnimated:YES]; - } -} - -#pragma mark - UIPopoverPresentationControllerDelegate - -//- (UIViewController*)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style -//{ -// if ([controller.presentedViewController isKindOfClass:EKEventEditViewController.class]) { -// return controller.presentedViewController; -// } -// else { -// UINavigationController *nc = [[UINavigationController alloc]initWithRootViewController:controller.presentedViewController]; -// nc.delegate = self; -// return nc; -// } -//} - -- (void)popoverPresentationController:(UIPopoverPresentationController *)popoverPresentationController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView *__autoreleasing _Nonnull *)view -{ - MGCEventView *cell = self.monthPlannerView.selectedEventView; - if (cell) { - CGRect newRect = [self.monthPlannerView convertRect:cell.bounds fromView:cell]; - *rect = newRect; - } -} - -- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController -{ - [self.monthPlannerView deselectEvent]; -} - -#pragma mark - UINavigationControllerDelegate - -//- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated -//{ -//} - -@end diff --git a/Podfile b/Podfile deleted file mode 100644 index 3b942a78..00000000 --- a/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -use_frameworks! - -target "CalendarDemo" do -pod 'CalendarLib' , :path => '.' -end diff --git a/Podfile.lock b/Podfile.lock deleted file mode 100644 index 1932e9ee..00000000 --- a/Podfile.lock +++ /dev/null @@ -1,22 +0,0 @@ -PODS: - - CalendarLib (2.0): - - OrderedDictionary (~> 1.2) - - OSCache (~> 1.2) - - OrderedDictionary (1.2) - - OSCache (1.2.1) - -DEPENDENCIES: - - CalendarLib (from `.`) - -EXTERNAL SOURCES: - CalendarLib: - :path: "." - -SPEC CHECKSUMS: - CalendarLib: 6b0f0bcd4cdf21e2090c999ffee7609fcaf52483 - OrderedDictionary: 9cc5d69c5c5314ad696ed1839190724e83d534c7 - OSCache: 826996b68e8542a8a3d8af1ab0a0fc3070d8f357 - -PODFILE CHECKSUM: f0c33ba38eb3de386c34bcd88371a475e11b702a - -COCOAPODS: 1.0.1 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock deleted file mode 100644 index 1932e9ee..00000000 --- a/Pods/Manifest.lock +++ /dev/null @@ -1,22 +0,0 @@ -PODS: - - CalendarLib (2.0): - - OrderedDictionary (~> 1.2) - - OSCache (~> 1.2) - - OrderedDictionary (1.2) - - OSCache (1.2.1) - -DEPENDENCIES: - - CalendarLib (from `.`) - -EXTERNAL SOURCES: - CalendarLib: - :path: "." - -SPEC CHECKSUMS: - CalendarLib: 6b0f0bcd4cdf21e2090c999ffee7609fcaf52483 - OrderedDictionary: 9cc5d69c5c5314ad696ed1839190724e83d534c7 - OSCache: 826996b68e8542a8a3d8af1ab0a0fc3070d8f357 - -PODFILE CHECKSUM: f0c33ba38eb3de386c34bcd88371a475e11b702a - -COCOAPODS: 1.0.1 diff --git a/Pods/OSCache/LICENSE.md b/Pods/OSCache/LICENSE.md deleted file mode 100644 index f1b63c7d..00000000 --- a/Pods/OSCache/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -OSCache -version 1.2.1, Decembet 18th, 2015 - -Copyright (C) 2014 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/Pods/OSCache/README.md b/Pods/OSCache/README.md deleted file mode 100644 index cc10b7b0..00000000 --- a/Pods/OSCache/README.md +++ /dev/null @@ -1,114 +0,0 @@ -[![Build Status](https://travis-ci.org/nicklockwood/OSCache.svg)](https://travis-ci.org/nicklockwood/OSCache) - -Purpose --------------- - -**OSCache** is an open-source re-implementation of [`NSCache`](https://developer.apple.com/library/mac/documentation/cocoa/reference/NSCache_Class/Reference/Reference.html) that behaves in a predictable, debuggable way. **OSCache** is an LRU (Least-Recently-Used) cache, meaning that objects will be discarded oldest-first based on the last time they were accessed. **OSCache** will automatically empty itself in the event of a memory warning. - -**OSCache** inherits from `NSCache` for convenience (so it can be used more easily as a drop-in replacement), but does not rely on any inherited behaviour. - -**OSCache** implements all of the NSCache methods, but does not currently support anything relating to `NSDiscardableContent` and will always return `NO` for `evictsObjectsWithDiscardedContent` regardless of the value you set it to. - - -Supported OS & SDK Versions ------------------------------ - -* Supported build target - iOS 9.1 / tvOS 9.1 / Mac OS 10.11 (Xcode 7.1, Apple LLVM compiler 7.1) -* Earliest supported deployment target - iOS 7.0 / tvOS 9.0 / Mac OS 10.10 -* Earliest compatible deployment target - iOS 4.3 / tvOS 9.0 / Mac OS 10.6 - -*NOTE:* 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly. - - -ARC Compatibility ------------------- - -**OSCache** requires ARC. If you wish to use **OSCache** in a non-ARC project, just add the `-fobjc-arc` compiler flag to the `OSCache.m` class. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click `OSCache.m` in the list and type `-fobjc-arc` into the popover. - -If you wish to convert your whole project to ARC, comment out the `#error` line in `OSCache.m`, then run the Edit > Refactor > Convert to Objective-C ARC... tool in Xcode and make sure all files that you wish to use ARC for (including `OSCache.m`) are checked. - - -Installation --------------- - -To install **OSCache** into your app, drag the `OSCache.h` and `.m` files into your project. Create and use `OSCache` instances exactly as you would a normal `NSCache`. - - -Properties & Methods ---------------------- - -In addition to all of the inherited NSCache methods, OSCache adds the following: - - @property (nonatomic, readonly) NSUInteger count; - -The total number of items currently stored in the cache; - - @property (nonatomic, readonly) totalCost; - -The total cost of all items currently stored in the cache; - - - (void)enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop))block; - -Enumerates the keys and values stored in the cache. - - -OSCacheDelegate --------------- - -The **OSCache** delegate now implements the `OSCacheDelegate` protocol, which is a superset of `NSCacheDelegate`. You can declare your delegate as supporting either the `OSCacheDelegate` or `NSCacheDelegate` protocols; either will work without warnings. - -`OSCacheDelegate` adds the following optional method: - - - (BOOL)cache:(OSCache *)cache shouldEvictObject:(id)entry; - -This method is called before **OSCache** evicts an object from the cache, giving you an opportunity to veto the eviction. You can use this method to implement your own cache clearing criteria (e.g. you could decide to only empty the cache if another cache is already empty). - -The method will only be called as the result of adding an item to the cache, or in the event of a memory warning; it is not called if you explicitly remove and object using `-removeObjectForKey:` or `-removeAllObjects`. Objects will always be evicted in order of least recently used. - - -Performance --------------- - -When the cache still has space in it, reading, writing and removing entries has constant time (O(1)). When the cache is full, insertion time degrades to linear (O(n)), but reading and removal remain constant. - -For this reason, you should ideally size your cache so that it will never get full, but if that isn't possible, it's better to select a smaller size, as very large sizes will degrade significantly in performance when they fill up. - - -Release Notes ---------------- - -Version 1.2.1 - -- Fixed bug where `enumerateKeysAndObjectsUsingBlock:` returned internal wrapper instead of cached object -- Added lightweight generics annotations - -Version 1.2 - -- Substantially improved insertion performance when cache is full -- Fixed bug where private container objects were passed to delegate instead of cached object -- Added enumeration and subscripting access for cached objects and keys - -Version 1.1.2 - -- Added nullability annotations -- Fixed nullability error in Xcode 7 -- Fixed unit tests for Xcode 6.3 + 7 - -Version 1.1.1 - -- Fixed bug where sequence numbers would not be resequenced if an overflow happens when reading from cache - -Version 1.1 - -- Exposed the `-count` and `-totalCost` properties -- Added `OSCacheDelegate` protocol, which is a superset of `NSCacheDelegate` -- Added optional `-cache:shouldEvictObject:` delegate method -- If cache is cleared as the result of a memory warning, `-cache:shouldEvictObject:` and `-cache:willEvictObject:` is now called for each item -- Now uses sequence numbers instead of time for sorting cache items (more reliable) -- Now uses `NSLock` instead of `dispatch_semaphore` (more appropriate) -- `OSCache` still behaves as if it inherits from `NSCache`, but no longer actually does so, avoiding possible breakage if Apple changes the `NSCache` implementation in future -- Added unit tests - -Version 1.0 - -- First Release diff --git a/Pods/OrderedDictionary/LICENCE.md b/Pods/OrderedDictionary/LICENCE.md deleted file mode 100644 index 17c4d927..00000000 --- a/Pods/OrderedDictionary/LICENCE.md +++ /dev/null @@ -1,21 +0,0 @@ -OrderedDictionary - -Version 1.2, September 28th, 2014 - -Copyright (C) 2010 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/Pods/OrderedDictionary/OrderedDictionary/OrderedDictionary.m b/Pods/OrderedDictionary/OrderedDictionary/OrderedDictionary.m deleted file mode 100755 index 8a89a234..00000000 --- a/Pods/OrderedDictionary/OrderedDictionary/OrderedDictionary.m +++ /dev/null @@ -1,352 +0,0 @@ -// -// OrderedDictionary.m -// -// Version 1.2 -// -// Created by Nick Lockwood on 21/09/2010. -// Copyright 2010 Charcoal Design -// -// Distributed under the permissive zlib license -// Get the latest version from here: -// -// https://github.com/nicklockwood/OrderedDictionary -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - -#import "OrderedDictionary.h" - - -#pragma GCC diagnostic ignored "-Wobjc-missing-property-synthesis" -#pragma GCC diagnostic ignored "-Wdirect-ivar-access" -#pragma GCC diagnostic ignored "-Wgnu" - - -#import -#if !__has_feature(objc_arc) -#error This class requires automatic reference counting -#endif - - -@implementation OrderedDictionary -{ - @protected - NSArray *_values; - NSOrderedSet *_keys; -} - -+ (instancetype)dictionaryWithContentsOfFile:(NSString *)path -{ - return [self dictionaryWithDictionary:[NSDictionary dictionaryWithContentsOfFile:path]]; -} - -+ (instancetype)dictionaryWithContentsOfURL:(NSURL *)url -{ - return [self dictionaryWithDictionary:[NSDictionary dictionaryWithContentsOfURL:url]]; -} - -- (instancetype)initWithContentsOfFile:(NSString *)path -{ - return [self initWithDictionary:[NSDictionary dictionaryWithContentsOfFile:path]]; -} - -- (instancetype)initWithContentsOfURL:(NSURL *)url -{ - return [self initWithDictionary:[NSDictionary dictionaryWithContentsOfURL:url]]; -} - -- (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys -{ - if ((self = [super init])) - { - _values = [objects copy]; - _keys = [NSOrderedSet orderedSetWithArray:keys]; - - NSParameterAssert([_keys count] == [_values count]); - } - return self; -} - -- (instancetype)initWithObjects:(const __unsafe_unretained id [])objects forKeys:(const __unsafe_unretained id [])keys count:(NSUInteger)count -{ - if ((self = [super init])) - { - _values = [[NSArray alloc] initWithObjects:objects count:count]; - _keys = [[NSOrderedSet alloc] initWithObjects:keys count:count]; - - NSParameterAssert([_values count] == count); - NSParameterAssert([_keys count] == count); - } - return self; -} - -- (Class)classForCoder -{ - return [self class]; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - if ((self = [super init])) - { - _values = [decoder decodeObjectOfClass:[NSArray class] forKey:@"values"]; - _keys = [decoder decodeObjectOfClass:[NSOrderedSet class] forKey:@"keys"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)coder -{ - [coder encodeObject:_values forKey:@"values"]; - [coder encodeObject:_keys forKey:@"keys"]; -} - -- (instancetype)copyWithZone:(__unused NSZone *)zone -{ - return self; -} - -- (instancetype)mutableCopyWithZone:(NSZone *)zone -{ - return [[MutableOrderedDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (NSArray *)allKeys -{ - return [_keys array]; -} - -- (NSArray *)allValues -{ - return [_values copy]; -} - -- (NSUInteger)count -{ - return [_keys count]; -} - -- (NSUInteger)indexOfKey:(id)key { - return [_keys indexOfObject:key]; -} - -- (id)objectForKey:(id)key -{ - NSUInteger index = [_keys indexOfObject:key]; - if (index != NSNotFound) - { - return _values[index]; - } - return nil; - -} - -- (NSEnumerator *)keyEnumerator -{ - return [_keys objectEnumerator]; -} - -- (NSEnumerator *)reverseKeyEnumerator -{ - return [_keys reverseObjectEnumerator]; -} - -- (NSEnumerator *)objectEnumerator -{ - return [_values objectEnumerator]; -} - -- (NSEnumerator *)reverseObjectEnumerator -{ - return [_values reverseObjectEnumerator]; -} - -- (void)enumerateKeysAndObjectsWithIndexUsingBlock:(void (^)(id key, id obj, NSUInteger idx, BOOL *stop))block -{ - [_keys enumerateObjectsUsingBlock:^(id key, NSUInteger idx, BOOL *stop) { - block(key, self->_values[idx], idx, stop); - }]; -} - -- (id)keyAtIndex:(NSUInteger)index -{ - return _keys[index]; -} - -- (id)objectAtIndex:(NSUInteger)index -{ - return _values[index]; -} - -- (id)objectAtIndexedSubscript:(NSUInteger)index -{ - return _values[index]; -} - -@end - - -@implementation MutableOrderedDictionary - -#define _mutableValues ((NSMutableArray *)_values) -#define _mutableKeys ((NSMutableOrderedSet *)_keys) - -+ (instancetype)dictionaryWithCapacity:(NSUInteger)count -{ - return [(MutableOrderedDictionary *)[self alloc] initWithCapacity:count]; -} - -- (instancetype)initWithObjects:(const __unsafe_unretained id [])objects forKeys:(const __unsafe_unretained id [])keys count:(NSUInteger)count -{ - if ((self = [super init])) - { - _values = [[NSMutableArray alloc] initWithObjects:objects count:count]; - _keys = [[NSMutableOrderedSet alloc] initWithObjects:keys count:count]; - } - return self; -} - -- (id)initWithCapacity:(NSUInteger)capacity -{ - if ((self = [super init])) - { - _values = [[NSMutableArray alloc] initWithCapacity:capacity]; - _keys = [[NSMutableOrderedSet alloc] initWithCapacity:capacity]; - } - return self; -} - -- (id)init -{ - return [self initWithCapacity:0]; -} - -- (instancetype)initWithCoder:(NSCoder *)decoder -{ - if ((self = [super init])) - { - _values = [decoder decodeObjectOfClass:[NSMutableArray class] forKey:@"values"]; - _keys = [decoder decodeObjectOfClass:[NSMutableOrderedSet class] forKey:@"keys"]; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - return [[OrderedDictionary allocWithZone:zone] initWithDictionary:self]; -} - -- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary -{ - [otherDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, __unused BOOL *stop) { - [self setObject:obj forKey:key]; - }]; -} - -- (void)insertObject:(id)object forKey:(id)key atIndex:(NSUInteger)index -{ - [self removeObjectForKey:key]; - [_mutableKeys insertObject:key atIndex:index]; - [_mutableValues insertObject:object atIndex:index]; -} - -- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)object -{ - _mutableValues[index] = object; -} - -- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index -{ - _mutableValues[index] = object; -} - -- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2 -{ - [_mutableKeys exchangeObjectAtIndex:idx1 withObjectAtIndex:idx2]; - [_mutableValues exchangeObjectAtIndex:idx1 withObjectAtIndex:idx2]; -} - -- (void)removeAllObjects -{ - [_mutableKeys removeAllObjects]; - [_mutableValues removeAllObjects]; -} - -- (void)removeObjectAtIndex:(NSUInteger)index -{ - [_mutableKeys removeObjectAtIndex:index]; - [_mutableValues removeObjectAtIndex:index]; -} - -- (void)removeObjectForKey:(id)key -{ - NSUInteger index = [self->_keys indexOfObject:key]; - if (index != NSNotFound) - { - [self removeObjectAtIndex:index]; - } -} - -- (void)removeObjectsForKeys:(NSArray *)keyArray -{ - for (id key in [keyArray copy]) - { - [self removeObjectForKey:key]; - } -} - -- (void)setDictionary:(NSDictionary *)otherDictionary -{ - [_mutableKeys removeAllObjects]; - [_mutableKeys addObjectsFromArray:[otherDictionary allKeys]]; - [_mutableValues setArray:[otherDictionary allValues]]; -} - -- (void)setObject:(id)object forKey:(id)key -{ - NSUInteger index = [_keys indexOfObject:key]; - if (index != NSNotFound) - { - _mutableValues[index] = object; - } - else - { - [_mutableKeys addObject:key]; - [_mutableValues addObject:object]; - } -} - -- (void)setValue:(id)value forKey:(NSString *)key -{ - if (value) - { - [self setObject:value forKey:key]; - } - else - { - [self removeObjectForKey:key]; - } -} - -- (void)setObject:(id)object forKeyedSubscript:(id )key -{ - [self setObject:object forKey:key]; -} - -@end diff --git a/Pods/OrderedDictionary/README.md b/Pods/OrderedDictionary/README.md deleted file mode 100644 index aa09be4d..00000000 --- a/Pods/OrderedDictionary/README.md +++ /dev/null @@ -1,69 +0,0 @@ -[![Build Status](https://travis-ci.org/nicklockwood/OrderedDictionary.svg)](https://travis-ci.org/nicklockwood/OrderedDictionary) - - -Purpose --------------- - -The order of objects stored in an NSDictionary is undefined. Often it is useful to be able to loop through a set of key/value pairs and have the objects returned in the order in which they were inserted. This library provides two classes, OrderedDictionary and MutableOrderedDictionary that implement that behaviour. - - -Supported OS & SDK Versions ------------------------------ - -* Supported build target - iOS 8.0 / Mac OS 10.9 (Xcode 6.0, Apple LLVM compiler 6.0) -* Earliest supported deployment target - iOS 5.0 / Mac OS 10.7 -* Earliest compatible deployment target - iOS 4.3 / Mac OS 10.6 - -NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly. - - -ARC Compatibility ------------------- - -OrderedDictionary requires ARC. If you wish to use OrderedDictionary in a non-ARC project, just add the -fobjc-arc compiler flag to the OrderedDictionary.m class. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click OrderedDictionary.m in the list and type -fobjc-arc into the popover. - -If you wish to convert your whole project to ARC, comment out the #error line in OrderedDictionary.m, then run the Edit > Refactor > Convert to Objective-C ARC... tool in Xcode and make sure all files that you wish to use ARC for (including OrderedDictionary.m) are checked. - - -Thread Safety --------------- - -Access to an OrderedDictionary is inherently thread safe because it is immutable. Access to a MutableOrderedDictionary is not thread safe unless you ensure that no thread attempts to read from the dictionary whilst another is writing to it. - - -Installation --------------- - -To install OrderedDictionary into your app, drag the OrderedDictionary.h and .m files into your project. - - -Release Notes ---------------- - -Version 1.2 - -- Now supports NSCoding -- Now supports reading and writing from a property list (order and mutability preserved) -- Added keyAtIndex: method -- Added replaceObjectAtIndex:withObject: and setObject:atIndexedSubscript: methods -- Added exchangeObjectAtIndex:withObjectAtIndex: method -- setObject:forKeyedSubscript: now works with non-string keys -- Now uses NSOrderedSet internally, for better performance -- Added unit tests - -Version 1.1.1 - -- Added enumerateKeysAndObjectsWithIndexUsingBlock: method -- Now conforms to -Weverything warning level - -Version 1.1 - -- Now requires ARC -- Updated to remove warnings in latest iOS -- Removed OrderedMutableDictionary variant -- Now complies to -Wextra warning level -- Added podspec - -Version 1.0 - -- Initial release \ No newline at end of file diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 0e9f9138..00000000 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1323 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0BD8EEF83D60B467C0D92522C179EF3F /* MGCReusableObjectQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D8A75E26ECCE9E325A71FE30987EDF49 /* MGCReusableObjectQueue.m */; }; - 10040D2BC447B188F90C6D1358FF833B /* MGCDayPlannerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 69ADBAC255FCEC8B18E2D22CEB022244 /* MGCDayPlannerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10440B43B679E057C81AE26E6737C71A /* Pods-CalendarDemo-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F46BB6ABD311E312D5CE6A1A3521632F /* Pods-CalendarDemo-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12E7AF496E5CBE616581F40EA8CC55FF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 184D1D2346ED6E14A32ADF6A8380122B /* UIKit.framework */; }; - 15382445402A28617FCA964461A6B4BA /* MGCMonthPlannerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EC117D89CD9649F60918F291C163452 /* MGCMonthPlannerViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 165AC579BF526F5FA7BC861EB1E98A5E /* MGCYearCalendarMonthHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = CB2C94953057A7A4E757F95D59B4E75B /* MGCYearCalendarMonthHeaderView.m */; }; - 16C92160004A461104976AE8D9ECECC1 /* CalendarLib-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AF033CC11CFDD51637546D1E566D7555 /* CalendarLib-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19F22C8E0461D90DCB5CAA2E2FD67B02 /* MGCTimedEventsViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = A021769F55E122F239757FDC93C0B8B7 /* MGCTimedEventsViewLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A9BC91D8D76AC397062ACE2EB451390 /* MGCMonthPlannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 934AC6397F68D5F15DA64421BE08C1A4 /* MGCMonthPlannerView.m */; }; - 283AE0B9767480D604A0F53E39522C3D /* MGCDayPlannerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C8709F47F1202384A6577453DF2E776 /* MGCDayPlannerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 283F36B27EFB452A37D27FBDAD6EB173 /* MGCEventKitSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0F9DD62CFDC941842A2D67F57E9289 /* MGCEventKitSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29E8849D9EE6CF5F258DCD59CAE90BA3 /* MGCDateRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DE721EBDAE294A03673CD1248B07ABC /* MGCDateRange.m */; }; - 2BEB9A448F785B4ABD58E7E5A0C0AAB8 /* MGCEventView.m in Sources */ = {isa = PBXBuildFile; fileRef = 15CA1070A72D5B616A44BC999DC6575F /* MGCEventView.m */; }; - 3260AFF8730CC2F514A4B476F6E3B1C9 /* MGCEventsRowView.m in Sources */ = {isa = PBXBuildFile; fileRef = C08DFD4AF9A6CEA2A502ACD58A728303 /* MGCEventsRowView.m */; }; - 346A291DD56A77A5080532CCF8C8C0DA /* MGCDayColumnCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BA83E09087DAB7A93486006F5D66EC7 /* MGCDayColumnCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35029C6B4FA6AD6A0553D5BA04E025EA /* MGCAlignedGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = CF4B07529A2197D70A55B6D7B5BCECBD /* MGCAlignedGeometry.m */; }; - 35168AD739FC86E090E22E4D715D77BD /* MGCReusableObjectQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 96410F223170B0D6732DB4AB7632821F /* MGCReusableObjectQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35F955276513957B6951657920F606D1 /* Pods-CalendarDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 25233512573BAC19936AB8B585997361 /* Pods-CalendarDemo-dummy.m */; }; - 37DBF567D2C4D15EC52DD728B4A4C2ED /* MGCMonthPlannerBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F7F98D1CBD468157CC87E1534FD297D /* MGCMonthPlannerBackgroundView.m */; }; - 3C1CC6C04D875D926256FFAB09BA85EC /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E475E0EAF339997987B1A35247D49DE /* CoreGraphics.framework */; }; - 3D8DB0D93E99C225519CB0B964BB76F0 /* MGCMonthPlannerWeekView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC30C1BC622800CC72FA23CF9CB8AB40 /* MGCMonthPlannerWeekView.m */; }; - 3E7B77774073428F0EDBA7F9B27B498D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D064917209003916B29AF2C1D58E6B7 /* Foundation.framework */; }; - 3F0BCD07266D82C97C13C958CA64C33D /* MGCDayPlannerEKViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B32538B37024E5C7870BF811F48A57C /* MGCDayPlannerEKViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F5F2CEFF434DDCA14403D6B50D9D5DC /* OrderedDictionary-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D39AF81A0F8E48F554E38EC0E237D15 /* OrderedDictionary-dummy.m */; }; - 40270C224A640E091730C3F668E3633D /* MGCDateRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA301017D15B64FEE4ACA4D179F98E6 /* MGCDateRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4397926F702DA9AE79D00C59106E2099 /* Constant.h in Headers */ = {isa = PBXBuildFile; fileRef = A14FC8E1DA423047B4BD53F770157AA2 /* Constant.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44C3A8E49CF779F8E6C61A9E1F51A74D /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D2176FE612DD0596CE7C681E14BEEA3D /* en.lproj */; }; - 4865DF5B9828CC1A6D9134053729AD4C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D064917209003916B29AF2C1D58E6B7 /* Foundation.framework */; }; - 4922375228078DC8286BD4E99CD1EE21 /* OSCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B109FCF8326A98A81D6FE07BA9A2CE3 /* OSCache.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 49B450EAE456ECB2647A3D637CC1B852 /* MGCMonthPlannerViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 361E02A32A0D91554059D7DA815376ED /* MGCMonthPlannerViewLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B0870E36D23BD129E6C0280E2808F3E /* MGCEventCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8642DF879250346F1FFEF4BD8D9BE06 /* MGCEventCell.m */; }; - 53BC63EF2BFA0161AD495D4705E5B73D /* MGCMonthPlannerHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2884C2460A111F124151B5DC9ED17D /* MGCMonthPlannerHeaderView.m */; }; - 54986D8A0769E0968396794DB5CF53AD /* MGCEventsRowView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A1AFEA81FE3EEF9BD457D565C2F56F7 /* MGCEventsRowView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5553D815BA0ECF462F0454F8CF32B6C9 /* MGCEventKitSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 7247DD48FFD9C0A9A6592AFF50EAB445 /* MGCEventKitSupport.m */; }; - 573CA837DA4F7C1B9371A8A283001B90 /* MGCMonthPlannerBackgroundView.h in Headers */ = {isa = PBXBuildFile; fileRef = 952C7E727EED0A50DA45041DE31137F8 /* MGCMonthPlannerBackgroundView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 575AD525B5810BD268D31DE10E9D981C /* MGCYearCalendarMonthCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AEA7D2CB8BE37041E07C43FD98BD53E /* MGCYearCalendarMonthCell.m */; }; - 5B5865D94AE1962D0BDE732CCCA5FCB4 /* NSCalendar+MGCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 23A81DC455C8A11ABDE63E387401038A /* NSCalendar+MGCAdditions.m */; }; - 5BDF04C89F0F2C5BF48B3FD813AA5E2E /* MGCStandardEventView.h in Headers */ = {isa = PBXBuildFile; fileRef = E9CF035F29148878B13673869A38496E /* MGCStandardEventView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61F3B5E100AF6B8DFCBD8EC07A31735E /* MGCAllDayEventsViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BD5A1B70C24D5E15C7902A3810AD71B /* MGCAllDayEventsViewLayout.m */; }; - 666876A324A754DE9EC656D6B4A75C8A /* MGCTimeRowsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 639E8D3DEC720A9B52315E961AE4C21F /* MGCTimeRowsView.m */; }; - 6B8A6D46DE2B271A9CF861E8EBA075D5 /* MGCEventCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E45A50DA2DE157EEED14F329472CFCD /* MGCEventCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72A71ECA963D06465DFD8B3E12AD41BE /* MGCDayPlannerEKViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7860FA75B2828CFF3C94D193ED84E8F4 /* MGCDayPlannerEKViewController.m */; }; - 75EA39995111C0925C1F8793C0F19255 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D064917209003916B29AF2C1D58E6B7 /* Foundation.framework */; }; - 7A02B3D0D0A5C4F9A05668A732FDF73F /* OrderedDictionary-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 334F0D464F275262D14ACFCE6E1E9D68 /* OrderedDictionary-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CB4DDDC12B79389CFC8C49DCF39C1A2 /* OSCache-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 30DC81CEC32D28A3FA47B4D4057E07E1 /* OSCache-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84A07A7FFF9C2A776980FEE43091F865 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = D83C7B4870A7AC1B7D6EA9D800818168 /* fr.lproj */; }; - 853E943F3A44E653A19A993E22E885C0 /* MGCMonthPlannerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE16E5343143115FF8D70DB3E614D7E /* MGCMonthPlannerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85EE00D6E106AFF3B3D6A5CE1EAAD041 /* MGCDayColumnCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D826449F2F9E350884A3E4683683487 /* MGCDayColumnCell.m */; }; - 8A637532D7C717B031F5479C9DFDCF96 /* OrderedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = E63EF56F13F78687828039FC20CB4645 /* OrderedDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8AAB64C0FF8986D4580019BB0F37066D /* MGCYearCalendarMonthCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 484752CE8E4D5723FC9E1A2BA7FE6DE7 /* MGCYearCalendarMonthCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C5F4307DCA368C7F9DB7ED256DA31D1 /* MGCDayPlannerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 43488965D4CAA1FDD110FDD5A4BF085E /* MGCDayPlannerViewController.m */; }; - 8D2AC2F545A689196AD380EB39531B0A /* MGCMonthPlannerEKViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 035838A3E1D5E440BB9A3B651CB0622E /* MGCMonthPlannerEKViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C706FCCF0E309E935E3D2FE5A591D07 /* CalendarLib-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B1870F870C6857E28D9CE5AF9B2A1098 /* CalendarLib-dummy.m */; }; - 9C8B2BAEF1120713575CAD5BE1DD916E /* MGCMonthMiniCalendarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C99F8B5BDB75CF001C1E1E7A4121D4E /* MGCMonthMiniCalendarView.m */; }; - A4E3633A2C1959A55C3CFDFDFD37FBC2 /* NSCalendar+MGCAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CBDCA5399E009C1D573DE21980363BB9 /* NSCalendar+MGCAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A76C549C7C4534A81AD9B6ACA732DDB8 /* MGCEventCellLayoutAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 4585227A1FC9C596796A9E3CA5C4D56E /* MGCEventCellLayoutAttributes.m */; }; - A82B51DBD620C3F9150E16E71B1125FD /* MGCMonthPlannerHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BDB84AF839AEE748D67C6C78AC17D1A /* MGCMonthPlannerHeaderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB3FE3B79D8358BDB3E3C508558276B4 /* MGCTimeRowsView.h in Headers */ = {isa = PBXBuildFile; fileRef = 77C49D72D796EFAA8308A1D0B15E8D25 /* MGCTimeRowsView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB467272C402ACAEBE8E72A7FEA04A55 /* MGCTimedEventsViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F8F6F011D72119E3CF3F18A91BCDAF /* MGCTimedEventsViewLayout.m */; }; - AEF45D844795868F471C231D4DBADA86 /* EventKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2FC2AF2409E900FA1C0219F88231A5 /* EventKitUI.framework */; }; - B34A1260B1EC1E724AC20BBD8329671F /* MGCAlignedGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = D87993AA397DD65C4DECA997776FE0B2 /* MGCAlignedGeometry.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4479162A06A4B6E1321D7C5A73581A4 /* MGCStandardEventView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E47DD2122985745BFECD98CDF38DADE /* MGCStandardEventView.m */; }; - B74FE528568313CE30EA6D663738BB34 /* MGCYearCalendarView.h in Headers */ = {isa = PBXBuildFile; fileRef = 68B7B88BE0B1447662D1EAB5590D5939 /* MGCYearCalendarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B826786804B51980ECAEA62B1B41B2BC /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BE2EA39F8FE5E48E7B9712F35754B74 /* OrderedDictionary.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - BC129756EB184EB7B54FC078D77EAE6F /* CalendarLib.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 474F46F9D3CD4C66494C6398945993BC /* CalendarLib.bundle */; }; - BC32A46E1D31055C00AB19D7 /* MGCCalendarHeaderCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BC32A4691D31055C00AB19D7 /* MGCCalendarHeaderCell.h */; }; - BC32A46F1D31055C00AB19D7 /* MGCCalendarHeaderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC32A46A1D31055C00AB19D7 /* MGCCalendarHeaderCell.m */; }; - BC32A4711D31055C00AB19D7 /* MGCCalendarHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC32A46B1D31055C00AB19D7 /* MGCCalendarHeaderCell.xib */; }; - BC32A4721D31055C00AB19D7 /* MGCCalendarHeaderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC32A46B1D31055C00AB19D7 /* MGCCalendarHeaderCell.xib */; }; - BC32A4731D31055C00AB19D7 /* MGCCalendarHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = BC32A46C1D31055C00AB19D7 /* MGCCalendarHeaderView.h */; }; - BC32A4741D31055C00AB19D7 /* MGCCalendarHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC32A46D1D31055C00AB19D7 /* MGCCalendarHeaderView.m */; }; - BC3300D03E96ADC4526AC9CFE3110876 /* MGCAllDayEventsViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 36C709E8D3709828F4CDCC6F9E8B8F1F /* MGCAllDayEventsViewLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BC4DAE0E1E3ED7AEF78839F4815A0211 /* MGCMonthPlannerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F33A77B1C88FA226CA3F123445A1AB4 /* MGCMonthPlannerViewController.m */; }; - BE3DF61E19CE6628EFBC28FC4E5249F1 /* MGCYearCalendarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C8D6DE7DAE5F35E652CCE40F50B208 /* MGCYearCalendarView.m */; }; - C172318723A82A556756CE7A10ED572B /* EventKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84B7B1DA5EB4C3FA05D4BB2B2B9700FD /* EventKit.framework */; }; - C2E9436B5AD60E85AD494381590EBEC4 /* MGCMonthPlannerViewDayCell.h in Headers */ = {isa = PBXBuildFile; fileRef = EA47F11125BF0BED9FC31F762B3C5EAA /* MGCMonthPlannerViewDayCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C604B7A49ABD9407AA6E50F1D1B4BF3B /* MGCMonthPlannerViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F70A86D4E3C34B4408539DE36D34D85E /* MGCMonthPlannerViewLayout.m */; }; - C7C218477AEAAFD0EA27A58A9573F231 /* MGCEventCellLayoutAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 60DA0727BCAAE002FE5C811A4E13B6DA /* MGCEventCellLayoutAttributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBC4E2B6ED53D394ACEE641727ABD9F2 /* MGCMonthPlannerWeekView.h in Headers */ = {isa = PBXBuildFile; fileRef = 682F557D317E6B35EF72FB6490A1B17F /* MGCMonthPlannerWeekView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CBE4FB461D2A7FEC45F3F58EB90D2906 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D064917209003916B29AF2C1D58E6B7 /* Foundation.framework */; }; - D03C03FB5C6CA1F143621A42605C78A6 /* NSAttributedString+MGCAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D51543B38B03130DB1C1328336A7210A /* NSAttributedString+MGCAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4AF7DE5DD942DA2C7819174168125C8 /* MGCYearCalendarMonthHeaderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA158124FBDD717544FED9263FBD303 /* MGCYearCalendarMonthHeaderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D865046DF81EB3FB4A8D12EB03740124 /* MGCInteractiveEventView.m in Sources */ = {isa = PBXBuildFile; fileRef = 272436DEBAF47D9A85D674C955A18A5E /* MGCInteractiveEventView.m */; }; - DEF1FBD0689397BC6AB8BDA6BB8AB78A /* OrderedDictionary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71D6E0D174F4DE38CD29304BC2BA2282 /* OrderedDictionary.framework */; }; - DF0507A59387E5CBE881FD0E56A6EFCC /* OSCache.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AC2F4E580C735F08DDD3E5212CA9F43 /* OSCache.framework */; }; - E9AE3F473F8DBF38B493A0680606EDDA /* MGCMonthPlannerViewDayCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D5747BE9957E0A918225217BBE905449 /* MGCMonthPlannerViewDayCell.m */; }; - EC8FF04893A567958DF9E6CE758D24EB /* OSCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EFFEA70CE3F29C1F727328CD11F594 /* OSCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F091908CE32B34A524ABBD458D4C2FDA /* NSAttributedString+MGCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F8285ABCC5BD108881B8D64CDE642EC /* NSAttributedString+MGCAdditions.m */; }; - F0BFAF44B9F2E107744B1EC5ED51A912 /* OSCache-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D312E569E43BEDEAB80ABB313B2DA37B /* OSCache-dummy.m */; }; - F25B2B6D821D0E1D771058D5FF140FD3 /* MGCMonthMiniCalendarView.h in Headers */ = {isa = PBXBuildFile; fileRef = CE13CF28836D0DBD67E1C1547545C67A /* MGCMonthMiniCalendarView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5D52A699620031B048F46462041E2F2 /* MGCInteractiveEventView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0658BFDB814DEB3ECCDA99ECA7521DD9 /* MGCInteractiveEventView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F73109644FB32F739BF1198430F0A34F /* MGCMonthPlannerEKViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DEADC186D2B7AD760C9F3F892E3DC97 /* MGCMonthPlannerEKViewController.m */; }; - FA3B1812DFF8E7491ED66C2395EFB8AC /* MGCEventView.h in Headers */ = {isa = PBXBuildFile; fileRef = DD8B59A20F855C881309ECC830CB2A24 /* MGCEventView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC40921F50ED56C61523597E5D292C4D /* MGCDayPlannerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 025D804BECA3FA4FB3437E02C746D838 /* MGCDayPlannerView.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 116AD1AD124691B81F860EABA00AFA9D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2673FB444CAD63D7872199869D12B242; - remoteInfo = "CalendarLib-CalendarLib"; - }; - 34A195D9FB4A9B50F0F1B11ED70A896D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = C4C32B98A88C3F59ADE6A79B82E1867F; - remoteInfo = OrderedDictionary; - }; - 4C01AAE245FE633F3DEA17EE7B779B6B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 954B3024145E89BE4F9E6E9D69C08294; - remoteInfo = CalendarLib; - }; - 9380B5DACC543EBA205B2EE9EA115A29 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 14730700B2D60DF9994CA196CE7ADE3C; - remoteInfo = OSCache; - }; - 983B1F146273EC8F5F8DF62B5F4778BD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = C4C32B98A88C3F59ADE6A79B82E1867F; - remoteInfo = OrderedDictionary; - }; - 9DD2E24E413DC847B0033DF85707DD8B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 14730700B2D60DF9994CA196CE7ADE3C; - remoteInfo = OSCache; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 025D804BECA3FA4FB3437E02C746D838 /* MGCDayPlannerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerView.m; sourceTree = ""; }; - 035838A3E1D5E440BB9A3B651CB0622E /* MGCMonthPlannerEKViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerEKViewController.h; sourceTree = ""; }; - 03ED48CF8AC5E601600DC1AF567A32DB /* OSCache-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OSCache-prefix.pch"; sourceTree = ""; }; - 058EE5E1389071701541D945B395BB8D /* ResourceBundle-CalendarLib-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-CalendarLib-Info.plist"; sourceTree = ""; }; - 0621FC5DD83F68E761116875B059412C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 0658BFDB814DEB3ECCDA99ECA7521DD9 /* MGCInteractiveEventView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCInteractiveEventView.h; sourceTree = ""; }; - 08E408886344FC31ED4A170A9DC261D8 /* Pods-CalendarDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CalendarDemo.debug.xcconfig"; sourceTree = ""; }; - 0AC2F4E580C735F08DDD3E5212CA9F43 /* OSCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OSCache.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0EC117D89CD9649F60918F291C163452 /* MGCMonthPlannerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewController.h; sourceTree = ""; }; - 0F7F98D1CBD468157CC87E1534FD297D /* MGCMonthPlannerBackgroundView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerBackgroundView.m; sourceTree = ""; }; - 0F8285ABCC5BD108881B8D64CDE642EC /* NSAttributedString+MGCAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+MGCAdditions.m"; sourceTree = ""; }; - 15CA1070A72D5B616A44BC999DC6575F /* MGCEventView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCEventView.m; sourceTree = ""; }; - 184D1D2346ED6E14A32ADF6A8380122B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 1B19161673C40175196589DF322D71AD /* CalendarLib.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CalendarLib.xcconfig; sourceTree = ""; }; - 1BD5A1B70C24D5E15C7902A3810AD71B /* MGCAllDayEventsViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCAllDayEventsViewLayout.m; sourceTree = ""; }; - 1FE16E5343143115FF8D70DB3E614D7E /* MGCMonthPlannerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerView.h; sourceTree = ""; }; - 23A81DC455C8A11ABDE63E387401038A /* NSCalendar+MGCAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSCalendar+MGCAdditions.m"; sourceTree = ""; }; - 25233512573BAC19936AB8B585997361 /* Pods-CalendarDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CalendarDemo-dummy.m"; sourceTree = ""; }; - 272436DEBAF47D9A85D674C955A18A5E /* MGCInteractiveEventView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCInteractiveEventView.m; sourceTree = ""; }; - 28F9BDA61B9C749A357770C19ACD3B8A /* OSCache.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OSCache.xcconfig; sourceTree = ""; }; - 2BE2EA39F8FE5E48E7B9712F35754B74 /* OrderedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OrderedDictionary.m; path = OrderedDictionary/OrderedDictionary.m; sourceTree = ""; }; - 2C8709F47F1202384A6577453DF2E776 /* MGCDayPlannerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerView.h; sourceTree = ""; }; - 30DC81CEC32D28A3FA47B4D4057E07E1 /* OSCache-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OSCache-umbrella.h"; sourceTree = ""; }; - 334F0D464F275262D14ACFCE6E1E9D68 /* OrderedDictionary-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OrderedDictionary-umbrella.h"; sourceTree = ""; }; - 34023C9D2F76E5CD4716B8BEBB929B92 /* OSCache.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = OSCache.modulemap; sourceTree = ""; }; - 361E02A32A0D91554059D7DA815376ED /* MGCMonthPlannerViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewLayout.h; sourceTree = ""; }; - 36C709E8D3709828F4CDCC6F9E8B8F1F /* MGCAllDayEventsViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCAllDayEventsViewLayout.h; sourceTree = ""; }; - 3A1AFEA81FE3EEF9BD457D565C2F56F7 /* MGCEventsRowView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCEventsRowView.h; sourceTree = ""; }; - 3A865200D6DA2CA2394B39060FF21453 /* OrderedDictionary.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = OrderedDictionary.modulemap; sourceTree = ""; }; - 3BA83E09087DAB7A93486006F5D66EC7 /* MGCDayColumnCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCDayColumnCell.h; sourceTree = ""; }; - 3C99F8B5BDB75CF001C1E1E7A4121D4E /* MGCMonthMiniCalendarView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthMiniCalendarView.m; sourceTree = ""; }; - 40A7ABA382B6C59BBAE48BE34A8A6549 /* Pods-CalendarDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CalendarDemo-frameworks.sh"; sourceTree = ""; }; - 40F8F6F011D72119E3CF3F18A91BCDAF /* MGCTimedEventsViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCTimedEventsViewLayout.m; sourceTree = ""; }; - 43488965D4CAA1FDD110FDD5A4BF085E /* MGCDayPlannerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerViewController.m; sourceTree = ""; }; - 4585227A1FC9C596796A9E3CA5C4D56E /* MGCEventCellLayoutAttributes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCEventCellLayoutAttributes.m; sourceTree = ""; }; - 45D5F39D99FF80A3B5C95F53B2033BD9 /* Pods-CalendarDemo.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-CalendarDemo.modulemap"; sourceTree = ""; }; - 474F46F9D3CD4C66494C6398945993BC /* CalendarLib.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CalendarLib.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 484752CE8E4D5723FC9E1A2BA7FE6DE7 /* MGCYearCalendarMonthCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarMonthCell.h; sourceTree = ""; }; - 4A2FC2AF2409E900FA1C0219F88231A5 /* EventKitUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKitUI.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/EventKitUI.framework; sourceTree = DEVELOPER_DIR; }; - 4BDB84AF839AEE748D67C6C78AC17D1A /* MGCMonthPlannerHeaderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerHeaderView.h; sourceTree = ""; }; - 4C2884C2460A111F124151B5DC9ED17D /* MGCMonthPlannerHeaderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerHeaderView.m; sourceTree = ""; }; - 4D826449F2F9E350884A3E4683683487 /* MGCDayColumnCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCDayColumnCell.m; sourceTree = ""; }; - 4DEADC186D2B7AD760C9F3F892E3DC97 /* MGCMonthPlannerEKViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerEKViewController.m; sourceTree = ""; }; - 4E475E0EAF339997987B1A35247D49DE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 4EA158124FBDD717544FED9263FBD303 /* MGCYearCalendarMonthHeaderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarMonthHeaderView.h; sourceTree = ""; }; - 4EA301017D15B64FEE4ACA4D179F98E6 /* MGCDateRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCDateRange.h; sourceTree = ""; }; - 56C8D6DE7DAE5F35E652CCE40F50B208 /* MGCYearCalendarView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarView.m; sourceTree = ""; }; - 5C25C368E644F9AF4FEFC41FC495C37D /* Pods-CalendarDemo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CalendarDemo-resources.sh"; sourceTree = ""; }; - 5D39AF81A0F8E48F554E38EC0E237D15 /* OrderedDictionary-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OrderedDictionary-dummy.m"; sourceTree = ""; }; - 5DE721EBDAE294A03673CD1248B07ABC /* MGCDateRange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCDateRange.m; sourceTree = ""; }; - 5E45A50DA2DE157EEED14F329472CFCD /* MGCEventCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCEventCell.h; sourceTree = ""; }; - 60DA0727BCAAE002FE5C811A4E13B6DA /* MGCEventCellLayoutAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCEventCellLayoutAttributes.h; sourceTree = ""; }; - 639E8D3DEC720A9B52315E961AE4C21F /* MGCTimeRowsView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCTimeRowsView.m; sourceTree = ""; }; - 682F557D317E6B35EF72FB6490A1B17F /* MGCMonthPlannerWeekView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerWeekView.h; sourceTree = ""; }; - 68B7B88BE0B1447662D1EAB5590D5939 /* MGCYearCalendarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCYearCalendarView.h; sourceTree = ""; }; - 69ADBAC255FCEC8B18E2D22CEB022244 /* MGCDayPlannerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerViewController.h; sourceTree = ""; }; - 6E47DD2122985745BFECD98CDF38DADE /* MGCStandardEventView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCStandardEventView.m; sourceTree = ""; }; - 707183B33831E2C9D2771125C823C584 /* OrderedDictionary-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OrderedDictionary-prefix.pch"; sourceTree = ""; }; - 71D6E0D174F4DE38CD29304BC2BA2282 /* OrderedDictionary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedDictionary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7247DD48FFD9C0A9A6592AFF50EAB445 /* MGCEventKitSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCEventKitSupport.m; sourceTree = ""; }; - 74A37E3969A857D082820F3A92F53C87 /* CalendarLib.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = CalendarLib.modulemap; sourceTree = ""; }; - 77C49D72D796EFAA8308A1D0B15E8D25 /* MGCTimeRowsView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCTimeRowsView.h; sourceTree = ""; }; - 7860FA75B2828CFF3C94D193ED84E8F4 /* MGCDayPlannerEKViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCDayPlannerEKViewController.m; sourceTree = ""; }; - 7B109FCF8326A98A81D6FE07BA9A2CE3 /* OSCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OSCache.m; path = OSCache/OSCache.m; sourceTree = ""; }; - 7B32538B37024E5C7870BF811F48A57C /* MGCDayPlannerEKViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCDayPlannerEKViewController.h; sourceTree = ""; }; - 7D064917209003916B29AF2C1D58E6B7 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 7F33A77B1C88FA226CA3F123445A1AB4 /* MGCMonthPlannerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewController.m; sourceTree = ""; }; - 84B7B1DA5EB4C3FA05D4BB2B2B9700FD /* EventKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/EventKit.framework; sourceTree = DEVELOPER_DIR; }; - 84EFFEA70CE3F29C1F727328CD11F594 /* OSCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OSCache.h; path = OSCache/OSCache.h; sourceTree = ""; }; - 8C18D98026C88F9B1A13FDC05F89DAD8 /* OSCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OSCache.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8CE9C5EF3DED23005E916FF98A2CA920 /* CalendarLib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CalendarLib.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 934AC6397F68D5F15DA64421BE08C1A4 /* MGCMonthPlannerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerView.m; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 952C7E727EED0A50DA45041DE31137F8 /* MGCMonthPlannerBackgroundView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerBackgroundView.h; sourceTree = ""; }; - 96410F223170B0D6732DB4AB7632821F /* MGCReusableObjectQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCReusableObjectQueue.h; sourceTree = ""; }; - 9AEA7D2CB8BE37041E07C43FD98BD53E /* MGCYearCalendarMonthCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarMonthCell.m; sourceTree = ""; }; - A021769F55E122F239757FDC93C0B8B7 /* MGCTimedEventsViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCTimedEventsViewLayout.h; sourceTree = ""; }; - A14FC8E1DA423047B4BD53F770157AA2 /* Constant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Constant.h; sourceTree = ""; }; - A94A3BBABCB47178630385FFFB65190B /* CalendarLib-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CalendarLib-prefix.pch"; sourceTree = ""; }; - ACC24998E5D2DA77072A37C508B33258 /* Pods_CalendarDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_CalendarDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AF033CC11CFDD51637546D1E566D7555 /* CalendarLib-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CalendarLib-umbrella.h"; sourceTree = ""; }; - B1870F870C6857E28D9CE5AF9B2A1098 /* CalendarLib-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CalendarLib-dummy.m"; sourceTree = ""; }; - BC32A4691D31055C00AB19D7 /* MGCCalendarHeaderCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCCalendarHeaderCell.h; sourceTree = ""; }; - BC32A46A1D31055C00AB19D7 /* MGCCalendarHeaderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCCalendarHeaderCell.m; sourceTree = ""; }; - BC32A46B1D31055C00AB19D7 /* MGCCalendarHeaderCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MGCCalendarHeaderCell.xib; sourceTree = ""; }; - BC32A46C1D31055C00AB19D7 /* MGCCalendarHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGCCalendarHeaderView.h; sourceTree = ""; }; - BC32A46D1D31055C00AB19D7 /* MGCCalendarHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGCCalendarHeaderView.m; sourceTree = ""; }; - C0013B7C18CEFFE3F113A477AB1F1CF5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C08DFD4AF9A6CEA2A502ACD58A728303 /* MGCEventsRowView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCEventsRowView.m; sourceTree = ""; }; - CA6A2957B0D8809A9F6F3A173CAC5A75 /* OrderedDictionary.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OrderedDictionary.xcconfig; sourceTree = ""; }; - CA7F02164398FAF257C7384B0BD5A439 /* OrderedDictionary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedDictionary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CB2C94953057A7A4E757F95D59B4E75B /* MGCYearCalendarMonthHeaderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCYearCalendarMonthHeaderView.m; sourceTree = ""; }; - CBDCA5399E009C1D573DE21980363BB9 /* NSCalendar+MGCAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSCalendar+MGCAdditions.h"; sourceTree = ""; }; - CE13CF28836D0DBD67E1C1547545C67A /* MGCMonthMiniCalendarView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthMiniCalendarView.h; sourceTree = ""; }; - CF0F9DD62CFDC941842A2D67F57E9289 /* MGCEventKitSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCEventKitSupport.h; sourceTree = ""; }; - CF4B07529A2197D70A55B6D7B5BCECBD /* MGCAlignedGeometry.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCAlignedGeometry.m; sourceTree = ""; }; - D0B7ABACBC1482A67BB0B58535FB4D3A /* Pods-CalendarDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CalendarDemo-acknowledgements.markdown"; sourceTree = ""; }; - D2176FE612DD0596CE7C681E14BEEA3D /* en.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; path = en.lproj; sourceTree = ""; }; - D312E569E43BEDEAB80ABB313B2DA37B /* OSCache-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OSCache-dummy.m"; sourceTree = ""; }; - D414A4CDE4116258F210D5FA18D0F06B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D51543B38B03130DB1C1328336A7210A /* NSAttributedString+MGCAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+MGCAdditions.h"; sourceTree = ""; }; - D5747BE9957E0A918225217BBE905449 /* MGCMonthPlannerViewDayCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewDayCell.m; sourceTree = ""; }; - D83C7B4870A7AC1B7D6EA9D800818168 /* fr.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; path = fr.lproj; sourceTree = ""; }; - D87993AA397DD65C4DECA997776FE0B2 /* MGCAlignedGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCAlignedGeometry.h; sourceTree = ""; }; - D8A75E26ECCE9E325A71FE30987EDF49 /* MGCReusableObjectQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCReusableObjectQueue.m; sourceTree = ""; }; - DD8B59A20F855C881309ECC830CB2A24 /* MGCEventView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCEventView.h; sourceTree = ""; }; - E63EF56F13F78687828039FC20CB4645 /* OrderedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OrderedDictionary.h; path = OrderedDictionary/OrderedDictionary.h; sourceTree = ""; }; - E9CF035F29148878B13673869A38496E /* MGCStandardEventView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCStandardEventView.h; sourceTree = ""; }; - EA47F11125BF0BED9FC31F762B3C5EAA /* MGCMonthPlannerViewDayCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MGCMonthPlannerViewDayCell.h; sourceTree = ""; }; - EC30C1BC622800CC72FA23CF9CB8AB40 /* MGCMonthPlannerWeekView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerWeekView.m; sourceTree = ""; }; - EC3247F6F117E9550E559790EF12FE6C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F46BB6ABD311E312D5CE6A1A3521632F /* Pods-CalendarDemo-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-CalendarDemo-umbrella.h"; sourceTree = ""; }; - F70A86D4E3C34B4408539DE36D34D85E /* MGCMonthPlannerViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCMonthPlannerViewLayout.m; sourceTree = ""; }; - F8642DF879250346F1FFEF4BD8D9BE06 /* MGCEventCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MGCEventCell.m; sourceTree = ""; }; - FF01347CE9DC5BBCEC2F89DABE0D1763 /* Pods-CalendarDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CalendarDemo-acknowledgements.plist"; sourceTree = ""; }; - FF6D24E3BB10D55468C1356A066A7012 /* Pods-CalendarDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CalendarDemo.release.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0275B4DC678C28992E1187C30A9DDF15 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4865DF5B9828CC1A6D9134053729AD4C /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1EC64EB638F6BCDC5F10055A15FFF2D7 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3C1CC6C04D875D926256FFAB09BA85EC /* CoreGraphics.framework in Frameworks */, - C172318723A82A556756CE7A10ED572B /* EventKit.framework in Frameworks */, - AEF45D844795868F471C231D4DBADA86 /* EventKitUI.framework in Frameworks */, - 75EA39995111C0925C1F8793C0F19255 /* Foundation.framework in Frameworks */, - DEF1FBD0689397BC6AB8BDA6BB8AB78A /* OrderedDictionary.framework in Frameworks */, - DF0507A59387E5CBE881FD0E56A6EFCC /* OSCache.framework in Frameworks */, - 12E7AF496E5CBE616581F40EA8CC55FF /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4CBB24793DE31904DE12AAE27652CDAF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 3E7B77774073428F0EDBA7F9B27B498D /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DDD37FE54B9E2C86B5DFECBEA28EFF5D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - CBE4FB461D2A7FEC45F3F58EB90D2906 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F843E9A69A061049F1525728BB17C353 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0D3FC36B1AD1B91A19EB93398CB883B7 /* Products */ = { - isa = PBXGroup; - children = ( - 474F46F9D3CD4C66494C6398945993BC /* CalendarLib.bundle */, - 8CE9C5EF3DED23005E916FF98A2CA920 /* CalendarLib.framework */, - CA7F02164398FAF257C7384B0BD5A439 /* OrderedDictionary.framework */, - 8C18D98026C88F9B1A13FDC05F89DAD8 /* OSCache.framework */, - ACC24998E5D2DA77072A37C508B33258 /* Pods_CalendarDemo.framework */, - ); - name = Products; - sourceTree = ""; - }; - 0F1C12A4F9C13DDF666E42720AFF7CA3 /* Resources */ = { - isa = PBXGroup; - children = ( - 29E9E70A4DEC71A3E3E58D1BAE3AA322 /* CalendarLib */, - ); - name = Resources; - sourceTree = ""; - }; - 17B7D64812854ACD156C75C946043AEB /* OSCache */ = { - isa = PBXGroup; - children = ( - 84EFFEA70CE3F29C1F727328CD11F594 /* OSCache.h */, - 7B109FCF8326A98A81D6FE07BA9A2CE3 /* OSCache.m */, - 653A87F57774EEDCAB59C3835F515F39 /* Support Files */, - ); - path = OSCache; - sourceTree = ""; - }; - 207A1972E30A93AB18D345EC64D59A66 /* Support Files */ = { - isa = PBXGroup; - children = ( - D414A4CDE4116258F210D5FA18D0F06B /* Info.plist */, - 3A865200D6DA2CA2394B39060FF21453 /* OrderedDictionary.modulemap */, - CA6A2957B0D8809A9F6F3A173CAC5A75 /* OrderedDictionary.xcconfig */, - 5D39AF81A0F8E48F554E38EC0E237D15 /* OrderedDictionary-dummy.m */, - 707183B33831E2C9D2771125C823C584 /* OrderedDictionary-prefix.pch */, - 334F0D464F275262D14ACFCE6E1E9D68 /* OrderedDictionary-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/OrderedDictionary"; - sourceTree = ""; - }; - 29E9E70A4DEC71A3E3E58D1BAE3AA322 /* CalendarLib */ = { - isa = PBXGroup; - children = ( - D2176FE612DD0596CE7C681E14BEEA3D /* en.lproj */, - D83C7B4870A7AC1B7D6EA9D800818168 /* fr.lproj */, - ); - path = CalendarLib; - sourceTree = ""; - }; - 361B1A664A1700E5D552757703BC07ED /* Development Pods */ = { - isa = PBXGroup; - children = ( - E66744A6542A6AA38184187625166DE4 /* CalendarLib */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 4095B5A90CF1C4DF2350A3C3C93F7977 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 71D6E0D174F4DE38CD29304BC2BA2282 /* OrderedDictionary.framework */, - 0AC2F4E580C735F08DDD3E5212CA9F43 /* OSCache.framework */, - A96F6A9975A6F24AB416D87368E072C4 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 414BE1B86DC3EBB8BB2F9607F5417355 /* Pods */ = { - isa = PBXGroup; - children = ( - DA8C3C0C9761CCF4865068E83CD0336F /* OrderedDictionary */, - 17B7D64812854ACD156C75C946043AEB /* OSCache */, - ); - name = Pods; - sourceTree = ""; - }; - 55A46B5E828C65C9EDA4EFCB57AC5BD7 /* CalendarLib */ = { - isa = PBXGroup; - children = ( - BC32A4691D31055C00AB19D7 /* MGCCalendarHeaderCell.h */, - BC32A46A1D31055C00AB19D7 /* MGCCalendarHeaderCell.m */, - BC32A46B1D31055C00AB19D7 /* MGCCalendarHeaderCell.xib */, - BC32A46C1D31055C00AB19D7 /* MGCCalendarHeaderView.h */, - BC32A46D1D31055C00AB19D7 /* MGCCalendarHeaderView.m */, - A14FC8E1DA423047B4BD53F770157AA2 /* Constant.h */, - D87993AA397DD65C4DECA997776FE0B2 /* MGCAlignedGeometry.h */, - CF4B07529A2197D70A55B6D7B5BCECBD /* MGCAlignedGeometry.m */, - 36C709E8D3709828F4CDCC6F9E8B8F1F /* MGCAllDayEventsViewLayout.h */, - 1BD5A1B70C24D5E15C7902A3810AD71B /* MGCAllDayEventsViewLayout.m */, - 4EA301017D15B64FEE4ACA4D179F98E6 /* MGCDateRange.h */, - 5DE721EBDAE294A03673CD1248B07ABC /* MGCDateRange.m */, - 3BA83E09087DAB7A93486006F5D66EC7 /* MGCDayColumnCell.h */, - 4D826449F2F9E350884A3E4683683487 /* MGCDayColumnCell.m */, - 7B32538B37024E5C7870BF811F48A57C /* MGCDayPlannerEKViewController.h */, - 7860FA75B2828CFF3C94D193ED84E8F4 /* MGCDayPlannerEKViewController.m */, - 2C8709F47F1202384A6577453DF2E776 /* MGCDayPlannerView.h */, - 025D804BECA3FA4FB3437E02C746D838 /* MGCDayPlannerView.m */, - 69ADBAC255FCEC8B18E2D22CEB022244 /* MGCDayPlannerViewController.h */, - 43488965D4CAA1FDD110FDD5A4BF085E /* MGCDayPlannerViewController.m */, - 5E45A50DA2DE157EEED14F329472CFCD /* MGCEventCell.h */, - F8642DF879250346F1FFEF4BD8D9BE06 /* MGCEventCell.m */, - 60DA0727BCAAE002FE5C811A4E13B6DA /* MGCEventCellLayoutAttributes.h */, - 4585227A1FC9C596796A9E3CA5C4D56E /* MGCEventCellLayoutAttributes.m */, - CF0F9DD62CFDC941842A2D67F57E9289 /* MGCEventKitSupport.h */, - 7247DD48FFD9C0A9A6592AFF50EAB445 /* MGCEventKitSupport.m */, - 3A1AFEA81FE3EEF9BD457D565C2F56F7 /* MGCEventsRowView.h */, - C08DFD4AF9A6CEA2A502ACD58A728303 /* MGCEventsRowView.m */, - DD8B59A20F855C881309ECC830CB2A24 /* MGCEventView.h */, - 15CA1070A72D5B616A44BC999DC6575F /* MGCEventView.m */, - 0658BFDB814DEB3ECCDA99ECA7521DD9 /* MGCInteractiveEventView.h */, - 272436DEBAF47D9A85D674C955A18A5E /* MGCInteractiveEventView.m */, - CE13CF28836D0DBD67E1C1547545C67A /* MGCMonthMiniCalendarView.h */, - 3C99F8B5BDB75CF001C1E1E7A4121D4E /* MGCMonthMiniCalendarView.m */, - 952C7E727EED0A50DA45041DE31137F8 /* MGCMonthPlannerBackgroundView.h */, - 0F7F98D1CBD468157CC87E1534FD297D /* MGCMonthPlannerBackgroundView.m */, - 035838A3E1D5E440BB9A3B651CB0622E /* MGCMonthPlannerEKViewController.h */, - 4DEADC186D2B7AD760C9F3F892E3DC97 /* MGCMonthPlannerEKViewController.m */, - 4BDB84AF839AEE748D67C6C78AC17D1A /* MGCMonthPlannerHeaderView.h */, - 4C2884C2460A111F124151B5DC9ED17D /* MGCMonthPlannerHeaderView.m */, - 1FE16E5343143115FF8D70DB3E614D7E /* MGCMonthPlannerView.h */, - 934AC6397F68D5F15DA64421BE08C1A4 /* MGCMonthPlannerView.m */, - 0EC117D89CD9649F60918F291C163452 /* MGCMonthPlannerViewController.h */, - 7F33A77B1C88FA226CA3F123445A1AB4 /* MGCMonthPlannerViewController.m */, - EA47F11125BF0BED9FC31F762B3C5EAA /* MGCMonthPlannerViewDayCell.h */, - D5747BE9957E0A918225217BBE905449 /* MGCMonthPlannerViewDayCell.m */, - 361E02A32A0D91554059D7DA815376ED /* MGCMonthPlannerViewLayout.h */, - F70A86D4E3C34B4408539DE36D34D85E /* MGCMonthPlannerViewLayout.m */, - 682F557D317E6B35EF72FB6490A1B17F /* MGCMonthPlannerWeekView.h */, - EC30C1BC622800CC72FA23CF9CB8AB40 /* MGCMonthPlannerWeekView.m */, - 96410F223170B0D6732DB4AB7632821F /* MGCReusableObjectQueue.h */, - D8A75E26ECCE9E325A71FE30987EDF49 /* MGCReusableObjectQueue.m */, - E9CF035F29148878B13673869A38496E /* MGCStandardEventView.h */, - 6E47DD2122985745BFECD98CDF38DADE /* MGCStandardEventView.m */, - A021769F55E122F239757FDC93C0B8B7 /* MGCTimedEventsViewLayout.h */, - 40F8F6F011D72119E3CF3F18A91BCDAF /* MGCTimedEventsViewLayout.m */, - 77C49D72D796EFAA8308A1D0B15E8D25 /* MGCTimeRowsView.h */, - 639E8D3DEC720A9B52315E961AE4C21F /* MGCTimeRowsView.m */, - 484752CE8E4D5723FC9E1A2BA7FE6DE7 /* MGCYearCalendarMonthCell.h */, - 9AEA7D2CB8BE37041E07C43FD98BD53E /* MGCYearCalendarMonthCell.m */, - 4EA158124FBDD717544FED9263FBD303 /* MGCYearCalendarMonthHeaderView.h */, - CB2C94953057A7A4E757F95D59B4E75B /* MGCYearCalendarMonthHeaderView.m */, - 68B7B88BE0B1447662D1EAB5590D5939 /* MGCYearCalendarView.h */, - 56C8D6DE7DAE5F35E652CCE40F50B208 /* MGCYearCalendarView.m */, - D51543B38B03130DB1C1328336A7210A /* NSAttributedString+MGCAdditions.h */, - 0F8285ABCC5BD108881B8D64CDE642EC /* NSAttributedString+MGCAdditions.m */, - CBDCA5399E009C1D573DE21980363BB9 /* NSCalendar+MGCAdditions.h */, - 23A81DC455C8A11ABDE63E387401038A /* NSCalendar+MGCAdditions.m */, - ); - path = CalendarLib; - sourceTree = ""; - }; - 59A31FFB10E599FA4F09931A500917D1 /* Pods-CalendarDemo */ = { - isa = PBXGroup; - children = ( - EC3247F6F117E9550E559790EF12FE6C /* Info.plist */, - 45D5F39D99FF80A3B5C95F53B2033BD9 /* Pods-CalendarDemo.modulemap */, - D0B7ABACBC1482A67BB0B58535FB4D3A /* Pods-CalendarDemo-acknowledgements.markdown */, - FF01347CE9DC5BBCEC2F89DABE0D1763 /* Pods-CalendarDemo-acknowledgements.plist */, - 25233512573BAC19936AB8B585997361 /* Pods-CalendarDemo-dummy.m */, - 40A7ABA382B6C59BBAE48BE34A8A6549 /* Pods-CalendarDemo-frameworks.sh */, - 5C25C368E644F9AF4FEFC41FC495C37D /* Pods-CalendarDemo-resources.sh */, - F46BB6ABD311E312D5CE6A1A3521632F /* Pods-CalendarDemo-umbrella.h */, - 08E408886344FC31ED4A170A9DC261D8 /* Pods-CalendarDemo.debug.xcconfig */, - FF6D24E3BB10D55468C1356A066A7012 /* Pods-CalendarDemo.release.xcconfig */, - ); - name = "Pods-CalendarDemo"; - path = "Target Support Files/Pods-CalendarDemo"; - sourceTree = ""; - }; - 653A87F57774EEDCAB59C3835F515F39 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0621FC5DD83F68E761116875B059412C /* Info.plist */, - 34023C9D2F76E5CD4716B8BEBB929B92 /* OSCache.modulemap */, - 28F9BDA61B9C749A357770C19ACD3B8A /* OSCache.xcconfig */, - D312E569E43BEDEAB80ABB313B2DA37B /* OSCache-dummy.m */, - 03ED48CF8AC5E601600DC1AF567A32DB /* OSCache-prefix.pch */, - 30DC81CEC32D28A3FA47B4D4057E07E1 /* OSCache-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/OSCache"; - sourceTree = ""; - }; - 73BC7DBA543BB6F4C379834E32AA9FEF /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 59A31FFB10E599FA4F09931A500917D1 /* Pods-CalendarDemo */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 361B1A664A1700E5D552757703BC07ED /* Development Pods */, - 4095B5A90CF1C4DF2350A3C3C93F7977 /* Frameworks */, - 414BE1B86DC3EBB8BB2F9607F5417355 /* Pods */, - 0D3FC36B1AD1B91A19EB93398CB883B7 /* Products */, - 73BC7DBA543BB6F4C379834E32AA9FEF /* Targets Support Files */, - ); - sourceTree = ""; - }; - A96F6A9975A6F24AB416D87368E072C4 /* iOS */ = { - isa = PBXGroup; - children = ( - 4E475E0EAF339997987B1A35247D49DE /* CoreGraphics.framework */, - 84B7B1DA5EB4C3FA05D4BB2B2B9700FD /* EventKit.framework */, - 4A2FC2AF2409E900FA1C0219F88231A5 /* EventKitUI.framework */, - 7D064917209003916B29AF2C1D58E6B7 /* Foundation.framework */, - 184D1D2346ED6E14A32ADF6A8380122B /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - BDB41EAFCA659890F4F874E8643FED1F /* Support Files */ = { - isa = PBXGroup; - children = ( - 74A37E3969A857D082820F3A92F53C87 /* CalendarLib.modulemap */, - 1B19161673C40175196589DF322D71AD /* CalendarLib.xcconfig */, - B1870F870C6857E28D9CE5AF9B2A1098 /* CalendarLib-dummy.m */, - A94A3BBABCB47178630385FFFB65190B /* CalendarLib-prefix.pch */, - AF033CC11CFDD51637546D1E566D7555 /* CalendarLib-umbrella.h */, - C0013B7C18CEFFE3F113A477AB1F1CF5 /* Info.plist */, - 058EE5E1389071701541D945B395BB8D /* ResourceBundle-CalendarLib-Info.plist */, - ); - name = "Support Files"; - path = "Pods/Target Support Files/CalendarLib"; - sourceTree = ""; - }; - DA8C3C0C9761CCF4865068E83CD0336F /* OrderedDictionary */ = { - isa = PBXGroup; - children = ( - E63EF56F13F78687828039FC20CB4645 /* OrderedDictionary.h */, - 2BE2EA39F8FE5E48E7B9712F35754B74 /* OrderedDictionary.m */, - 207A1972E30A93AB18D345EC64D59A66 /* Support Files */, - ); - path = OrderedDictionary; - sourceTree = ""; - }; - E66744A6542A6AA38184187625166DE4 /* CalendarLib */ = { - isa = PBXGroup; - children = ( - 55A46B5E828C65C9EDA4EFCB57AC5BD7 /* CalendarLib */, - 0F1C12A4F9C13DDF666E42720AFF7CA3 /* Resources */, - BDB41EAFCA659890F4F874E8643FED1F /* Support Files */, - ); - name = CalendarLib; - path = ..; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0097DE418A1E57A230B68F9B4608BE4A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BC32A4731D31055C00AB19D7 /* MGCCalendarHeaderView.h in Headers */, - 16C92160004A461104976AE8D9ECECC1 /* CalendarLib-umbrella.h in Headers */, - 4397926F702DA9AE79D00C59106E2099 /* Constant.h in Headers */, - B34A1260B1EC1E724AC20BBD8329671F /* MGCAlignedGeometry.h in Headers */, - BC3300D03E96ADC4526AC9CFE3110876 /* MGCAllDayEventsViewLayout.h in Headers */, - 40270C224A640E091730C3F668E3633D /* MGCDateRange.h in Headers */, - 346A291DD56A77A5080532CCF8C8C0DA /* MGCDayColumnCell.h in Headers */, - 3F0BCD07266D82C97C13C958CA64C33D /* MGCDayPlannerEKViewController.h in Headers */, - 283AE0B9767480D604A0F53E39522C3D /* MGCDayPlannerView.h in Headers */, - 10040D2BC447B188F90C6D1358FF833B /* MGCDayPlannerViewController.h in Headers */, - 6B8A6D46DE2B271A9CF861E8EBA075D5 /* MGCEventCell.h in Headers */, - C7C218477AEAAFD0EA27A58A9573F231 /* MGCEventCellLayoutAttributes.h in Headers */, - 283F36B27EFB452A37D27FBDAD6EB173 /* MGCEventKitSupport.h in Headers */, - 54986D8A0769E0968396794DB5CF53AD /* MGCEventsRowView.h in Headers */, - FA3B1812DFF8E7491ED66C2395EFB8AC /* MGCEventView.h in Headers */, - F5D52A699620031B048F46462041E2F2 /* MGCInteractiveEventView.h in Headers */, - F25B2B6D821D0E1D771058D5FF140FD3 /* MGCMonthMiniCalendarView.h in Headers */, - 573CA837DA4F7C1B9371A8A283001B90 /* MGCMonthPlannerBackgroundView.h in Headers */, - 8D2AC2F545A689196AD380EB39531B0A /* MGCMonthPlannerEKViewController.h in Headers */, - A82B51DBD620C3F9150E16E71B1125FD /* MGCMonthPlannerHeaderView.h in Headers */, - 853E943F3A44E653A19A993E22E885C0 /* MGCMonthPlannerView.h in Headers */, - 15382445402A28617FCA964461A6B4BA /* MGCMonthPlannerViewController.h in Headers */, - BC32A46E1D31055C00AB19D7 /* MGCCalendarHeaderCell.h in Headers */, - C2E9436B5AD60E85AD494381590EBEC4 /* MGCMonthPlannerViewDayCell.h in Headers */, - 49B450EAE456ECB2647A3D637CC1B852 /* MGCMonthPlannerViewLayout.h in Headers */, - CBC4E2B6ED53D394ACEE641727ABD9F2 /* MGCMonthPlannerWeekView.h in Headers */, - 35168AD739FC86E090E22E4D715D77BD /* MGCReusableObjectQueue.h in Headers */, - 5BDF04C89F0F2C5BF48B3FD813AA5E2E /* MGCStandardEventView.h in Headers */, - 19F22C8E0461D90DCB5CAA2E2FD67B02 /* MGCTimedEventsViewLayout.h in Headers */, - AB3FE3B79D8358BDB3E3C508558276B4 /* MGCTimeRowsView.h in Headers */, - 8AAB64C0FF8986D4580019BB0F37066D /* MGCYearCalendarMonthCell.h in Headers */, - D4AF7DE5DD942DA2C7819174168125C8 /* MGCYearCalendarMonthHeaderView.h in Headers */, - B74FE528568313CE30EA6D663738BB34 /* MGCYearCalendarView.h in Headers */, - D03C03FB5C6CA1F143621A42605C78A6 /* NSAttributedString+MGCAdditions.h in Headers */, - A4E3633A2C1959A55C3CFDFDFD37FBC2 /* NSCalendar+MGCAdditions.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5DE1912BFD3CC1D9E0C97641EF70CA68 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7CB4DDDC12B79389CFC8C49DCF39C1A2 /* OSCache-umbrella.h in Headers */, - EC8FF04893A567958DF9E6CE758D24EB /* OSCache.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 72AAB71C10D9161B9CECF35BA2EB3C34 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 10440B43B679E057C81AE26E6737C71A /* Pods-CalendarDemo-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FA4E72657FE4E8A1695BD505C8E7BDB1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7A02B3D0D0A5C4F9A05668A732FDF73F /* OrderedDictionary-umbrella.h in Headers */, - 8A637532D7C717B031F5479C9DFDCF96 /* OrderedDictionary.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 14730700B2D60DF9994CA196CE7ADE3C /* OSCache */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5AF40903545821C2654D818E75824FFD /* Build configuration list for PBXNativeTarget "OSCache" */; - buildPhases = ( - 690591D27D2C822C43B2C4C87F6D6C5C /* Sources */, - 4CBB24793DE31904DE12AAE27652CDAF /* Frameworks */, - 5DE1912BFD3CC1D9E0C97641EF70CA68 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = OSCache; - productName = OSCache; - productReference = 8C18D98026C88F9B1A13FDC05F89DAD8 /* OSCache.framework */; - productType = "com.apple.product-type.framework"; - }; - 2673FB444CAD63D7872199869D12B242 /* CalendarLib-CalendarLib */ = { - isa = PBXNativeTarget; - buildConfigurationList = 07144BF1E580A3278D85202D9E0EA237 /* Build configuration list for PBXNativeTarget "CalendarLib-CalendarLib" */; - buildPhases = ( - CDD2092E21B82B3A3B72CC48D207F924 /* Sources */, - F843E9A69A061049F1525728BB17C353 /* Frameworks */, - CEAC95CC33396F30D3AE7158AF0FAE52 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "CalendarLib-CalendarLib"; - productName = "CalendarLib-CalendarLib"; - productReference = 474F46F9D3CD4C66494C6398945993BC /* CalendarLib.bundle */; - productType = "com.apple.product-type.bundle"; - }; - 954B3024145E89BE4F9E6E9D69C08294 /* CalendarLib */ = { - isa = PBXNativeTarget; - buildConfigurationList = F26F9C94C86D2CEE93EC87FD35694730 /* Build configuration list for PBXNativeTarget "CalendarLib" */; - buildPhases = ( - 4E199C2917722C49AB58903AD671F496 /* Sources */, - 1EC64EB638F6BCDC5F10055A15FFF2D7 /* Frameworks */, - 05B843E94270077471F87E84B4003FE5 /* Resources */, - 0097DE418A1E57A230B68F9B4608BE4A /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 01B8A5375E02A752828EE107C73EC16F /* PBXTargetDependency */, - D77B8F103B746F42F033679A3279BB50 /* PBXTargetDependency */, - B30A607B34FB56CCE2734DC48D203E0B /* PBXTargetDependency */, - ); - name = CalendarLib; - productName = CalendarLib; - productReference = 8CE9C5EF3DED23005E916FF98A2CA920 /* CalendarLib.framework */; - productType = "com.apple.product-type.framework"; - }; - BD9836C41E7DFF6FBF342C27330545CC /* Pods-CalendarDemo */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3F57CD8D2CD27C91A8F740F9626848DC /* Build configuration list for PBXNativeTarget "Pods-CalendarDemo" */; - buildPhases = ( - BD8483794B745327BA015964C42414C1 /* Sources */, - 0275B4DC678C28992E1187C30A9DDF15 /* Frameworks */, - 72AAB71C10D9161B9CECF35BA2EB3C34 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 9679F4D7B4B4E34D62A0E940D9433A91 /* PBXTargetDependency */, - EF1EA0968227FD731A40FF601176B1AE /* PBXTargetDependency */, - EA5A8F475FEA043B3E1A98941B9495CE /* PBXTargetDependency */, - ); - name = "Pods-CalendarDemo"; - productName = "Pods-CalendarDemo"; - productReference = ACC24998E5D2DA77072A37C508B33258 /* Pods_CalendarDemo.framework */; - productType = "com.apple.product-type.framework"; - }; - C4C32B98A88C3F59ADE6A79B82E1867F /* OrderedDictionary */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3CC8891570BE8E1A33A407A1C2B1D477 /* Build configuration list for PBXNativeTarget "OrderedDictionary" */; - buildPhases = ( - 8278A713DFCC290E209F1CFFDC7D5986 /* Sources */, - DDD37FE54B9E2C86B5DFECBEA28EFF5D /* Frameworks */, - FA4E72657FE4E8A1695BD505C8E7BDB1 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = OrderedDictionary; - productName = OrderedDictionary; - productReference = CA7F02164398FAF257C7384B0BD5A439 /* OrderedDictionary.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0700; - }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 0D3FC36B1AD1B91A19EB93398CB883B7 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 954B3024145E89BE4F9E6E9D69C08294 /* CalendarLib */, - 2673FB444CAD63D7872199869D12B242 /* CalendarLib-CalendarLib */, - C4C32B98A88C3F59ADE6A79B82E1867F /* OrderedDictionary */, - 14730700B2D60DF9994CA196CE7ADE3C /* OSCache */, - BD9836C41E7DFF6FBF342C27330545CC /* Pods-CalendarDemo */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 05B843E94270077471F87E84B4003FE5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BC32A4711D31055C00AB19D7 /* MGCCalendarHeaderCell.xib in Resources */, - BC129756EB184EB7B54FC078D77EAE6F /* CalendarLib.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CEAC95CC33396F30D3AE7158AF0FAE52 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 44C3A8E49CF779F8E6C61A9E1F51A74D /* en.lproj in Resources */, - 84A07A7FFF9C2A776980FEE43091F865 /* fr.lproj in Resources */, - BC32A4721D31055C00AB19D7 /* MGCCalendarHeaderCell.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4E199C2917722C49AB58903AD671F496 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9C706FCCF0E309E935E3D2FE5A591D07 /* CalendarLib-dummy.m in Sources */, - 35029C6B4FA6AD6A0553D5BA04E025EA /* MGCAlignedGeometry.m in Sources */, - 61F3B5E100AF6B8DFCBD8EC07A31735E /* MGCAllDayEventsViewLayout.m in Sources */, - 29E8849D9EE6CF5F258DCD59CAE90BA3 /* MGCDateRange.m in Sources */, - 85EE00D6E106AFF3B3D6A5CE1EAAD041 /* MGCDayColumnCell.m in Sources */, - 72A71ECA963D06465DFD8B3E12AD41BE /* MGCDayPlannerEKViewController.m in Sources */, - FC40921F50ED56C61523597E5D292C4D /* MGCDayPlannerView.m in Sources */, - 8C5F4307DCA368C7F9DB7ED256DA31D1 /* MGCDayPlannerViewController.m in Sources */, - 4B0870E36D23BD129E6C0280E2808F3E /* MGCEventCell.m in Sources */, - A76C549C7C4534A81AD9B6ACA732DDB8 /* MGCEventCellLayoutAttributes.m in Sources */, - 5553D815BA0ECF462F0454F8CF32B6C9 /* MGCEventKitSupport.m in Sources */, - BC32A46F1D31055C00AB19D7 /* MGCCalendarHeaderCell.m in Sources */, - 3260AFF8730CC2F514A4B476F6E3B1C9 /* MGCEventsRowView.m in Sources */, - 2BEB9A448F785B4ABD58E7E5A0C0AAB8 /* MGCEventView.m in Sources */, - D865046DF81EB3FB4A8D12EB03740124 /* MGCInteractiveEventView.m in Sources */, - 9C8B2BAEF1120713575CAD5BE1DD916E /* MGCMonthMiniCalendarView.m in Sources */, - 37DBF567D2C4D15EC52DD728B4A4C2ED /* MGCMonthPlannerBackgroundView.m in Sources */, - F73109644FB32F739BF1198430F0A34F /* MGCMonthPlannerEKViewController.m in Sources */, - 53BC63EF2BFA0161AD495D4705E5B73D /* MGCMonthPlannerHeaderView.m in Sources */, - 1A9BC91D8D76AC397062ACE2EB451390 /* MGCMonthPlannerView.m in Sources */, - BC4DAE0E1E3ED7AEF78839F4815A0211 /* MGCMonthPlannerViewController.m in Sources */, - BC32A4741D31055C00AB19D7 /* MGCCalendarHeaderView.m in Sources */, - E9AE3F473F8DBF38B493A0680606EDDA /* MGCMonthPlannerViewDayCell.m in Sources */, - C604B7A49ABD9407AA6E50F1D1B4BF3B /* MGCMonthPlannerViewLayout.m in Sources */, - 3D8DB0D93E99C225519CB0B964BB76F0 /* MGCMonthPlannerWeekView.m in Sources */, - 0BD8EEF83D60B467C0D92522C179EF3F /* MGCReusableObjectQueue.m in Sources */, - B4479162A06A4B6E1321D7C5A73581A4 /* MGCStandardEventView.m in Sources */, - AB467272C402ACAEBE8E72A7FEA04A55 /* MGCTimedEventsViewLayout.m in Sources */, - 666876A324A754DE9EC656D6B4A75C8A /* MGCTimeRowsView.m in Sources */, - 575AD525B5810BD268D31DE10E9D981C /* MGCYearCalendarMonthCell.m in Sources */, - 165AC579BF526F5FA7BC861EB1E98A5E /* MGCYearCalendarMonthHeaderView.m in Sources */, - BE3DF61E19CE6628EFBC28FC4E5249F1 /* MGCYearCalendarView.m in Sources */, - F091908CE32B34A524ABBD458D4C2FDA /* NSAttributedString+MGCAdditions.m in Sources */, - 5B5865D94AE1962D0BDE732CCCA5FCB4 /* NSCalendar+MGCAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 690591D27D2C822C43B2C4C87F6D6C5C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F0BFAF44B9F2E107744B1EC5ED51A912 /* OSCache-dummy.m in Sources */, - 4922375228078DC8286BD4E99CD1EE21 /* OSCache.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8278A713DFCC290E209F1CFFDC7D5986 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3F5F2CEFF434DDCA14403D6B50D9D5DC /* OrderedDictionary-dummy.m in Sources */, - B826786804B51980ECAEA62B1B41B2BC /* OrderedDictionary.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BD8483794B745327BA015964C42414C1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 35F955276513957B6951657920F606D1 /* Pods-CalendarDemo-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CDD2092E21B82B3A3B72CC48D207F924 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 01B8A5375E02A752828EE107C73EC16F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "CalendarLib-CalendarLib"; - target = 2673FB444CAD63D7872199869D12B242 /* CalendarLib-CalendarLib */; - targetProxy = 116AD1AD124691B81F860EABA00AFA9D /* PBXContainerItemProxy */; - }; - 9679F4D7B4B4E34D62A0E940D9433A91 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CalendarLib; - target = 954B3024145E89BE4F9E6E9D69C08294 /* CalendarLib */; - targetProxy = 4C01AAE245FE633F3DEA17EE7B779B6B /* PBXContainerItemProxy */; - }; - B30A607B34FB56CCE2734DC48D203E0B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OrderedDictionary; - target = C4C32B98A88C3F59ADE6A79B82E1867F /* OrderedDictionary */; - targetProxy = 34A195D9FB4A9B50F0F1B11ED70A896D /* PBXContainerItemProxy */; - }; - D77B8F103B746F42F033679A3279BB50 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OSCache; - target = 14730700B2D60DF9994CA196CE7ADE3C /* OSCache */; - targetProxy = 9DD2E24E413DC847B0033DF85707DD8B /* PBXContainerItemProxy */; - }; - EA5A8F475FEA043B3E1A98941B9495CE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OrderedDictionary; - target = C4C32B98A88C3F59ADE6A79B82E1867F /* OrderedDictionary */; - targetProxy = 983B1F146273EC8F5F8DF62B5F4778BD /* PBXContainerItemProxy */; - }; - EF1EA0968227FD731A40FF601176B1AE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OSCache; - target = 14730700B2D60DF9994CA196CE7ADE3C /* OSCache */; - targetProxy = 9380B5DACC543EBA205B2EE9EA115A29 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 0735BCB872CF18210AB3B60136419110 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B19161673C40175196589DF322D71AD /* CalendarLib.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/CalendarLib/CalendarLib-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CalendarLib/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CalendarLib/CalendarLib.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = CalendarLib; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 47BEF9D903506B003EA5C2B249729489 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - ONLY_ACTIVE_ARCH = YES; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 56DEC5F3C442970AD928BA35839A79A3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CA6A2957B0D8809A9F6F3A173CAC5A75 /* OrderedDictionary.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/OrderedDictionary/OrderedDictionary-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OrderedDictionary/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OrderedDictionary/OrderedDictionary.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = OrderedDictionary; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 5FBDA6B82A65D6022AE9C118C723C902 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 08E408886344FC31ED4A170A9DC261D8 /* Pods-CalendarDemo.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-CalendarDemo/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-CalendarDemo/Pods-CalendarDemo.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_CalendarDemo; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 80614831968EDB0B9E25AD957D95DAFA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B19161673C40175196589DF322D71AD /* CalendarLib.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CalendarLib"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/CalendarLib/ResourceBundle-CalendarLib-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = CalendarLib; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - A6750A5EEEFDAD9ED14FD831849F29D1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B19161673C40175196589DF322D71AD /* CalendarLib.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CalendarLib"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/CalendarLib/ResourceBundle-CalendarLib-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = CalendarLib; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - AAF678CED40D3499169D10F63CA0719E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - B0EF01E294EDC0EE7EF3B170A79099F7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1B19161673C40175196589DF322D71AD /* CalendarLib.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/CalendarLib/CalendarLib-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CalendarLib/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/CalendarLib/CalendarLib.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = CalendarLib; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - C44DE9A570B41E729B012ADA5DD08621 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FF6D24E3BB10D55468C1356A066A7012 /* Pods-CalendarDemo.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-CalendarDemo/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-CalendarDemo/Pods-CalendarDemo.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_CalendarDemo; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C4F7D72DBAE2317FD567B03B7186F6BB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CA6A2957B0D8809A9F6F3A173CAC5A75 /* OrderedDictionary.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/OrderedDictionary/OrderedDictionary-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OrderedDictionary/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OrderedDictionary/OrderedDictionary.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = OrderedDictionary; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DFB46E022BAD4AC474FF1C3A2FA720F2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 28F9BDA61B9C749A357770C19ACD3B8A /* OSCache.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/OSCache/OSCache-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OSCache/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OSCache/OSCache.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = OSCache; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - F93BD3EEE805E271EC3C768C21399035 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 28F9BDA61B9C749A357770C19ACD3B8A /* OSCache.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/OSCache/OSCache-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/OSCache/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/OSCache/OSCache.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = OSCache; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 07144BF1E580A3278D85202D9E0EA237 /* Build configuration list for PBXNativeTarget "CalendarLib-CalendarLib" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A6750A5EEEFDAD9ED14FD831849F29D1 /* Debug */, - 80614831968EDB0B9E25AD957D95DAFA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 47BEF9D903506B003EA5C2B249729489 /* Debug */, - AAF678CED40D3499169D10F63CA0719E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3CC8891570BE8E1A33A407A1C2B1D477 /* Build configuration list for PBXNativeTarget "OrderedDictionary" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 56DEC5F3C442970AD928BA35839A79A3 /* Debug */, - C4F7D72DBAE2317FD567B03B7186F6BB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3F57CD8D2CD27C91A8F740F9626848DC /* Build configuration list for PBXNativeTarget "Pods-CalendarDemo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5FBDA6B82A65D6022AE9C118C723C902 /* Debug */, - C44DE9A570B41E729B012ADA5DD08621 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5AF40903545821C2654D818E75824FFD /* Build configuration list for PBXNativeTarget "OSCache" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F93BD3EEE805E271EC3C768C21399035 /* Debug */, - DFB46E022BAD4AC474FF1C3A2FA720F2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F26F9C94C86D2CEE93EC87FD35694730 /* Build configuration list for PBXNativeTarget "CalendarLib" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B0EF01E294EDC0EE7EF3B170A79099F7 /* Debug */, - 0735BCB872CF18210AB3B60136419110 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; -} diff --git a/Pods/Target Support Files/OSCache/OSCache-dummy.m b/Pods/Target Support Files/OSCache/OSCache-dummy.m deleted file mode 100644 index ecf66fad..00000000 --- a/Pods/Target Support Files/OSCache/OSCache-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_OSCache : NSObject -@end -@implementation PodsDummy_OSCache -@end diff --git a/Pods/Target Support Files/OSCache/OSCache-prefix.pch b/Pods/Target Support Files/OSCache/OSCache-prefix.pch deleted file mode 100644 index aa992a4a..00000000 --- a/Pods/Target Support Files/OSCache/OSCache-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/Pods/Target Support Files/OSCache/OSCache-umbrella.h b/Pods/Target Support Files/OSCache/OSCache-umbrella.h deleted file mode 100644 index aa584c08..00000000 --- a/Pods/Target Support Files/OSCache/OSCache-umbrella.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -#import "OSCache.h" - -FOUNDATION_EXPORT double OSCacheVersionNumber; -FOUNDATION_EXPORT const unsigned char OSCacheVersionString[]; - diff --git a/Pods/Target Support Files/OSCache/OSCache.modulemap b/Pods/Target Support Files/OSCache/OSCache.modulemap deleted file mode 100644 index 44f5abf6..00000000 --- a/Pods/Target Support Files/OSCache/OSCache.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module OSCache { - umbrella header "OSCache-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/OSCache/OSCache.xcconfig b/Pods/Target Support Files/OSCache/OSCache.xcconfig deleted file mode 100644 index 6feca258..00000000 --- a/Pods/Target Support Files/OSCache/OSCache.xcconfig +++ /dev/null @@ -1,8 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/OSCache -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-dummy.m b/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-dummy.m deleted file mode 100644 index c7afba94..00000000 --- a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_OrderedDictionary : NSObject -@end -@implementation PodsDummy_OrderedDictionary -@end diff --git a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-prefix.pch b/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-prefix.pch deleted file mode 100644 index aa992a4a..00000000 --- a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-umbrella.h b/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-umbrella.h deleted file mode 100644 index 767ef890..00000000 --- a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary-umbrella.h +++ /dev/null @@ -1,7 +0,0 @@ -#import - -#import "OrderedDictionary.h" - -FOUNDATION_EXPORT double OrderedDictionaryVersionNumber; -FOUNDATION_EXPORT const unsigned char OrderedDictionaryVersionString[]; - diff --git a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary.modulemap b/Pods/Target Support Files/OrderedDictionary/OrderedDictionary.modulemap deleted file mode 100644 index 40efe430..00000000 --- a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module OrderedDictionary { - umbrella header "OrderedDictionary-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary.xcconfig b/Pods/Target Support Files/OrderedDictionary/OrderedDictionary.xcconfig deleted file mode 100644 index d2518a26..00000000 --- a/Pods/Target Support Files/OrderedDictionary/OrderedDictionary.xcconfig +++ /dev/null @@ -1,8 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/OrderedDictionary -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/README.md b/README.md index cd6a06cf..286edb5f 100755 --- a/README.md +++ b/README.md @@ -1,83 +1,73 @@ -# CalendarLib +# Universal Calendar inspired from [Calendar](https://github.com/jumartin/Calendar) (Julien Martin) [![Version](https://img.shields.io/cocoapods/v/CalendarLib.svg?style=flat)](http://cocoapods.org/pods/CalendarLib) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![License](https://img.shields.io/cocoapods/l/CalendarLib.svg?style=flat)](http://cocoapods.org/pods/CalendarLib) [![Platform](https://img.shields.io/cocoapods/p/CalendarLib.svg?style=flat)](http://cocoapods.org/pods/CalendarLib) -CalendarLib is a set of views and controllers for displaying and scheduling events on iOS. +Universal Calendar is a set of views and controllers for displaying and scheduling events on iOS and OSX. -**Warning:** +#### OSX +![OS X 2Days](./CalendarDocs/osx_2days.png "2Days planner view") +![OS X Week](./CalendarDocs/osx_week.png "Weak planner view") +![OS X Month](./CalendarDocs/osx_month.png "Month planner view") +![OS X Year](./CalendarDocs/osx_year.png "Year planner view") -**As some people may have noticed, this project has not got any update recently, and a lot of issues / pull requests remain unanswered. -I’m very sorry for that, but I don’t have any time at the moment to take care of this repo, being very busy with other projects. -I may come back to it in the future, but meanwhile, please don’t expect any update soon.** - -**Thanks anyway to all the contributors!** - - - -![Day Planner View](https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/DayPlannerView.png "Day planner view") -![Day Planner View](https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/DayPlannerView2.png) -![Month Planner View](https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/MonthPlannerView.png "Month planner view") -![Month Planner View](https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/MonthPlannerView2.png) -![Year Calendar View](https://raw.githubusercontent.com/jumartin/Calendar/master/CalendarDocs/YearView.png "Year calendar view") +#### iOS +![Day Planner View](./CalendarDocs/DayPlannerView.png "Day planner view") +![Month Planner View](./CalendarDocs/MonthPlannerView.png "Month planner view") +![Month Planner View](./CalendarDocs/MonthPlannerView2.png) +![Day Planner View](./CalendarDocs/DayPlannerView2.png) +![Year Calendar View](./CalendarDocs/YearView.png "Year calendar view") ## Features -- Create and schedule events with iCal-like views and controllers -- 3 kinds of views are available (a day planner view, a month planner view and a year view) -- Scroll infinitely through days / months, or restrict scrolling to a given date range -- Restrict range of displayed hours in the day planner view -- Page through weeks in the day planner view or months in the month planner view -- Use a standard view for event cells or create your own custom views -- Easily customize appearance and layout (date format, colors, fonts, size of headers, number of visible days...) -- Create events by tap-and-hold on the view -- Drag-and-drop events to another date or time -- Scroll through days / months while dragging -- Specialized controllers for EventKit data source but can easily work with any custom event provider -- Background event loading for the EventKit controllers -- Ability to show an activity indicator for days while events are loading -- Restrict ability to create or move events to certain dates through datasource protocol methods -- Zoom in/out the day planner view to increase or decrease the height of hour slots -- Dim certain time ranges in the day planner view +- Create and schedule events with iCal-like views and controllers. +- 3 kinds of views are available (a day planner view, a month planner view and a year view). +- Scroll infinitely through days / months, or restrict scrolling to a given date range. +- Restrict range of displayed hours in the day planner view. +- Page through weeks in the day planner view or months in the month planner view . +- Use a standard view for event cells or create your own custom views. +- Easily customize appearance and layout (date format, colors, fonts, size of headers, number of visible days...). +- Create events by tap-and-hold on the view. +- Drag-and-drop events to another date or time. +- Scroll through days / months while dragging. +- Ability to show an activity indicator for days while events are loading. +- Restrict ability to create or move events to certain dates through datasource protocol methods. +- Zoom in/out the day planner view to increase or decrease the height of hour slots. +- Dim certain time ranges in the day planner view. ## Compatibility -iPad / iPhone with iOS 8 or higher. +iPad / iPhone with iOS 11 or higher. +OS X 10.15 (Catalyst Support) ## Installation -### CocoaPods - -The best way is to use [CocoaPods](https://cocoapods.org/pods/CalendarLib). Add the following line to your Podfile : +### Carthage +Add this to Cartfile ```ruby -pod "CalendarLib" +github "haithngn/Calendar" "master" +``` +```ruby +$ carthage update ``` - -### The old way - -If you don't want to use CocoaPods, you need to copy the content of the CalendarLib folder into your project, as well as the source of the two dependencies : [OSCache](https://github.com/nicklockwood/OSCache) and [OrderedDictionary](https://github.com/nicklockwood/OrderedDictionary). ## Getting started -1. If you want to use EventKit as a data source, create an instance of `MGCDayPlannerEKViewController` or `MGCMonthPlannerEKViewController`, or subclass them for your own needs. - - Don't forget to add the following frameworks to the project: - - - **EventKit.framework** - - **EventKitUI.framework** - -2. If you want to use another event provider, subclass one of `MGCDayPlannerViewController` or `MGCMonthPlannerViewController` and implement the data source protocol methods. +1. Implement subclass one of `MGCDayPlannerViewController` or `MGCMonthPlannerViewController` and implement the data source protocol methods. -3. If you want to use a custom event cell, subclass `MGCEventView` or `MGCStandardEventView` and register the class with the day / month planner view. +2. If you want to use a custom event cell, subclass `MGCEventView` or `MGCStandardEventView` and register the class with the day / month planner view. -See the demo project to get an idea of how to use the library and check the [documentation](http://cocoadocs.org/docsets/CalendarLib/) - ## License -CalendarLib is available under the MIT license. See the LICENSE file. +Universal Calendar is available under the MIT license. See the LICENSE file. + +## Contribution ++ Author: [TriTranDev](https://github.com/TriTranDev) ++ Author: [Vỹ Nguyễn](https://github.com/VyNguyen0102) ## Change-log -A summary of each CalendarLib release can be found in the [CHANGELOG](CHANGELOG.md). +A summary of each Universal Calendar release can be found in the [CHANGELOG](CHANGELOG.md). diff --git a/CalendarLib/Constant.h b/UniversalCalendar/Constant.h similarity index 100% rename from CalendarLib/Constant.h rename to UniversalCalendar/Constant.h diff --git a/UniversalCalendar/Info.plist b/UniversalCalendar/Info.plist new file mode 100644 index 00000000..e1fe4cfb --- /dev/null +++ b/UniversalCalendar/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/CalendarLib/MGCAlignedGeometry.h b/UniversalCalendar/MGCAlignedGeometry.h old mode 100644 new mode 100755 similarity index 96% rename from CalendarLib/MGCAlignedGeometry.h rename to UniversalCalendar/MGCAlignedGeometry.h index ec956549..1c81a8e9 --- a/CalendarLib/MGCAlignedGeometry.h +++ b/UniversalCalendar/MGCAlignedGeometry.h @@ -30,6 +30,8 @@ // functions to align coordinates on pixel boundaries +#import +#import CGRect MGCAlignedRect(CGRect rect); CGRect MGCAlignedRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height); diff --git a/CalendarLib/MGCAlignedGeometry.m b/UniversalCalendar/MGCAlignedGeometry.m old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/MGCAlignedGeometry.m rename to UniversalCalendar/MGCAlignedGeometry.m diff --git a/CalendarLib/MGCAllDayEventsViewLayout.h b/UniversalCalendar/MGCAllDayEventsViewLayout.h similarity index 100% rename from CalendarLib/MGCAllDayEventsViewLayout.h rename to UniversalCalendar/MGCAllDayEventsViewLayout.h diff --git a/CalendarLib/MGCAllDayEventsViewLayout.m b/UniversalCalendar/MGCAllDayEventsViewLayout.m similarity index 100% rename from CalendarLib/MGCAllDayEventsViewLayout.m rename to UniversalCalendar/MGCAllDayEventsViewLayout.m diff --git a/CalendarLib/MGCCalendarHeaderCell.h b/UniversalCalendar/MGCCalendarHeaderCell.h old mode 100644 new mode 100755 similarity index 64% rename from CalendarLib/MGCCalendarHeaderCell.h rename to UniversalCalendar/MGCCalendarHeaderCell.h index 2d945c13..fb3a90a0 --- a/CalendarLib/MGCCalendarHeaderCell.h +++ b/UniversalCalendar/MGCCalendarHeaderCell.h @@ -9,8 +9,8 @@ @interface MGCCalendarHeaderCell : UICollectionViewCell -@property (nonatomic, strong) IBOutlet UILabel *dayNumberLabel; -@property (nonatomic, strong) IBOutlet UILabel *dayNameLabel; +@property (nonatomic, strong) UILabel *dayNumberLabel; +@property (nonatomic, strong) UILabel *dayNameLabel; @property (nonatomic, strong) NSDate *date; -@end \ No newline at end of file +@end diff --git a/CalendarLib/MGCCalendarHeaderCell.m b/UniversalCalendar/MGCCalendarHeaderCell.m old mode 100644 new mode 100755 similarity index 65% rename from CalendarLib/MGCCalendarHeaderCell.m rename to UniversalCalendar/MGCCalendarHeaderCell.m index 77dcded7..1845267b --- a/CalendarLib/MGCCalendarHeaderCell.m +++ b/UniversalCalendar/MGCCalendarHeaderCell.m @@ -23,6 +23,30 @@ @interface MGCCalendarHeaderCell () @implementation MGCCalendarHeaderCell +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + self.dayNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; + [self.dayNameLabel setTextAlignment:NSTextAlignmentCenter]; + [self addSubview:self.dayNameLabel]; + self.dayNameLabel.translatesAutoresizingMaskIntoConstraints = NO; + [[self.dayNameLabel.heightAnchor constraintEqualToConstant:21] setActive:YES]; + [[self.dayNameLabel.leadingAnchor constraintEqualToAnchor:self.leadingAnchor constant:4] setActive:YES]; + [[self.dayNameLabel.topAnchor constraintEqualToAnchor:self.topAnchor constant:0] setActive:YES]; + [[self.dayNameLabel.centerXAnchor constraintEqualToAnchor:self.centerXAnchor constant:0] setActive:YES]; + + self.dayNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; + [self.dayNumberLabel setTextAlignment:NSTextAlignmentCenter]; + [self addSubview:self.dayNumberLabel]; + self.dayNumberLabel.translatesAutoresizingMaskIntoConstraints = NO; + [[self.dayNumberLabel.centerXAnchor constraintEqualToAnchor:self.centerXAnchor constant:0] setActive:YES]; + [[self.dayNumberLabel.widthAnchor constraintEqualToConstant:30] setActive:YES]; + [[self.dayNumberLabel.heightAnchor constraintEqualToConstant:30] setActive:YES]; + [[self.dayNumberLabel.bottomAnchor constraintEqualToAnchor:self.bottomAnchor constant:-5] setActive:YES]; + [[self.dayNumberLabel.centerXAnchor constraintEqualToAnchor:self.dayNameLabel.centerXAnchor] setActive:YES]; + + return self; +} + - (instancetype)initWithCoder:(NSCoder*)aDecoder { self = [super initWithCoder:aDecoder]; diff --git a/CalendarLib/MGCCalendarHeaderCell.xib b/UniversalCalendar/MGCCalendarHeaderCell.xib old mode 100644 new mode 100755 similarity index 76% rename from CalendarLib/MGCCalendarHeaderCell.xib rename to UniversalCalendar/MGCCalendarHeaderCell.xib index f8a9ff4c..77d9bb2d --- a/CalendarLib/MGCCalendarHeaderCell.xib +++ b/UniversalCalendar/MGCCalendarHeaderCell.xib @@ -1,14 +1,17 @@ - - + + + + + - - + + - + @@ -16,36 +19,34 @@ - - - + - + @@ -54,10 +55,6 @@ - - - - diff --git a/CalendarLib/MGCCalendarHeaderView.h b/UniversalCalendar/MGCCalendarHeaderView.h old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/MGCCalendarHeaderView.h rename to UniversalCalendar/MGCCalendarHeaderView.h diff --git a/CalendarLib/MGCCalendarHeaderView.m b/UniversalCalendar/MGCCalendarHeaderView.m old mode 100644 new mode 100755 similarity index 95% rename from CalendarLib/MGCCalendarHeaderView.m rename to UniversalCalendar/MGCCalendarHeaderView.m index 2b446535..445d7b83 --- a/CalendarLib/MGCCalendarHeaderView.m +++ b/UniversalCalendar/MGCCalendarHeaderView.m @@ -94,8 +94,9 @@ - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionVi //setup weeks dates [self setupWeekDates]; - [self registerNib:[UINib nibWithNibName:@"MGCCalendarHeaderCell" bundle:nil] forCellWithReuseIdentifier:kCellIdentifier]; - +// NSBundle *bundle = [NSBundle bundleForClass:[MGCCalendarHeaderCell class]]; +// [self registerNib:[UINib nibWithNibName:@"MGCCalendarHeaderCell" bundle:bundle] forCellWithReuseIdentifier:kCellIdentifier]; + [self registerClass:[MGCCalendarHeaderCell class] forCellWithReuseIdentifier:kCellIdentifier]; } return self; @@ -190,6 +191,9 @@ - (void)selectDate:(NSDate *)date{ - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ MGCCalendarHeaderCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCellIdentifier forIndexPath:indexPath]; + if (cell == nil) { + cell = [[MGCCalendarHeaderCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + } switch (indexPath.section) { case PreviousWeekSection://left section diff --git a/CalendarLib/MGCDateRange.h b/UniversalCalendar/MGCDateRange.h similarity index 100% rename from CalendarLib/MGCDateRange.h rename to UniversalCalendar/MGCDateRange.h diff --git a/CalendarLib/MGCDateRange.m b/UniversalCalendar/MGCDateRange.m similarity index 100% rename from CalendarLib/MGCDateRange.m rename to UniversalCalendar/MGCDateRange.m diff --git a/CalendarLib/MGCDayColumnCell.h b/UniversalCalendar/MGCDayColumnCell.h similarity index 100% rename from CalendarLib/MGCDayColumnCell.h rename to UniversalCalendar/MGCDayColumnCell.h diff --git a/CalendarLib/MGCDayColumnCell.m b/UniversalCalendar/MGCDayColumnCell.m similarity index 100% rename from CalendarLib/MGCDayColumnCell.m rename to UniversalCalendar/MGCDayColumnCell.m diff --git a/CalendarLib/MGCDayPlannerView.h b/UniversalCalendar/MGCDayPlannerView.h similarity index 100% rename from CalendarLib/MGCDayPlannerView.h rename to UniversalCalendar/MGCDayPlannerView.h diff --git a/CalendarLib/MGCDayPlannerView.m b/UniversalCalendar/MGCDayPlannerView.m similarity index 99% rename from CalendarLib/MGCDayPlannerView.m rename to UniversalCalendar/MGCDayPlannerView.m index e51bde89..c0a69497 100755 --- a/CalendarLib/MGCDayPlannerView.m +++ b/UniversalCalendar/MGCDayPlannerView.m @@ -1915,8 +1915,8 @@ - (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView vi return view; } - ///// test - else if ([kind isEqualToString:MoreEventsViewKind]) { + ///// test if ([kind isEqualToString:MoreEventsViewKind]) + else { UICollectionReusableView *view = [self.allDayEventsView dequeueReusableSupplementaryViewOfKind:MoreEventsViewKind withReuseIdentifier:MoreEventsViewReuseIdentifier forIndexPath:indexPath]; view.autoresizesSubviews = YES; diff --git a/CalendarLib/MGCDayPlannerViewController.h b/UniversalCalendar/MGCDayPlannerViewController.h similarity index 100% rename from CalendarLib/MGCDayPlannerViewController.h rename to UniversalCalendar/MGCDayPlannerViewController.h diff --git a/CalendarLib/MGCDayPlannerViewController.m b/UniversalCalendar/MGCDayPlannerViewController.m similarity index 99% rename from CalendarLib/MGCDayPlannerViewController.m rename to UniversalCalendar/MGCDayPlannerViewController.m index d5334ff7..c695ab68 100755 --- a/CalendarLib/MGCDayPlannerViewController.m +++ b/UniversalCalendar/MGCDayPlannerViewController.m @@ -71,7 +71,7 @@ - (void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; if (!self.headerView && self.showsWeekHeaderView) { - self.dayPlannerView.numberOfVisibleDays = 1; + self.dayPlannerView.numberOfVisibleDays = 2; self.dayPlannerView.dayHeaderHeight = 90; self.dayPlannerView.visibleDays.start = [NSDate date]; [self setupHeaderView]; diff --git a/CalendarLib/MGCEventCell.h b/UniversalCalendar/MGCEventCell.h similarity index 100% rename from CalendarLib/MGCEventCell.h rename to UniversalCalendar/MGCEventCell.h diff --git a/CalendarLib/MGCEventCell.m b/UniversalCalendar/MGCEventCell.m similarity index 100% rename from CalendarLib/MGCEventCell.m rename to UniversalCalendar/MGCEventCell.m diff --git a/CalendarLib/MGCEventCellLayoutAttributes.h b/UniversalCalendar/MGCEventCellLayoutAttributes.h similarity index 100% rename from CalendarLib/MGCEventCellLayoutAttributes.h rename to UniversalCalendar/MGCEventCellLayoutAttributes.h diff --git a/CalendarLib/MGCEventCellLayoutAttributes.m b/UniversalCalendar/MGCEventCellLayoutAttributes.m similarity index 100% rename from CalendarLib/MGCEventCellLayoutAttributes.m rename to UniversalCalendar/MGCEventCellLayoutAttributes.m diff --git a/CalendarLib/MGCEventKitSupport.h b/UniversalCalendar/MGCEventKitSupport.h old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/MGCEventKitSupport.h rename to UniversalCalendar/MGCEventKitSupport.h diff --git a/CalendarLib/MGCEventKitSupport.m b/UniversalCalendar/MGCEventKitSupport.m old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/MGCEventKitSupport.m rename to UniversalCalendar/MGCEventKitSupport.m diff --git a/CalendarLib/MGCEventView.h b/UniversalCalendar/MGCEventView.h similarity index 100% rename from CalendarLib/MGCEventView.h rename to UniversalCalendar/MGCEventView.h diff --git a/CalendarLib/MGCEventView.m b/UniversalCalendar/MGCEventView.m similarity index 100% rename from CalendarLib/MGCEventView.m rename to UniversalCalendar/MGCEventView.m diff --git a/CalendarLib/MGCEventsRowView.h b/UniversalCalendar/MGCEventsRowView.h similarity index 100% rename from CalendarLib/MGCEventsRowView.h rename to UniversalCalendar/MGCEventsRowView.h diff --git a/CalendarLib/MGCEventsRowView.m b/UniversalCalendar/MGCEventsRowView.m similarity index 100% rename from CalendarLib/MGCEventsRowView.m rename to UniversalCalendar/MGCEventsRowView.m diff --git a/CalendarLib/MGCInteractiveEventView.h b/UniversalCalendar/MGCInteractiveEventView.h similarity index 100% rename from CalendarLib/MGCInteractiveEventView.h rename to UniversalCalendar/MGCInteractiveEventView.h diff --git a/CalendarLib/MGCInteractiveEventView.m b/UniversalCalendar/MGCInteractiveEventView.m similarity index 100% rename from CalendarLib/MGCInteractiveEventView.m rename to UniversalCalendar/MGCInteractiveEventView.m diff --git a/CalendarLib/MGCMonthMiniCalendarView.h b/UniversalCalendar/MGCMonthMiniCalendarView.h similarity index 100% rename from CalendarLib/MGCMonthMiniCalendarView.h rename to UniversalCalendar/MGCMonthMiniCalendarView.h diff --git a/CalendarLib/MGCMonthMiniCalendarView.m b/UniversalCalendar/MGCMonthMiniCalendarView.m similarity index 100% rename from CalendarLib/MGCMonthMiniCalendarView.m rename to UniversalCalendar/MGCMonthMiniCalendarView.m diff --git a/CalendarLib/MGCMonthPlannerBackgroundView.h b/UniversalCalendar/MGCMonthPlannerBackgroundView.h similarity index 100% rename from CalendarLib/MGCMonthPlannerBackgroundView.h rename to UniversalCalendar/MGCMonthPlannerBackgroundView.h diff --git a/CalendarLib/MGCMonthPlannerBackgroundView.m b/UniversalCalendar/MGCMonthPlannerBackgroundView.m similarity index 100% rename from CalendarLib/MGCMonthPlannerBackgroundView.m rename to UniversalCalendar/MGCMonthPlannerBackgroundView.m diff --git a/CalendarLib/MGCMonthPlannerHeaderView.h b/UniversalCalendar/MGCMonthPlannerHeaderView.h old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/MGCMonthPlannerHeaderView.h rename to UniversalCalendar/MGCMonthPlannerHeaderView.h diff --git a/CalendarLib/MGCMonthPlannerHeaderView.m b/UniversalCalendar/MGCMonthPlannerHeaderView.m old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/MGCMonthPlannerHeaderView.m rename to UniversalCalendar/MGCMonthPlannerHeaderView.m diff --git a/CalendarLib/MGCMonthPlannerView.h b/UniversalCalendar/MGCMonthPlannerView.h similarity index 99% rename from CalendarLib/MGCMonthPlannerView.h rename to UniversalCalendar/MGCMonthPlannerView.h index febd05da..3c603b7b 100755 --- a/CalendarLib/MGCMonthPlannerView.h +++ b/UniversalCalendar/MGCMonthPlannerView.h @@ -49,7 +49,8 @@ typedef NS_OPTIONS(NSUInteger, MGCMonthPlannerGridStyle) { MGCMonthPlannerGridStyleVerticalLines = 1 << 1, MGCMonthPlannerGridStyleHorizontalLines = 1 << 2, MGCMonthPlannerGridStyleBottomDayLabel = 1 << 3, - MGCMonthPlannerGridStyleDefault = (MGCMonthPlannerGridStyleHorizontalLines|MGCMonthPlannerGridStyleVerticalLines) + MGCMonthPlannerGridStyleVerticalAndHorizontal = 1 << 4, + MGCMonthPlannerGridStyleDefault = (MGCMonthPlannerGridStyleHorizontalLines|MGCMonthPlannerGridStyleVerticalLines|MGCMonthPlannerGridStyleFill) }; typedef NS_ENUM(NSUInteger, MGCMonthPlannerStyle) { diff --git a/CalendarLib/MGCMonthPlannerView.m b/UniversalCalendar/MGCMonthPlannerView.m similarity index 99% rename from CalendarLib/MGCMonthPlannerView.m rename to UniversalCalendar/MGCMonthPlannerView.m index 5e3dff4a..5f093e8a 100755 --- a/CalendarLib/MGCMonthPlannerView.m +++ b/UniversalCalendar/MGCMonthPlannerView.m @@ -1391,13 +1391,15 @@ - (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellFo NSMutableParagraphStyle *para = [NSMutableParagraphStyle new]; para.alignment = NSTextAlignmentCenter; - UIColor *textColor = [self.calendar mgc_isDate:date sameDayAsDate:[NSDate date]] ? [UIColor redColor] : [UIColor blackColor]; + UIColor *textColor = [self.calendar mgc_isDate:date sameDayAsDate:[NSDate date]] ? [UIColor whiteColor] : [UIColor blackColor]; attrStr = [[NSAttributedString alloc]initWithString:str attributes:@{ NSParagraphStyleAttributeName: para, NSForegroundColorAttributeName: textColor }]; } cell.dayLabel.attributedText = attrStr; + cell.dayLabel.backgroundColor = [self.calendar mgc_isDate:date sameDayAsDate:[NSDate date]] ? [UIColor colorWithRed:249.0f/255.0f green:73.0f/255.0f blue:86.0f/255.0f alpha:1.0f] : [UIColor whiteColor]; cell.backgroundColor = [self.calendar isDateInWeekend:date] ? self.weekendDayBackgroundColor : self.weekDayBackgroundColor; + if (self.style & MGCMonthPlannerStyleDots) { NSUInteger eventsCounts = [self.dataSource monthPlannerView:self numberOfEventsAtDate:date]; diff --git a/CalendarLib/MGCMonthPlannerViewController.h b/UniversalCalendar/MGCMonthPlannerViewController.h similarity index 100% rename from CalendarLib/MGCMonthPlannerViewController.h rename to UniversalCalendar/MGCMonthPlannerViewController.h diff --git a/CalendarLib/MGCMonthPlannerViewController.m b/UniversalCalendar/MGCMonthPlannerViewController.m similarity index 96% rename from CalendarLib/MGCMonthPlannerViewController.m rename to UniversalCalendar/MGCMonthPlannerViewController.m index 01c40f09..83dc59f3 100755 --- a/CalendarLib/MGCMonthPlannerViewController.m +++ b/UniversalCalendar/MGCMonthPlannerViewController.m @@ -54,15 +54,12 @@ - (void)setMonthPlannerView:(MGCMonthPlannerView*)monthPlannerView - (void)loadView { - if (self.nibName) - { - [super loadView]; - NSAssert(self.monthPlannerView != nil, @"NIB file did not set monthPlannerView property."); - return; - } + [super loadView]; MGCMonthPlannerView *monthPlannerView = [[MGCMonthPlannerView alloc]initWithFrame:CGRectZero]; monthPlannerView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; + monthPlannerView.dateFormat = @"d"; + monthPlannerView.weekDayBackgroundColor = [UIColor whiteColor]; self.monthPlannerView = monthPlannerView; } diff --git a/CalendarLib/MGCMonthPlannerViewDayCell.h b/UniversalCalendar/MGCMonthPlannerViewDayCell.h similarity index 100% rename from CalendarLib/MGCMonthPlannerViewDayCell.h rename to UniversalCalendar/MGCMonthPlannerViewDayCell.h diff --git a/CalendarLib/MGCMonthPlannerViewDayCell.m b/UniversalCalendar/MGCMonthPlannerViewDayCell.m similarity index 91% rename from CalendarLib/MGCMonthPlannerViewDayCell.m rename to UniversalCalendar/MGCMonthPlannerViewDayCell.m index 56a29833..96653071 100755 --- a/CalendarLib/MGCMonthPlannerViewDayCell.m +++ b/UniversalCalendar/MGCMonthPlannerViewDayCell.m @@ -50,7 +50,7 @@ - (id)initWithFrame:(CGRect)frame self.backgroundColor = [UIColor whiteColor]; self.dayLabel = [[UILabel alloc]initWithFrame:CGRectZero]; - self.dayLabel.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; + self.dayLabel.font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; self.dayLabel.numberOfLines = 1; self.dayLabel.adjustsFontSizeToFitWidth = YES; @@ -104,9 +104,12 @@ - (void)layoutSubviews { [super layoutSubviews]; - CGRect headerFrame = CGRectMake(0, 0, self.contentView.bounds.size.width, self.headerHeight); + CGRect headerFrame = CGRectMake(self.contentView.bounds.size.width - 32, 2, self.headerHeight, self.headerHeight); self.dayLabel.frame = CGRectInset(headerFrame, kHeaderMargin, kHeaderMargin); - + self.dayLabel.layer.cornerRadius = self.headerHeight/2; + self.dayLabel.textAlignment = NSTextAlignmentCenter; + self.dayLabel.layer.masksToBounds = YES; + CGRect contentFrame = CGRectMake(0, self.headerHeight, self.contentView.bounds.size.width, self.contentView.bounds.size.height - self.headerHeight); contentFrame = CGRectInset(contentFrame, kHeaderMargin, kHeaderMargin); diff --git a/CalendarLib/MGCMonthPlannerViewLayout.h b/UniversalCalendar/MGCMonthPlannerViewLayout.h similarity index 100% rename from CalendarLib/MGCMonthPlannerViewLayout.h rename to UniversalCalendar/MGCMonthPlannerViewLayout.h diff --git a/CalendarLib/MGCMonthPlannerViewLayout.m b/UniversalCalendar/MGCMonthPlannerViewLayout.m similarity index 100% rename from CalendarLib/MGCMonthPlannerViewLayout.m rename to UniversalCalendar/MGCMonthPlannerViewLayout.m diff --git a/CalendarLib/MGCMonthPlannerWeekView.h b/UniversalCalendar/MGCMonthPlannerWeekView.h similarity index 100% rename from CalendarLib/MGCMonthPlannerWeekView.h rename to UniversalCalendar/MGCMonthPlannerWeekView.h diff --git a/CalendarLib/MGCMonthPlannerWeekView.m b/UniversalCalendar/MGCMonthPlannerWeekView.m similarity index 100% rename from CalendarLib/MGCMonthPlannerWeekView.m rename to UniversalCalendar/MGCMonthPlannerWeekView.m diff --git a/CalendarLib/MGCReusableObjectQueue.h b/UniversalCalendar/MGCReusableObjectQueue.h similarity index 100% rename from CalendarLib/MGCReusableObjectQueue.h rename to UniversalCalendar/MGCReusableObjectQueue.h diff --git a/CalendarLib/MGCReusableObjectQueue.m b/UniversalCalendar/MGCReusableObjectQueue.m similarity index 98% rename from CalendarLib/MGCReusableObjectQueue.m rename to UniversalCalendar/MGCReusableObjectQueue.m index 3c05d9ac..94a42221 100755 --- a/CalendarLib/MGCReusableObjectQueue.m +++ b/UniversalCalendar/MGCReusableObjectQueue.m @@ -27,7 +27,8 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. // - +#import +#import #import "MGCReusableObjectQueue.h" diff --git a/CalendarLib/MGCStandardEventView.h b/UniversalCalendar/MGCStandardEventView.h similarity index 100% rename from CalendarLib/MGCStandardEventView.h rename to UniversalCalendar/MGCStandardEventView.h diff --git a/CalendarLib/MGCStandardEventView.m b/UniversalCalendar/MGCStandardEventView.m similarity index 100% rename from CalendarLib/MGCStandardEventView.m rename to UniversalCalendar/MGCStandardEventView.m diff --git a/CalendarLib/MGCTimeRowsView.h b/UniversalCalendar/MGCTimeRowsView.h similarity index 100% rename from CalendarLib/MGCTimeRowsView.h rename to UniversalCalendar/MGCTimeRowsView.h diff --git a/CalendarLib/MGCTimeRowsView.m b/UniversalCalendar/MGCTimeRowsView.m similarity index 100% rename from CalendarLib/MGCTimeRowsView.m rename to UniversalCalendar/MGCTimeRowsView.m diff --git a/CalendarLib/MGCTimedEventsViewLayout.h b/UniversalCalendar/MGCTimedEventsViewLayout.h similarity index 100% rename from CalendarLib/MGCTimedEventsViewLayout.h rename to UniversalCalendar/MGCTimedEventsViewLayout.h diff --git a/CalendarLib/MGCTimedEventsViewLayout.m b/UniversalCalendar/MGCTimedEventsViewLayout.m similarity index 100% rename from CalendarLib/MGCTimedEventsViewLayout.m rename to UniversalCalendar/MGCTimedEventsViewLayout.m diff --git a/CalendarLib/MGCYearCalendarMonthCell.h b/UniversalCalendar/MGCYearCalendarMonthCell.h similarity index 100% rename from CalendarLib/MGCYearCalendarMonthCell.h rename to UniversalCalendar/MGCYearCalendarMonthCell.h diff --git a/CalendarLib/MGCYearCalendarMonthCell.m b/UniversalCalendar/MGCYearCalendarMonthCell.m similarity index 100% rename from CalendarLib/MGCYearCalendarMonthCell.m rename to UniversalCalendar/MGCYearCalendarMonthCell.m diff --git a/CalendarLib/MGCYearCalendarMonthHeaderView.h b/UniversalCalendar/MGCYearCalendarMonthHeaderView.h similarity index 100% rename from CalendarLib/MGCYearCalendarMonthHeaderView.h rename to UniversalCalendar/MGCYearCalendarMonthHeaderView.h diff --git a/CalendarLib/MGCYearCalendarMonthHeaderView.m b/UniversalCalendar/MGCYearCalendarMonthHeaderView.m similarity index 100% rename from CalendarLib/MGCYearCalendarMonthHeaderView.m rename to UniversalCalendar/MGCYearCalendarMonthHeaderView.m diff --git a/CalendarLib/MGCYearCalendarView.h b/UniversalCalendar/MGCYearCalendarView.h similarity index 100% rename from CalendarLib/MGCYearCalendarView.h rename to UniversalCalendar/MGCYearCalendarView.h diff --git a/CalendarLib/MGCYearCalendarView.m b/UniversalCalendar/MGCYearCalendarView.m similarity index 100% rename from CalendarLib/MGCYearCalendarView.m rename to UniversalCalendar/MGCYearCalendarView.m diff --git a/CalendarLib/NSAttributedString+MGCAdditions.h b/UniversalCalendar/NSAttributedString+MGCAdditions.h old mode 100644 new mode 100755 similarity index 98% rename from CalendarLib/NSAttributedString+MGCAdditions.h rename to UniversalCalendar/NSAttributedString+MGCAdditions.h index 2b610698..d604fcf4 --- a/CalendarLib/NSAttributedString+MGCAdditions.h +++ b/UniversalCalendar/NSAttributedString+MGCAdditions.h @@ -29,6 +29,7 @@ // #import +#import extern NSString * const MGCCircleMarkAttributeName; diff --git a/CalendarLib/NSAttributedString+MGCAdditions.m b/UniversalCalendar/NSAttributedString+MGCAdditions.m old mode 100644 new mode 100755 similarity index 100% rename from CalendarLib/NSAttributedString+MGCAdditions.m rename to UniversalCalendar/NSAttributedString+MGCAdditions.m diff --git a/CalendarLib/NSCalendar+MGCAdditions.h b/UniversalCalendar/NSCalendar+MGCAdditions.h similarity index 100% rename from CalendarLib/NSCalendar+MGCAdditions.h rename to UniversalCalendar/NSCalendar+MGCAdditions.h diff --git a/CalendarLib/NSCalendar+MGCAdditions.m b/UniversalCalendar/NSCalendar+MGCAdditions.m similarity index 100% rename from CalendarLib/NSCalendar+MGCAdditions.m rename to UniversalCalendar/NSCalendar+MGCAdditions.m diff --git a/Pods/OSCache/OSCache/OSCache.h b/UniversalCalendar/OSCache.h old mode 100644 new mode 100755 similarity index 100% rename from Pods/OSCache/OSCache/OSCache.h rename to UniversalCalendar/OSCache.h diff --git a/Pods/OSCache/OSCache/OSCache.m b/UniversalCalendar/OSCache.m old mode 100644 new mode 100755 similarity index 98% rename from Pods/OSCache/OSCache/OSCache.m rename to UniversalCalendar/OSCache.m index 107cfaae..28e76ceb --- a/Pods/OSCache/OSCache/OSCache.m +++ b/UniversalCalendar/OSCache.m @@ -85,7 +85,7 @@ @implementation OSCache_Private NSLock *_lock; } -- (id)init +- (instancetype)init { if ((self = [super init])) { @@ -394,9 +394,9 @@ - (void)forwardInvocation:(NSInvocation *)invocation @implementation OSCache -+ (id)alloc ++ (instancetype)allocWithZone:(struct _NSZone *)zone { - return (OSCache *)[OSCache_Private alloc]; + return (OSCache *)[OSCache_Private allocWithZone:zone]; } - (id)objectForKeyedSubscript:(__unused id)key { return nil; } diff --git a/Pods/OrderedDictionary/OrderedDictionary/OrderedDictionary.h b/UniversalCalendar/OrderedDictionary.h similarity index 53% rename from Pods/OrderedDictionary/OrderedDictionary/OrderedDictionary.h rename to UniversalCalendar/OrderedDictionary.h index 8dc0216c..35569c05 100755 --- a/Pods/OrderedDictionary/OrderedDictionary/OrderedDictionary.h +++ b/UniversalCalendar/OrderedDictionary.h @@ -1,7 +1,7 @@ // // OrderedDictionary.h // -// Version 1.2 +// Version 1.4 // // Created by Nick Lockwood on 21/09/2010. // Copyright 2010 Charcoal Design @@ -32,29 +32,43 @@ #import +NS_ASSUME_NONNULL_BEGIN + /** * Ordered subclass of NSDictionary. * Supports all the same methods as NSDictionary, plus a few * new methods for operating on entities by index rather than key. */ -@interface OrderedDictionary : NSDictionary +@interface OrderedDictionary<__covariant KeyType, __covariant ObjectType> : NSDictionary -+ (instancetype)dictionaryWithContentsOfFile:(NSString *)path; -+ (instancetype)dictionaryWithContentsOfURL:(NSURL *)url; +/** + * These methods can be used to load an XML plist file. The file must have a + * dictionary node as its root object, and all dictionaries in the file will be + * treated as ordered. Currently, only XML plist files are supported, not + * binary or ascii. Xcode will automatically convert XML plists included in the + * project to binary files in built apps, so you will need to disable that + * functionality if you wish to load them with these functions. A good approach + * is to rename such files with a .xml extension instead of .plist. See the + * OrderedDictionary README file for more details. + */ ++ (nullable instancetype)dictionaryWithContentsOfFile:(NSString *)path; ++ (nullable instancetype)dictionaryWithContentsOfURL:(NSURL *)url; +- (nullable instancetype)initWithContentsOfFile:(NSString *)path; +- (nullable instancetype)initWithContentsOfURL:(NSURL *)url; /** Returns the nth key in the dictionary. */ -- (id)keyAtIndex:(NSUInteger)index; +- (KeyType)keyAtIndex:(NSUInteger)index; /** Returns the nth object in the dictionary. */ -- (id)objectAtIndex:(NSUInteger)index; -- (id)objectAtIndexedSubscript:(NSUInteger)index; +- (ObjectType)objectAtIndex:(NSUInteger)index; +- (ObjectType)objectAtIndexedSubscript:(NSUInteger)index; /** Returns the index of the specified key, or NSNotFound if key is not found. */ -- (NSUInteger)indexOfKey:(id)key; +- (NSUInteger)indexOfKey:(KeyType)key; /** Returns an enumerator for backwards traversal of the dictionary keys. */ -- (NSEnumerator *)reverseKeyEnumerator; +- (NSEnumerator *)reverseKeyEnumerator; /** Returns an enumerator for backwards traversal of the dictionary objects. */ -- (NSEnumerator *)reverseObjectEnumerator; +- (NSEnumerator *)reverseObjectEnumerator; /** Enumerates keys ands objects with index using block. */ -- (void)enumerateKeysAndObjectsWithIndexUsingBlock:(void (^)(id key, id obj, NSUInteger idx, BOOL *stop))block; +- (void)enumerateKeysAndObjectsWithIndexUsingBlock:(void (^)(KeyType key, ObjectType obj, NSUInteger idx, BOOL *stop))block; @end @@ -67,27 +81,32 @@ * is not a subclass of NSMutableDictionary, and cannot be used as one * without generating compiler warnings (unless you cast it). */ -@interface MutableOrderedDictionary : OrderedDictionary +@interface MutableOrderedDictionary : OrderedDictionary + (instancetype)dictionaryWithCapacity:(NSUInteger)count; - (instancetype)initWithCapacity:(NSUInteger)count; -- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary; +- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary; - (void)removeAllObjects; -- (void)removeObjectForKey:(id)key; -- (void)removeObjectsForKeys:(NSArray *)keyArray; -- (void)setDictionary:(NSDictionary *)otherDictionary; -- (void)setObject:(id)object forKey:(id)key; -- (void)setObject:(id)object forKeyedSubscript:(id )key; +- (void)removeObjectForKey:(KeyType)key; +- (void)removeObjectsForKeys:(NSArray *)keyArray; +- (void)setDictionary:(NSDictionary *)otherDictionary; +- (void)setObject:(ObjectType)object forKey:(KeyType)key; +- (void)setObject:(ObjectType)object forKeyedSubscript:(KeyType)key; /** Inserts an object at a specific index in the dictionary. */ -- (void)insertObject:(id)object forKey:(id)key atIndex:(NSUInteger)index; +- (void)insertObject:(ObjectType)object forKey:(KeyType)key atIndex:(NSUInteger)index; /** Replace an object at a specific index in the dictionary. */ -- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)object; -- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index; +- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)object; +- (void)setObject:(ObjectType)object atIndexedSubscript:(NSUInteger)index; /** Swap the indexes of two key/value pairs in the dictionary. */ - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2; /** Removes the nth object in the dictionary. */ - (void)removeObjectAtIndex:(NSUInteger)index; +/** Removes the objects at the specified indexes from the mutable ordered set. */ +- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes; @end + +NS_ASSUME_NONNULL_END + diff --git a/UniversalCalendar/OrderedDictionary.m b/UniversalCalendar/OrderedDictionary.m new file mode 100755 index 00000000..b10f3d08 --- /dev/null +++ b/UniversalCalendar/OrderedDictionary.m @@ -0,0 +1,749 @@ +// +// OrderedDictionary.m +// +// Version 1.4 +// +// Created by Nick Lockwood on 21/09/2010. +// Copyright 2010 Charcoal Design +// +// Distributed under the permissive zlib license +// Get the latest version from here: +// +// https://github.com/nicklockwood/OrderedDictionary +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// + +#import "OrderedDictionary.h" + + +#pragma GCC diagnostic ignored "-Wobjc-missing-property-synthesis" +#pragma GCC diagnostic ignored "-Wnullable-to-nonnull-conversion" +#pragma GCC diagnostic ignored "-Wdirect-ivar-access" +#pragma GCC diagnostic ignored "-Wfloat-equal" +#pragma GCC diagnostic ignored "-Wgnu" + + +#import +#if !__has_feature(objc_arc) +#error This class requires automatic reference counting +#endif + + +@implementation NSThread (XMLPlist) + +- (NSDateFormatter *)XMLPlistDateFormatter +{ + static NSString *const key = @"XMLPlistDateFormatter"; + NSDateFormatter *formatter = self.threadDictionary[key]; + if (!formatter) + { + formatter = [[NSDateFormatter alloc] init]; + formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; + formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss'Z'"; + self.threadDictionary[key] = formatter; + } + return formatter; +} + +@end + + +@interface NSObject (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(NSString *)indent; + +@end + + +@interface OrderedDictionaryXMLPlistParser : NSObject + +@property (nonatomic, readonly) OrderedDictionary *root; + +- (instancetype)initWithData:(NSData *)data root:(OrderedDictionary *)root; + +@end + + +@implementation OrderedDictionary +{ + @protected + NSArray *_values; + NSOrderedSet *_keys; +} + ++ (instancetype)dictionaryWithContentsOfFile:(NSString *)path +{ + NSData *data = [NSData dataWithContentsOfFile:path]; + __autoreleasing id dictionary = [[self alloc] initWithPlistData:data]; + return dictionary; +} + ++ (instancetype)dictionaryWithContentsOfURL:(NSURL *)url +{ + NSData *data = [NSData dataWithContentsOfURL:url]; + __autoreleasing id dictionary = [[self alloc] initWithPlistData:data]; + return dictionary; +} + +- (instancetype)initWithContentsOfFile:(NSString *)path +{ + NSData *data = [NSData dataWithContentsOfFile:path]; + return [self initWithPlistData:data]; + return nil; +} + +- (instancetype)initWithContentsOfURL:(NSURL *)url +{ + NSData *data = [NSData dataWithContentsOfURL:url]; + return [self initWithPlistData:data]; + return nil; +} + +- (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys +{ + if ((self = [super init])) + { + _values = [objects copy]; + _keys = [NSOrderedSet orderedSetWithArray:keys]; + + NSParameterAssert([_keys count] == [_values count]); + } + return self; +} + +- (instancetype)initWithPlistData:(NSData *)data +{ + if (data) + { + const void *bytes = data.bytes; + char header[7]; + memcpy(header, &bytes, 6); + header[6] = '\0'; + + NSAssert(strcmp(header, "bplist") != 0, @"OrderedDictionary does not support loading binary plist files. Use an XML plist file instead. Xcode automatically converts XML plist files to binary files in built apps - see documentation for tips on how to disable this."); + return [[OrderedDictionaryXMLPlistParser alloc] initWithData:data root:[self init]].root; + } + return nil; +} + +- (instancetype)initWithObjects:(const __unsafe_unretained id [])objects forKeys:(const __unsafe_unretained id [])keys count:(NSUInteger)count +{ + if ((self = [super init])) + { + _values = [[NSArray alloc] initWithObjects:objects count:count]; + _keys = [[NSOrderedSet alloc] initWithObjects:keys count:count]; + + NSParameterAssert([_values count] == count); + NSParameterAssert([_keys count] == count); + } + return self; +} + +- (Class)classForCoder +{ + return [self class]; +} + +- (instancetype)init +{ + if ((self = [super init]) && [self class] == [OrderedDictionary class]) + { + static OrderedDictionary *singleton; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + singleton = self; + self->_values = @[]; + self->_keys = [[NSOrderedSet alloc] init]; + }); + return singleton; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder +{ + if ((self = [super init])) + { + _values = [decoder decodeObjectOfClass:[NSArray class] forKey:@"values"]; + _keys = [decoder decodeObjectOfClass:[NSOrderedSet class] forKey:@"keys"]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder +{ + [coder encodeObject:_values forKey:@"values"]; + [coder encodeObject:_keys forKey:@"keys"]; +} + ++ (BOOL)supportsSecureCoding +{ + return YES; +} + +- (instancetype)copyWithZone:(__unused NSZone *)zone +{ + return self; +} + +- (instancetype)mutableCopyWithZone:(NSZone *)zone +{ + return [[MutableOrderedDictionary allocWithZone:zone] initWithDictionary:self]; +} + +- (NSArray *)allKeys +{ + return _keys.array; +} + +- (NSArray *)allValues +{ + return [_values copy]; +} + +- (NSUInteger)count +{ + return _keys.count; +} + +- (NSUInteger)indexOfKey:(id)key +{ + return [_keys indexOfObject:key]; +} + +- (id)objectForKey:(id)key +{ + NSUInteger index = [_keys indexOfObject:key]; + if (index != NSNotFound) + { + return _values[index]; + } + return nil; + +} + +- (NSEnumerator *)keyEnumerator +{ + return [_keys objectEnumerator]; +} + +- (NSEnumerator *)reverseKeyEnumerator +{ + return [_keys reverseObjectEnumerator]; +} + +- (NSEnumerator *)objectEnumerator +{ + return [_values objectEnumerator]; +} + +- (NSEnumerator *)reverseObjectEnumerator +{ + return [_values reverseObjectEnumerator]; +} + +- (void)enumerateKeysAndObjectsWithIndexUsingBlock:(void (^)(id key, id obj, NSUInteger idx, BOOL *stop))block +{ + [_keys enumerateObjectsUsingBlock:^(id key, NSUInteger idx, BOOL *stop) { + block(key, self->_values[idx], idx, stop); + }]; +} + +- (id)keyAtIndex:(NSUInteger)index +{ + return _keys[index]; +} + +- (id)objectAtIndex:(NSUInteger)index +{ + return _values[index]; +} + +- (id)objectAtIndexedSubscript:(NSUInteger)index +{ + return _values[index]; +} + +- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level +{ + NSMutableString *indent = [NSMutableString string]; + for (int i = 0; i < level; i++) + { + [indent appendString:@" "]; + } + NSMutableString *string = [NSMutableString string]; + [string appendString:indent]; + [string appendString:@"{\n"]; + [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, __unused BOOL *stop) { + NSString *description; + if ([obj respondsToSelector:@selector(descriptionWithLocale:indent:)]) { + description = [obj descriptionWithLocale:locale indent:level + 1]; + } else if ([obj respondsToSelector:@selector(descriptionWithLocale:)]) { + description = [obj descriptionWithLocale:locale]; + } else { + description = [obj description]; + } + [string appendString:indent]; + [string appendFormat:@" %@ = %@;\n", key, description]; + }]; + [string appendString:indent]; + [string appendString:@"}"]; + return string; +} + +- (NSString *)XMLPlistString +{ + return [NSString stringWithFormat:@"\n" + "\n" + "\n%@\n\n", + [self XMLPlistStringWithIndent:@""]]; +} + +- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile +{ + return [[self XMLPlistString] writeToFile:path atomically:useAuxiliaryFile encoding:NSUTF8StringEncoding error:NULL]; +} + +- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically +{ + return [[self XMLPlistString] writeToURL:url atomically:atomically encoding:NSUTF8StringEncoding error:NULL]; +} + +@end + + +@implementation MutableOrderedDictionary + +#define _mutableValues ((NSMutableArray *)_values) +#define _mutableKeys ((NSMutableOrderedSet *)_keys) + ++ (instancetype)dictionaryWithCapacity:(NSUInteger)count +{ + return [(MutableOrderedDictionary *)[self alloc] initWithCapacity:count]; +} + +- (instancetype)initWithObjects:(const __unsafe_unretained id [])objects forKeys:(const __unsafe_unretained id [])keys count:(NSUInteger)count +{ + if ((self = [super init])) + { + _values = [[NSMutableArray alloc] initWithObjects:objects count:count]; + _keys = [[NSMutableOrderedSet alloc] initWithObjects:keys count:count]; + } + return self; +} + +- (instancetype)initWithCapacity:(NSUInteger)capacity +{ + if ((self = [super init])) + { + _values = [[NSMutableArray alloc] initWithCapacity:capacity]; + _keys = [[NSMutableOrderedSet alloc] initWithCapacity:capacity]; + } + return self; +} + +- (instancetype)init +{ + return [self initWithCapacity:0]; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder +{ + if ((self = [super init])) + { + _values = [decoder decodeObjectOfClass:[NSMutableArray class] forKey:@"values"]; + _keys = [decoder decodeObjectOfClass:[NSMutableOrderedSet class] forKey:@"keys"]; + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone +{ + return [[OrderedDictionary allocWithZone:zone] initWithDictionary:self]; +} + +- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary +{ + [otherDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, __unused BOOL *stop) { + [self setObject:obj forKey:key]; + }]; +} + +- (void)insertObject:(id)object forKey:(id)key atIndex:(NSUInteger)index +{ + [self removeObjectForKey:key]; + [_mutableKeys insertObject:key atIndex:index]; + [_mutableValues insertObject:object atIndex:index]; +} + +- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)object +{ + _mutableValues[index] = object; +} + +- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index +{ + _mutableValues[index] = object; +} + +- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2 +{ + [_mutableKeys exchangeObjectAtIndex:idx1 withObjectAtIndex:idx2]; + [_mutableValues exchangeObjectAtIndex:idx1 withObjectAtIndex:idx2]; +} + +- (void)removeAllObjects +{ + [_mutableKeys removeAllObjects]; + [_mutableValues removeAllObjects]; +} + +- (void)removeObjectAtIndex:(NSUInteger)index +{ + [_mutableKeys removeObjectAtIndex:index]; + [_mutableValues removeObjectAtIndex:index]; +} + +- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes +{ + [_mutableKeys removeObjectsAtIndexes:indexes]; + [_mutableValues removeObjectsAtIndexes:indexes]; +} + +- (void)removeObjectForKey:(id)key +{ + NSUInteger index = [self->_keys indexOfObject:key]; + if (index != NSNotFound) + { + [self removeObjectAtIndex:index]; + } +} + +- (void)removeObjectsForKeys:(NSArray *)keyArray +{ + for (id key in [keyArray copy]) + { + [self removeObjectForKey:key]; + } +} + +- (void)setDictionary:(NSDictionary *)otherDictionary +{ + [_mutableKeys removeAllObjects]; + [_mutableKeys addObjectsFromArray:otherDictionary.allKeys]; + [_mutableValues setArray:otherDictionary.allValues]; +} + +- (void)setObject:(id)object forKey:(id)key +{ + NSUInteger index = [_keys indexOfObject:key]; + if (index != NSNotFound) + { + _mutableValues[index] = object; + } + else + { + [_mutableKeys addObject:key]; + [_mutableValues addObject:object]; + } +} + +- (void)setValue:(id)value forKey:(NSString *)key +{ + if (value) + { + [self setObject:value forKey:key]; + } + else + { + [self removeObjectForKey:key]; + } +} + +- (void)setObject:(id)object forKeyedSubscript:(id)key +{ + [self setObject:object forKey:key]; +} + +@end + + +@implementation NSObject (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(__unused NSString *)indent +{ + NSLog(@"%@ is not a supported property list type.", self.classForCoder); + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +@end + + +@implementation NSString (XMLPlistWriting) + +- (NSString *)XMLEscapedString +{ + return [[[self stringByReplacingOccurrencesOfString:@"&" withString:@"&"] + stringByReplacingOccurrencesOfString:@"<" withString:@"<"] + stringByReplacingOccurrencesOfString:@">" withString:@">"]; +} + +- (NSString *)XMLPlistStringWithIndent:(__unused NSString *)indent +{ + return [NSString stringWithFormat:@"%@", [self XMLEscapedString]]; +} + +@end + + +@implementation NSNumber (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(__unused NSString *)indent +{ + if ((__bridge CFBooleanRef)self == kCFBooleanTrue) + { + return @""; + } + else if ((__bridge CFBooleanRef)self == kCFBooleanFalse) + { + return @""; + } + else if (self.doubleValue != (double)self.integerValue) + { + return [NSString stringWithFormat:@"%@", self]; + } + else + { + return [NSString stringWithFormat:@"%@", self]; + } +} + +@end + + +@implementation NSDate (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(__unused NSString *)indent +{ + NSDateFormatter *formatter = [[NSThread currentThread] XMLPlistDateFormatter]; + return [NSString stringWithFormat:@"%@", [formatter stringFromDate:self]]; +} + +@end + + +@implementation NSData (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(NSString *)indent +{ + NSString *base64 = [self base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)0]; + return [NSString stringWithFormat:@"\n%@%@\n%@", indent, base64, indent]; +} + +@end + + +@implementation NSArray (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(NSString *)indent +{ + NSMutableString *xml = [NSMutableString string]; + [xml appendString:@"\n"]; + NSString *subindent = [indent stringByAppendingString:@"\t"]; + for (id value in self) + { + [xml appendString:subindent]; + [xml appendString:[value XMLPlistStringWithIndent:subindent]]; + [xml appendString:@"\n"]; + } + [xml appendString:indent]; + [xml appendString:@""]; + return xml; +} + +@end + + +@implementation NSDictionary (XMLPlistWriting) + +- (NSString *)XMLPlistStringWithIndent:(NSString *)indent +{ + NSMutableString *xml = [NSMutableString string]; + [xml appendString:@"\n"]; + NSString *subindent = [indent stringByAppendingString:@"\t"]; + [self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull value, __unused BOOL *stop) { + [xml appendString:subindent]; + [xml appendFormat:@"%@\n", [[key description] XMLEscapedString]]; + [xml appendString:subindent]; + [xml appendString:[value XMLPlistStringWithIndent:subindent]]; + [xml appendString:@"\n"]; + }]; + [xml appendString:indent]; + [xml appendString:@""]; + return xml; +} + +@end + + +@implementation OrderedDictionaryXMLPlistParser +{ + NSDateFormatter *_formatter; + NSMutableArray *_valueStack; + NSMutableArray *_keyStack; + NSString *_text; + BOOL _failed; +} + +- (instancetype)initWithData:(NSData *)data root:(OrderedDictionary *)root +{ + if ((self = [super init])) + { + _root = [root isKindOfClass:[MutableOrderedDictionary class]] ? root : nil; + _keyStack = [NSMutableArray array]; + NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; + parser.delegate = self; + [parser parse]; + } + return self; +} + +- (void)failWithError:(NSString *)error +{ + NSLog(@"OrderedDictionary XML parsing error: %@", error); + _failed = YES; + _root = nil; +} + +- (void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(__unused NSString *)namespaceURI qualifiedName:(__unused NSString *)qName attributes:(__unused NSDictionary *)attributeDict +{ + if ([elementName isEqualToString:@"dict"]) + { + if (_valueStack == nil) + { + _valueStack = [NSMutableArray arrayWithObject:_root ?: [MutableOrderedDictionary dictionary]]; + } + else + { + [_valueStack addObject:[MutableOrderedDictionary dictionary]]; + } + } + else if (![elementName isEqualToString:@"plist"] && _valueStack == nil) + { + [self failWithError:@"Root element was not a dictionary."]; + [parser abortParsing]; + return; + } + else if ([elementName isEqualToString:@"array"]) + { + [_valueStack addObject:[NSMutableArray array]]; + } +} + +- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(__unused NSString *)namespaceURI qualifiedName:(__unused NSString *)qName +{ + id value = [_text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + _text = nil; + + if ([elementName isEqualToString:@"key"]) + { + [_keyStack addObject:value ?: @""]; + return; + } + + if ([elementName isEqualToString:@"string"]) + { + // Do nothing + } + else if ([elementName isEqualToString:@"real"]) + { + value = @([value doubleValue]); + } + else if ([elementName isEqualToString:@"integer"]) + { + value = @([value integerValue]); + } + else if ([elementName isEqualToString:@"date"]) + { + if (!_formatter) + { + _formatter = [[NSThread currentThread] XMLPlistDateFormatter]; + } + NSString *dateString = value; + if (!(value = [_formatter dateFromString:dateString])) + { + [self failWithError:[NSString stringWithFormat:@"Unabled to parse date string: %@", dateString]]; + [parser abortParsing]; + return; + } + } + else if ([elementName isEqualToString:@"data"]) + { + NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding]; + if (!(value = [[NSData alloc] initWithBase64EncodedData:data options:NSDataBase64DecodingIgnoreUnknownCharacters])) + { + [self failWithError:@"Unabled to parse data."]; + [parser abortParsing]; + return; + } + } + else if ([elementName isEqualToString:@"true"]) + { + value = @YES; + } + else if ([elementName isEqualToString:@"false"]) + { + value = @NO; + } + else if ([elementName isEqualToString:@"dict"] || [elementName isEqualToString:@"array"]) + { + value = [_valueStack.lastObject copy]; + [_valueStack removeLastObject]; + } + else if ([elementName isEqualToString:@"plist"]) + { + return; + } + + id top = _valueStack.lastObject; + if ([top isKindOfClass:[MutableOrderedDictionary class]]) + { + NSString *key = _keyStack.lastObject; + ((MutableOrderedDictionary *)top)[key] = value; + [_keyStack removeLastObject]; + } + else if ([top isKindOfClass:[NSArray class]]) + { + [(NSMutableArray *)top addObject:value]; + } + else if (_root == nil && !_failed) + { + _root = [value copy]; + } +} + +- (void)parser:(__unused NSXMLParser *)parser foundCharacters:(NSString *)string +{ + _text = [_text ?: @"" stringByAppendingString:string]; +} + +@end diff --git a/UniversalCalendar/UniversalCalendar.h b/UniversalCalendar/UniversalCalendar.h new file mode 100644 index 00000000..fffe83d6 --- /dev/null +++ b/UniversalCalendar/UniversalCalendar.h @@ -0,0 +1,32 @@ +// +// UniversalCalendar.h +// UniversalCalendar +// +// Created by Tran Minh Tri on 2/26/20. +// Copyright © 2020 Julien Martin. All rights reserved. +// + +#import + +//! Project version number for UniversalCalendar. +FOUNDATION_EXPORT double UniversalCalendarVersionNumber; + +//! Project version string for UniversalCalendar. +FOUNDATION_EXPORT const unsigned char UniversalCalendarVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import diff --git a/CalendarLib/en.lproj/Localizable.strings b/UniversalCalendar/en.lproj/Localizable.strings similarity index 100% rename from CalendarLib/en.lproj/Localizable.strings rename to UniversalCalendar/en.lproj/Localizable.strings diff --git a/CalendarLib/fr.lproj/Localizable.strings b/UniversalCalendar/fr.lproj/Localizable.strings similarity index 100% rename from CalendarLib/fr.lproj/Localizable.strings rename to UniversalCalendar/fr.lproj/Localizable.strings