Before Width: | Height: | Size: 806 KiB |
@ -1,646 +0,0 @@ |
|||||||
// !$*UTF8*$! |
|
||||||
{ |
|
||||||
archiveVersion = 1; |
|
||||||
classes = { |
|
||||||
}; |
|
||||||
objectVersion = 46; |
|
||||||
objects = { |
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */ |
|
||||||
9A25F7471C1A5E17007D369B /* iRate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A25F7441C1A5E17007D369B /* iRate.m */; }; |
|
||||||
9A392EE81C1CDD530072C10A /* CLAboutUsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A392EE61C1CDD530072C10A /* CLAboutUsViewController.m */; }; |
|
||||||
9A392EE91C1CDD530072C10A /* CLAboutUsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A392EE71C1CDD530072C10A /* CLAboutUsView.xib */; }; |
|
||||||
9A392EED1C1CE9950072C10A /* CLPreferencesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A392EEB1C1CE9950072C10A /* CLPreferencesViewController.m */; }; |
|
||||||
9A392EEE1C1CE9950072C10A /* CLPreferencesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A392EEC1C1CE9950072C10A /* CLPreferencesView.xib */; }; |
|
||||||
9A4379251BEC223900F4E27F /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A4379211BEC223900F4E27F /* Security.framework */; }; |
|
||||||
9A4379271BEC223900F4E27F /* Fabric.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A4379231BEC223900F4E27F /* Fabric.framework */; }; |
|
||||||
9A43792A1BEC230A00F4E27F /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A4379291BEC230A00F4E27F /* libc++.tbd */; }; |
|
||||||
9A43792C1BEC231100F4E27F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A43792B1BEC231100F4E27F /* libz.tbd */; }; |
|
||||||
9A43792E1BEC256200F4E27F /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A43792D1BEC256200F4E27F /* Media.xcassets */; }; |
|
||||||
9A56DB801C1CFB73004CE6AF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A56DB7D1C1CFB73004CE6AF /* MainMenu.xib */; }; |
|
||||||
9A56DB811C1CFB73004CE6AF /* Panel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A56DB7E1C1CFB73004CE6AF /* Panel.xib */; }; |
|
||||||
9A5951BA1C1D0A22009C17AA /* Crashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5951B91C1D0A22009C17AA /* Crashlytics.framework */; }; |
|
||||||
9A5951BD1C1D0A8D009C17AA /* CommonStrings.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5951BB1C1D0A8D009C17AA /* CommonStrings.m */; }; |
|
||||||
9A5951C01C1D0AA0009C17AA /* CLOneWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5951BE1C1D0AA0009C17AA /* CLOneWindowController.m */; }; |
|
||||||
9A5951C21C1D0AAD009C17AA /* CLOneWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9A5951C11C1D0AAD009C17AA /* CLOneWindow.xib */; }; |
|
||||||
9A5951F51C1D3D81009C17AA /* CLTimezoneCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5951F41C1D3D81009C17AA /* CLTimezoneCellView.m */; }; |
|
||||||
9A5951FA1C1D5214009C17AA /* iVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5951F91C1D5214009C17AA /* iVersion.m */; }; |
|
||||||
9A5951FD1C1D592D009C17AA /* iVersion.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9A5951FC1C1D592D009C17AA /* iVersion.bundle */; }; |
|
||||||
9A8605AE1BEC148400A810A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605AD1BEC148400A810A4 /* main.m */; }; |
|
||||||
9A8605B31BEC14A600A810A4 /* ColoredButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605B21BEC14A600A810A4 /* ColoredButton.m */; }; |
|
||||||
9A8605B61BEC14BE00A810A4 /* MenubarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605B41BEC14BE00A810A4 /* MenubarController.m */; }; |
|
||||||
9A8605B71BEC14BE00A810A4 /* ApplicationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605B51BEC14BE00A810A4 /* ApplicationDelegate.m */; }; |
|
||||||
9A8605BA1BEC14DC00A810A4 /* StatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605B81BEC14DC00A810A4 /* StatusItemView.m */; }; |
|
||||||
9A8605BB1BEC14DC00A810A4 /* PanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605B91BEC14DC00A810A4 /* PanelController.m */; }; |
|
||||||
9A8605BF1BEC14F600A810A4 /* BackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605BC1BEC14F600A810A4 /* BackgroundView.m */; }; |
|
||||||
9A8605C01BEC14F600A810A4 /* Panel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8605BD1BEC14F600A810A4 /* Panel.m */; }; |
|
||||||
9AB9357B1C1AD8F7001285A0 /* CLRatingCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AB9357A1C1AD8F7001285A0 /* CLRatingCellView.m */; }; |
|
||||||
9AC678E41C1ABAB9003B4F6B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AC678E31C1ABAB9003B4F6B /* QuartzCore.framework */; }; |
|
||||||
DD4F7C0913C30F9F00825C6E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD4F7C0813C30F9F00825C6E /* Cocoa.framework */; }; |
|
||||||
/* End PBXBuildFile section */ |
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */ |
|
||||||
9A5951CC1C1D1B6F009C17AA /* PBXContainerItemProxy */ = { |
|
||||||
isa = PBXContainerItemProxy; |
|
||||||
containerPortal = 9A5951C71C1D1B6F009C17AA /* ApptentiveConnect.xcodeproj */; |
|
||||||
proxyType = 2; |
|
||||||
remoteGlobalIDString = 8DC2EF5B0486A6940098B216; |
|
||||||
remoteInfo = ApptentiveConnect; |
|
||||||
}; |
|
||||||
9A5951CE1C1D1B6F009C17AA /* PBXContainerItemProxy */ = { |
|
||||||
isa = PBXContainerItemProxy; |
|
||||||
containerPortal = 9A5951C71C1D1B6F009C17AA /* ApptentiveConnect.xcodeproj */; |
|
||||||
proxyType = 2; |
|
||||||
remoteGlobalIDString = 49626B6D13942A2B0093534C; |
|
||||||
remoteInfo = ApptentiveUnitTests; |
|
||||||
}; |
|
||||||
/* End PBXContainerItemProxy section */ |
|
||||||
|
|
||||||
/* Begin PBXFileReference section */ |
|
||||||
9A25F7411C1A5E17007D369B /* iRate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iRate.h; path = "Clocker/Rate App/iRate.h"; sourceTree = "<group>"; }; |
|
||||||
9A25F7441C1A5E17007D369B /* iRate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iRate.m; path = "Clocker/Rate App/iRate.m"; sourceTree = "<group>"; }; |
|
||||||
9A392EE51C1CDD530072C10A /* CLAboutUsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLAboutUsViewController.h; path = Clocker/AboutUsWindow/CLAboutUsViewController.h; sourceTree = "<group>"; }; |
|
||||||
9A392EE61C1CDD530072C10A /* CLAboutUsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLAboutUsViewController.m; path = Clocker/AboutUsWindow/CLAboutUsViewController.m; sourceTree = "<group>"; }; |
|
||||||
9A392EE71C1CDD530072C10A /* CLAboutUsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLAboutUsView.xib; path = Clocker/AboutUsWindow/CLAboutUsView.xib; sourceTree = "<group>"; }; |
|
||||||
9A392EEA1C1CE9950072C10A /* CLPreferencesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLPreferencesViewController.h; path = Clocker/Preferences/CLPreferencesViewController.h; sourceTree = "<group>"; }; |
|
||||||
9A392EEB1C1CE9950072C10A /* CLPreferencesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLPreferencesViewController.m; path = Clocker/Preferences/CLPreferencesViewController.m; sourceTree = "<group>"; }; |
|
||||||
9A392EEC1C1CE9950072C10A /* CLPreferencesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLPreferencesView.xib; path = Clocker/Preferences/CLPreferencesView.xib; sourceTree = "<group>"; }; |
|
||||||
9A4379211BEC223900F4E27F /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Security.framework; sourceTree = "<group>"; }; |
|
||||||
9A4379231BEC223900F4E27F /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Fabric.framework; sourceTree = "<group>"; }; |
|
||||||
9A4379291BEC230A00F4E27F /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; |
|
||||||
9A43792B1BEC231100F4E27F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; |
|
||||||
9A43792D1BEC256200F4E27F /* Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Media.xcassets; sourceTree = "<group>"; }; |
|
||||||
9A56DB7D1C1CFB73004CE6AF /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainMenu.xib; path = Clocker/MainMenu.xib; sourceTree = "<group>"; }; |
|
||||||
9A56DB7E1C1CFB73004CE6AF /* Panel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = Panel.xib; path = Clocker/Panel.xib; sourceTree = "<group>"; }; |
|
||||||
9A5951B91C1D0A22009C17AA /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = Frameworks/Crashlytics.framework; sourceTree = "<group>"; }; |
|
||||||
9A5951BB1C1D0A8D009C17AA /* CommonStrings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CommonStrings.m; path = Clocker/Utilities/CommonStrings.m; sourceTree = "<group>"; }; |
|
||||||
9A5951BC1C1D0A8D009C17AA /* CommonStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommonStrings.h; path = Clocker/Utilities/CommonStrings.h; sourceTree = "<group>"; }; |
|
||||||
9A5951BE1C1D0AA0009C17AA /* CLOneWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLOneWindowController.m; path = Clocker/CLOneWindow/CLOneWindowController.m; sourceTree = "<group>"; }; |
|
||||||
9A5951BF1C1D0AA0009C17AA /* CLOneWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLOneWindowController.h; path = Clocker/CLOneWindow/CLOneWindowController.h; sourceTree = "<group>"; }; |
|
||||||
9A5951C11C1D0AAD009C17AA /* CLOneWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CLOneWindow.xib; path = Clocker/CLOneWindow/CLOneWindow.xib; sourceTree = "<group>"; }; |
|
||||||
9A5951C71C1D1B6F009C17AA /* ApptentiveConnect.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ApptentiveConnect.xcodeproj; path = Clocker/ApptentiveConnect/ApptentiveConnect.xcodeproj; sourceTree = "<group>"; }; |
|
||||||
9A5951D11C1D1D94009C17AA /* ApptentiveConnect.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApptentiveConnect.framework; path = Clocker/ApptentiveConnect/ApptentiveConnect.framework; sourceTree = "<group>"; }; |
|
||||||
9A5951F31C1D3D81009C17AA /* CLTimezoneCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLTimezoneCellView.h; path = "Clocker/Custom Table Cell Views/CLTimezoneCellView.h"; sourceTree = "<group>"; }; |
|
||||||
9A5951F41C1D3D81009C17AA /* CLTimezoneCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLTimezoneCellView.m; path = "Clocker/Custom Table Cell Views/CLTimezoneCellView.m"; sourceTree = "<group>"; }; |
|
||||||
9A5951F81C1D5214009C17AA /* iVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iVersion.h; path = "Clocker/Updated Version/iVersion.h"; sourceTree = "<group>"; }; |
|
||||||
9A5951F91C1D5214009C17AA /* iVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iVersion.m; path = "Clocker/Updated Version/iVersion.m"; sourceTree = "<group>"; }; |
|
||||||
9A5951FC1C1D592D009C17AA /* iVersion.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = iVersion.bundle; path = "Clocker/Updated Version/iVersion.bundle"; sourceTree = "<group>"; }; |
|
||||||
9A5B1A8D1BECDFB700A77C68 /* Clocker.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = Clocker.entitlements; path = Clocker/Clocker.entitlements; sourceTree = "<group>"; }; |
|
||||||
9A8605AD1BEC148400A810A4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Clocker/main.m; sourceTree = "<group>"; }; |
|
||||||
9A8605B21BEC14A600A810A4 /* ColoredButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ColoredButton.m; path = Clocker/ColoredButton.m; sourceTree = "<group>"; }; |
|
||||||
9A8605B41BEC14BE00A810A4 /* MenubarController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = MenubarController.m; path = Clocker/MenubarController.m; sourceTree = "<group>"; }; |
|
||||||
9A8605B51BEC14BE00A810A4 /* ApplicationDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ApplicationDelegate.m; path = Clocker/ApplicationDelegate.m; sourceTree = "<group>"; }; |
|
||||||
9A8605B81BEC14DC00A810A4 /* StatusItemView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = StatusItemView.m; path = Clocker/StatusItemView.m; sourceTree = "<group>"; }; |
|
||||||
9A8605B91BEC14DC00A810A4 /* PanelController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PanelController.m; path = Clocker/PanelController.m; sourceTree = "<group>"; }; |
|
||||||
9A8605BC1BEC14F600A810A4 /* BackgroundView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BackgroundView.m; path = Clocker/BackgroundView.m; sourceTree = "<group>"; }; |
|
||||||
9A8605BD1BEC14F600A810A4 /* Panel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Panel.m; path = Clocker/Panel.m; sourceTree = "<group>"; }; |
|
||||||
9A8605C31BEC155B00A810A4 /* Clocker-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Clocker-Info.plist"; path = "Clocker/Clocker-Info.plist"; sourceTree = "<group>"; }; |
|
||||||
9A8605C41BEC155B00A810A4 /* BackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BackgroundView.h; path = Clocker/BackgroundView.h; sourceTree = "<group>"; }; |
|
||||||
9A8605C51BEC155B00A810A4 /* StatusItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatusItemView.h; path = Clocker/StatusItemView.h; sourceTree = "<group>"; }; |
|
||||||
9A8605C61BEC155B00A810A4 /* Panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Panel.h; path = Clocker/Panel.h; sourceTree = "<group>"; }; |
|
||||||
9A8605C81BEC155B00A810A4 /* PanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PanelController.h; path = Clocker/PanelController.h; sourceTree = "<group>"; }; |
|
||||||
9A8605C91BEC155B00A810A4 /* MenubarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MenubarController.h; path = Clocker/MenubarController.h; sourceTree = "<group>"; }; |
|
||||||
9A8605CA1BEC155B00A810A4 /* ApplicationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ApplicationDelegate.h; path = Clocker/ApplicationDelegate.h; sourceTree = "<group>"; }; |
|
||||||
9A8605CB1BEC155B00A810A4 /* ColoredButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColoredButton.h; path = Clocker/ColoredButton.h; sourceTree = "<group>"; }; |
|
||||||
9A8605CC1BEC155B00A810A4 /* Clocker-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Clocker-Prefix.pch"; path = "Clocker/Clocker-Prefix.pch"; sourceTree = "<group>"; }; |
|
||||||
9AB935791C1AD8F7001285A0 /* CLRatingCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLRatingCellView.h; path = Clocker/CLRatingCellView.h; sourceTree = "<group>"; }; |
|
||||||
9AB9357A1C1AD8F7001285A0 /* CLRatingCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLRatingCellView.m; path = Clocker/CLRatingCellView.m; sourceTree = "<group>"; }; |
|
||||||
9AC678E31C1ABAB9003B4F6B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; |
|
||||||
DD4F7C0413C30F9F00825C6E /* Clocker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Clocker.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
|
||||||
DD4F7C0813C30F9F00825C6E /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; |
|
||||||
DD4F7C0B13C30F9F00825C6E /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; |
|
||||||
/* End PBXFileReference section */ |
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */ |
|
||||||
DD4F7C0113C30F9F00825C6E /* Frameworks */ = { |
|
||||||
isa = PBXFrameworksBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
9AC678E41C1ABAB9003B4F6B /* QuartzCore.framework in Frameworks */, |
|
||||||
9A43792C1BEC231100F4E27F /* libz.tbd in Frameworks */, |
|
||||||
9A5951BA1C1D0A22009C17AA /* Crashlytics.framework in Frameworks */, |
|
||||||
9A43792A1BEC230A00F4E27F /* libc++.tbd in Frameworks */, |
|
||||||
9A4379251BEC223900F4E27F /* Security.framework in Frameworks */, |
|
||||||
DD4F7C0913C30F9F00825C6E /* Cocoa.framework in Frameworks */, |
|
||||||
9A4379271BEC223900F4E27F /* Fabric.framework in Frameworks */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXFrameworksBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXGroup section */ |
|
||||||
9A2000C61BFBCEF6002BFDE8 /* Utilties */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951BB1C1D0A8D009C17AA /* CommonStrings.m */, |
|
||||||
9A5951BC1C1D0A8D009C17AA /* CommonStrings.h */, |
|
||||||
); |
|
||||||
name = Utilties; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A25F7481C1A5E21007D369B /* Rate */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A25F7411C1A5E17007D369B /* iRate.h */, |
|
||||||
9A25F7441C1A5E17007D369B /* iRate.m */, |
|
||||||
); |
|
||||||
name = Rate; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A5951C31C1D0DE3009C17AA /* View Controllers */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A392EE51C1CDD530072C10A /* CLAboutUsViewController.h */, |
|
||||||
9A392EE61C1CDD530072C10A /* CLAboutUsViewController.m */, |
|
||||||
9A392EEA1C1CE9950072C10A /* CLPreferencesViewController.h */, |
|
||||||
9A392EEB1C1CE9950072C10A /* CLPreferencesViewController.m */, |
|
||||||
); |
|
||||||
name = "View Controllers"; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A5951C81C1D1B6F009C17AA /* Products */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951CD1C1D1B6F009C17AA /* ApptentiveConnect.framework */, |
|
||||||
9A5951CF1C1D1B6F009C17AA /* ApptentiveUnitTests.octest */, |
|
||||||
); |
|
||||||
name = Products; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A5951F01C1D3D35009C17AA /* Table Cell Views */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951F31C1D3D81009C17AA /* CLTimezoneCellView.h */, |
|
||||||
9A5951F41C1D3D81009C17AA /* CLTimezoneCellView.m */, |
|
||||||
); |
|
||||||
name = "Table Cell Views"; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A5951FB1C1D5222009C17AA /* Check for Updated Version */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951FC1C1D592D009C17AA /* iVersion.bundle */, |
|
||||||
9A5951F81C1D5214009C17AA /* iVersion.h */, |
|
||||||
9A5951F91C1D5214009C17AA /* iVersion.m */, |
|
||||||
); |
|
||||||
name = "Check for Updated Version"; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A8605E01BEC15F400A810A4 /* XIB */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951C11C1D0AAD009C17AA /* CLOneWindow.xib */, |
|
||||||
9A56DB7D1C1CFB73004CE6AF /* MainMenu.xib */, |
|
||||||
9A56DB7E1C1CFB73004CE6AF /* Panel.xib */, |
|
||||||
9A392EE71C1CDD530072C10A /* CLAboutUsView.xib */, |
|
||||||
9A392EEC1C1CE9950072C10A /* CLPreferencesView.xib */, |
|
||||||
); |
|
||||||
name = XIB; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A8605E21BEC161300A810A4 /* Superclass */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A8605C61BEC155B00A810A4 /* Panel.h */, |
|
||||||
9A8605BD1BEC14F600A810A4 /* Panel.m */, |
|
||||||
9A8605CB1BEC155B00A810A4 /* ColoredButton.h */, |
|
||||||
9A8605B21BEC14A600A810A4 /* ColoredButton.m */, |
|
||||||
); |
|
||||||
name = Superclass; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A8605E31BEC163100A810A4 /* Views */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A8605C41BEC155B00A810A4 /* BackgroundView.h */, |
|
||||||
9A8605C51BEC155B00A810A4 /* StatusItemView.h */, |
|
||||||
9A8605BC1BEC14F600A810A4 /* BackgroundView.m */, |
|
||||||
9A8605B81BEC14DC00A810A4 /* StatusItemView.m */, |
|
||||||
9AB935791C1AD8F7001285A0 /* CLRatingCellView.h */, |
|
||||||
9AB9357A1C1AD8F7001285A0 /* CLRatingCellView.m */, |
|
||||||
); |
|
||||||
name = Views; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A8605E41BEC164C00A810A4 /* Main */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A8605C31BEC155B00A810A4 /* Clocker-Info.plist */, |
|
||||||
9A8605CC1BEC155B00A810A4 /* Clocker-Prefix.pch */, |
|
||||||
9A8605AD1BEC148400A810A4 /* main.m */, |
|
||||||
); |
|
||||||
name = Main; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
9A8605E51BEC165400A810A4 /* Controllers */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951BE1C1D0AA0009C17AA /* CLOneWindowController.m */, |
|
||||||
9A5951BF1C1D0AA0009C17AA /* CLOneWindowController.h */, |
|
||||||
9A8605CA1BEC155B00A810A4 /* ApplicationDelegate.h */, |
|
||||||
9A8605B51BEC14BE00A810A4 /* ApplicationDelegate.m */, |
|
||||||
9A8605C91BEC155B00A810A4 /* MenubarController.h */, |
|
||||||
9A8605B41BEC14BE00A810A4 /* MenubarController.m */, |
|
||||||
9A8605C81BEC155B00A810A4 /* PanelController.h */, |
|
||||||
9A8605B91BEC14DC00A810A4 /* PanelController.m */, |
|
||||||
); |
|
||||||
name = Controllers; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
DD4F7BF913C30F9F00825C6E = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5B1A8D1BECDFB700A77C68 /* Clocker.entitlements */, |
|
||||||
9A43792D1BEC256200F4E27F /* Media.xcassets */, |
|
||||||
9A2000C61BFBCEF6002BFDE8 /* Utilties */, |
|
||||||
9A8605E01BEC15F400A810A4 /* XIB */, |
|
||||||
9A5951F01C1D3D35009C17AA /* Table Cell Views */, |
|
||||||
9A8605E31BEC163100A810A4 /* Views */, |
|
||||||
9A8605E41BEC164C00A810A4 /* Main */, |
|
||||||
9A5951C31C1D0DE3009C17AA /* View Controllers */, |
|
||||||
9A8605E51BEC165400A810A4 /* Controllers */, |
|
||||||
9A8605E21BEC161300A810A4 /* Superclass */, |
|
||||||
DD4F7C0713C30F9F00825C6E /* Frameworks */, |
|
||||||
9A5951FB1C1D5222009C17AA /* Check for Updated Version */, |
|
||||||
DD4F7C0513C30F9F00825C6E /* Products */, |
|
||||||
9A25F7481C1A5E21007D369B /* Rate */, |
|
||||||
); |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
DD4F7C0513C30F9F00825C6E /* Products */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
DD4F7C0413C30F9F00825C6E /* Clocker.app */, |
|
||||||
); |
|
||||||
name = Products; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
DD4F7C0713C30F9F00825C6E /* Frameworks */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
9A5951D11C1D1D94009C17AA /* ApptentiveConnect.framework */, |
|
||||||
9A5951C71C1D1B6F009C17AA /* ApptentiveConnect.xcodeproj */, |
|
||||||
9A5951B91C1D0A22009C17AA /* Crashlytics.framework */, |
|
||||||
9AC678E31C1ABAB9003B4F6B /* QuartzCore.framework */, |
|
||||||
9A4379211BEC223900F4E27F /* Security.framework */, |
|
||||||
9A4379231BEC223900F4E27F /* Fabric.framework */, |
|
||||||
9A43792B1BEC231100F4E27F /* libz.tbd */, |
|
||||||
9A4379291BEC230A00F4E27F /* libc++.tbd */, |
|
||||||
DD4F7C0B13C30F9F00825C6E /* AppKit.framework */, |
|
||||||
DD4F7C0813C30F9F00825C6E /* Cocoa.framework */, |
|
||||||
); |
|
||||||
name = Frameworks; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
/* End PBXGroup section */ |
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */ |
|
||||||
DD4F7C0313C30F9F00825C6E /* Clocker */ = { |
|
||||||
isa = PBXNativeTarget; |
|
||||||
buildConfigurationList = DD4F7C2213C30F9F00825C6E /* Build configuration list for PBXNativeTarget "Clocker" */; |
|
||||||
buildPhases = ( |
|
||||||
DD4F7C0013C30F9F00825C6E /* Sources */, |
|
||||||
DD4F7C0113C30F9F00825C6E /* Frameworks */, |
|
||||||
DD4F7C0213C30F9F00825C6E /* Resources */, |
|
||||||
9A4379201BEC220200F4E27F /* ShellScript */, |
|
||||||
); |
|
||||||
buildRules = ( |
|
||||||
); |
|
||||||
dependencies = ( |
|
||||||
); |
|
||||||
name = Clocker; |
|
||||||
productName = Popup; |
|
||||||
productReference = DD4F7C0413C30F9F00825C6E /* Clocker.app */; |
|
||||||
productType = "com.apple.product-type.application"; |
|
||||||
}; |
|
||||||
/* End PBXNativeTarget section */ |
|
||||||
|
|
||||||
/* Begin PBXProject section */ |
|
||||||
DD4F7BFB13C30F9F00825C6E /* Project object */ = { |
|
||||||
isa = PBXProject; |
|
||||||
attributes = { |
|
||||||
CLASSPREFIX = CL; |
|
||||||
LastUpgradeCheck = 0700; |
|
||||||
TargetAttributes = { |
|
||||||
DD4F7C0313C30F9F00825C6E = { |
|
||||||
DevelopmentTeam = AJS5SNW8EY; |
|
||||||
SystemCapabilities = { |
|
||||||
com.apple.Sandbox = { |
|
||||||
enabled = 1; |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
}; |
|
||||||
buildConfigurationList = DD4F7BFE13C30F9F00825C6E /* Build configuration list for PBXProject "Clocker" */; |
|
||||||
compatibilityVersion = "Xcode 3.2"; |
|
||||||
developmentRegion = English; |
|
||||||
hasScannedForEncodings = 0; |
|
||||||
knownRegions = ( |
|
||||||
en, |
|
||||||
); |
|
||||||
mainGroup = DD4F7BF913C30F9F00825C6E; |
|
||||||
productRefGroup = DD4F7C0513C30F9F00825C6E /* Products */; |
|
||||||
projectDirPath = ""; |
|
||||||
projectReferences = ( |
|
||||||
{ |
|
||||||
ProductGroup = 9A5951C81C1D1B6F009C17AA /* Products */; |
|
||||||
ProjectRef = 9A5951C71C1D1B6F009C17AA /* ApptentiveConnect.xcodeproj */; |
|
||||||
}, |
|
||||||
); |
|
||||||
projectRoot = ""; |
|
||||||
targets = ( |
|
||||||
DD4F7C0313C30F9F00825C6E /* Clocker */, |
|
||||||
); |
|
||||||
}; |
|
||||||
/* End PBXProject section */ |
|
||||||
|
|
||||||
/* Begin PBXReferenceProxy section */ |
|
||||||
9A5951CD1C1D1B6F009C17AA /* ApptentiveConnect.framework */ = { |
|
||||||
isa = PBXReferenceProxy; |
|
||||||
fileType = wrapper.framework; |
|
||||||
path = ApptentiveConnect.framework; |
|
||||||
remoteRef = 9A5951CC1C1D1B6F009C17AA /* PBXContainerItemProxy */; |
|
||||||
sourceTree = BUILT_PRODUCTS_DIR; |
|
||||||
}; |
|
||||||
9A5951CF1C1D1B6F009C17AA /* ApptentiveUnitTests.octest */ = { |
|
||||||
isa = PBXReferenceProxy; |
|
||||||
fileType = wrapper.cfbundle; |
|
||||||
path = ApptentiveUnitTests.octest; |
|
||||||
remoteRef = 9A5951CE1C1D1B6F009C17AA /* PBXContainerItemProxy */; |
|
||||||
sourceTree = BUILT_PRODUCTS_DIR; |
|
||||||
}; |
|
||||||
/* End PBXReferenceProxy section */ |
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */ |
|
||||||
DD4F7C0213C30F9F00825C6E /* Resources */ = { |
|
||||||
isa = PBXResourcesBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
9A5951FD1C1D592D009C17AA /* iVersion.bundle in Resources */, |
|
||||||
9A392EEE1C1CE9950072C10A /* CLPreferencesView.xib in Resources */, |
|
||||||
9A56DB811C1CFB73004CE6AF /* Panel.xib in Resources */, |
|
||||||
9A43792E1BEC256200F4E27F /* Media.xcassets in Resources */, |
|
||||||
9A392EE91C1CDD530072C10A /* CLAboutUsView.xib in Resources */, |
|
||||||
9A5951C21C1D0AAD009C17AA /* CLOneWindow.xib in Resources */, |
|
||||||
9A56DB801C1CFB73004CE6AF /* MainMenu.xib in Resources */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXResourcesBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */ |
|
||||||
9A4379201BEC220200F4E27F /* ShellScript */ = { |
|
||||||
isa = PBXShellScriptBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
); |
|
||||||
inputPaths = ( |
|
||||||
); |
|
||||||
outputPaths = ( |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
shellPath = /bin/sh; |
|
||||||
shellScript = ""; |
|
||||||
showEnvVarsInLog = 0; |
|
||||||
}; |
|
||||||
/* End PBXShellScriptBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */ |
|
||||||
DD4F7C0013C30F9F00825C6E /* Sources */ = { |
|
||||||
isa = PBXSourcesBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
9A8605BF1BEC14F600A810A4 /* BackgroundView.m in Sources */, |
|
||||||
9AB9357B1C1AD8F7001285A0 /* CLRatingCellView.m in Sources */, |
|
||||||
9A392EED1C1CE9950072C10A /* CLPreferencesViewController.m in Sources */, |
|
||||||
9A5951BD1C1D0A8D009C17AA /* CommonStrings.m in Sources */, |
|
||||||
9A5951FA1C1D5214009C17AA /* iVersion.m in Sources */, |
|
||||||
9A25F7471C1A5E17007D369B /* iRate.m in Sources */, |
|
||||||
9A8605C01BEC14F600A810A4 /* Panel.m in Sources */, |
|
||||||
9A8605BA1BEC14DC00A810A4 /* StatusItemView.m in Sources */, |
|
||||||
9A8605BB1BEC14DC00A810A4 /* PanelController.m in Sources */, |
|
||||||
9A8605B61BEC14BE00A810A4 /* MenubarController.m in Sources */, |
|
||||||
9A5951C01C1D0AA0009C17AA /* CLOneWindowController.m in Sources */, |
|
||||||
9A8605B71BEC14BE00A810A4 /* ApplicationDelegate.m in Sources */, |
|
||||||
9A5951F51C1D3D81009C17AA /* CLTimezoneCellView.m in Sources */, |
|
||||||
9A8605B31BEC14A600A810A4 /* ColoredButton.m in Sources */, |
|
||||||
9A8605AE1BEC148400A810A4 /* main.m in Sources */, |
|
||||||
9A392EE81C1CDD530072C10A /* CLAboutUsViewController.m in Sources */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXSourcesBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */ |
|
||||||
9A5B1A8B1BECDB5B00A77C68 /* Distribution */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO; |
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES; |
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
|
||||||
CLANG_WARN_EMPTY_BODY = YES; |
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES; |
|
||||||
CLANG_WARN_INT_CONVERSION = YES; |
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
|
||||||
CODE_SIGN_IDENTITY = ""; |
|
||||||
COPY_PHASE_STRIP = YES; |
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES; |
|
||||||
GCC_NO_COMMON_BLOCKS = YES; |
|
||||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; |
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = 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; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10; |
|
||||||
PROVISIONING_PROFILE = ""; |
|
||||||
SDKROOT = macosx; |
|
||||||
}; |
|
||||||
name = Distribution; |
|
||||||
}; |
|
||||||
9A5B1A8C1BECDB5B00A77C68 /* Distribution */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
|
||||||
CLANG_ENABLE_OBJC_ARC = YES; |
|
||||||
CODE_SIGN_ENTITLEMENTS = Clocker/Clocker.entitlements; |
|
||||||
CODE_SIGN_IDENTITY = ""; |
|
||||||
COMBINE_HIDPI_IMAGES = YES; |
|
||||||
FRAMEWORK_SEARCH_PATHS = ( |
|
||||||
"$(inherited)", |
|
||||||
"$(PROJECT_DIR)", |
|
||||||
"$(PROJECT_DIR)/Frameworks", |
|
||||||
"$(PROJECT_DIR)/Clocker/ApptentiveConnect", |
|
||||||
); |
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|
||||||
GCC_PREFIX_HEADER = "Clocker/Clocker-Prefix.pch"; |
|
||||||
INFOPLIST_FILE = "Clocker/Clocker-Info.plist"; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10; |
|
||||||
OTHER_LDFLAGS = ""; |
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker; |
|
||||||
PRODUCT_NAME = Clocker; |
|
||||||
PROVISIONING_PROFILE = ""; |
|
||||||
WRAPPER_EXTENSION = app; |
|
||||||
}; |
|
||||||
name = Distribution; |
|
||||||
}; |
|
||||||
DD4F7C2013C30F9F00825C6E /* Debug */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO; |
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES; |
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
|
||||||
CLANG_WARN_EMPTY_BODY = YES; |
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES; |
|
||||||
CLANG_WARN_INT_CONVERSION = YES; |
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
|
||||||
CODE_SIGN_IDENTITY = ""; |
|
||||||
COPY_PHASE_STRIP = NO; |
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
|
||||||
ENABLE_TESTABILITY = YES; |
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|
||||||
GCC_DYNAMIC_NO_PIC = NO; |
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES; |
|
||||||
GCC_NO_COMMON_BLOCKS = YES; |
|
||||||
GCC_OPTIMIZATION_LEVEL = 0; |
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = ( |
|
||||||
"DEBUG=1", |
|
||||||
"$(inherited)", |
|
||||||
); |
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO; |
|
||||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; |
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = 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; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10; |
|
||||||
ONLY_ACTIVE_ARCH = YES; |
|
||||||
PROVISIONING_PROFILE = ""; |
|
||||||
SDKROOT = macosx; |
|
||||||
}; |
|
||||||
name = Debug; |
|
||||||
}; |
|
||||||
DD4F7C2113C30F9F00825C6E /* Release */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO; |
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES; |
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES; |
|
||||||
CLANG_WARN_EMPTY_BODY = YES; |
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES; |
|
||||||
CLANG_WARN_INT_CONVERSION = YES; |
|
||||||
CLANG_WARN_UNREACHABLE_CODE = YES; |
|
||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; |
|
||||||
CODE_SIGN_IDENTITY = ""; |
|
||||||
COPY_PHASE_STRIP = YES; |
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES; |
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|
||||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES; |
|
||||||
GCC_NO_COMMON_BLOCKS = YES; |
|
||||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0; |
|
||||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES; |
|
||||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = 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; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10; |
|
||||||
PROVISIONING_PROFILE = ""; |
|
||||||
SDKROOT = macosx; |
|
||||||
}; |
|
||||||
name = Release; |
|
||||||
}; |
|
||||||
DD4F7C2313C30F9F00825C6E /* Debug */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
|
||||||
CLANG_ENABLE_OBJC_ARC = YES; |
|
||||||
CODE_SIGN_ENTITLEMENTS = Clocker/Clocker.entitlements; |
|
||||||
CODE_SIGN_IDENTITY = ""; |
|
||||||
COMBINE_HIDPI_IMAGES = YES; |
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
|
||||||
FRAMEWORK_SEARCH_PATHS = ( |
|
||||||
"$(inherited)", |
|
||||||
"$(PROJECT_DIR)", |
|
||||||
"$(PROJECT_DIR)/Frameworks", |
|
||||||
"$(PROJECT_DIR)/Clocker/ApptentiveConnect", |
|
||||||
); |
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|
||||||
GCC_PREFIX_HEADER = "Clocker/Clocker-Prefix.pch"; |
|
||||||
INFOPLIST_FILE = "Clocker/Clocker-Info.plist"; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10; |
|
||||||
ONLY_ACTIVE_ARCH = NO; |
|
||||||
OTHER_LDFLAGS = ""; |
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker; |
|
||||||
PRODUCT_NAME = Clocker; |
|
||||||
PROVISIONING_PROFILE = ""; |
|
||||||
WRAPPER_EXTENSION = app; |
|
||||||
}; |
|
||||||
name = Debug; |
|
||||||
}; |
|
||||||
DD4F7C2413C30F9F00825C6E /* Release */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; |
|
||||||
CLANG_ENABLE_OBJC_ARC = YES; |
|
||||||
CODE_SIGN_ENTITLEMENTS = Clocker/Clocker.entitlements; |
|
||||||
CODE_SIGN_IDENTITY = ""; |
|
||||||
COMBINE_HIDPI_IMAGES = YES; |
|
||||||
FRAMEWORK_SEARCH_PATHS = ( |
|
||||||
"$(inherited)", |
|
||||||
"$(PROJECT_DIR)", |
|
||||||
"$(PROJECT_DIR)/Frameworks", |
|
||||||
"$(PROJECT_DIR)/Clocker/ApptentiveConnect", |
|
||||||
); |
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|
||||||
GCC_PREFIX_HEADER = "Clocker/Clocker-Prefix.pch"; |
|
||||||
INFOPLIST_FILE = "Clocker/Clocker-Info.plist"; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10; |
|
||||||
OTHER_LDFLAGS = ""; |
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.abhishek.Clocker; |
|
||||||
PRODUCT_NAME = Clocker; |
|
||||||
PROVISIONING_PROFILE = ""; |
|
||||||
WRAPPER_EXTENSION = app; |
|
||||||
}; |
|
||||||
name = Release; |
|
||||||
}; |
|
||||||
/* End XCBuildConfiguration section */ |
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */ |
|
||||||
DD4F7BFE13C30F9F00825C6E /* Build configuration list for PBXProject "Clocker" */ = { |
|
||||||
isa = XCConfigurationList; |
|
||||||
buildConfigurations = ( |
|
||||||
DD4F7C2013C30F9F00825C6E /* Debug */, |
|
||||||
DD4F7C2113C30F9F00825C6E /* Release */, |
|
||||||
9A5B1A8B1BECDB5B00A77C68 /* Distribution */, |
|
||||||
); |
|
||||||
defaultConfigurationIsVisible = 0; |
|
||||||
defaultConfigurationName = Release; |
|
||||||
}; |
|
||||||
DD4F7C2213C30F9F00825C6E /* Build configuration list for PBXNativeTarget "Clocker" */ = { |
|
||||||
isa = XCConfigurationList; |
|
||||||
buildConfigurations = ( |
|
||||||
DD4F7C2313C30F9F00825C6E /* Debug */, |
|
||||||
DD4F7C2413C30F9F00825C6E /* Release */, |
|
||||||
9A5B1A8C1BECDB5B00A77C68 /* Distribution */, |
|
||||||
); |
|
||||||
defaultConfigurationIsVisible = 0; |
|
||||||
defaultConfigurationName = Release; |
|
||||||
}; |
|
||||||
/* End XCConfigurationList section */ |
|
||||||
}; |
|
||||||
rootObject = DD4F7BFB13C30F9F00825C6E /* Project object */; |
|
||||||
} |
|
@ -1,7 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<Workspace |
|
||||||
version = "1.0"> |
|
||||||
<FileRef |
|
||||||
location = "self:/Users/abhishekbanthia/Downloads/Popup-master/Clocker.xcodeproj"> |
|
||||||
</FileRef> |
|
||||||
</Workspace> |
|
@ -1,17 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<Bucket |
|
||||||
type = "1" |
|
||||||
version = "2.0"> |
|
||||||
<Breakpoints> |
|
||||||
<BreakpointProxy |
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint"> |
|
||||||
<BreakpointContent |
|
||||||
shouldBeEnabled = "Yes" |
|
||||||
ignoreCount = "0" |
|
||||||
continueAfterRunningActions = "No" |
|
||||||
scope = "1" |
|
||||||
stopOnStyle = "0"> |
|
||||||
</BreakpointContent> |
|
||||||
</BreakpointProxy> |
|
||||||
</Breakpoints> |
|
||||||
</Bucket> |
|
@ -1,98 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<Scheme |
|
||||||
LastUpgradeVersion = "0700" |
|
||||||
version = "1.3"> |
|
||||||
<BuildAction |
|
||||||
parallelizeBuildables = "YES" |
|
||||||
buildImplicitDependencies = "YES"> |
|
||||||
<BuildActionEntries> |
|
||||||
<BuildActionEntry |
|
||||||
buildForTesting = "YES" |
|
||||||
buildForRunning = "YES" |
|
||||||
buildForProfiling = "YES" |
|
||||||
buildForArchiving = "YES" |
|
||||||
buildForAnalyzing = "YES"> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "DD4F7C0313C30F9F00825C6E" |
|
||||||
BuildableName = "Clocker.app" |
|
||||||
BlueprintName = "Clocker" |
|
||||||
ReferencedContainer = "container:Clocker.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</BuildActionEntry> |
|
||||||
</BuildActionEntries> |
|
||||||
</BuildAction> |
|
||||||
<TestAction |
|
||||||
buildConfiguration = "Debug" |
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"> |
|
||||||
<Testables> |
|
||||||
</Testables> |
|
||||||
<MacroExpansion> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "DD4F7C0313C30F9F00825C6E" |
|
||||||
BuildableName = "Clocker.app" |
|
||||||
BlueprintName = "Clocker" |
|
||||||
ReferencedContainer = "container:Clocker.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</MacroExpansion> |
|
||||||
<AdditionalOptions> |
|
||||||
</AdditionalOptions> |
|
||||||
</TestAction> |
|
||||||
<LaunchAction |
|
||||||
buildConfiguration = "Debug" |
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|
||||||
launchStyle = "0" |
|
||||||
useCustomWorkingDirectory = "NO" |
|
||||||
ignoresPersistentStateOnLaunch = "NO" |
|
||||||
debugDocumentVersioning = "YES" |
|
||||||
debugServiceExtension = "internal" |
|
||||||
allowLocationSimulation = "YES" |
|
||||||
showNonLocalizedStrings = "YES" |
|
||||||
language = "en"> |
|
||||||
<BuildableProductRunnable |
|
||||||
runnableDebuggingMode = "0"> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "DD4F7C0313C30F9F00825C6E" |
|
||||||
BuildableName = "Clocker.app" |
|
||||||
BlueprintName = "Clocker" |
|
||||||
ReferencedContainer = "container:Clocker.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</BuildableProductRunnable> |
|
||||||
<AdditionalOptions> |
|
||||||
<AdditionalOption |
|
||||||
key = "NSZombieEnabled" |
|
||||||
value = "YES" |
|
||||||
isEnabled = "YES"> |
|
||||||
</AdditionalOption> |
|
||||||
</AdditionalOptions> |
|
||||||
</LaunchAction> |
|
||||||
<ProfileAction |
|
||||||
buildConfiguration = "Release" |
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES" |
|
||||||
savedToolIdentifier = "" |
|
||||||
useCustomWorkingDirectory = "NO" |
|
||||||
debugDocumentVersioning = "YES"> |
|
||||||
<BuildableProductRunnable |
|
||||||
runnableDebuggingMode = "0"> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "DD4F7C0313C30F9F00825C6E" |
|
||||||
BuildableName = "Clocker.app" |
|
||||||
BlueprintName = "Clocker" |
|
||||||
ReferencedContainer = "container:Clocker.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</BuildableProductRunnable> |
|
||||||
</ProfileAction> |
|
||||||
<AnalyzeAction |
|
||||||
buildConfiguration = "Debug"> |
|
||||||
</AnalyzeAction> |
|
||||||
<ArchiveAction |
|
||||||
buildConfiguration = "Release" |
|
||||||
revealArchiveInOrganizer = "YES"> |
|
||||||
</ArchiveAction> |
|
||||||
</Scheme> |
|
@ -1,22 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>SchemeUserState</key> |
|
||||||
<dict> |
|
||||||
<key>Clocker.xcscheme</key> |
|
||||||
<dict> |
|
||||||
<key>orderHint</key> |
|
||||||
<integer>1</integer> |
|
||||||
</dict> |
|
||||||
</dict> |
|
||||||
<key>SuppressBuildableAutocreation</key> |
|
||||||
<dict> |
|
||||||
<key>DD4F7C0313C30F9F00825C6E</key> |
|
||||||
<dict> |
|
||||||
<key>primary</key> |
|
||||||
<true/> |
|
||||||
</dict> |
|
||||||
</dict> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,156 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> |
|
||||||
<dependencies> |
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> |
|
||||||
</dependencies> |
|
||||||
<objects> |
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="CLAboutUsViewController"> |
|
||||||
<connections> |
|
||||||
<outlet property="view" destination="FS5-f2-b1Z" id="qSe-zw-rRT"/> |
|
||||||
</connections> |
|
||||||
</customObject> |
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> |
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/> |
|
||||||
<view id="FS5-f2-b1Z"> |
|
||||||
<rect key="frame" x="0.0" y="0.0" width="504" height="207"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
<subviews> |
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="p2G-hA-MSX"> |
|
||||||
<rect key="frame" x="20" y="56" width="125" height="117"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="width" constant="125" id="6Kp-RK-dT4"/> |
|
||||||
<constraint firstAttribute="height" constant="117" id="znw-VN-bXv"/> |
|
||||||
</constraints> |
|
||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ClockerIcon-256" id="pfa-88-uAu"/> |
|
||||||
</imageView> |
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XlC-Xd-67t"> |
|
||||||
<rect key="frame" x="161" y="152" width="97" height="35"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="width" constant="93" id="NgB-aR-GfY"/> |
|
||||||
<constraint firstAttribute="height" constant="35" id="dqF-vG-wml"/> |
|
||||||
</constraints> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clocker" id="KPE-f2-s6r"> |
|
||||||
<font key="font" size="29" name="HelveticaNeue-Thin"/> |
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FG9-E5-o8y"> |
|
||||||
<rect key="frame" x="164" y="133" width="79" height="23"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="height" constant="23" id="APM-BF-sIg"/> |
|
||||||
<constraint firstAttribute="width" constant="75" id="W3D-bf-G5h"/> |
|
||||||
</constraints> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Version 1.2" id="ctT-VL-V5M"> |
|
||||||
<font key="font" size="16" name="HelveticaNeue-Thin"/> |
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5Eo-aJ-L8H"> |
|
||||||
<rect key="frame" x="164" y="111" width="199" height="20"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="height" constant="20" id="6fy-MI-uin"/> |
|
||||||
<constraint firstAttribute="width" constant="195" id="kzy-kb-gYL"/> |
|
||||||
</constraints> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Copyright (2015) Abhishek Banthia" id="4PX-se-5ds"> |
|
||||||
<font key="font" size="14" name="HelveticaNeue-UltraLight"/> |
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6Cx-BF-XMU"> |
|
||||||
<rect key="frame" x="164" y="83" width="334" height="20"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="height" constant="20" id="Oob-bz-4Vp"/> |
|
||||||
<constraint firstAttribute="width" constant="330" id="RyU-Mg-Xun"/> |
|
||||||
</constraints> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clocker is completely open-source and is available for reuse under" id="oId-kW-4fE"> |
|
||||||
<font key="font" size="10" name="HelveticaNeue-Light"/> |
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fgO-N3-3oh"> |
|
||||||
<rect key="frame" x="153" y="13" width="116" height="32"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="height" constant="21" id="HOR-7s-O7V"/> |
|
||||||
<constraint firstAttribute="width" constant="104" id="fjr-FG-Jlq"/> |
|
||||||
</constraints> |
|
||||||
<buttonCell key="cell" type="push" title="View Source" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="yEt-bN-Jci"> |
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
</buttonCell> |
|
||||||
<connections> |
|
||||||
<action selector="viewSource:" target="-2" id="gkr-T0-0OI"/> |
|
||||||
</connections> |
|
||||||
</button> |
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="q67-QZ-7g3"> |
|
||||||
<rect key="frame" x="260" y="13" width="117" height="32"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="height" constant="21" id="Fw5-r2-JCs"/> |
|
||||||
<constraint firstAttribute="width" constant="105" id="zmg-WE-hsM"/> |
|
||||||
</constraints> |
|
||||||
<buttonCell key="cell" type="push" title="Report Issue" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="HO1-pf-GNd"> |
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
</buttonCell> |
|
||||||
<connections> |
|
||||||
<action selector="reportIssue:" target="-2" id="71W-Nb-pYu"/> |
|
||||||
</connections> |
|
||||||
</button> |
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P3u-Um-Nby"> |
|
||||||
<rect key="frame" x="367" y="13" width="123" height="32"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="width" constant="111" id="5Yt-bH-NGf"/> |
|
||||||
<constraint firstAttribute="height" constant="21" id="8Jh-fm-8up"/> |
|
||||||
</constraints> |
|
||||||
<buttonCell key="cell" type="push" bezelStyle="rounded" image="FindUsOnFacebook" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KI2-hO-Wif"> |
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
</buttonCell> |
|
||||||
<connections> |
|
||||||
<action selector="openFacebookPage:" target="-2" id="gnQ-cM-gbO"/> |
|
||||||
</connections> |
|
||||||
</button> |
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Rzs-xE-sfs"> |
|
||||||
<rect key="frame" x="165" y="68" width="334" height="20"/> |
|
||||||
<constraints> |
|
||||||
<constraint firstAttribute="height" constant="20" id="2sg-Q1-h9h"/> |
|
||||||
<constraint firstAttribute="width" constant="330" id="MHq-fu-8k6"/> |
|
||||||
</constraints> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="the MIT License." id="JAy-Yp-MXm"> |
|
||||||
<font key="font" size="10" name="HelveticaNeue-Light"/> |
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
</subviews> |
|
||||||
<constraints> |
|
||||||
<constraint firstItem="fgO-N3-3oh" firstAttribute="leading" secondItem="p2G-hA-MSX" secondAttribute="trailing" constant="14" id="4rX-vc-Me4"/> |
|
||||||
<constraint firstItem="p2G-hA-MSX" firstAttribute="leading" secondItem="FS5-f2-b1Z" secondAttribute="leading" constant="20" id="8LW-4H-HKD"/> |
|
||||||
<constraint firstAttribute="bottom" secondItem="q67-QZ-7g3" secondAttribute="bottom" constant="20" id="Cl5-lU-Hlw"/> |
|
||||||
<constraint firstAttribute="bottom" secondItem="fgO-N3-3oh" secondAttribute="bottom" constant="20" id="Ka3-lR-aW1"/> |
|
||||||
<constraint firstItem="p2G-hA-MSX" firstAttribute="top" secondItem="FS5-f2-b1Z" secondAttribute="top" constant="34" id="LFJ-eg-NOC"/> |
|
||||||
<constraint firstItem="Rzs-xE-sfs" firstAttribute="leading" secondItem="p2G-hA-MSX" secondAttribute="trailing" constant="22" id="Mru-Qk-R35"/> |
|
||||||
<constraint firstItem="P3u-Um-Nby" firstAttribute="leading" secondItem="q67-QZ-7g3" secondAttribute="trailing" constant="2" id="NtI-jY-BNB"/> |
|
||||||
<constraint firstItem="6Cx-BF-XMU" firstAttribute="leading" secondItem="p2G-hA-MSX" secondAttribute="trailing" constant="21" id="PxC-Pa-PfL"/> |
|
||||||
<constraint firstItem="XlC-Xd-67t" firstAttribute="leading" secondItem="p2G-hA-MSX" secondAttribute="trailing" constant="18" id="ReB-0P-Ppj"/> |
|
||||||
<constraint firstItem="5Eo-aJ-L8H" firstAttribute="leading" secondItem="p2G-hA-MSX" secondAttribute="trailing" constant="21" id="a9Y-c0-NKB"/> |
|
||||||
<constraint firstAttribute="bottom" secondItem="P3u-Um-Nby" secondAttribute="bottom" constant="20" id="csw-Zl-TRQ"/> |
|
||||||
<constraint firstItem="q67-QZ-7g3" firstAttribute="leading" secondItem="fgO-N3-3oh" secondAttribute="trailing" constant="3" id="fA5-O5-kY8"/> |
|
||||||
<constraint firstItem="FG9-E5-o8y" firstAttribute="leading" secondItem="p2G-hA-MSX" secondAttribute="trailing" constant="21" id="kyh-fi-23P"/> |
|
||||||
<constraint firstItem="5Eo-aJ-L8H" firstAttribute="top" secondItem="FG9-E5-o8y" secondAttribute="bottom" constant="2" id="pVM-TS-Wvl"/> |
|
||||||
<constraint firstItem="XlC-Xd-67t" firstAttribute="top" secondItem="FS5-f2-b1Z" secondAttribute="top" constant="20" id="slR-Qu-uJh"/> |
|
||||||
<constraint firstItem="FG9-E5-o8y" firstAttribute="top" secondItem="XlC-Xd-67t" secondAttribute="bottom" constant="-4" id="yHu-dm-LPw"/> |
|
||||||
<constraint firstItem="Rzs-xE-sfs" firstAttribute="top" secondItem="6Cx-BF-XMU" secondAttribute="bottom" constant="-5" id="ydK-a7-uQy"/> |
|
||||||
<constraint firstItem="6Cx-BF-XMU" firstAttribute="top" secondItem="5Eo-aJ-L8H" secondAttribute="bottom" constant="8" id="zki-ag-D4H"/> |
|
||||||
</constraints> |
|
||||||
<point key="canvasLocation" x="578" y="300.5"/> |
|
||||||
</view> |
|
||||||
</objects> |
|
||||||
<resources> |
|
||||||
<image name="ClockerIcon-256" width="256" height="256"/> |
|
||||||
<image name="FindUsOnFacebook" width="144" height="27"/> |
|
||||||
</resources> |
|
||||||
</document> |
|
@ -1,13 +0,0 @@ |
|||||||
//
|
|
||||||
// CLAboutUsViewController.h
|
|
||||||
// Clocker
|
|
||||||
//
|
|
||||||
// Created by Abhishek Banthia on 12/12/15.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
@interface CLAboutUsViewController : NSViewController |
|
||||||
|
|
||||||
@end |
|
@ -1,50 +0,0 @@ |
|||||||
// |
|
||||||
// CLAboutUsViewController.m |
|
||||||
// Clocker |
|
||||||
// |
|
||||||
// Created by Abhishek Banthia on 12/12/15. |
|
||||||
// |
|
||||||
// |
|
||||||
|
|
||||||
#import "CLAboutUsViewController.h" |
|
||||||
|
|
||||||
@interface CLAboutUsViewController () |
|
||||||
|
|
||||||
@end |
|
||||||
|
|
||||||
static CLAboutUsViewController *sharedAboutUs = nil; |
|
||||||
NSString *const CLAboutUsNibIdentifier = @"CLAboutWindow"; |
|
||||||
NSString *const CLGitHubURL = @"https://github.com/Abhishaker17/Clocker"; |
|
||||||
NSString *const CLIssueURL =@"https://github.com/Abhishaker17/Clocker/issues"; |
|
||||||
NSString *const CLFacebookPageURL = @"https://www.facebook.com/ClockerMenubarClock/"; |
|
||||||
|
|
||||||
@implementation CLAboutUsViewController |
|
||||||
|
|
||||||
- (void)viewDidLoad { |
|
||||||
[super viewDidLoad]; |
|
||||||
|
|
||||||
CALayer *viewLayer = [CALayer layer]; |
|
||||||
[viewLayer setBackgroundColor:CGColorCreateGenericRGB(255.0, 255.0, 255.0, 0.8)]; //RGB plus Alpha Channel |
|
||||||
[self.view setWantsLayer:YES]; // view's backing store is using a Core Animation Layer |
|
||||||
[self.view setLayer:viewLayer]; |
|
||||||
|
|
||||||
// Do view setup here. |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)viewSource:(id)sender |
|
||||||
{ |
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:CLGitHubURL]]; |
|
||||||
} |
|
||||||
- (IBAction)reportIssue:(id)sender |
|
||||||
{ |
|
||||||
// |
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:CLIssueURL]]; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)openFacebookPage:(id)sender |
|
||||||
{ |
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:CLFacebookPageURL]]; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@end |
|
@ -1,39 +0,0 @@ |
|||||||
// Created by Abhishek Banthia on 11/4/15.
|
|
||||||
// Copyright (c) 2015 Abhishek Banthia All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Copyright (c) 2015, Abhishek Banthia
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
// are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
// other materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
||||||
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
#import "MenubarController.h" |
|
||||||
#import "PanelController.h" |
|
||||||
|
|
||||||
@interface ApplicationDelegate : NSObject <NSApplicationDelegate, PanelControllerDelegate> |
|
||||||
|
|
||||||
@property (nonatomic, strong) MenubarController *menubarController; |
|
||||||
@property (nonatomic, strong, readonly) PanelController *panelController; |
|
||||||
|
|
||||||
- (IBAction)togglePanel:(id)sender; |
|
||||||
|
|
||||||
@end |
|
@ -1,167 +0,0 @@ |
|||||||
// Created by Abhishek Banthia on 11/4/15. |
|
||||||
// Copyright (c) 2015 Abhishek Banthia All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
// Copyright (c) 2015, Abhishek Banthia |
|
||||||
// All rights reserved. |
|
||||||
// |
|
||||||
// Redistribution and use in source and binary forms, with or without modification, |
|
||||||
// are permitted provided that the following conditions are met: |
|
||||||
// |
|
||||||
// Redistributions of source code must retain the above copyright notice, |
|
||||||
// this list of conditions and the following disclaimer. |
|
||||||
// |
|
||||||
// Redistributions in binary form must reproduce the above copyright notice, |
|
||||||
// this list of conditions and the following disclaimer in the documentation and/or |
|
||||||
// other materials provided with the distribution. |
|
||||||
// |
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
||||||
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
|
||||||
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
|
||||||
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||||
|
|
||||||
#import "ApplicationDelegate.h" |
|
||||||
#import <Fabric/Fabric.h> |
|
||||||
#import <Crashlytics/Crashlytics.h> |
|
||||||
#import "iRate.h" |
|
||||||
#import "CommonStrings.h" |
|
||||||
#import "iVersion.h" |
|
||||||
|
|
||||||
@implementation ApplicationDelegate |
|
||||||
|
|
||||||
@synthesize panelController = _panelController; |
|
||||||
@synthesize menubarController = _menubarController; |
|
||||||
|
|
||||||
#pragma mark - |
|
||||||
|
|
||||||
- (void)dealloc |
|
||||||
{ |
|
||||||
[self.panelController removeObserver:self forKeyPath:@"hasActivePanel"]; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark - |
|
||||||
|
|
||||||
void *kContextActivePanel = &kContextActivePanel; |
|
||||||
|
|
||||||
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context |
|
||||||
{ |
|
||||||
if (context == kContextActivePanel) { |
|
||||||
self.menubarController.hasActiveIcon = self.panelController.hasActivePanel; |
|
||||||
} |
|
||||||
else { |
|
||||||
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
+ (void)initialize |
|
||||||
{ |
|
||||||
//Configure iRate |
|
||||||
[iRate sharedInstance].appStoreID = 1056643111; |
|
||||||
[iVersion sharedInstance].appStoreID = 1056643111; |
|
||||||
[iRate sharedInstance].useAllAvailableLanguages = NO; |
|
||||||
[iVersion sharedInstance].useAllAvailableLanguages = NO; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark - NSApplicationDelegate |
|
||||||
|
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)notification |
|
||||||
{ |
|
||||||
NSNumber *opened = [[NSUserDefaults standardUserDefaults] objectForKey:@"noOfTimes"]; |
|
||||||
if (opened == nil) |
|
||||||
{ |
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:[NSMutableArray array] |
|
||||||
forKey:CLDefaultPreferenceKey]; |
|
||||||
NSInteger noOfTimes = opened.integerValue + 1; |
|
||||||
NSNumber *noOfTime = [NSNumber numberWithInteger:noOfTimes]; |
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:noOfTime forKey:@"noOfTimes"];; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NSArray *defaultPreference = [[NSUserDefaults standardUserDefaults] objectForKey:CLDefaultPreferenceKey]; |
|
||||||
|
|
||||||
NSMutableArray *newDefaults = [[NSMutableArray alloc] init]; |
|
||||||
|
|
||||||
|
|
||||||
if (defaultPreference.count == 0) |
|
||||||
{ |
|
||||||
NSDictionary *defaultDictionary = @{CLTimezoneName : [NSTimeZone systemTimeZone].name, CLCustomLabel : CLEmptyString}; |
|
||||||
|
|
||||||
newDefaults = [[NSMutableArray alloc] initWithObjects:defaultDictionary, nil]; |
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:newDefaults forKey:CLDefaultPreferenceKey]; |
|
||||||
} |
|
||||||
|
|
||||||
[defaultPreference enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { |
|
||||||
|
|
||||||
if ([obj isKindOfClass:[NSString class]]) { |
|
||||||
NSDictionary *defaultDictionary = @{CLTimezoneName : obj, CLCustomLabel : CLEmptyString}; |
|
||||||
[newDefaults addObject:defaultDictionary]; |
|
||||||
} |
|
||||||
}]; |
|
||||||
|
|
||||||
if (newDefaults.count > 0) |
|
||||||
{ |
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:newDefaults forKey:CLDefaultPreferenceKey]; |
|
||||||
} |
|
||||||
|
|
||||||
NSString *defaultFont = [[NSUserDefaults standardUserDefaults] objectForKey:@"defaultFontFamily"]; |
|
||||||
if (defaultFont == nil) { |
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:@"Default" forKey:@"defaultFontFamily"]; |
|
||||||
} |
|
||||||
|
|
||||||
NSString *defaultTheme = [[NSUserDefaults standardUserDefaults] objectForKey:@"defaultTheme"]; |
|
||||||
if (defaultTheme == nil) { |
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:@"Default" forKey:@"defaultTheme"]; |
|
||||||
} |
|
||||||
|
|
||||||
// Install icon into the menu bar |
|
||||||
self.menubarController = [[MenubarController alloc] init]; |
|
||||||
|
|
||||||
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"NSApplicationCrashOnExceptions": @YES }]; |
|
||||||
|
|
||||||
[[Crashlytics sharedInstance] setDebugMode:NO]; |
|
||||||
[Fabric with:@[[Crashlytics class]]]; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender |
|
||||||
{ |
|
||||||
// Explicitly remove the icon from the menu bar |
|
||||||
self.menubarController = nil; |
|
||||||
return NSTerminateNow; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark - Actions |
|
||||||
|
|
||||||
- (IBAction)togglePanel:(id)sender |
|
||||||
{ |
|
||||||
self.menubarController.hasActiveIcon = !self.menubarController.hasActiveIcon; |
|
||||||
self.panelController.hasActivePanel = self.menubarController.hasActiveIcon; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark - Public accessors |
|
||||||
|
|
||||||
- (PanelController *)panelController |
|
||||||
{ |
|
||||||
if (_panelController == nil) { |
|
||||||
_panelController = [[PanelController alloc] initWithDelegate:self]; |
|
||||||
[_panelController addObserver:self forKeyPath:@"hasActivePanel" options:0 context:kContextActivePanel]; |
|
||||||
} |
|
||||||
return _panelController; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark - PanelControllerDelegate |
|
||||||
|
|
||||||
- (StatusItemView *)statusItemViewForPanelController:(PanelController *)controller |
|
||||||
{ |
|
||||||
return self.menubarController.statusItemView; |
|
||||||
} |
|
||||||
|
|
||||||
@end |
|
@ -1 +0,0 @@ |
|||||||
Versions/Current/ApptentiveConnect |
|
@ -1 +0,0 @@ |
|||||||
Versions/Current/Headers |
|
@ -1 +0,0 @@ |
|||||||
Versions/Current/Resources |
|
@ -1,120 +0,0 @@ |
|||||||
//
|
|
||||||
// ATAppRatingFlow.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 7/8/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
#import <UIKit/UIKit.h> |
|
||||||
#import <StoreKit/StoreKit.h> |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#endif |
|
||||||
|
|
||||||
/*! Notification sent when the user has agreed to rate the application. */ |
|
||||||
extern NSString *const ATAppRatingFlowUserAgreedToRateAppNotification; |
|
||||||
|
|
||||||
/*! A workflow for a user either giving feedback on or rating the current
|
|
||||||
application. */ |
|
||||||
@interface ATAppRatingFlow : NSObject |
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
<SKStoreProductViewControllerDelegate, UIAlertViewDelegate> |
|
||||||
#endif |
|
||||||
{ |
|
||||||
@private |
|
||||||
NSString *iTunesAppID; |
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
UIAlertView *enjoymentDialog; |
|
||||||
UIAlertView *ratingDialog; |
|
||||||
#endif |
|
||||||
|
|
||||||
NSUInteger daysBeforePrompt; |
|
||||||
NSUInteger usesBeforePrompt; |
|
||||||
NSUInteger significantEventsBeforePrompt; |
|
||||||
NSUInteger daysBeforeRePrompting; |
|
||||||
|
|
||||||
NSDate *lastUseOfApp; |
|
||||||
|
|
||||||
NSString *appName; |
|
||||||
} |
|
||||||
/*! Set to a custom app name if you'd like to use something other than the bundle display name. */ |
|
||||||
@property (nonatomic, copy) NSString *appName; |
|
||||||
|
|
||||||
/*! The default singleton constructor. Call with an iTunes Applicaiton ID as
|
|
||||||
an NSString */ |
|
||||||
+ (ATAppRatingFlow *)sharedRatingFlowWithAppID:(NSString *)iTunesAppID; |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
/*!
|
|
||||||
Call when the application is done launching. If we should be able to |
|
||||||
prompt for a rating, pass YES for canPromptRating. The viewController is |
|
||||||
the viewController from which a feedback dialog will be shown. |
|
||||||
*/ |
|
||||||
- (void)appDidLaunch:(BOOL)canPromptForRating viewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call when the application enters the foreground. If we should be able to |
|
||||||
prompt for a rating, pass YES.
|
|
||||||
|
|
||||||
The viewController is the UIViewController from which a feedback dialog
|
|
||||||
will be shown. |
|
||||||
*/ |
|
||||||
- (void)appDidEnterForeground:(BOOL)canPromptForRating viewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call whenever a significant event occurs in the application. So, for example, |
|
||||||
if you want to have a rating show up after the user has played 20 levels of |
|
||||||
a game, you would set significantEventsBeforePrompt to 20, and call this |
|
||||||
after each level. |
|
||||||
|
|
||||||
If we should be able to prompt for a rating when this is called, pass YES. |
|
||||||
|
|
||||||
The viewController is the UIViewController from which a feedback dialog
|
|
||||||
will be shown. |
|
||||||
*/ |
|
||||||
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating viewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
#elif TARGET_OS_MAC |
|
||||||
/*!
|
|
||||||
Call when the application is done launching. If we should be able to |
|
||||||
prompt for a rating, pass YES. |
|
||||||
*/ |
|
||||||
- (void)appDidLaunch:(BOOL)canPromptForRating; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call whenever a significant event occurs in the application. So, for example, |
|
||||||
if you want to have a rating show up after the user has played 20 levels of |
|
||||||
a game, you would set significantEventsBeforePrompt to 20, and call this |
|
||||||
after each level. |
|
||||||
|
|
||||||
If we should be able to prompt for a rating when this is called, pass YES. |
|
||||||
*/ |
|
||||||
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating; |
|
||||||
#endif |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
/*!
|
|
||||||
Call if you want to show the enjoyment dialog directly. This enters the flow |
|
||||||
for either bringing up the feedback view or the rating dialog. |
|
||||||
*/ |
|
||||||
- (void)showEnjoymentDialog:(UIViewController *)vc; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call if you want to show the rating dialog directly. |
|
||||||
*/ |
|
||||||
- (IBAction)showRatingDialog:(UIViewController *)vc; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
/*!
|
|
||||||
Call if you want to show the enjoyment dialog directly. This enters the flow |
|
||||||
for either bringing up the feedback view or the rating dialog. |
|
||||||
*/ |
|
||||||
- (IBAction)showEnjoymentDialog:(id)sender; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call if you want to show the rating dialog directly. |
|
||||||
*/ |
|
||||||
- (IBAction)showRatingDialog:(id)sender; |
|
||||||
#endif |
|
||||||
@end |
|
@ -1,95 +0,0 @@ |
|||||||
//
|
|
||||||
// ATConnect.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 3/12/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc.. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
#import <UIKit/UIKit.h> |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#endif |
|
||||||
|
|
||||||
#define kATConnectVersionString @"0.4.12" |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
#define kATConnectPlatformString @"iOS" |
|
||||||
@class ATFeedbackController; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
#define kATConnectPlatformString @"Mac OS X" |
|
||||||
@class ATFeedbackWindowController; |
|
||||||
#endif |
|
||||||
|
|
||||||
typedef enum { |
|
||||||
ATFeedbackControllerDefault, |
|
||||||
ATFeedbackControllerSimple |
|
||||||
} ATFeedbackControllerType; |
|
||||||
|
|
||||||
|
|
||||||
@interface ATConnect : NSObject { |
|
||||||
@private |
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
ATFeedbackController *feedbackController; |
|
||||||
ATFeedbackController *currentFeedbackController; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
ATFeedbackWindowController *feedbackWindowController; |
|
||||||
#endif |
|
||||||
NSMutableDictionary *additionalFeedbackData; |
|
||||||
NSString *apiKey; |
|
||||||
BOOL showTagline; |
|
||||||
BOOL shouldTakeScreenshot; |
|
||||||
BOOL showEmailField; |
|
||||||
NSString *initialName; |
|
||||||
NSString *initialEmailAddress; |
|
||||||
ATFeedbackControllerType feedbackControllerType; |
|
||||||
NSString *customPlaceholderText; |
|
||||||
} |
|
||||||
@property (nonatomic, copy) NSString *apiKey; |
|
||||||
@property (nonatomic, assign) BOOL showTagline; |
|
||||||
@property (nonatomic, assign) BOOL shouldTakeScreenshot; |
|
||||||
@property (nonatomic, assign) BOOL showEmailField; |
|
||||||
@property (nonatomic, copy) NSString *initialName; |
|
||||||
@property (nonatomic, copy) NSString *initialEmailAddress; |
|
||||||
@property (nonatomic, assign) ATFeedbackControllerType feedbackControllerType; |
|
||||||
/*! Set this if you want some custom text to appear as a placeholder in the
|
|
||||||
feedback text box. */ |
|
||||||
@property (nonatomic, copy) NSString *customPlaceholderText; |
|
||||||
|
|
||||||
+ (ATConnect *)sharedConnection; |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
/*!
|
|
||||||
* Presents a feedback controller in the window of the given view controller. |
|
||||||
*/ |
|
||||||
- (void)presentFeedbackControllerFromViewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
/*!
|
|
||||||
* Dismisses the feedback controller. You normally won't need to call this. |
|
||||||
*/ |
|
||||||
- (void)dismissFeedbackControllerAnimated:(BOOL)animated completion:(void (^)(void))completion; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
/*!
|
|
||||||
* Presents a feedback window. |
|
||||||
*/ |
|
||||||
- (IBAction)showFeedbackWindow:(id)sender; |
|
||||||
#endif |
|
||||||
|
|
||||||
/*! Adds an additional data field to any feedback sent. */ |
|
||||||
- (void)addAdditionalInfoToFeedback:(NSObject<NSCoding> *)object withKey:(NSString *)key; |
|
||||||
|
|
||||||
/*! Removes an additional data field from the feedback sent. */ |
|
||||||
- (void)removeAdditionalInfoFromFeedbackWithKey:(NSString *)key; |
|
||||||
|
|
||||||
/*!
|
|
||||||
* Returns the NSBundle corresponding to the bundle containing ATConnect's |
|
||||||
* images, xibs, strings files, etc. |
|
||||||
*/ |
|
||||||
+ (NSBundle *)resourceBundle; |
|
||||||
@end |
|
||||||
|
|
||||||
/*! Replacement for NSLocalizedString within ApptentiveConnect. Pulls
|
|
||||||
localized strings out of the resource bundle. */ |
|
||||||
extern NSString *ATLocalizedString(NSString *key, NSString *comment); |
|
@ -1,44 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>BuildMachineOSBuild</key> |
|
||||||
<string>15C50</string> |
|
||||||
<key>CFBundleDevelopmentRegion</key> |
|
||||||
<string>English</string> |
|
||||||
<key>CFBundleExecutable</key> |
|
||||||
<string>ApptentiveConnect</string> |
|
||||||
<key>CFBundleIdentifier</key> |
|
||||||
<string>com.yourcompany.ApptentiveConnect</string> |
|
||||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||||
<string>6.0</string> |
|
||||||
<key>CFBundleName</key> |
|
||||||
<string>ApptentiveConnect</string> |
|
||||||
<key>CFBundlePackageType</key> |
|
||||||
<string>FMWK</string> |
|
||||||
<key>CFBundleShortVersionString</key> |
|
||||||
<string>1.0</string> |
|
||||||
<key>CFBundleSignature</key> |
|
||||||
<string>????</string> |
|
||||||
<key>CFBundleSupportedPlatforms</key> |
|
||||||
<array> |
|
||||||
<string>MacOSX</string> |
|
||||||
</array> |
|
||||||
<key>CFBundleVersion</key> |
|
||||||
<string>1</string> |
|
||||||
<key>DTCompiler</key> |
|
||||||
<string>com.apple.compilers.llvm.clang.1_0</string> |
|
||||||
<key>DTPlatformBuild</key> |
|
||||||
<string>7C68</string> |
|
||||||
<key>DTPlatformVersion</key> |
|
||||||
<string>GM</string> |
|
||||||
<key>DTSDKBuild</key> |
|
||||||
<string>15C43</string> |
|
||||||
<key>DTSDKName</key> |
|
||||||
<string>macosx10.11</string> |
|
||||||
<key>DTXcode</key> |
|
||||||
<string>0720</string> |
|
||||||
<key>DTXcodeBuild</key> |
|
||||||
<string>7C68</string> |
|
||||||
</dict> |
|
||||||
</plist> |
|
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 26 KiB |
@ -1 +0,0 @@ |
|||||||
A |
|
@ -1 +0,0 @@ |
|||||||
Versions/Current/ApptentiveConnect |
|
@ -1 +0,0 @@ |
|||||||
Versions/Current/Headers |
|
@ -1 +0,0 @@ |
|||||||
Versions/Current/Resources |
|
@ -1,120 +0,0 @@ |
|||||||
//
|
|
||||||
// ATAppRatingFlow.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 7/8/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
#import <UIKit/UIKit.h> |
|
||||||
#import <StoreKit/StoreKit.h> |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#endif |
|
||||||
|
|
||||||
/*! Notification sent when the user has agreed to rate the application. */ |
|
||||||
extern NSString *const ATAppRatingFlowUserAgreedToRateAppNotification; |
|
||||||
|
|
||||||
/*! A workflow for a user either giving feedback on or rating the current
|
|
||||||
application. */ |
|
||||||
@interface ATAppRatingFlow : NSObject |
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
<SKStoreProductViewControllerDelegate, UIAlertViewDelegate> |
|
||||||
#endif |
|
||||||
{ |
|
||||||
@private |
|
||||||
NSString *iTunesAppID; |
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
UIAlertView *enjoymentDialog; |
|
||||||
UIAlertView *ratingDialog; |
|
||||||
#endif |
|
||||||
|
|
||||||
NSUInteger daysBeforePrompt; |
|
||||||
NSUInteger usesBeforePrompt; |
|
||||||
NSUInteger significantEventsBeforePrompt; |
|
||||||
NSUInteger daysBeforeRePrompting; |
|
||||||
|
|
||||||
NSDate *lastUseOfApp; |
|
||||||
|
|
||||||
NSString *appName; |
|
||||||
} |
|
||||||
/*! Set to a custom app name if you'd like to use something other than the bundle display name. */ |
|
||||||
@property (nonatomic, copy) NSString *appName; |
|
||||||
|
|
||||||
/*! The default singleton constructor. Call with an iTunes Applicaiton ID as
|
|
||||||
an NSString */ |
|
||||||
+ (ATAppRatingFlow *)sharedRatingFlowWithAppID:(NSString *)iTunesAppID; |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
/*!
|
|
||||||
Call when the application is done launching. If we should be able to |
|
||||||
prompt for a rating, pass YES for canPromptRating. The viewController is |
|
||||||
the viewController from which a feedback dialog will be shown. |
|
||||||
*/ |
|
||||||
- (void)appDidLaunch:(BOOL)canPromptForRating viewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call when the application enters the foreground. If we should be able to |
|
||||||
prompt for a rating, pass YES.
|
|
||||||
|
|
||||||
The viewController is the UIViewController from which a feedback dialog
|
|
||||||
will be shown. |
|
||||||
*/ |
|
||||||
- (void)appDidEnterForeground:(BOOL)canPromptForRating viewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call whenever a significant event occurs in the application. So, for example, |
|
||||||
if you want to have a rating show up after the user has played 20 levels of |
|
||||||
a game, you would set significantEventsBeforePrompt to 20, and call this |
|
||||||
after each level. |
|
||||||
|
|
||||||
If we should be able to prompt for a rating when this is called, pass YES. |
|
||||||
|
|
||||||
The viewController is the UIViewController from which a feedback dialog
|
|
||||||
will be shown. |
|
||||||
*/ |
|
||||||
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating viewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
#elif TARGET_OS_MAC |
|
||||||
/*!
|
|
||||||
Call when the application is done launching. If we should be able to |
|
||||||
prompt for a rating, pass YES. |
|
||||||
*/ |
|
||||||
- (void)appDidLaunch:(BOOL)canPromptForRating; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call whenever a significant event occurs in the application. So, for example, |
|
||||||
if you want to have a rating show up after the user has played 20 levels of |
|
||||||
a game, you would set significantEventsBeforePrompt to 20, and call this |
|
||||||
after each level. |
|
||||||
|
|
||||||
If we should be able to prompt for a rating when this is called, pass YES. |
|
||||||
*/ |
|
||||||
- (void)userDidPerformSignificantEvent:(BOOL)canPromptForRating; |
|
||||||
#endif |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
/*!
|
|
||||||
Call if you want to show the enjoyment dialog directly. This enters the flow |
|
||||||
for either bringing up the feedback view or the rating dialog. |
|
||||||
*/ |
|
||||||
- (void)showEnjoymentDialog:(UIViewController *)vc; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call if you want to show the rating dialog directly. |
|
||||||
*/ |
|
||||||
- (IBAction)showRatingDialog:(UIViewController *)vc; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
/*!
|
|
||||||
Call if you want to show the enjoyment dialog directly. This enters the flow |
|
||||||
for either bringing up the feedback view or the rating dialog. |
|
||||||
*/ |
|
||||||
- (IBAction)showEnjoymentDialog:(id)sender; |
|
||||||
|
|
||||||
/*!
|
|
||||||
Call if you want to show the rating dialog directly. |
|
||||||
*/ |
|
||||||
- (IBAction)showRatingDialog:(id)sender; |
|
||||||
#endif |
|
||||||
@end |
|
@ -1,95 +0,0 @@ |
|||||||
//
|
|
||||||
// ATConnect.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 3/12/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc.. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
#import <UIKit/UIKit.h> |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#endif |
|
||||||
|
|
||||||
#define kATConnectVersionString @"0.4.12" |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
#define kATConnectPlatformString @"iOS" |
|
||||||
@class ATFeedbackController; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
#define kATConnectPlatformString @"Mac OS X" |
|
||||||
@class ATFeedbackWindowController; |
|
||||||
#endif |
|
||||||
|
|
||||||
typedef enum { |
|
||||||
ATFeedbackControllerDefault, |
|
||||||
ATFeedbackControllerSimple |
|
||||||
} ATFeedbackControllerType; |
|
||||||
|
|
||||||
|
|
||||||
@interface ATConnect : NSObject { |
|
||||||
@private |
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
ATFeedbackController *feedbackController; |
|
||||||
ATFeedbackController *currentFeedbackController; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
ATFeedbackWindowController *feedbackWindowController; |
|
||||||
#endif |
|
||||||
NSMutableDictionary *additionalFeedbackData; |
|
||||||
NSString *apiKey; |
|
||||||
BOOL showTagline; |
|
||||||
BOOL shouldTakeScreenshot; |
|
||||||
BOOL showEmailField; |
|
||||||
NSString *initialName; |
|
||||||
NSString *initialEmailAddress; |
|
||||||
ATFeedbackControllerType feedbackControllerType; |
|
||||||
NSString *customPlaceholderText; |
|
||||||
} |
|
||||||
@property (nonatomic, copy) NSString *apiKey; |
|
||||||
@property (nonatomic, assign) BOOL showTagline; |
|
||||||
@property (nonatomic, assign) BOOL shouldTakeScreenshot; |
|
||||||
@property (nonatomic, assign) BOOL showEmailField; |
|
||||||
@property (nonatomic, copy) NSString *initialName; |
|
||||||
@property (nonatomic, copy) NSString *initialEmailAddress; |
|
||||||
@property (nonatomic, assign) ATFeedbackControllerType feedbackControllerType; |
|
||||||
/*! Set this if you want some custom text to appear as a placeholder in the
|
|
||||||
feedback text box. */ |
|
||||||
@property (nonatomic, copy) NSString *customPlaceholderText; |
|
||||||
|
|
||||||
+ (ATConnect *)sharedConnection; |
|
||||||
|
|
||||||
#if TARGET_OS_IPHONE |
|
||||||
/*!
|
|
||||||
* Presents a feedback controller in the window of the given view controller. |
|
||||||
*/ |
|
||||||
- (void)presentFeedbackControllerFromViewController:(UIViewController *)viewController; |
|
||||||
|
|
||||||
/*!
|
|
||||||
* Dismisses the feedback controller. You normally won't need to call this. |
|
||||||
*/ |
|
||||||
- (void)dismissFeedbackControllerAnimated:(BOOL)animated completion:(void (^)(void))completion; |
|
||||||
#elif TARGET_OS_MAC |
|
||||||
/*!
|
|
||||||
* Presents a feedback window. |
|
||||||
*/ |
|
||||||
- (IBAction)showFeedbackWindow:(id)sender; |
|
||||||
#endif |
|
||||||
|
|
||||||
/*! Adds an additional data field to any feedback sent. */ |
|
||||||
- (void)addAdditionalInfoToFeedback:(NSObject<NSCoding> *)object withKey:(NSString *)key; |
|
||||||
|
|
||||||
/*! Removes an additional data field from the feedback sent. */ |
|
||||||
- (void)removeAdditionalInfoFromFeedbackWithKey:(NSString *)key; |
|
||||||
|
|
||||||
/*!
|
|
||||||
* Returns the NSBundle corresponding to the bundle containing ATConnect's |
|
||||||
* images, xibs, strings files, etc. |
|
||||||
*/ |
|
||||||
+ (NSBundle *)resourceBundle; |
|
||||||
@end |
|
||||||
|
|
||||||
/*! Replacement for NSLocalizedString within ApptentiveConnect. Pulls
|
|
||||||
localized strings out of the resource bundle. */ |
|
||||||
extern NSString *ATLocalizedString(NSString *key, NSString *comment); |
|
@ -1,44 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>BuildMachineOSBuild</key> |
|
||||||
<string>15C50</string> |
|
||||||
<key>CFBundleDevelopmentRegion</key> |
|
||||||
<string>English</string> |
|
||||||
<key>CFBundleExecutable</key> |
|
||||||
<string>ApptentiveConnect</string> |
|
||||||
<key>CFBundleIdentifier</key> |
|
||||||
<string>com.yourcompany.ApptentiveConnect</string> |
|
||||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||||
<string>6.0</string> |
|
||||||
<key>CFBundleName</key> |
|
||||||
<string>ApptentiveConnect</string> |
|
||||||
<key>CFBundlePackageType</key> |
|
||||||
<string>FMWK</string> |
|
||||||
<key>CFBundleShortVersionString</key> |
|
||||||
<string>1.0</string> |
|
||||||
<key>CFBundleSignature</key> |
|
||||||
<string>????</string> |
|
||||||
<key>CFBundleSupportedPlatforms</key> |
|
||||||
<array> |
|
||||||
<string>MacOSX</string> |
|
||||||
</array> |
|
||||||
<key>CFBundleVersion</key> |
|
||||||
<string>1</string> |
|
||||||
<key>DTCompiler</key> |
|
||||||
<string>com.apple.compilers.llvm.clang.1_0</string> |
|
||||||
<key>DTPlatformBuild</key> |
|
||||||
<string>7C68</string> |
|
||||||
<key>DTPlatformVersion</key> |
|
||||||
<string>GM</string> |
|
||||||
<key>DTSDKBuild</key> |
|
||||||
<string>15C43</string> |
|
||||||
<key>DTSDKName</key> |
|
||||||
<string>macosx10.11</string> |
|
||||||
<key>DTXcode</key> |
|
||||||
<string>0720</string> |
|
||||||
<key>DTXcodeBuild</key> |
|
||||||
<string>7C68</string> |
|
||||||
</dict> |
|
||||||
</plist> |
|
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 26 KiB |
@ -1 +0,0 @@ |
|||||||
A |
|
@ -1,2 +0,0 @@ |
|||||||
/* Localized versions of Info.plist keys */ |
|
||||||
|
|
@ -1,28 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>CFBundleDevelopmentRegion</key> |
|
||||||
<string>English</string> |
|
||||||
<key>CFBundleExecutable</key> |
|
||||||
<string>${EXECUTABLE_NAME}</string> |
|
||||||
<key>CFBundleIconFile</key> |
|
||||||
<string></string> |
|
||||||
<key>CFBundleIdentifier</key> |
|
||||||
<string>com.yourcompany.${PRODUCT_NAME:rfc1034Identifier}</string> |
|
||||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||||
<string>6.0</string> |
|
||||||
<key>CFBundleName</key> |
|
||||||
<string>${PRODUCT_NAME}</string> |
|
||||||
<key>CFBundlePackageType</key> |
|
||||||
<string>FMWK</string> |
|
||||||
<key>CFBundleShortVersionString</key> |
|
||||||
<string>1.0</string> |
|
||||||
<key>CFBundleSignature</key> |
|
||||||
<string>????</string> |
|
||||||
<key>CFBundleVersion</key> |
|
||||||
<string>1</string> |
|
||||||
<key>NSPrincipalClass</key> |
|
||||||
<string></string> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,7 +0,0 @@ |
|||||||
// |
|
||||||
// Prefix header for all source files of the 'ApptentiveConnect' target in the 'ApptentiveConnect' project. |
|
||||||
// |
|
||||||
|
|
||||||
#ifdef __OBJC__ |
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#endif |
|
@ -1,36 +0,0 @@ |
|||||||
//
|
|
||||||
// ATFeedbackWindowController.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 6/1/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
#import "ATFeedback.h" |
|
||||||
#import "ATImageView.h" |
|
||||||
#import "ATAPIRequest.h" |
|
||||||
#import "ATPlaceholderTextView.h" |
|
||||||
|
|
||||||
@interface ATFeedbackWindowController : NSWindowController <NSWindowDelegate, NSTextViewDelegate, NSComboBoxDelegate, ATAPIRequestDelegate> { |
|
||||||
IBOutlet ATPlaceholderTextView *feedbackTextView; |
|
||||||
IBOutlet ATImageView *screenshotView; |
|
||||||
IBOutlet NSProgressIndicator *progressIndicator; |
|
||||||
IBOutlet NSComboBox *nameBox; |
|
||||||
IBOutlet NSComboBox *emailBox; |
|
||||||
IBOutlet NSComboBox *phoneNumberBox; |
|
||||||
IBOutlet NSButton *sendButton; |
|
||||||
IBOutlet NSButton *cancelButton; |
|
||||||
IBOutlet NSImageView *logoImageView; |
|
||||||
@private |
|
||||||
ATAPIRequest *feedbackRequest; |
|
||||||
ATFeedback *feedback; |
|
||||||
} |
|
||||||
@property (nonatomic, retain) ATFeedback *feedback; |
|
||||||
- (id)initWithFeedback:(ATFeedback *)newFeedback; |
|
||||||
- (IBAction)browseForScreenshotPressed:(id)sender; |
|
||||||
- (IBAction)cancelPressed:(id)sender; |
|
||||||
- (IBAction)sendFeedbackPressed:(id)sender; |
|
||||||
- (IBAction)openApptentivePressed:(id)sender; |
|
||||||
@end |
|
@ -1,378 +0,0 @@ |
|||||||
// |
|
||||||
// ATFeedbackWindowController.m |
|
||||||
// ApptentiveConnect |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 6/1/11. |
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved. |
|
||||||
// |
|
||||||
#import <AddressBook/AddressBook.h> |
|
||||||
|
|
||||||
#import "ATFeedbackWindowController.h" |
|
||||||
#import "ATBackend.h" |
|
||||||
#import "ATConnect.h" |
|
||||||
#import "ATContactStorage.h" |
|
||||||
#import "ATImageView.h" |
|
||||||
#import "ATConnect_FeedbackWindowPrivate.h" |
|
||||||
#import "ATUtilities.h" |
|
||||||
#import "ATWebClient.h" |
|
||||||
#import <QuartzCore/QuartzCore.h> |
|
||||||
|
|
||||||
@interface ATFeedbackWindowController (Private) |
|
||||||
- (void)setup; |
|
||||||
- (void)teardown; |
|
||||||
/*! Fills in the contact information. */ |
|
||||||
- (void)fillInContactInfo; |
|
||||||
/*! Returns the text view for the current feedback type. */ |
|
||||||
- (NSTextView *)currentTextView; |
|
||||||
/*! Takes text from current text view and puts in feedback. */ |
|
||||||
- (void)updateFeedbackWithText; |
|
||||||
/*! Takes text from feedback and puts in current text view. */ |
|
||||||
- (void)updateTextWithFeedback; |
|
||||||
- (void)setScreenshotToFilename:(NSString *)filename; |
|
||||||
- (void)imageChanged:(NSNotification *)notification; |
|
||||||
@end |
|
||||||
|
|
||||||
|
|
||||||
@implementation ATFeedbackWindowController |
|
||||||
@synthesize feedback; |
|
||||||
- (id)initWithFeedback:(ATFeedback *)newFeedback { |
|
||||||
NSBundle *bundle = [ATConnect resourceBundle]; |
|
||||||
NSString *path = [bundle pathForResource:@"ATFeedbackWindow" ofType:@"nib"]; |
|
||||||
if ((self = [super initWithWindowNibPath:path owner:self])) { |
|
||||||
self.feedback = newFeedback; |
|
||||||
} |
|
||||||
return self; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)dealloc { |
|
||||||
[self teardown]; |
|
||||||
[super dealloc]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)windowDidLoad { |
|
||||||
[super windowDidLoad]; |
|
||||||
[self setup]; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark Actions |
|
||||||
- (IBAction)browseForScreenshotPressed:(id)sender { |
|
||||||
NSOpenPanel *openPanel = [NSOpenPanel openPanel]; |
|
||||||
[openPanel setCanChooseFiles:YES]; |
|
||||||
[openPanel setCanCreateDirectories:NO]; |
|
||||||
[openPanel setAllowsMultipleSelection:NO]; |
|
||||||
[openPanel setAllowedFileTypes:[NSArray arrayWithObjects:@"jpg", @"jpeg", @"png", @"gif", @"bmp", nil]]; |
|
||||||
if ([openPanel runModal] == NSOKButton) { |
|
||||||
NSArray *URLs = [openPanel URLs]; |
|
||||||
for (NSURL *URL in URLs) { |
|
||||||
[self setScreenshotToFilename:[URL path]]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)cancelPressed:(id)sender { |
|
||||||
[self close]; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)sendFeedbackPressed:(id)sender { |
|
||||||
@synchronized(self) { |
|
||||||
if (!feedbackRequest) { |
|
||||||
[self updateFeedbackWithText]; |
|
||||||
[progressIndicator setHidden:NO]; |
|
||||||
[progressIndicator startAnimation:self]; |
|
||||||
[progressIndicator setDoubleValue:0.01]; |
|
||||||
|
|
||||||
feedbackRequest = [[[ATWebClient sharedClient] requestForPostingFeedback:self.feedback] retain]; |
|
||||||
feedbackRequest.delegate = self; |
|
||||||
[feedbackRequest start]; |
|
||||||
[sendButton setEnabled:NO]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
- (IBAction)openApptentivePressed:(id)sender { |
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[[ATBackend sharedBackend] apptentiveHomepageURL]]; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark ATAPIRequestDelegate |
|
||||||
- (void)at_APIRequestDidFinish:(ATAPIRequest *)request result:(id)result { |
|
||||||
@synchronized(self) { |
|
||||||
feedbackRequest.delegate = nil; |
|
||||||
[feedbackRequest release]; |
|
||||||
feedbackRequest = nil; |
|
||||||
[progressIndicator setDoubleValue:1.0]; |
|
||||||
[progressIndicator stopAnimation:self]; |
|
||||||
[progressIndicator setHidden:YES]; |
|
||||||
|
|
||||||
NSAlert *alert = [[[NSAlert alloc] init] autorelease]; |
|
||||||
[alert addButtonWithTitle:@"Okay"]; |
|
||||||
[alert setMessageText:@"Thanks! Your feedback has been sent successfully"]; |
|
||||||
[alert setAlertStyle:NSInformationalAlertStyle]; |
|
||||||
[alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:@selector(thanksSheetDidClose:returnCode:contextInfo:) contextInfo:nil]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (void)at_APIRequestDidProgress:(ATAPIRequest *)request { |
|
||||||
@synchronized(self) { |
|
||||||
[progressIndicator setDoubleValue:(double)[request percentageComplete]]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (void)at_APIRequestDidFail:(ATAPIRequest *)request { |
|
||||||
//!! |
|
||||||
[sendButton setEnabled:YES]; |
|
||||||
[progressIndicator stopAnimation:self]; |
|
||||||
[progressIndicator setHidden:YES]; |
|
||||||
|
|
||||||
NSAlert *alert = [[[NSAlert alloc] init] autorelease]; |
|
||||||
[alert addButtonWithTitle:ATLocalizedString(@"Try Again", @"Button title for failed request retry.")]; |
|
||||||
[alert addButtonWithTitle:ATLocalizedString(@"Cancel", @"Cancel")]; |
|
||||||
[alert setMessageText:request.errorTitle]; |
|
||||||
[alert setInformativeText:request.errorMessage]; |
|
||||||
[alert setAlertStyle:NSWarningAlertStyle]; |
|
||||||
[alert setIcon:[NSImage imageNamed:NSImageNameCaution]]; |
|
||||||
[alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:nil]; |
|
||||||
feedbackRequest.delegate = nil; |
|
||||||
[feedbackRequest release]; |
|
||||||
feedbackRequest = nil; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)alertDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo { |
|
||||||
if (returnCode == NSAlertFirstButtonReturn) { |
|
||||||
[self sendFeedbackPressed:self]; |
|
||||||
} else if (returnCode == NSAlertSecondButtonReturn) { |
|
||||||
[self close]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (void)thanksSheetDidClose:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo { |
|
||||||
[[ATBackend sharedBackend] setCurrentFeedback:nil]; |
|
||||||
[self performSelectorOnMainThread:@selector(close) withObject:nil waitUntilDone:NO]; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark NSWindowDelegate |
|
||||||
- (void)windowWillClose:(NSNotification *)notification { |
|
||||||
[self teardown]; |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark NSComboBoxDelegate |
|
||||||
- (void)comboBoxSelectionDidChange:(NSNotification *)notification { |
|
||||||
NSComboBox *sender = (NSComboBox *)[notification object]; |
|
||||||
if (sender) { |
|
||||||
NSString *value = (NSString *)[sender itemObjectValueAtIndex:[sender indexOfSelectedItem]]; |
|
||||||
if (value) { |
|
||||||
if (sender == emailBox) { |
|
||||||
self.feedback.email = value; |
|
||||||
} else if (sender == phoneNumberBox) { |
|
||||||
self.feedback.phone = value; |
|
||||||
} else if (sender == nameBox) { |
|
||||||
self.feedback.name = value; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
#pragma mark NSTextViewDelegate |
|
||||||
- (void)controlTextDidChange:(NSNotification *)aNotification { |
|
||||||
NSControl *sender = (NSControl *)[aNotification object]; |
|
||||||
if (sender && [sender isKindOfClass:[NSComboBox class]]) { |
|
||||||
NSString *value = [sender stringValue]; |
|
||||||
if (value) { |
|
||||||
if (sender == emailBox) { |
|
||||||
self.feedback.email = value; |
|
||||||
} else if (sender == phoneNumberBox) { |
|
||||||
self.feedback.phone = value; |
|
||||||
} else if (sender == nameBox) { |
|
||||||
self.feedback.name = value; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@end |
|
||||||
|
|
||||||
|
|
||||||
@implementation ATFeedbackWindowController (Private) |
|
||||||
- (void)setup { |
|
||||||
|
|
||||||
CALayer *viewLayer = [CALayer layer]; |
|
||||||
[viewLayer setBackgroundColor:CGColorCreateGenericRGB(255.0, 255.0, 255.0, 0.8)]; //RGB plus Alpha Channel |
|
||||||
[self.window.contentView setWantsLayer:YES]; // view's backing store is using a Core Animation Layer |
|
||||||
[self.window.contentView setLayer:viewLayer]; |
|
||||||
self.window.titlebarAppearsTransparent = YES; |
|
||||||
self.window.styleMask |= NSFullSizeContentViewWindowMask; |
|
||||||
|
|
||||||
self.window.titleVisibility = NSWindowTitleHidden; |
|
||||||
self.window.delegate = self; |
|
||||||
[self.window center]; |
|
||||||
[self.window setTitle:@"Send Feedback"]; |
|
||||||
[self fillInContactInfo]; |
|
||||||
[self updateTextWithFeedback]; |
|
||||||
if ([self.feedback hasScreenshot]) { |
|
||||||
NSImage *screenshot = [[self.feedback copyScreenshot] autorelease]; |
|
||||||
screenshotView.image = screenshot; |
|
||||||
} |
|
||||||
|
|
||||||
[feedbackTextView setTextContainerInset:NSMakeSize(4, 4)]; |
|
||||||
|
|
||||||
NSString *placeholder = [[ATConnect sharedConnection] customPlaceholderText]; |
|
||||||
if (placeholder) { |
|
||||||
feedbackTextView.placeholder = placeholder; |
|
||||||
} |
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imageChanged:) name:ATImageViewContentsChanged object:nil]; |
|
||||||
[logoImageView setImage:[ATBackend imageNamed:@"at_logo_info"]]; |
|
||||||
[logoImageView setTarget:self]; |
|
||||||
[logoImageView setAction:@selector(openApptentivePressed:)]; |
|
||||||
|
|
||||||
[sendButton setTitle:@"Send Feedback"]; |
|
||||||
[cancelButton setTitle:@"Cancel"]; |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
- (void)teardown { |
|
||||||
[self updateFeedbackWithText]; |
|
||||||
[[ATConnect sharedConnection] feedbackWindowDidClose:self]; |
|
||||||
self.feedback = nil; |
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:ATImageViewContentsChanged object:nil]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)fillInContactInfo { |
|
||||||
ATContactStorage *contactStorage = [ATContactStorage sharedContactStorage]; |
|
||||||
NSMutableArray *names = [NSMutableArray array]; |
|
||||||
NSMutableArray *emails = [NSMutableArray array]; |
|
||||||
NSMutableArray *phoneNumbers = [NSMutableArray array]; |
|
||||||
|
|
||||||
if (contactStorage.name) { |
|
||||||
[names addObject:contactStorage.name]; |
|
||||||
} |
|
||||||
if (contactStorage.email) { |
|
||||||
[emails addObject:contactStorage.email]; |
|
||||||
} |
|
||||||
if (contactStorage.phone) { |
|
||||||
[phoneNumbers addObject:contactStorage.phone]; |
|
||||||
} |
|
||||||
|
|
||||||
if (self.feedback.name) { |
|
||||||
[names addObject:self.feedback.name]; |
|
||||||
} |
|
||||||
if (self.feedback.email) { |
|
||||||
[emails addObject:self.feedback.email]; |
|
||||||
} |
|
||||||
if (self.feedback.phone) { |
|
||||||
[phoneNumbers addObject:self.feedback.phone]; |
|
||||||
} |
|
||||||
|
|
||||||
ABPerson *me = nil; |
|
||||||
|
|
||||||
// Uncommenting the following line will cause OS X to prompt the user for Contacts access. |
|
||||||
// "THIS_APP would like to access your contacts. [Don't Allow] [OK]" |
|
||||||
// Disabling for now. |
|
||||||
// me = [[ABAddressBook sharedAddressBook] me]; |
|
||||||
|
|
||||||
if (me) { |
|
||||||
NSString *firstName = [me valueForProperty:kABFirstNameProperty]; |
|
||||||
NSString *middleName = [me valueForProperty:kABMiddleNameProperty]; |
|
||||||
NSString *lastName = [me valueForProperty:kABLastNameProperty]; |
|
||||||
NSMutableArray *nameParts = [NSMutableArray array]; |
|
||||||
if (firstName) { |
|
||||||
[nameParts addObject:firstName]; |
|
||||||
} |
|
||||||
if (middleName) { |
|
||||||
[nameParts addObject:middleName]; |
|
||||||
} |
|
||||||
if (lastName) { |
|
||||||
[nameParts addObject:lastName]; |
|
||||||
} |
|
||||||
if ([nameParts count]) { |
|
||||||
NSString *newName = [nameParts componentsJoinedByString:@" "]; |
|
||||||
if (contactStorage.name == nil || ![contactStorage.name isEqualToString:newName]) { |
|
||||||
[names addObject:newName]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
ABMultiValue *abEmails = [me valueForProperty:kABEmailProperty]; |
|
||||||
if (abEmails && [abEmails count]) { |
|
||||||
for (NSInteger i = 0; i < [abEmails count]; i++) { |
|
||||||
NSString *abEmail = [abEmails valueAtIndex:i]; |
|
||||||
if (contactStorage.email == nil || ![contactStorage.email isEqualToString:abEmail]) { |
|
||||||
[emails addObject:abEmail]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
ABMultiValue *abPhoneNumbers = [me valueForProperty:kABPhoneProperty]; |
|
||||||
if (abPhoneNumbers && [abPhoneNumbers count]) { |
|
||||||
for (NSInteger i = 0; i < [abPhoneNumbers count]; i++) { |
|
||||||
NSString *abPhoneNumber = [abPhoneNumbers valueAtIndex:i]; |
|
||||||
if (contactStorage.phone == nil || ![contactStorage.phone isEqualToString:abPhoneNumber]) { |
|
||||||
[phoneNumbers addObject:abPhoneNumber]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
[ATUtilities uniquifyArray:names]; |
|
||||||
[ATUtilities uniquifyArray:emails]; |
|
||||||
[ATUtilities uniquifyArray:phoneNumbers]; |
|
||||||
|
|
||||||
|
|
||||||
if (nameBox && [names count]) { |
|
||||||
[nameBox addItemsWithObjectValues:names]; |
|
||||||
if (self.feedback.name && [names containsObject:self.feedback.name]) { |
|
||||||
[nameBox selectItemAtIndex:[names indexOfObject:self.feedback.name]]; |
|
||||||
} else { |
|
||||||
[nameBox selectItemAtIndex:0]; |
|
||||||
} |
|
||||||
} |
|
||||||
if (emailBox && [emails count]) { |
|
||||||
[emailBox addItemsWithObjectValues:emails]; |
|
||||||
if (self.feedback.email && [emails containsObject:self.feedback.email]) { |
|
||||||
[emailBox selectItemAtIndex:[emails indexOfObject:self.feedback.email]]; |
|
||||||
} else { |
|
||||||
[emailBox selectItemAtIndex:0]; |
|
||||||
} |
|
||||||
} |
|
||||||
if (phoneNumberBox && [phoneNumbers count]) { |
|
||||||
[phoneNumberBox addItemsWithObjectValues:phoneNumbers]; |
|
||||||
if (self.feedback.phone && [phoneNumbers containsObject:self.feedback.phone]) { |
|
||||||
[phoneNumberBox selectItemAtIndex:[phoneNumbers indexOfObject:self.feedback.phone]]; |
|
||||||
} else { |
|
||||||
[phoneNumberBox selectItemAtIndex:0]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (NSTextView *)currentTextView { |
|
||||||
NSTextView *result = feedbackTextView; |
|
||||||
return result; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)updateFeedbackWithText { |
|
||||||
NSString *text = [[[self currentTextView] textStorage] string]; |
|
||||||
self.feedback.text = text; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)updateTextWithFeedback { |
|
||||||
NSTextView *currentTextView = [self currentTextView]; |
|
||||||
NSRange range = NSMakeRange(0, [[currentTextView textStorage] length]); |
|
||||||
NSString *replacement = self.feedback.text ? self.feedback.text : @""; |
|
||||||
[[currentTextView textStorage] replaceCharactersInRange:range withString:replacement]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)setScreenshotToFilename:(NSString *)filename { |
|
||||||
NSImage *image = [[NSImage alloc] initWithContentsOfFile:filename]; |
|
||||||
if (image) { |
|
||||||
self.feedback.screenshot = image; |
|
||||||
[screenshotView setImage:image]; |
|
||||||
} |
|
||||||
[image release]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)imageChanged:(NSNotification *)notification { |
|
||||||
NSObject *obj = [notification object]; |
|
||||||
if (obj == screenshotView) { |
|
||||||
NSImage *feedbackScreenshot = [[self.feedback copyScreenshot] autorelease]; |
|
||||||
if ([screenshotView image] != feedbackScreenshot) { |
|
||||||
self.feedback.screenshot = [screenshotView image]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@end |
|
@ -1,15 +0,0 @@ |
|||||||
//
|
|
||||||
// ATConnect_FeedbackWindowPrivate.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 6/28/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#import "ATConnect.h" |
|
||||||
|
|
||||||
|
|
||||||
@interface ATConnect (FeedbackWindowPrivate) |
|
||||||
- (void)feedbackWindowDidClose:(id)sender; |
|
||||||
@end |
|
@ -1,19 +0,0 @@ |
|||||||
// |
|
||||||
// ATConnect_FeedbackWindowPrivate.m |
|
||||||
// ApptentiveConnect |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 6/28/11. |
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import "ATConnect_FeedbackWindowPrivate.h" |
|
||||||
|
|
||||||
|
|
||||||
@implementation ATConnect (FeedbackWindowPrivate) |
|
||||||
- (void)feedbackWindowDidClose:(id)sender { |
|
||||||
if (feedbackWindowController && feedbackWindowController == sender) { |
|
||||||
[feedbackWindowController autorelease]; |
|
||||||
feedbackWindowController = nil; |
|
||||||
} |
|
||||||
} |
|
||||||
@end |
|
@ -1,16 +0,0 @@ |
|||||||
//
|
|
||||||
// ATImageButton.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 7/2/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
|
|
||||||
@interface ATImageButton : NSImageView { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@end |
|
@ -1,18 +0,0 @@ |
|||||||
// |
|
||||||
// ATImageButton.m |
|
||||||
// ApptentiveConnect |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 7/2/11. |
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import "ATImageButton.h" |
|
||||||
|
|
||||||
|
|
||||||
@implementation ATImageButton |
|
||||||
- (void)mouseDown:(NSEvent *)theEvent { |
|
||||||
if ([self target] && [self action]) { |
|
||||||
[NSApp sendAction:[self action] to:[self target] from:self]; |
|
||||||
} |
|
||||||
} |
|
||||||
@end |
|
@ -1,17 +0,0 @@ |
|||||||
//
|
|
||||||
// ATImageView.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 6/28/11.
|
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
NSString *const ATImageViewContentsChanged; |
|
||||||
|
|
||||||
@interface ATImageView : NSImageView { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@end |
|
@ -1,27 +0,0 @@ |
|||||||
// |
|
||||||
// ATImageView.m |
|
||||||
// ApptentiveConnect |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 6/28/11. |
|
||||||
// Copyright 2011 Apptentive, Inc. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import "ATImageView.h" |
|
||||||
|
|
||||||
|
|
||||||
NSString *const ATImageViewContentsChanged = @"ATImageViewContentsChanged"; |
|
||||||
|
|
||||||
@implementation ATImageView |
|
||||||
|
|
||||||
- (void)setImage:(NSImage *)newImage { |
|
||||||
BOOL wasNew = NO; |
|
||||||
if ([self image] != newImage) { |
|
||||||
wasNew = YES; |
|
||||||
} |
|
||||||
[super setImage:newImage]; |
|
||||||
if (wasNew) { |
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:ATImageViewContentsChanged object:self]; |
|
||||||
} |
|
||||||
} |
|
||||||
@end |
|
||||||
|
|
@ -1,17 +0,0 @@ |
|||||||
//
|
|
||||||
// ATPlaceholderTextView.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 8/30/12.
|
|
||||||
// Copyright (c) 2012 Apptentive, Inc. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
@interface ATPlaceholderTextView : NSTextView { |
|
||||||
@private |
|
||||||
NSString *placeholder; |
|
||||||
} |
|
||||||
@property (nonatomic, retain) NSString *placeholder; |
|
||||||
- (BOOL)isDefault; |
|
||||||
@end |
|
@ -1,65 +0,0 @@ |
|||||||
// |
|
||||||
// ATPlaceholderTextView.m |
|
||||||
// ApptentiveConnect |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 8/30/12. |
|
||||||
// Copyright (c) 2012 Apptentive, Inc. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import "ATPlaceholderTextView.h" |
|
||||||
|
|
||||||
@implementation ATPlaceholderTextView |
|
||||||
@synthesize placeholder; |
|
||||||
|
|
||||||
- (id)initWithFrame:(NSRect)frame { |
|
||||||
if ((self = [super initWithFrame:frame])) { |
|
||||||
} |
|
||||||
return self; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)dealloc { |
|
||||||
[placeholder release], placeholder = nil; |
|
||||||
[super dealloc]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)dirtyRect { |
|
||||||
[super drawRect:dirtyRect]; |
|
||||||
if (placeholder != nil && [self isDefault]) { |
|
||||||
CGRect r = NSRectToCGRect([self frame]); |
|
||||||
r.origin.x += 6; |
|
||||||
CGSize inset = NSSizeToCGSize([self textContainerInset]); |
|
||||||
NSRect textRect = NSRectFromCGRect(CGRectInset(r, inset.width, inset.height)); |
|
||||||
NSAttributedString *s = [[NSAttributedString alloc] initWithString:self.placeholder attributes:[NSDictionary dictionaryWithObject:[NSColor grayColor] forKey:NSForegroundColorAttributeName]]; |
|
||||||
[s drawInRect:textRect]; |
|
||||||
[s release], s = nil; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (void)setPlaceholder:(NSString *)newPlaceholder { |
|
||||||
if (placeholder != newPlaceholder) { |
|
||||||
[placeholder release]; |
|
||||||
placeholder = nil; |
|
||||||
placeholder = [newPlaceholder retain]; |
|
||||||
[self setNeedsDisplay:YES]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (BOOL)isDefault { |
|
||||||
if (![self string] || [[self string] length] == 0) return YES; |
|
||||||
return NO; |
|
||||||
} |
|
||||||
|
|
||||||
- (BOOL)becomeFirstResponder { |
|
||||||
if (placeholder != nil) { |
|
||||||
[self setNeedsDisplay:YES]; |
|
||||||
} |
|
||||||
return [super becomeFirstResponder]; |
|
||||||
} |
|
||||||
|
|
||||||
- (BOOL)resignFirstResponder { |
|
||||||
if (placeholder != nil) { |
|
||||||
[self setNeedsDisplay:YES]; |
|
||||||
} |
|
||||||
return [super resignFirstResponder]; |
|
||||||
} |
|
||||||
@end |
|
@ -1,17 +0,0 @@ |
|||||||
//
|
|
||||||
// ATSampleTest.h
|
|
||||||
// ApptentiveConnect
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 5/30/11.
|
|
||||||
// Copyright 2011 Planetary Scale LLC. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <SenTestingKit/SenTestingKit.h> |
|
||||||
|
|
||||||
|
|
||||||
@interface ATSampleTest : SenTestCase { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
- (void)testTests; |
|
||||||
@end |
|
@ -1,17 +0,0 @@ |
|||||||
// |
|
||||||
// ATSampleTest.m |
|
||||||
// ApptentiveConnect |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 5/30/11. |
|
||||||
// Copyright 2011 Planetary Scale LLC. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import "ATSampleTest.h" |
|
||||||
|
|
||||||
|
|
||||||
@implementation ATSampleTest |
|
||||||
|
|
||||||
- (void)testTests { |
|
||||||
STAssertTrue(YES, @"Should always pass."); |
|
||||||
} |
|
||||||
@end |
|
@ -1,22 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>CFBundleDevelopmentRegion</key> |
|
||||||
<string>English</string> |
|
||||||
<key>CFBundleExecutable</key> |
|
||||||
<string>${EXECUTABLE_NAME}</string> |
|
||||||
<key>CFBundleIdentifier</key> |
|
||||||
<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string> |
|
||||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||||
<string>6.0</string> |
|
||||||
<key>CFBundlePackageType</key> |
|
||||||
<string>BNDL</string> |
|
||||||
<key>CFBundleShortVersionString</key> |
|
||||||
<string>1.0</string> |
|
||||||
<key>CFBundleSignature</key> |
|
||||||
<string>????</string> |
|
||||||
<key>CFBundleVersion</key> |
|
||||||
<string>1</string> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,249 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> |
|
||||||
<dependencies> |
|
||||||
<deployment identifier="macosx"/> |
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> |
|
||||||
<capability name="box content view" minToolsVersion="7.0"/> |
|
||||||
</dependencies> |
|
||||||
<objects> |
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="ATFeedbackWindowController"> |
|
||||||
<connections> |
|
||||||
<outlet property="cancelButton" destination="40" id="112"/> |
|
||||||
<outlet property="emailBox" destination="24" id="67"/> |
|
||||||
<outlet property="feedbackTextView" destination="109" id="111"/> |
|
||||||
<outlet property="nameBox" destination="22" id="66"/> |
|
||||||
<outlet property="phoneNumberBox" destination="26" id="68"/> |
|
||||||
<outlet property="progressIndicator" destination="57" id="60"/> |
|
||||||
<outlet property="screenshotView" destination="13" id="88"/> |
|
||||||
<outlet property="sendButton" destination="38" id="92"/> |
|
||||||
<outlet property="window" destination="1" id="3"/> |
|
||||||
</connections> |
|
||||||
</customObject> |
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> |
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/> |
|
||||||
<window title="Send Feedback" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" animationBehavior="default" id="1"> |
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/> |
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> |
|
||||||
<rect key="contentRect" x="309" y="98" width="379" height="528"/> |
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/> |
|
||||||
<view key="contentView" id="2"> |
|
||||||
<rect key="frame" x="0.0" y="0.0" width="379" height="528"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
<subviews> |
|
||||||
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="104"> |
|
||||||
<rect key="frame" x="20" y="230" width="339" height="176"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
<clipView key="contentView" id="ERA-pO-91r"> |
|
||||||
<rect key="frame" x="1" y="1" width="337" height="174"/> |
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|
||||||
<subviews> |
|
||||||
<textView importsGraphics="NO" richText="NO" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" usesFontPanel="YES" verticallyResizable="YES" allowsNonContiguousLayout="YES" quoteSubstitution="YES" spellingCorrection="YES" smartInsertDelete="YES" id="109" customClass="ATPlaceholderTextView"> |
|
||||||
<rect key="frame" x="0.0" y="0.0" width="337" height="174"/> |
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
|
||||||
<size key="minSize" width="337" height="174"/> |
|
||||||
<size key="maxSize" width="689" height="10000000"/> |
|
||||||
<color key="insertionPointColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<size key="minSize" width="337" height="174"/> |
|
||||||
<size key="maxSize" width="689" height="10000000"/> |
|
||||||
<connections> |
|
||||||
<outlet property="delegate" destination="-2" id="110"/> |
|
||||||
</connections> |
|
||||||
</textView> |
|
||||||
</subviews> |
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
|
||||||
</clipView> |
|
||||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="0.99128919860627185" horizontal="YES" id="108"> |
|
||||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
</scroller> |
|
||||||
<scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="107"> |
|
||||||
<rect key="frame" x="322" y="1" width="16" height="174"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
</scroller> |
|
||||||
</scrollView> |
|
||||||
<view id="103"> |
|
||||||
<rect key="frame" x="20" y="172" width="693" height="57"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
<subviews> |
|
||||||
<imageView id="13" customClass="ATImageView"> |
|
||||||
<rect key="frame" x="0.0" y="4" width="48" height="48"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<imageCell key="cell" selectable="YES" editable="YES" alignment="left" imageScaling="proportionallyDown" imageFrameStyle="grayBezel" id="14"/> |
|
||||||
</imageView> |
|
||||||
<textField verticalHuggingPriority="750" id="15"> |
|
||||||
<rect key="frame" x="50" y="20" width="292" height="17"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Attach a screenshot. (Optional)" id="16"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<button verticalHuggingPriority="750" id="84"> |
|
||||||
<rect key="frame" x="248" y="11" width="98" height="32"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<buttonCell key="cell" type="push" title="Browse…" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="85"> |
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
</buttonCell> |
|
||||||
<connections> |
|
||||||
<action selector="browseForScreenshotPressed:" target="-2" id="86"/> |
|
||||||
</connections> |
|
||||||
</button> |
|
||||||
</subviews> |
|
||||||
</view> |
|
||||||
<box autoresizesSubviews="NO" title="Contact Information (Optional)" borderType="line" id="21"> |
|
||||||
<rect key="frame" x="17" y="56" width="345" height="116"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<view key="contentView" id="tQf-lo-L4t"> |
|
||||||
<rect key="frame" x="1" y="1" width="343" height="100"/> |
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
|
||||||
<subviews> |
|
||||||
<comboBox verticalHuggingPriority="750" id="22" userLabel="Name Box"> |
|
||||||
<rect key="frame" x="112" y="66" width="223" height="26"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="23"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</comboBoxCell> |
|
||||||
<connections> |
|
||||||
<outlet property="delegate" destination="-2" id="89"/> |
|
||||||
</connections> |
|
||||||
</comboBox> |
|
||||||
<comboBox verticalHuggingPriority="750" id="26" userLabel="Phone Number Box"> |
|
||||||
<rect key="frame" x="112" y="10" width="223" height="26"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="27"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</comboBoxCell> |
|
||||||
<connections> |
|
||||||
<outlet property="delegate" destination="-2" id="91"/> |
|
||||||
</connections> |
|
||||||
</comboBox> |
|
||||||
<textField verticalHuggingPriority="750" id="28"> |
|
||||||
<rect key="frame" x="10" y="71" width="99" height="17"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="29"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField verticalHuggingPriority="750" id="30"> |
|
||||||
<rect key="frame" x="10" y="44" width="99" height="17"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Email:" id="31"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField verticalHuggingPriority="750" id="32"> |
|
||||||
<rect key="frame" x="10" y="16" width="99" height="17"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Phone Number:" id="33"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<comboBox verticalHuggingPriority="750" id="24" userLabel="Email Box"> |
|
||||||
<rect key="frame" x="112" y="36" width="223" height="26"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="25"> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</comboBoxCell> |
|
||||||
<connections> |
|
||||||
<outlet property="delegate" destination="-2" id="90"/> |
|
||||||
</connections> |
|
||||||
</comboBox> |
|
||||||
</subviews> |
|
||||||
</view> |
|
||||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> |
|
||||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> |
|
||||||
</box> |
|
||||||
<button verticalHuggingPriority="750" id="38"> |
|
||||||
<rect key="frame" x="231" y="12" width="134" height="32"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<buttonCell key="cell" type="push" title="Send Feedback" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="39"> |
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
</buttonCell> |
|
||||||
<connections> |
|
||||||
<action selector="sendFeedbackPressed:" target="-2" id="65"/> |
|
||||||
</connections> |
|
||||||
</button> |
|
||||||
<progressIndicator hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" style="bar" id="57"> |
|
||||||
<rect key="frame" x="20" y="19" width="128" height="20"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
</progressIndicator> |
|
||||||
<textField verticalHuggingPriority="750" id="105"> |
|
||||||
<rect key="frame" x="118" y="450" width="242" height="25"/> |
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="We'd love to hear your feedback!" id="106"> |
|
||||||
<font key="font" size="13" name="HelveticaNeue-Light"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField verticalHuggingPriority="750" id="w67-Zy-sbN"> |
|
||||||
<rect key="frame" x="118" y="429" width="242" height="25"/> |
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Entering your contact information will help" id="acW-hX-N0a"> |
|
||||||
<font key="font" size="12" name="HelveticaNeue-Thin"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<textField verticalHuggingPriority="750" id="Zyi-mo-cyd"> |
|
||||||
<rect key="frame" x="118" y="414" width="242" height="25"/> |
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="us get back to you!" id="dmd-4c-7qG"> |
|
||||||
<font key="font" size="12" name="HelveticaNeue-Thin"/> |
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
<button verticalHuggingPriority="750" id="40"> |
|
||||||
<rect key="frame" x="154" y="12" width="82" height="32"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="41"> |
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> |
|
||||||
<font key="font" metaFont="system"/> |
|
||||||
<string key="keyEquivalent" base64-UTF8="YES"> |
|
||||||
Gw |
|
||||||
</string> |
|
||||||
</buttonCell> |
|
||||||
<connections> |
|
||||||
<action selector="cancelPressed:" target="-2" id="64"/> |
|
||||||
</connections> |
|
||||||
</button> |
|
||||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" id="yby-ks-U3D"> |
|
||||||
<rect key="frame" x="22" y="423" width="91" height="81"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ClockerIcon-256" id="GY7-Dm-Gic"/> |
|
||||||
</imageView> |
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="Xda-0B-qgr"> |
|
||||||
<rect key="frame" x="118" y="473" width="158" height="35"/> |
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> |
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Clocker v1.2" id="TOY-gt-W6r"> |
|
||||||
<font key="font" size="29" name="HelveticaNeue-Thin"/> |
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> |
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> |
|
||||||
</textFieldCell> |
|
||||||
</textField> |
|
||||||
</subviews> |
|
||||||
</view> |
|
||||||
<point key="canvasLocation" x="59.5" y="54"/> |
|
||||||
</window> |
|
||||||
</objects> |
|
||||||
<resources> |
|
||||||
<image name="ClockerIcon-256" width="256" height="256"/> |
|
||||||
</resources> |
|
||||||
</document> |
|
@ -1,34 +0,0 @@ |
|||||||
2015-02-28 pkamb v0.4.12 |
|
||||||
-------------------------- |
|
||||||
This release removes a request to access the OS X Contacts list to pre-fill the Feedback Dialog form. |
|
||||||
|
|
||||||
The Contacts permission request was unexpected to some developers and users. This will be re-added as an option in the future. |
|
||||||
|
|
||||||
2014-12-05 wooster v0.4.11 |
|
||||||
-------------------------- |
|
||||||
Fixes problem where prompting on launch would never work. |
|
||||||
|
|
||||||
This was a regression due to a bad merge. |
|
||||||
|
|
||||||
2012-10-08 wooster v0.4.8 |
|
||||||
------------------------- |
|
||||||
|
|
||||||
Fixing APPTENTIVE-571, in which custom app data wasn't being sent with feedback. |
|
||||||
|
|
||||||
2012-09-19 wooster v0.4.7 |
|
||||||
------------------------- |
|
||||||
The big change here is a switch to git subtrees from a submodule for the copy of apptentive-ios in the project. This makes checking out the project and getting started much easier. |
|
||||||
|
|
||||||
Changes: |
|
||||||
|
|
||||||
* Fix for ratings dialog not showing up due to reachability failing. |
|
||||||
* OSX-6 Switch to git subtrees for apptentive-ios |
|
||||||
|
|
||||||
2012-08-29 wooster v0.4.6 |
|
||||||
------------------------- |
|
||||||
Changes: |
|
||||||
|
|
||||||
* Pulled in v0.4.5 of apptentive-ios. |
|
||||||
* Went from JSONKit to PrefixedJSONKit. |
|
||||||
* Removed methods for displaying different feedback window types on OS X. |
|
||||||
* Added placeholder text in feedback window. |
|
@ -1,9 +0,0 @@ |
|||||||
Contributing |
|
||||||
------------ |
|
||||||
We love contributions! |
|
||||||
|
|
||||||
Any contributions to the master apptentive-osx project must sign the [Individual Contributor License Agreement (CLA)](https://docs.google.com/a/apptentive.com/spreadsheet/viewform?formkey=dDhMaXJKQnRoX0dRMzZNYnp5bk1Sbmc6MQ#gid=0). It's a doc that makes our lawyers happy and ensures we can provide a solid open source project. |
|
||||||
|
|
||||||
When you want to submit a change, send us a [pull request](https://github.com/apptentive/apptentive-osx/pulls). Before we merge, we'll check to make sure you're on the list of people who've signed our CLA. |
|
||||||
|
|
||||||
Thanks! |
|
@ -1,2 +0,0 @@ |
|||||||
/* Localized versions of Info.plist keys */ |
|
||||||
|
|
@ -1,32 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>CFBundleDevelopmentRegion</key> |
|
||||||
<string>English</string> |
|
||||||
<key>CFBundleExecutable</key> |
|
||||||
<string>${EXECUTABLE_NAME}</string> |
|
||||||
<key>CFBundleIconFile</key> |
|
||||||
<string>ApptentiveLogo</string> |
|
||||||
<key>CFBundleIdentifier</key> |
|
||||||
<string>com.apptentive.${PRODUCT_NAME:rfc1034identifier}</string> |
|
||||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||||
<string>6.0</string> |
|
||||||
<key>CFBundleName</key> |
|
||||||
<string>${PRODUCT_NAME}</string> |
|
||||||
<key>CFBundlePackageType</key> |
|
||||||
<string>APPL</string> |
|
||||||
<key>CFBundleShortVersionString</key> |
|
||||||
<string>1.0</string> |
|
||||||
<key>CFBundleSignature</key> |
|
||||||
<string>????</string> |
|
||||||
<key>CFBundleVersion</key> |
|
||||||
<string>1</string> |
|
||||||
<key>LSMinimumSystemVersion</key> |
|
||||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string> |
|
||||||
<key>NSMainNibFile</key> |
|
||||||
<string>MainMenu</string> |
|
||||||
<key>NSPrincipalClass</key> |
|
||||||
<string>NSApplication</string> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,416 +0,0 @@ |
|||||||
// !$*UTF8*$! |
|
||||||
{ |
|
||||||
archiveVersion = 1; |
|
||||||
classes = { |
|
||||||
}; |
|
||||||
objectVersion = 46; |
|
||||||
objects = { |
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */ |
|
||||||
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; |
|
||||||
256AC3DA0F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m */; }; |
|
||||||
491CA3B915F065DF0003BC38 /* ApptentiveLogo.icns in Resources */ = {isa = PBXBuildFile; fileRef = 491CA3A515F026E10003BC38 /* ApptentiveLogo.icns */; }; |
|
||||||
49626DDA13970DC30093534C /* ApptentiveConnect.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49626DD713970DB80093534C /* ApptentiveConnect.framework */; }; |
|
||||||
49626DDF13970DD60093534C /* ApptentiveConnect.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 49626DD713970DB80093534C /* ApptentiveConnect.framework */; }; |
|
||||||
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; |
|
||||||
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; |
|
||||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; |
|
||||||
/* End PBXBuildFile section */ |
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */ |
|
||||||
49626DD613970DB80093534C /* PBXContainerItemProxy */ = { |
|
||||||
isa = PBXContainerItemProxy; |
|
||||||
containerPortal = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */; |
|
||||||
proxyType = 2; |
|
||||||
remoteGlobalIDString = 8DC2EF5B0486A6940098B216; |
|
||||||
remoteInfo = ApptentiveConnect; |
|
||||||
}; |
|
||||||
49626DD813970DB80093534C /* PBXContainerItemProxy */ = { |
|
||||||
isa = PBXContainerItemProxy; |
|
||||||
containerPortal = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */; |
|
||||||
proxyType = 2; |
|
||||||
remoteGlobalIDString = 49626B6D13942A2B0093534C; |
|
||||||
remoteInfo = ApptentiveUnitTests; |
|
||||||
}; |
|
||||||
49626DDB13970DCE0093534C /* PBXContainerItemProxy */ = { |
|
||||||
isa = PBXContainerItemProxy; |
|
||||||
containerPortal = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */; |
|
||||||
proxyType = 1; |
|
||||||
remoteGlobalIDString = 8DC2EF4F0486A6940098B216; |
|
||||||
remoteInfo = ApptentiveConnect; |
|
||||||
}; |
|
||||||
/* End PBXContainerItemProxy section */ |
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */ |
|
||||||
49626D9613970A080093534C /* CopyFiles */ = { |
|
||||||
isa = PBXCopyFilesBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
dstPath = ""; |
|
||||||
dstSubfolderSpec = 10; |
|
||||||
files = ( |
|
||||||
49626DDF13970DD60093534C /* ApptentiveConnect.framework in CopyFiles */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
49626E0013970FE60093534C /* Copy Products */ = { |
|
||||||
isa = PBXCopyFilesBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
dstPath = ""; |
|
||||||
dstSubfolderSpec = 16; |
|
||||||
files = ( |
|
||||||
); |
|
||||||
name = "Copy Products"; |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXCopyFilesBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXFileReference section */ |
|
||||||
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; |
|
||||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; |
|
||||||
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; |
|
||||||
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; }; |
|
||||||
256AC3D80F4B6AC300CF3369 /* FeedbackDemoAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedbackDemoAppDelegate.h; sourceTree = "<group>"; }; |
|
||||||
256AC3D90F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedbackDemoAppDelegate.m; sourceTree = "<group>"; }; |
|
||||||
256AC3F00F4B6AF500CF3369 /* FeedbackDemo_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedbackDemo_Prefix.pch; sourceTree = "<group>"; }; |
|
||||||
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; |
|
||||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; |
|
||||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; |
|
||||||
491CA3A515F026E10003BC38 /* ApptentiveLogo.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ApptentiveLogo.icns; sourceTree = "<group>"; }; |
|
||||||
49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ApptentiveConnect.xcodeproj; path = ../ApptentiveConnect/ApptentiveConnect.xcodeproj; sourceTree = SOURCE_ROOT; }; |
|
||||||
4971B31513BB955100774B70 /* defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = defines.h; sourceTree = "<group>"; }; |
|
||||||
4972847913CA6273002AD591 /* ATAppRatingFlow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ATAppRatingFlow.h; path = "../apptentive-ios/ApptentiveConnect/source/Rating Flow/ATAppRatingFlow.h"; sourceTree = SOURCE_ROOT; }; |
|
||||||
49891FE813B3BCA1007967BA /* ATConnect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ATConnect.h; path = "../apptentive-ios/ApptentiveConnect/source/ATConnect.h"; sourceTree = SOURCE_ROOT; }; |
|
||||||
8D1107310486CEB800E47090 /* FeedbackDemo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "FeedbackDemo-Info.plist"; sourceTree = "<group>"; }; |
|
||||||
8D1107320486CEB800E47090 /* FeedbackDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FeedbackDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
|
||||||
/* End PBXFileReference section */ |
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */ |
|
||||||
8D11072E0486CEB800E47090 /* Frameworks */ = { |
|
||||||
isa = PBXFrameworksBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
49626DDA13970DC30093534C /* ApptentiveConnect.framework in Frameworks */, |
|
||||||
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXFrameworksBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXGroup section */ |
|
||||||
080E96DDFE201D6D7F000001 /* Classes */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
256AC3D80F4B6AC300CF3369 /* FeedbackDemoAppDelegate.h */, |
|
||||||
256AC3D90F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m */, |
|
||||||
4971B31513BB955100774B70 /* defines.h */, |
|
||||||
); |
|
||||||
name = Classes; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, |
|
||||||
); |
|
||||||
name = "Linked Frameworks"; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
29B97324FDCFA39411CA2CEA /* AppKit.framework */, |
|
||||||
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, |
|
||||||
29B97325FDCFA39411CA2CEA /* Foundation.framework */, |
|
||||||
); |
|
||||||
name = "Other Frameworks"; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
19C28FACFE9D520D11CA2CBB /* Products */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
8D1107320486CEB800E47090 /* FeedbackDemo.app */, |
|
||||||
); |
|
||||||
name = Products; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
29B97314FDCFA39411CA2CEA /* FeedbackDemo */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
49891FE813B3BCA1007967BA /* ATConnect.h */, |
|
||||||
4972847913CA6273002AD591 /* ATAppRatingFlow.h */, |
|
||||||
49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */, |
|
||||||
080E96DDFE201D6D7F000001 /* Classes */, |
|
||||||
29B97315FDCFA39411CA2CEA /* Other Sources */, |
|
||||||
29B97317FDCFA39411CA2CEA /* Resources */, |
|
||||||
29B97323FDCFA39411CA2CEA /* Frameworks */, |
|
||||||
19C28FACFE9D520D11CA2CBB /* Products */, |
|
||||||
); |
|
||||||
name = FeedbackDemo; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
29B97315FDCFA39411CA2CEA /* Other Sources */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
256AC3F00F4B6AF500CF3369 /* FeedbackDemo_Prefix.pch */, |
|
||||||
29B97316FDCFA39411CA2CEA /* main.m */, |
|
||||||
); |
|
||||||
name = "Other Sources"; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
29B97317FDCFA39411CA2CEA /* Resources */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
491CA3A415F026E10003BC38 /* art */, |
|
||||||
8D1107310486CEB800E47090 /* FeedbackDemo-Info.plist */, |
|
||||||
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, |
|
||||||
1DDD58140DA1D0A300B32029 /* MainMenu.xib */, |
|
||||||
); |
|
||||||
name = Resources; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
29B97323FDCFA39411CA2CEA /* Frameworks */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, |
|
||||||
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, |
|
||||||
); |
|
||||||
name = Frameworks; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
491CA3A415F026E10003BC38 /* art */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
491CA3A515F026E10003BC38 /* ApptentiveLogo.icns */, |
|
||||||
); |
|
||||||
path = art; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
49626DD213970DB80093534C /* Products */ = { |
|
||||||
isa = PBXGroup; |
|
||||||
children = ( |
|
||||||
49626DD713970DB80093534C /* ApptentiveConnect.framework */, |
|
||||||
49626DD913970DB80093534C /* ApptentiveUnitTests.octest */, |
|
||||||
); |
|
||||||
name = Products; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
/* End PBXGroup section */ |
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */ |
|
||||||
8D1107260486CEB800E47090 /* FeedbackDemo */ = { |
|
||||||
isa = PBXNativeTarget; |
|
||||||
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "FeedbackDemo" */; |
|
||||||
buildPhases = ( |
|
||||||
49626E0013970FE60093534C /* Copy Products */, |
|
||||||
8D1107290486CEB800E47090 /* Resources */, |
|
||||||
8D11072C0486CEB800E47090 /* Sources */, |
|
||||||
8D11072E0486CEB800E47090 /* Frameworks */, |
|
||||||
49626D9613970A080093534C /* CopyFiles */, |
|
||||||
); |
|
||||||
buildRules = ( |
|
||||||
); |
|
||||||
dependencies = ( |
|
||||||
49626DDC13970DCE0093534C /* PBXTargetDependency */, |
|
||||||
); |
|
||||||
name = FeedbackDemo; |
|
||||||
productInstallPath = "$(HOME)/Applications"; |
|
||||||
productName = FeedbackDemo; |
|
||||||
productReference = 8D1107320486CEB800E47090 /* FeedbackDemo.app */; |
|
||||||
productType = "com.apple.product-type.application"; |
|
||||||
}; |
|
||||||
/* End PBXNativeTarget section */ |
|
||||||
|
|
||||||
/* Begin PBXProject section */ |
|
||||||
29B97313FDCFA39411CA2CEA /* Project object */ = { |
|
||||||
isa = PBXProject; |
|
||||||
attributes = { |
|
||||||
LastUpgradeCheck = 0460; |
|
||||||
}; |
|
||||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "FeedbackDemo" */; |
|
||||||
compatibilityVersion = "Xcode 3.2"; |
|
||||||
developmentRegion = English; |
|
||||||
hasScannedForEncodings = 1; |
|
||||||
knownRegions = ( |
|
||||||
English, |
|
||||||
Japanese, |
|
||||||
French, |
|
||||||
German, |
|
||||||
); |
|
||||||
mainGroup = 29B97314FDCFA39411CA2CEA /* FeedbackDemo */; |
|
||||||
projectDirPath = ""; |
|
||||||
projectReferences = ( |
|
||||||
{ |
|
||||||
ProductGroup = 49626DD213970DB80093534C /* Products */; |
|
||||||
ProjectRef = 49626DD113970DB80093534C /* ApptentiveConnect.xcodeproj */; |
|
||||||
}, |
|
||||||
); |
|
||||||
projectRoot = ""; |
|
||||||
targets = ( |
|
||||||
8D1107260486CEB800E47090 /* FeedbackDemo */, |
|
||||||
); |
|
||||||
}; |
|
||||||
/* End PBXProject section */ |
|
||||||
|
|
||||||
/* Begin PBXReferenceProxy section */ |
|
||||||
49626DD713970DB80093534C /* ApptentiveConnect.framework */ = { |
|
||||||
isa = PBXReferenceProxy; |
|
||||||
fileType = wrapper.framework; |
|
||||||
path = ApptentiveConnect.framework; |
|
||||||
remoteRef = 49626DD613970DB80093534C /* PBXContainerItemProxy */; |
|
||||||
sourceTree = BUILT_PRODUCTS_DIR; |
|
||||||
}; |
|
||||||
49626DD913970DB80093534C /* ApptentiveUnitTests.octest */ = { |
|
||||||
isa = PBXReferenceProxy; |
|
||||||
fileType = wrapper.cfbundle; |
|
||||||
path = ApptentiveUnitTests.octest; |
|
||||||
remoteRef = 49626DD813970DB80093534C /* PBXContainerItemProxy */; |
|
||||||
sourceTree = BUILT_PRODUCTS_DIR; |
|
||||||
}; |
|
||||||
/* End PBXReferenceProxy section */ |
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */ |
|
||||||
8D1107290486CEB800E47090 /* Resources */ = { |
|
||||||
isa = PBXResourcesBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, |
|
||||||
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, |
|
||||||
491CA3B915F065DF0003BC38 /* ApptentiveLogo.icns in Resources */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXResourcesBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */ |
|
||||||
8D11072C0486CEB800E47090 /* Sources */ = { |
|
||||||
isa = PBXSourcesBuildPhase; |
|
||||||
buildActionMask = 2147483647; |
|
||||||
files = ( |
|
||||||
8D11072D0486CEB800E47090 /* main.m in Sources */, |
|
||||||
256AC3DA0F4B6AC300CF3369 /* FeedbackDemoAppDelegate.m in Sources */, |
|
||||||
); |
|
||||||
runOnlyForDeploymentPostprocessing = 0; |
|
||||||
}; |
|
||||||
/* End PBXSourcesBuildPhase section */ |
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */ |
|
||||||
49626DDC13970DCE0093534C /* PBXTargetDependency */ = { |
|
||||||
isa = PBXTargetDependency; |
|
||||||
name = ApptentiveConnect; |
|
||||||
targetProxy = 49626DDB13970DCE0093534C /* PBXContainerItemProxy */; |
|
||||||
}; |
|
||||||
/* End PBXTargetDependency section */ |
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */ |
|
||||||
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { |
|
||||||
isa = PBXVariantGroup; |
|
||||||
children = ( |
|
||||||
089C165DFE840E0CC02AAC07 /* English */, |
|
||||||
); |
|
||||||
name = InfoPlist.strings; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { |
|
||||||
isa = PBXVariantGroup; |
|
||||||
children = ( |
|
||||||
1DDD58150DA1D0A300B32029 /* English */, |
|
||||||
); |
|
||||||
name = MainMenu.xib; |
|
||||||
sourceTree = "<group>"; |
|
||||||
}; |
|
||||||
/* End PBXVariantGroup section */ |
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */ |
|
||||||
C01FCF4B08A954540054247B /* Debug */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO; |
|
||||||
COMBINE_HIDPI_IMAGES = YES; |
|
||||||
COPY_PHASE_STRIP = NO; |
|
||||||
FRAMEWORK_SEARCH_PATHS = ""; |
|
||||||
GCC_DYNAMIC_NO_PIC = NO; |
|
||||||
GCC_MODEL_TUNING = G5; |
|
||||||
GCC_OPTIMIZATION_LEVEL = 0; |
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|
||||||
GCC_PREFIX_HEADER = FeedbackDemo_Prefix.pch; |
|
||||||
INFOPLIST_FILE = "FeedbackDemo-Info.plist"; |
|
||||||
INSTALL_PATH = "$(HOME)/Applications"; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.7; |
|
||||||
OTHER_LDFLAGS = ( |
|
||||||
"-ObjC", |
|
||||||
"-all_load", |
|
||||||
); |
|
||||||
PRODUCT_NAME = FeedbackDemo; |
|
||||||
}; |
|
||||||
name = Debug; |
|
||||||
}; |
|
||||||
C01FCF4C08A954540054247B /* Release */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO; |
|
||||||
COMBINE_HIDPI_IMAGES = YES; |
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
|
||||||
FRAMEWORK_SEARCH_PATHS = ""; |
|
||||||
GCC_MODEL_TUNING = G5; |
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|
||||||
GCC_PREFIX_HEADER = FeedbackDemo_Prefix.pch; |
|
||||||
INFOPLIST_FILE = "FeedbackDemo-Info.plist"; |
|
||||||
INSTALL_PATH = "$(HOME)/Applications"; |
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.7; |
|
||||||
OTHER_LDFLAGS = ( |
|
||||||
"-ObjC", |
|
||||||
"-all_load", |
|
||||||
); |
|
||||||
PRODUCT_NAME = FeedbackDemo; |
|
||||||
}; |
|
||||||
name = Release; |
|
||||||
}; |
|
||||||
C01FCF4F08A954540054247B /* Debug */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; |
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|
||||||
GCC_OPTIMIZATION_LEVEL = 0; |
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES; |
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES; |
|
||||||
ONLY_ACTIVE_ARCH = YES; |
|
||||||
SDKROOT = macosx; |
|
||||||
}; |
|
||||||
name = Debug; |
|
||||||
}; |
|
||||||
C01FCF5008A954540054247B /* Release */ = { |
|
||||||
isa = XCBuildConfiguration; |
|
||||||
buildSettings = { |
|
||||||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; |
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|
||||||
GCC_WARN_ABOUT_RETURN_TYPE = YES; |
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES; |
|
||||||
SDKROOT = macosx; |
|
||||||
}; |
|
||||||
name = Release; |
|
||||||
}; |
|
||||||
/* End XCBuildConfiguration section */ |
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */ |
|
||||||
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "FeedbackDemo" */ = { |
|
||||||
isa = XCConfigurationList; |
|
||||||
buildConfigurations = ( |
|
||||||
C01FCF4B08A954540054247B /* Debug */, |
|
||||||
C01FCF4C08A954540054247B /* Release */, |
|
||||||
); |
|
||||||
defaultConfigurationIsVisible = 0; |
|
||||||
defaultConfigurationName = Release; |
|
||||||
}; |
|
||||||
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "FeedbackDemo" */ = { |
|
||||||
isa = XCConfigurationList; |
|
||||||
buildConfigurations = ( |
|
||||||
C01FCF4F08A954540054247B /* Debug */, |
|
||||||
C01FCF5008A954540054247B /* Release */, |
|
||||||
); |
|
||||||
defaultConfigurationIsVisible = 0; |
|
||||||
defaultConfigurationName = Release; |
|
||||||
}; |
|
||||||
/* End XCConfigurationList section */ |
|
||||||
}; |
|
||||||
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; |
|
||||||
} |
|
@ -1,7 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<Workspace |
|
||||||
version = "1.0"> |
|
||||||
<FileRef |
|
||||||
location = "self:"> |
|
||||||
</FileRef> |
|
||||||
</Workspace> |
|
@ -1,91 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<Scheme |
|
||||||
LastUpgradeVersion = "0720" |
|
||||||
version = "1.3"> |
|
||||||
<BuildAction |
|
||||||
parallelizeBuildables = "YES" |
|
||||||
buildImplicitDependencies = "YES"> |
|
||||||
<BuildActionEntries> |
|
||||||
<BuildActionEntry |
|
||||||
buildForTesting = "YES" |
|
||||||
buildForRunning = "YES" |
|
||||||
buildForProfiling = "YES" |
|
||||||
buildForArchiving = "YES" |
|
||||||
buildForAnalyzing = "YES"> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "8D1107260486CEB800E47090" |
|
||||||
BuildableName = "FeedbackDemo.app" |
|
||||||
BlueprintName = "FeedbackDemo" |
|
||||||
ReferencedContainer = "container:FeedbackDemo.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</BuildActionEntry> |
|
||||||
</BuildActionEntries> |
|
||||||
</BuildAction> |
|
||||||
<TestAction |
|
||||||
buildConfiguration = "Debug" |
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"> |
|
||||||
<Testables> |
|
||||||
</Testables> |
|
||||||
<MacroExpansion> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "8D1107260486CEB800E47090" |
|
||||||
BuildableName = "FeedbackDemo.app" |
|
||||||
BlueprintName = "FeedbackDemo" |
|
||||||
ReferencedContainer = "container:FeedbackDemo.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</MacroExpansion> |
|
||||||
<AdditionalOptions> |
|
||||||
</AdditionalOptions> |
|
||||||
</TestAction> |
|
||||||
<LaunchAction |
|
||||||
buildConfiguration = "Debug" |
|
||||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
|
||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
|
||||||
launchStyle = "0" |
|
||||||
useCustomWorkingDirectory = "NO" |
|
||||||
ignoresPersistentStateOnLaunch = "NO" |
|
||||||
debugDocumentVersioning = "YES" |
|
||||||
debugServiceExtension = "internal" |
|
||||||
allowLocationSimulation = "YES"> |
|
||||||
<BuildableProductRunnable |
|
||||||
runnableDebuggingMode = "0"> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "8D1107260486CEB800E47090" |
|
||||||
BuildableName = "FeedbackDemo.app" |
|
||||||
BlueprintName = "FeedbackDemo" |
|
||||||
ReferencedContainer = "container:FeedbackDemo.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</BuildableProductRunnable> |
|
||||||
<AdditionalOptions> |
|
||||||
</AdditionalOptions> |
|
||||||
</LaunchAction> |
|
||||||
<ProfileAction |
|
||||||
buildConfiguration = "Release" |
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES" |
|
||||||
savedToolIdentifier = "" |
|
||||||
useCustomWorkingDirectory = "NO" |
|
||||||
debugDocumentVersioning = "YES"> |
|
||||||
<BuildableProductRunnable |
|
||||||
runnableDebuggingMode = "0"> |
|
||||||
<BuildableReference |
|
||||||
BuildableIdentifier = "primary" |
|
||||||
BlueprintIdentifier = "8D1107260486CEB800E47090" |
|
||||||
BuildableName = "FeedbackDemo.app" |
|
||||||
BlueprintName = "FeedbackDemo" |
|
||||||
ReferencedContainer = "container:FeedbackDemo.xcodeproj"> |
|
||||||
</BuildableReference> |
|
||||||
</BuildableProductRunnable> |
|
||||||
</ProfileAction> |
|
||||||
<AnalyzeAction |
|
||||||
buildConfiguration = "Debug"> |
|
||||||
</AnalyzeAction> |
|
||||||
<ArchiveAction |
|
||||||
buildConfiguration = "Release" |
|
||||||
revealArchiveInOrganizer = "YES"> |
|
||||||
</ArchiveAction> |
|
||||||
</Scheme> |
|
@ -1,22 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>SchemeUserState</key> |
|
||||||
<dict> |
|
||||||
<key>FeedbackDemo.xcscheme</key> |
|
||||||
<dict> |
|
||||||
<key>orderHint</key> |
|
||||||
<integer>2</integer> |
|
||||||
</dict> |
|
||||||
</dict> |
|
||||||
<key>SuppressBuildableAutocreation</key> |
|
||||||
<dict> |
|
||||||
<key>8D1107260486CEB800E47090</key> |
|
||||||
<dict> |
|
||||||
<key>primary</key> |
|
||||||
<true/> |
|
||||||
</dict> |
|
||||||
</dict> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,22 +0,0 @@ |
|||||||
//
|
|
||||||
// FeedbackDemoAppDelegate.h
|
|
||||||
// FeedbackDemo
|
|
||||||
//
|
|
||||||
// Created by Andrew Wooster on 5/30/11.
|
|
||||||
// Copyright 2011 Planetary Scale LLC. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#import <ApptentiveConnect/ATConnect.h> |
|
||||||
|
|
||||||
@interface FeedbackDemoAppDelegate : NSObject <NSApplicationDelegate> { |
|
||||||
NSWindow *window; |
|
||||||
NSTextField *versionTextField; |
|
||||||
} |
|
||||||
|
|
||||||
@property (assign) IBOutlet NSWindow *window; |
|
||||||
@property (assign) IBOutlet NSTextField *versionTextField; |
|
||||||
|
|
||||||
- (IBAction)showFeedbackWindow:(id)sender; |
|
||||||
- (IBAction)showRatingFlow:(id)sender; |
|
||||||
@end |
|
@ -1,39 +0,0 @@ |
|||||||
// |
|
||||||
// FeedbackDemoAppDelegate.m |
|
||||||
// FeedbackDemo |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 5/30/11. |
|
||||||
// Copyright 2011 Planetary Scale LLC. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import "FeedbackDemoAppDelegate.h" |
|
||||||
#import <ApptentiveConnect/ATConnect.h> |
|
||||||
#import <ApptentiveConnect/ATAppRatingFlow.h> |
|
||||||
#import "defines.h" |
|
||||||
|
|
||||||
@implementation FeedbackDemoAppDelegate |
|
||||||
|
|
||||||
@synthesize window; |
|
||||||
@synthesize versionTextField; |
|
||||||
|
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { |
|
||||||
// Insert code here to initialize your application |
|
||||||
[[ATConnect sharedConnection] setApiKey:kApptentiveAPIKey]; |
|
||||||
self.versionTextField.stringValue = [NSString stringWithFormat:@"ApptentiveConnect v%@", kATConnectVersionString]; |
|
||||||
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID]; |
|
||||||
[ratingFlow appDidLaunch:YES]; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)showFeedbackWindow:(id)sender { |
|
||||||
[[ATConnect sharedConnection] showFeedbackWindow:sender]; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)showFeedbackWindowForFeedback:(id)sender { |
|
||||||
[[ATConnect sharedConnection] showFeedbackWindow:self]; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)showRatingFlow:(id)sender { |
|
||||||
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID]; |
|
||||||
[ratingFlow showEnjoymentDialog:sender]; |
|
||||||
} |
|
||||||
@end |
|
@ -1,7 +0,0 @@ |
|||||||
// |
|
||||||
// Prefix header for all source files of the 'FeedbackDemo' target in the 'FeedbackDemo' project |
|
||||||
// |
|
||||||
|
|
||||||
#ifdef __OBJC__ |
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#endif |
|
@ -1,11 +0,0 @@ |
|||||||
/*
|
|
||||||
* defines.h |
|
||||||
* FeedbackDemo |
|
||||||
* |
|
||||||
* Created by Andrew Wooster on 6/29/11. |
|
||||||
* Copyright 2011 Apptentive. All rights reserved. |
|
||||||
* |
|
||||||
*/ |
|
||||||
|
|
||||||
#define kApptentiveAPIKey @"<your API key>" |
|
||||||
#define kApptentiveAppID @"<your App Store ID>" |
|
@ -1,14 +0,0 @@ |
|||||||
// |
|
||||||
// main.m |
|
||||||
// FeedbackDemo |
|
||||||
// |
|
||||||
// Created by Andrew Wooster on 5/30/11. |
|
||||||
// Copyright 2011 Planetary Scale LLC. All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
int main(int argc, char *argv[]) |
|
||||||
{ |
|
||||||
return NSApplicationMain(argc, (const char **) argv); |
|
||||||
} |
|
@ -1,24 +0,0 @@ |
|||||||
Copyright (c) 2011, Apptentive, Inc. |
|
||||||
All rights reserved. |
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without |
|
||||||
modification, are permitted provided that the following conditions are met: |
|
||||||
* Redistributions of source code must retain the above copyright |
|
||||||
notice, this list of conditions and the following disclaimer. |
|
||||||
* Redistributions in binary form must reproduce the above copyright |
|
||||||
notice, this list of conditions and the following disclaimer in the |
|
||||||
documentation and/or other materials provided with the distribution. |
|
||||||
* Neither the name of the Apptentive, Inc. nor the |
|
||||||
names of its contributors may be used to endorse or promote products |
|
||||||
derived from this software without specific prior written permission. |
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
||||||
DISCLAIMED. IN NO EVENT SHALL Apptentive, Inc. BE LIABLE FOR ANY |
|
||||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
||||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
@ -1,125 +0,0 @@ |
|||||||
Apptentive Mac SDK |
|
||||||
================== |
|
||||||
|
|
||||||
This Cocoa library for OS X allows you to add a quick and easy in-app-feedback |
|
||||||
mechanism to your Mac applications. Feedback is sent to the Apptentive web |
|
||||||
service. |
|
||||||
|
|
||||||
Quickstart |
|
||||||
========== |
|
||||||
|
|
||||||
Sample Application |
|
||||||
------------------ |
|
||||||
The sample application FeedbackDemo demonstrates how to integrate the SDK |
|
||||||
with your application. |
|
||||||
|
|
||||||
|
|
||||||
Required Frameworks |
|
||||||
------------------- |
|
||||||
In order to use `ApptentiveConnect`, your project must link against the |
|
||||||
following frameworks: |
|
||||||
|
|
||||||
* AppKit |
|
||||||
* CoreGraphics |
|
||||||
* Foundation |
|
||||||
* QuartzCore |
|
||||||
* SystemConfiguration |
|
||||||
|
|
||||||
Project Settings for Xcode 4 |
|
||||||
---------------------------- |
|
||||||
|
|
||||||
Check out the `apptentive-osx` project from GitHub. You'll either want to put it in a |
|
||||||
sub-folder of your project or, if you use `git`, add it as a [git submodule](http://help.github.com/submodules/). |
|
||||||
|
|
||||||
In your target's `Build Settings` section, add the following to your Other Linker Flags settings: |
|
||||||
|
|
||||||
`-ObjC -all_load` |
|
||||||
|
|
||||||
Then, open your project in Xcode and drag the `ApptentiveConnect.xcodeproj` project file |
|
||||||
to your project: |
|
||||||
|
|
||||||
![Step 1](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step1.png) |
|
||||||
|
|
||||||
In your apps' target settings, add `ApptentiveConnect` to the "Target Dependencies" build phase: |
|
||||||
|
|
||||||
![Step 2](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step2.png) |
|
||||||
|
|
||||||
Next, add `ApptentiveConnect.framework` to the "Link Binary With Libraries" build phase: |
|
||||||
|
|
||||||
![Step 3](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step3.png) |
|
||||||
|
|
||||||
Finally, drag the `ApptentiveConnect.framework` from the `ApptentiveConnect` project to the |
|
||||||
"Copy Bundle Resources" build phase: |
|
||||||
|
|
||||||
![Step 4](https://raw.github.com/apptentive/apptentive-osx/master/etc/screenshots/integration_step4.png) |
|
||||||
|
|
||||||
Using the Library |
|
||||||
----------------- |
|
||||||
|
|
||||||
`ApptentiveConnect` queues feedback and attempts to upload in the background. This |
|
||||||
is intended to provide as quick a mechanism for submitting feedback as possible. |
|
||||||
|
|
||||||
In order for queued/interrupted feedback uploads to continue uploading, we |
|
||||||
recommending instantiating `ATConnect` and setting the API key at application |
|
||||||
startup, like: |
|
||||||
|
|
||||||
``` objective-c |
|
||||||
#import <ApptentiveConnect/ATConnect.h> |
|
||||||
// ... |
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { |
|
||||||
ATConnect *connection = [ATConnect sharedConnection]; |
|
||||||
connection.apiKey = kApptentiveAPIKey; |
|
||||||
// ... |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
Where `kApptentiveAPIKey` is an `NSString` containing your API key. As soon |
|
||||||
as you set the API key on the shared connection object, any queued feedback |
|
||||||
will start to upload, pending network availability. You also should not have |
|
||||||
to set the API key again on the shared connection object. |
|
||||||
|
|
||||||
Now, you can show the Apptentive feedback UI with: |
|
||||||
|
|
||||||
``` objective-c |
|
||||||
#import <ApptentiveConnect/ATConnect.h> |
|
||||||
// ... |
|
||||||
ATConnect *connection = [ATConnect sharedConnection]; |
|
||||||
[connection showFeedbackWindow:sender]; |
|
||||||
``` |
|
||||||
|
|
||||||
Easy! |
|
||||||
|
|
||||||
App Rating Flow |
|
||||||
--------------- |
|
||||||
`ApptentiveConnect` now provides an app rating flow similar to other projects |
|
||||||
such as [appirator](https://github.com/arashpayan/appirater). To use it, add |
|
||||||
the `ATAppRatingFlow.h` header file to your project. |
|
||||||
|
|
||||||
Then, at startup, instantiate a shared `ATAppRatingFlow` object with your |
|
||||||
iTunes app ID (see "Finding Your iTunes App ID" below): |
|
||||||
|
|
||||||
``` objective-c |
|
||||||
#import <ApptentiveConnect/ATAppRatingFlow.h> |
|
||||||
// ... |
|
||||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { |
|
||||||
[[ATConnect sharedConnection] setApiKey:kApptentiveAPIKey]; |
|
||||||
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID]; |
|
||||||
[ratingFlow appDidLaunch:YES]; |
|
||||||
} |
|
||||||
``` |
|
||||||
|
|
||||||
You can also choose to show the dialog manually: |
|
||||||
|
|
||||||
``` objective-c |
|
||||||
ATAppRatingFlow *ratingFlow = [ATAppRatingFlow sharedRatingFlowWithAppID:kApptentiveAppID]; |
|
||||||
[ratingFlow showEnjoymentDialog:sender]; |
|
||||||
``` |
|
||||||
|
|
||||||
This is helpful if you want to implement custom triggers for the ratings |
|
||||||
flow. |
|
||||||
|
|
||||||
**Finding Your iTunes App ID** |
|
||||||
In [iTunesConnect](https://itunesconnect.apple.com/), go to "Manage Your |
|
||||||
Applications" and click on your application. In the "App Information" |
|
||||||
section of the page, look for the "Apple ID". It will be a number. This is |
|
||||||
your iTunes application ID. |
|
@ -1,28 +0,0 @@ |
|||||||
Pod::Spec.new do |s| |
|
||||||
s.name = "apptentive-osx" |
|
||||||
s.version = "0.4.12" |
|
||||||
s.license = "BSD" |
|
||||||
s.summary = "Apptentive Customer Communications SDK." |
|
||||||
s.homepage = "https://www.apptentive.com/" |
|
||||||
s.authors = { "Andrew Wooster" => "andrew@apptentive.com", |
|
||||||
"Peter Kamb" => "peter@apptentive.com" } |
|
||||||
s.source = { :git => "https://github.com/apptentive/apptentive-osx.git", :tag => "v#{s.version}" } |
|
||||||
s.platform = :osx, '10.7' |
|
||||||
s.osx.deployment_target = '10.7' |
|
||||||
s.description = <<-DESC |
|
||||||
This Cocoa library for OS X allows you to add a quick and easy in-app-feedback |
|
||||||
mechanism to your Mac applications. Feedback is sent to the Apptentive web service. |
|
||||||
DESC |
|
||||||
s.public_header_files = "apptentive-ios/ApptentiveConnect/source/ATConnect.h", |
|
||||||
"apptentive-ios/ApptentiveConnect/source/Rating Flow/ATAppRatingFlow.h" |
|
||||||
s.source_files = "ApptentiveConnect/source/**/*.{h,m}", |
|
||||||
"apptentive-ios/ApptentiveConnect/ext/**/*.{h,m}", |
|
||||||
"apptentive-ios/ApptentiveConnect/source/**/*.{h,m}" |
|
||||||
s.exclude_files = "apptentive-ios/ApptentiveConnect/source/Controllers/**/*", |
|
||||||
"apptentive-ios/ApptentiveConnect/source/Custom Views/**/*", |
|
||||||
"apptentive-ios/ApptentiveConnect/source/Surveys/**/*" |
|
||||||
s.requires_arc = false |
|
||||||
s.frameworks = "Cocoa", "SystemConfiguration", "AddressBook" |
|
||||||
s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "JSONKIT_PREFIX=AT AT_LOGGING_LEVEL_INFO=1 AT_LOGGING_LEVEL_ERROR=1 AT_RESOURCE_BUNDLE=1" } |
|
||||||
s.resource_bundle = {"ApptentiveResources" => ["ApptentiveConnect/xibs/**/*.xib", "apptentive-ios/ApptentiveConnect/art/generated/at_logo_info*.png"] } |
|
||||||
end |
|
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 111 KiB |
@ -1,40 +0,0 @@ |
|||||||
// Created by Abhishek Banthia on 11/4/15.
|
|
||||||
// Copyright (c) 2015 Abhishek Banthia All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Copyright (c) 2015, Abhishek Banthia
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
// are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
// other materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
||||||
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
#define ARROW_WIDTH 12 |
|
||||||
#define ARROW_HEIGHT 12 |
|
||||||
|
|
||||||
@interface BackgroundView : NSView |
|
||||||
{ |
|
||||||
NSInteger _arrowX; |
|
||||||
} |
|
||||||
|
|
||||||
@property (nonatomic, assign) NSInteger arrowX; |
|
||||||
@property (nonatomic, strong) NSTrackingArea *trackingArea; |
|
||||||
|
|
||||||
@end |
|
@ -1,148 +0,0 @@ |
|||||||
// Created by Abhishek Banthia on 11/4/15. |
|
||||||
// Copyright (c) 2015 Abhishek Banthia All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
// Copyright (c) 2015, Abhishek Banthia |
|
||||||
// All rights reserved. |
|
||||||
// |
|
||||||
// Redistribution and use in source and binary forms, with or without modification, |
|
||||||
// are permitted provided that the following conditions are met: |
|
||||||
// |
|
||||||
// Redistributions of source code must retain the above copyright notice, |
|
||||||
// this list of conditions and the following disclaimer. |
|
||||||
// |
|
||||||
// Redistributions in binary form must reproduce the above copyright notice, |
|
||||||
// this list of conditions and the following disclaimer in the documentation and/or |
|
||||||
// other materials provided with the distribution. |
|
||||||
// |
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
||||||
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
|
||||||
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
|
||||||
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||||
|
|
||||||
|
|
||||||
#import "BackgroundView.h" |
|
||||||
|
|
||||||
#define FILL_OPACITY 0.9f |
|
||||||
#define STROKE_OPACITY 1.0f |
|
||||||
|
|
||||||
#define LINE_THICKNESS 1.0f |
|
||||||
#define CORNER_RADIUS 6.0f |
|
||||||
|
|
||||||
#define SEARCH_INSET 10.0f |
|
||||||
#import "ApplicationDelegate.h" |
|
||||||
#import "PanelController.h" |
|
||||||
|
|
||||||
#pragma mark - |
|
||||||
|
|
||||||
@implementation BackgroundView |
|
||||||
|
|
||||||
|
|
||||||
@synthesize arrowX = _arrowX; |
|
||||||
|
|
||||||
#pragma mark - |
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)dirtyRect |
|
||||||
{ |
|
||||||
NSRect contentRect = NSInsetRect([self bounds], LINE_THICKNESS, LINE_THICKNESS); |
|
||||||
NSBezierPath *path = [NSBezierPath bezierPath]; |
|
||||||
|
|
||||||
[path moveToPoint:NSMakePoint(_arrowX, NSMaxY(contentRect))]; |
|
||||||
[path lineToPoint:NSMakePoint(_arrowX + ARROW_WIDTH / 2, NSMaxY(contentRect) - ARROW_HEIGHT)]; |
|
||||||
[path lineToPoint:NSMakePoint(NSMaxX(contentRect) - CORNER_RADIUS, NSMaxY(contentRect) - ARROW_HEIGHT)]; |
|
||||||
|
|
||||||
NSPoint topRightCorner = NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT); |
|
||||||
[path curveToPoint:NSMakePoint(NSMaxX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT - CORNER_RADIUS) |
|
||||||
controlPoint1:topRightCorner controlPoint2:topRightCorner]; |
|
||||||
|
|
||||||
[path lineToPoint:NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect) + CORNER_RADIUS)]; |
|
||||||
|
|
||||||
NSPoint bottomRightCorner = NSMakePoint(NSMaxX(contentRect), NSMinY(contentRect)); |
|
||||||
[path curveToPoint:NSMakePoint(NSMaxX(contentRect) - CORNER_RADIUS, NSMinY(contentRect)) |
|
||||||
controlPoint1:bottomRightCorner controlPoint2:bottomRightCorner]; |
|
||||||
|
|
||||||
[path lineToPoint:NSMakePoint(NSMinX(contentRect) + CORNER_RADIUS, NSMinY(contentRect))]; |
|
||||||
|
|
||||||
[path curveToPoint:NSMakePoint(NSMinX(contentRect), NSMinY(contentRect) + CORNER_RADIUS) |
|
||||||
controlPoint1:contentRect.origin controlPoint2:contentRect.origin]; |
|
||||||
|
|
||||||
[path lineToPoint:NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT - CORNER_RADIUS)]; |
|
||||||
|
|
||||||
NSPoint topLeftCorner = NSMakePoint(NSMinX(contentRect), NSMaxY(contentRect) - ARROW_HEIGHT); |
|
||||||
[path curveToPoint:NSMakePoint(NSMinX(contentRect) + CORNER_RADIUS, NSMaxY(contentRect) - ARROW_HEIGHT) |
|
||||||
controlPoint1:topLeftCorner controlPoint2:topLeftCorner]; |
|
||||||
|
|
||||||
[path lineToPoint:NSMakePoint(_arrowX - ARROW_WIDTH / 2, NSMaxY(contentRect) - ARROW_HEIGHT)]; |
|
||||||
[path closePath]; |
|
||||||
|
|
||||||
NSString *theme = [[NSUserDefaults standardUserDefaults] objectForKey:@"defaultTheme"]; |
|
||||||
[theme isEqualToString:@"Default"] ? |
|
||||||
[[NSColor colorWithDeviceRed:255.0f green:255.0f blue:255.0f alpha:FILL_OPACITY] setFill]: |
|
||||||
[[NSColor colorWithDeviceRed:0.0f green:0.0f blue:0.0f alpha:FILL_OPACITY] setFill]; |
|
||||||
|
|
||||||
[path fill]; |
|
||||||
|
|
||||||
[NSGraphicsContext saveGraphicsState]; |
|
||||||
|
|
||||||
NSBezierPath *clip = [NSBezierPath bezierPathWithRect:[self bounds]]; |
|
||||||
[clip appendBezierPath:path]; |
|
||||||
[clip addClip]; |
|
||||||
|
|
||||||
[path setLineWidth:LINE_THICKNESS * 2]; |
|
||||||
[[NSColor whiteColor] setStroke]; |
|
||||||
[path stroke]; |
|
||||||
|
|
||||||
[NSGraphicsContext restoreGraphicsState]; |
|
||||||
} |
|
||||||
|
|
||||||
-(void)mouseEntered:(NSEvent *)theEvent |
|
||||||
{ |
|
||||||
[super mouseEntered:theEvent]; |
|
||||||
|
|
||||||
ApplicationDelegate *delegate = (ApplicationDelegate*)[NSApplication sharedApplication].delegate; |
|
||||||
PanelController *controller = delegate.panelController; |
|
||||||
|
|
||||||
[controller showOptions:YES]; |
|
||||||
} |
|
||||||
|
|
||||||
-(void)mouseExited:(NSEvent *)theEvent |
|
||||||
{ |
|
||||||
[super mouseExited:theEvent]; |
|
||||||
|
|
||||||
ApplicationDelegate *delegate = (ApplicationDelegate*) [NSApplication sharedApplication].delegate; |
|
||||||
PanelController *controller = delegate.panelController; |
|
||||||
|
|
||||||
[controller showOptions:NO]; |
|
||||||
} |
|
||||||
|
|
||||||
-(void)updateTrackingAreas |
|
||||||
{ |
|
||||||
if(self.trackingArea != nil) { |
|
||||||
[self removeTrackingArea:self.trackingArea]; |
|
||||||
} |
|
||||||
|
|
||||||
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways); |
|
||||||
self.trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] |
|
||||||
options:opts |
|
||||||
owner:self |
|
||||||
userInfo:nil]; |
|
||||||
[self addTrackingArea:self.trackingArea]; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma mark - |
|
||||||
#pragma mark Public accessors |
|
||||||
|
|
||||||
- (void)setArrowX:(NSInteger)value |
|
||||||
{ |
|
||||||
_arrowX = value; |
|
||||||
[self setNeedsDisplay:YES]; |
|
||||||
} |
|
||||||
|
|
||||||
@end |
|
@ -1,51 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> |
|
||||||
<dependencies> |
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> |
|
||||||
</dependencies> |
|
||||||
<objects> |
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="CLOneWindowController"> |
|
||||||
<connections> |
|
||||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/> |
|
||||||
</connections> |
|
||||||
</customObject> |
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> |
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/> |
|
||||||
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5"> |
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/> |
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> |
|
||||||
<rect key="contentRect" x="196" y="240" width="480" height="275"/> |
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/> |
|
||||||
<view key="contentView" id="se5-gp-TjO"> |
|
||||||
<rect key="frame" x="0.0" y="0.0" width="480" height="275"/> |
|
||||||
<autoresizingMask key="autoresizingMask"/> |
|
||||||
</view> |
|
||||||
<toolbar key="toolbar" implicitIdentifier="15DCF3D0-4463-497F-B0C3-14E5359E9266" autosavesConfiguration="NO" displayMode="iconAndLabel" sizeMode="small" id="eut-Zr-nON"> |
|
||||||
<allowedToolbarItems> |
|
||||||
<toolbarItem implicitItemIdentifier="716E502A-B9AE-4776-9A41-E42176C403F7" label="General" paletteLabel="General" tag="-1" image="NSHomeTemplate" id="Khj-zc-D5t"> |
|
||||||
<connections> |
|
||||||
<action selector="openPreferences:" target="-2" id="rJI-gB-Gcb"/> |
|
||||||
</connections> |
|
||||||
</toolbarItem> |
|
||||||
<toolbarItem implicitItemIdentifier="B5E58161-D319-4490-AD3C-CED0C67FD50E" label="Appearance" paletteLabel="About Us" tag="-1" image="NSInfo" autovalidates="NO" id="ti4-MJ-8Xu"> |
|
||||||
<connections> |
|
||||||
<action selector="openAboutUsView:" target="-2" id="Aec-lN-CqR"/> |
|
||||||
</connections> |
|
||||||
</toolbarItem> |
|
||||||
</allowedToolbarItems> |
|
||||||
<defaultToolbarItems> |
|
||||||
<toolbarItem reference="Khj-zc-D5t"/> |
|
||||||
<toolbarItem reference="ti4-MJ-8Xu"/> |
|
||||||
</defaultToolbarItems> |
|
||||||
</toolbar> |
|
||||||
<connections> |
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/> |
|
||||||
</connections> |
|
||||||
<point key="canvasLocation" x="347" y="305.5"/> |
|
||||||
</window> |
|
||||||
</objects> |
|
||||||
<resources> |
|
||||||
<image name="NSHomeTemplate" width="14" height="14"/> |
|
||||||
<image name="NSInfo" width="32" height="32"/> |
|
||||||
</resources> |
|
||||||
</document> |
|
@ -1,20 +0,0 @@ |
|||||||
//
|
|
||||||
// CLOneWindowController.h
|
|
||||||
// Clocker
|
|
||||||
//
|
|
||||||
// Created by Abhishek Banthia on 12/12/15.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
#import "CLPreferencesViewController.h" |
|
||||||
#import "CLAboutUsViewController.h" |
|
||||||
|
|
||||||
@interface CLOneWindowController : NSWindowController |
|
||||||
|
|
||||||
@property (strong, nonatomic) CLPreferencesViewController *preferencesView; |
|
||||||
@property (strong, nonatomic) CLAboutUsViewController *aboutUsView; |
|
||||||
|
|
||||||
+ (instancetype)sharedWindow; |
|
||||||
|
|
||||||
@end |
|
@ -1,69 +0,0 @@ |
|||||||
// |
|
||||||
// CLOneWindowController.m |
|
||||||
// Clocker |
|
||||||
// |
|
||||||
// Created by Abhishek Banthia on 12/12/15. |
|
||||||
// |
|
||||||
// |
|
||||||
|
|
||||||
#import "CLOneWindowController.h" |
|
||||||
|
|
||||||
NSString *const CLOneWindowNibIdentifier = @"CLOneWindow"; |
|
||||||
|
|
||||||
@interface CLOneWindowController () |
|
||||||
|
|
||||||
@end |
|
||||||
|
|
||||||
@implementation CLOneWindowController |
|
||||||
|
|
||||||
static CLOneWindowController *sharedWindow = nil; |
|
||||||
|
|
||||||
- (void)windowDidLoad |
|
||||||
{ |
|
||||||
[super windowDidLoad]; |
|
||||||
|
|
||||||
self.window.titleVisibility = NSWindowTitleHidden; |
|
||||||
|
|
||||||
[self openPreferences:nil]; |
|
||||||
|
|
||||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. |
|
||||||
} |
|
||||||
|
|
||||||
+ (instancetype)sharedWindow |
|
||||||
{ |
|
||||||
if (sharedWindow == nil) |
|
||||||
{ |
|
||||||
/*Using a thread safe pattern*/ |
|
||||||
static dispatch_once_t onceToken; |
|
||||||
dispatch_once(&onceToken, ^{ |
|
||||||
sharedWindow = [[self alloc] initWithWindowNibName:CLOneWindowNibIdentifier]; |
|
||||||
|
|
||||||
}); |
|
||||||
} |
|
||||||
return sharedWindow; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)openPreferences:(id)sender |
|
||||||
{ |
|
||||||
self.preferencesView = [[CLPreferencesViewController alloc] initWithNibName:@"CLPreferencesView" bundle:nil]; |
|
||||||
[self setWindowWithContentView:self.preferencesView.view]; |
|
||||||
[self.aboutUsView.view removeFromSuperview]; |
|
||||||
self.aboutUsView = nil; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)setWindowWithContentView:(NSView *)contentView |
|
||||||
{ |
|
||||||
[self.window setContentSize:contentView.frame.size]; |
|
||||||
[self.window setContentView:contentView]; |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)openAboutUsView:(id)sender |
|
||||||
{ |
|
||||||
self.aboutUsView = [[CLAboutUsViewController alloc] initWithNibName:@"CLAboutUsView" bundle:nil]; |
|
||||||
[self setWindowWithContentView:self.aboutUsView.view]; |
|
||||||
[self.preferencesView.view removeFromSuperview]; |
|
||||||
self.preferencesView = nil; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@end |
|
@ -1,17 +0,0 @@ |
|||||||
//
|
|
||||||
// CLRatingCellView.h
|
|
||||||
// Clocker
|
|
||||||
//
|
|
||||||
// Created by Abhishek Banthia on 12/11/15.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
@interface CLRatingCellView : NSTableCellView |
|
||||||
|
|
||||||
@property (weak, nonatomic) IBOutlet NSTextField *leftField; |
|
||||||
@property (weak, nonatomic) IBOutlet NSButton *leftButton; |
|
||||||
@property (weak, nonatomic) IBOutlet NSButton *rightButton; |
|
||||||
|
|
||||||
@end |
|
@ -1,111 +0,0 @@ |
|||||||
// |
|
||||||
// CLRatingCellView.m |
|
||||||
// Clocker |
|
||||||
// |
|
||||||
// Created by Abhishek Banthia on 12/11/15. |
|
||||||
// |
|
||||||
// |
|
||||||
|
|
||||||
#import "CLRatingCellView.h" |
|
||||||
#import "iRate.h" |
|
||||||
#import <QuartzCore/QuartzCore.h> |
|
||||||
#import "PanelController.h" |
|
||||||
|
|
||||||
@implementation CLRatingCellView |
|
||||||
|
|
||||||
NSString *const CLGitHubIssueURL =@"https://github.com/Abhishaker17/Clocker/issues"; |
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)dirtyRect { |
|
||||||
[super drawRect:dirtyRect]; |
|
||||||
|
|
||||||
// Drawing code here. |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)actionOnNegativeFeedback:(id)sender |
|
||||||
{ |
|
||||||
NSButton *leftButton = (NSButton *)sender; |
|
||||||
|
|
||||||
if ([leftButton.title isEqualToString:@"Not Really"]) { |
|
||||||
[self setAnimatedStringValue:@"Mind giving us feedback?" andTextField:self.leftField withLeftButtonTitle:@"No, thanks" andRightButtonTitle:@"Yes?"]; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
//Make the row disappear and call remind later |
|
||||||
PanelController *panelRef = [[[NSApplication sharedApplication] mainWindow] windowController]; |
|
||||||
panelRef.showReviewCell = NO; |
|
||||||
[panelRef updateDefaultPreferences]; |
|
||||||
[panelRef closePanel]; |
|
||||||
[[iRate sharedInstance] remindLater]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)actionOnPositiveFeedback:(id)sender |
|
||||||
{ |
|
||||||
NSButton *rightButton = (NSButton *)sender; |
|
||||||
|
|
||||||
if ([rightButton.title isEqualToString:@"Yes!"]) { |
|
||||||
[self setAnimatedStringValue:@"Would you mind rating Clocker?" andTextField:self.leftField withLeftButtonTitle:@"No, thanks" andRightButtonTitle:@"Yes"]; |
|
||||||
} |
|
||||||
else if ([rightButton.title isEqualToString:@"Yes?"]) |
|
||||||
{ |
|
||||||
[self updateMainTableView]; |
|
||||||
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:CLGitHubIssueURL]]; |
|
||||||
|
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
//Make the row disappear and call rate |
|
||||||
|
|
||||||
[[iRate sharedInstance] rate]; |
|
||||||
[self updateMainTableView]; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (void)updateMainTableView |
|
||||||
{ |
|
||||||
PanelController *panelRef = [[[NSApplication sharedApplication] mainWindow] windowController]; |
|
||||||
panelRef.showReviewCell = NO; |
|
||||||
[panelRef updateDefaultPreferences]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void) setAnimatedStringValue:(NSString *)aString andTextField:(NSTextField *)textfield withLeftButtonTitle:(NSString *)leftTitle andRightButtonTitle:(NSString *)rightTitle |
|
||||||
{ |
|
||||||
if ([[textfield stringValue] isEqual: aString]) |
|
||||||
{ |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { |
|
||||||
[context setDuration: 1.0]; |
|
||||||
[context setTimingFunction: [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut]]; |
|
||||||
[self.imageView.animator setAlphaValue:0.0]; |
|
||||||
[self.leftButton.animator setAlphaValue:0.0]; |
|
||||||
[self.rightButton.animator setAlphaValue:0.0]; |
|
||||||
[textfield.animator setAlphaValue: 0.0]; |
|
||||||
} |
|
||||||
completionHandler:^{ |
|
||||||
[textfield setStringValue: aString]; |
|
||||||
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) { |
|
||||||
[context setDuration: 1.0]; |
|
||||||
[context setTimingFunction: [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseIn]]; |
|
||||||
[self.imageView.animator setAlphaValue: 1.0]; |
|
||||||
[textfield.animator setAlphaValue: 1.0]; |
|
||||||
[self.leftButton.animator setAlphaValue:1.0]; |
|
||||||
[self.rightButton.animator setAlphaValue:1.0]; |
|
||||||
if ([self.leftButton.title isEqualToString:@"Not Really"]) { |
|
||||||
[self.leftButton.animator setTitle:@"No, thanks"]; |
|
||||||
} |
|
||||||
if ([self.rightButton.title isEqualToString:@"Yes!"]) { |
|
||||||
[self.rightButton.animator setTitle:@"Yes, sure"]; |
|
||||||
} |
|
||||||
|
|
||||||
[self.leftButton.animator setTitle:leftTitle]; |
|
||||||
[self.rightButton.animator setTitle:rightTitle]; |
|
||||||
|
|
||||||
} completionHandler: ^{ |
|
||||||
}]; |
|
||||||
}]; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@end |
|
@ -1,50 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>CFBundleExecutable</key> |
|
||||||
<string>${EXECUTABLE_NAME}</string> |
|
||||||
<key>CFBundleIdentifier</key> |
|
||||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> |
|
||||||
<key>CFBundleInfoDictionaryVersion</key> |
|
||||||
<string>6.0</string> |
|
||||||
<key>CFBundleName</key> |
|
||||||
<string>${PRODUCT_NAME}</string> |
|
||||||
<key>CFBundlePackageType</key> |
|
||||||
<string>APPL</string> |
|
||||||
<key>CFBundleShortVersionString</key> |
|
||||||
<string>1.2.0</string> |
|
||||||
<key>CFBundleSignature</key> |
|
||||||
<string>????</string> |
|
||||||
<key>CFBundleVersion</key> |
|
||||||
<string>17</string> |
|
||||||
<key>Fabric</key> |
|
||||||
<dict> |
|
||||||
<key>APIKey</key> |
|
||||||
<string>94088f95c41979e8019b67d5795f52bbbe7104d4</string> |
|
||||||
<key>Kits</key> |
|
||||||
<array> |
|
||||||
<dict> |
|
||||||
<key>KitInfo</key> |
|
||||||
<dict/> |
|
||||||
<key>KitName</key> |
|
||||||
<string>Crashlytics</string> |
|
||||||
</dict> |
|
||||||
</array> |
|
||||||
</dict> |
|
||||||
<key>LSApplicationCategoryType</key> |
|
||||||
<string>public.app-category.utilities</string> |
|
||||||
<key>LSMinimumSystemVersion</key> |
|
||||||
<string>${MACOSX_DEPLOYMENT_TARGET}</string> |
|
||||||
<key>LSUIElement</key> |
|
||||||
<true/> |
|
||||||
<key>NSHumanReadableCopyright</key> |
|
||||||
<string>Copyright © 2015, Abhishek Banthia</string> |
|
||||||
<key>NSMainNibFile</key> |
|
||||||
<string>MainMenu</string> |
|
||||||
<key>NSPrincipalClass</key> |
|
||||||
<string>NSApplication</string> |
|
||||||
<key>RequestsOpenAccess</key> |
|
||||||
<string>YES</string> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,9 +0,0 @@ |
|||||||
// |
|
||||||
// Prefix header for all source files of the 'Clocker' target in the 'Clocker' project |
|
||||||
// |
|
||||||
|
|
||||||
#ifdef __OBJC__ |
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
#endif |
|
@ -1,10 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
||||||
<plist version="1.0"> |
|
||||||
<dict> |
|
||||||
<key>com.apple.security.app-sandbox</key> |
|
||||||
<true/> |
|
||||||
<key>com.apple.security.network.client</key> |
|
||||||
<true/> |
|
||||||
</dict> |
|
||||||
</plist> |
|
@ -1,36 +0,0 @@ |
|||||||
//
|
|
||||||
// ColoredButton.h
|
|
||||||
// Clocker
|
|
||||||
//
|
|
||||||
// Created by Abhishek Banthia on 11/4/15.
|
|
||||||
// Copyright (c) 2015 Abhishek Banthia All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Copyright (c) 2015, Abhishek Banthia
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without modification,
|
|
||||||
// are permitted provided that the following conditions are met:
|
|
||||||
//
|
|
||||||
// Redistributions of source code must retain the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer.
|
|
||||||
//
|
|
||||||
// Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
// this list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
// other materials provided with the distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
||||||
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
||||||
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
@interface ColoredButton : NSButton |
|
||||||
|
|
||||||
@end |
|
@ -1,61 +0,0 @@ |
|||||||
// |
|
||||||
// ColoredButton.m |
|
||||||
// Clocker |
|
||||||
// |
|
||||||
// Created by Abhishek Banthia on 11/4/15. |
|
||||||
// Copyright (c) 2015 Abhishek Banthia All rights reserved. |
|
||||||
// |
|
||||||
|
|
||||||
// Copyright (c) 2015, Abhishek Banthia |
|
||||||
// All rights reserved. |
|
||||||
// |
|
||||||
// Redistribution and use in source and binary forms, with or without modification, |
|
||||||
// are permitted provided that the following conditions are met: |
|
||||||
// |
|
||||||
// Redistributions of source code must retain the above copyright notice, |
|
||||||
// this list of conditions and the following disclaimer. |
|
||||||
// |
|
||||||
// Redistributions in binary form must reproduce the above copyright notice, |
|
||||||
// this list of conditions and the following disclaimer in the documentation and/or |
|
||||||
// other materials provided with the distribution. |
|
||||||
// |
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
||||||
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
||||||
// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
|
||||||
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
||||||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
||||||
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
|
||||||
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||||
|
|
||||||
|
|
||||||
#import "ColoredButton.h" |
|
||||||
|
|
||||||
@implementation ColoredButton |
|
||||||
|
|
||||||
- (void)setButtonTitleFor:(NSButton*)button toString:(NSString*)title withColor:(NSColor*)color |
|
||||||
{ |
|
||||||
|
|
||||||
NSFont *font = [NSFont fontWithName:@"HelveticaNeue-Light" size:12.0]; |
|
||||||
NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:color, NSForegroundColorAttributeName, font,NSFontAttributeName, nil]; |
|
||||||
|
|
||||||
|
|
||||||
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc]initWithString:title attributes:attrsDictionary]; |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[button setAttributedTitle:attrString]; |
|
||||||
} |
|
||||||
|
|
||||||
-(void)awakeFromNib |
|
||||||
{ |
|
||||||
NSString *title = self.title; |
|
||||||
NSColor *color = [NSColor blackColor]; |
|
||||||
self.imagePosition = NSImageLeft; |
|
||||||
[self setButtonTitleFor:self toString:title withColor:color]; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end |
|
@ -1,21 +0,0 @@ |
|||||||
//
|
|
||||||
// CLTimezoneCellView.h
|
|
||||||
// Clocker
|
|
||||||
//
|
|
||||||
// Created by Abhishek Banthia on 12/13/15.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h> |
|
||||||
|
|
||||||
@interface CLTimezoneCellView : NSTableCellView |
|
||||||
|
|
||||||
@property (weak) IBOutlet NSTextField *customName; |
|
||||||
@property (weak) IBOutlet NSTextField *relativeDate; |
|
||||||
@property (weak) IBOutlet NSTextField *time; |
|
||||||
@property (nonatomic) NSInteger rowNumber; |
|
||||||
- (void)updateFontFamilyWithFontName:(NSString *)fontName andCell:(CLTimezoneCellView*)cell; |
|
||||||
- (void)updateTextColorWithColor:(NSColor *)color andCell:(CLTimezoneCellView*)cell; |
|
||||||
- (void)setDefaultThemeForCell:(CLTimezoneCellView *)cell; |
|
||||||
|
|
||||||
@end |
|
@ -1,69 +0,0 @@ |
|||||||
// |
|
||||||
// CLTimezoneCellView.m |
|
||||||
// Clocker |
|
||||||
// |
|
||||||
// Created by Abhishek Banthia on 12/13/15. |
|
||||||
// |
|
||||||
// |
|
||||||
|
|
||||||
#import "CLTimezoneCellView.h" |
|
||||||
#import "PanelController.h" |
|
||||||
#import "CommonStrings.h" |
|
||||||
|
|
||||||
@implementation CLTimezoneCellView |
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)dirtyRect { |
|
||||||
[super drawRect:dirtyRect]; |
|
||||||
|
|
||||||
// Drawing code here. |
|
||||||
} |
|
||||||
|
|
||||||
- (IBAction)labelDidChange:(id)sender |
|
||||||
{ |
|
||||||
NSTextField *customLabelCell = (NSTextField*) sender; |
|
||||||
PanelController *panelController = (PanelController *)[[[NSApplication sharedApplication] mainWindow] windowController]; |
|
||||||
|
|
||||||
NSString *originalValue = customLabelCell.stringValue; |
|
||||||
NSString *customLabelValue = [originalValue stringByTrimmingCharactersInSet: |
|
||||||
[NSCharacterSet whitespaceCharacterSet]]; |
|
||||||
|
|
||||||
|
|
||||||
if ([[sender superview] isKindOfClass:[self class]]) { |
|
||||||
CLTimezoneCellView *cellView = (CLTimezoneCellView *)[sender superview]; |
|
||||||
NSDictionary *timezoneDictionary = panelController.defaultPreferences[cellView.rowNumber]; |
|
||||||
NSDictionary *mutableTimeZoneDict = [timezoneDictionary mutableCopy]; |
|
||||||
|
|
||||||
(customLabelValue.length > 0) ? [mutableTimeZoneDict setValue:customLabelValue forKey:CLCustomLabel] : [mutableTimeZoneDict setValue:CLEmptyString forKey:CLCustomLabel] ; |
|
||||||
[panelController.defaultPreferences replaceObjectAtIndex:cellView.rowNumber withObject:mutableTimeZoneDict]; |
|
||||||
[[NSUserDefaults standardUserDefaults] setObject:panelController.defaultPreferences forKey:CLDefaultPreferenceKey]; |
|
||||||
|
|
||||||
[panelController updateDefaultPreferences]; |
|
||||||
[panelController.mainTableview reloadData]; |
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:CLCustomLabelChangedNotification object:nil]; |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
- (void)updateFontFamilyWithFontName:(NSString *)fontName andCell:(CLTimezoneCellView*)cell |
|
||||||
{ |
|
||||||
cell.relativeDate.font = [NSFont fontWithName:fontName size:13]; |
|
||||||
cell.customName.font = [NSFont fontWithName:fontName size:15]; |
|
||||||
cell.time.font = [NSFont fontWithName:fontName size:29]; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)updateTextColorWithColor:(NSColor *)color andCell:(CLTimezoneCellView*)cell |
|
||||||
{ |
|
||||||
cell.relativeDate.textColor = color; |
|
||||||
cell.customName.textColor = color; |
|
||||||
cell.time.textColor = color; |
|
||||||
} |
|
||||||
|
|
||||||
- (void)setDefaultThemeForCell:(CLTimezoneCellView *)cell |
|
||||||
{ |
|
||||||
cell.relativeDate.font = [NSFont fontWithName:@"Helvetica-Bold" size:13]; |
|
||||||
cell.customName.font = [NSFont fontWithName:@"Helvetica-Light" size:15]; |
|
||||||
cell.time.font = [NSFont fontWithName:@"Helvetica-Light" size:29]; |
|
||||||
} |
|
||||||
|
|
||||||
@end |
|
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.5 KiB |