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 |