diff --git a/Example/PinpointKitExample/Info.plist b/Example/PinpointKitExample/Info.plist
index e463482..8fd571b 100644
--- a/Example/PinpointKitExample/Info.plist
+++ b/Example/PinpointKitExample/Info.plist
@@ -36,6 +36,8 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
+ NSPhotoLibraryUsageDescription
+ The example application accesses your photo library.
UISupportedInterfaceOrientations~ipad
UIInterfaceOrientationPortrait
diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj
index 96e48c1..cbd8de7 100644
--- a/Example/Pods/Pods.xcodeproj/project.pbxproj
+++ b/Example/Pods/Pods.xcodeproj/project.pbxproj
@@ -8,70 +8,71 @@
/* Begin PBXBuildFile section */
063B5EED534120B463E4A8446641E34D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3D8132F9DC617E978F59BF7226AC88A /* Foundation.framework */; };
+ 09E9B53CEC8FF3F6816E202F3655A709 /* InterfaceCustomization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55AB1C7C8E6BF81FBE6746A64B760DE0 /* InterfaceCustomization.swift */; };
+ 0ABFF3476234BC412F2925B4EAA82F20 /* Sender.swift in Sources */ = {isa = PBXBuildFile; fileRef = 423C59FDA444FD62438F59C103268C25 /* Sender.swift */; };
+ 0DB32CF3855B442DB9C39B00C8941079 /* NSBundle+PinpointKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C56D413219A1EE75CBE088960E03985 /* NSBundle+PinpointKit.swift */; };
+ 10E8DD88B949F7B01A91C06EBFF81F4D /* AnnotationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FCE75777949E78FDBA4ACD31EAF3BE7 /* AnnotationViewFactory.swift */; };
15FE598A776E6E89D656F15961C577BE /* Pods-PinpointKitExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 37548A2BDDF0E66DC404FEDD259C88E5 /* Pods-PinpointKitExample-dummy.m */; };
- 190C3089FF13B86AF4AF4B609AE8F16D /* StrokeLayoutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1431876B7BC76FDDDE604094B7DC491B /* StrokeLayoutManager.swift */; };
- 1EC5611C41921D5E5FD37DC30918723E /* UIView+PinpointKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA66761C7D9197C2364A1E173D9E26A /* UIView+PinpointKit.swift */; };
- 1F0B93A1A1CBC81CB2485FE3BF6AA925 /* ASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = AE11409F1492BCA70A73E93C5C85F61D /* ASLLogger.m */; };
- 22AE8CDDCD0F380D2860903D7C970FB7 /* LogCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1409EFC284A322894C04EE75B893B0D /* LogCollector.swift */; };
- 2A616C9BEAEA07B9E52E6D97BDC560AA /* ShakeDetectingWindowDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D4BD74A19B6CF650D80FF631A66467D /* ShakeDetectingWindowDelegate.swift */; };
- 2C96653C4721BDEEB7B15C842D44AD95 /* Editor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26F4D76B313CC2C9B0784BEA95093715 /* Editor.swift */; };
- 2E253F9DCD013504F36D54760666DF77 /* LogSupporting.swift in Sources */ = {isa = PBXBuildFile; fileRef = B314898B993EAB442FFFE652B7A805E1 /* LogSupporting.swift */; };
- 311E142970F18B5734A702827CD3A758 /* SourceSansPro-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E334BD6C24DA15656F2A4F49B309C958 /* SourceSansPro-Regular.ttf */; };
- 327D95B82D84A1C0FE261DEDF3833466 /* UIGestureRecognizer+FailRecognizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02556F4959ABD4DA3B2C14629CAB33F9 /* UIGestureRecognizer+FailRecognizing.swift */; };
- 36F0E7A1756294F82BB4566BFD6989A6 /* Screenshotter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0B9D23387D65BEEAA1060DF8E1435E1 /* Screenshotter.swift */; };
- 3D563DBF770AF170E7CFA63D278AAC3B /* EditImageViewControllerBarButtonItemProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1571D749AC0348FD5F88D5C830E00B61 /* EditImageViewControllerBarButtonItemProviding.swift */; };
- 3EA169A7BE12FF8D632E9FF2C197C242 /* UIColor+Palette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B7EC7C7752576BC0E8CA669432B801 /* UIColor+Palette.swift */; };
- 438597D9208F5128B7FF2AE6A0C83170 /* AnnotationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7079189F26B2E4B24BA505DD2F8466F /* AnnotationsView.swift */; };
- 43FB4DE1A656C6AEABB5E9362EAE5291 /* EditorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E39150B97DA9F28E3498F9DA452BA4 /* EditorDelegate.swift */; };
- 477CE286A5197C18C273B0716C5E56AA /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCC9DFE70A35B1C9D56C07C8E27586F5 /* MessageUI.framework */; };
- 492A18A04B511F8960FB56410A90B71F /* SuccessType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75AFA24126628DC1FE801AF553F342B1 /* SuccessType.swift */; };
- 4A010F621B25BC96ABFD0AA9F66FC698 /* ShakeDetectingWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15AD05FF662D619BE274B98D2D24BFA0 /* ShakeDetectingWindow.swift */; };
- 4B082E16E58550C176DAEBD112BE5747 /* PinpointKit.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3003D7BE90B8A01FC115684F230C6341 /* PinpointKit.xcassets */; };
- 4DC567BC9679DD15E54FF0BC2D24A583 /* AnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80837CB18B5C2EB52C31363C5714141C /* AnnotationView.swift */; };
- 4EE0F6F971753AD8DCDF7CA1C78C71DE /* PinpointKit+ShakePresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0987188EA3ED83EE724FA2ABE21383B /* PinpointKit+ShakePresentation.swift */; };
- 4F5C31FAA9A7D1DBF692B97745336421 /* KeyboardAvoider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EABD5DEFA1EF582E27B454D69953D11 /* KeyboardAvoider.swift */; };
- 50E39F7BFE3337933FFAF99287368E76 /* FeedbackCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70DC07A9F0539B7448C64EA6B18D761A /* FeedbackCollector.swift */; };
- 544A06EF131EFBBF9AC2126C224A365A /* FeedbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31960227E584348F53A8265F461AC5AC /* FeedbackViewController.swift */; };
- 640F4E58B57612A4863B5DF5D8C5B29E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3D8132F9DC617E978F59BF7226AC88A /* Foundation.framework */; };
- 687C04050F836477B111FCC444C1BFD2 /* BlurAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8402896BFCC3642F8E27CE6A065E7993 /* BlurAnnotationView.swift */; };
- 68955EE8C6CE7AE3223A7A6EE38E7002 /* FeedbackConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5687EDAF95DC76F30A5CAD49E01AE887 /* FeedbackConfiguration.swift */; };
- 6DE352A3DE9996520F2E7EB6F4527723 /* BarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9645616158FCD460F41C8C58EA8331B2 /* BarButtonItem.swift */; };
- 6F91C631D4EC47731A8EE00A1937B425 /* MIMEType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A12089A08EF6E4E304BC40B880F1C276 /* MIMEType.swift */; };
- 6FA56DE1FBDD2A0CFA22D51D312D817F /* FeedbackTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F1FC8C5DE1A8716B5EFE846D811FA95 /* FeedbackTableViewDataSource.swift */; };
+ 1FE6D07F0E21DDC49BF7272940524383 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD0952F9B52A5DA37449AF14A1EA391B /* UIKit.framework */; };
+ 2079950AABCF71EC04291B4C8E422BF4 /* FeedbackConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79CCE648E9CAD14FDF3CE3A0AEA06623 /* FeedbackConfiguration.swift */; };
+ 22C49DB94C9A551A2CEC274DAB1BF9E3 /* PinpointKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B6EEA985BB879E69398123846A65805C /* PinpointKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 257D7D0855B1AE26CFC785812EFD60E1 /* SourceSansPro-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 03DDED8597C0372367A6EAD6CA15A992 /* SourceSansPro-Regular.ttf */; };
+ 2C05B2DFC6FFE1532BF5A7FEE84267ED /* EditImageViewControllerBarButtonItemProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A0AF4C5CF447E45AC1DB49F7E937D31 /* EditImageViewControllerBarButtonItemProviding.swift */; };
+ 2CADBF8CDFF48D1E9FE83834D5925FD6 /* Editor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC8C89794DFB630F25F11544DBCCBEE0 /* Editor.swift */; };
+ 3E3E45C9FA6F62A40A4BDA1BCE10CBB1 /* SystemLogCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47839A9413989B67F7B7D81E5D819F10 /* SystemLogCollector.swift */; };
+ 45507C67BD1C19B2057C6FDF011F6D79 /* ShakeDetectingWindowDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE7432717E9ED121CDFD7238747C005 /* ShakeDetectingWindowDelegate.swift */; };
+ 497A7F2F761E1B66AA5527BEC2B8F2BD /* LogSupporting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7707CA5ACB7390A32251A2C6381A48F8 /* LogSupporting.swift */; };
+ 50F467A1BA24A5F849156E6868009258 /* BlurAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7A5A0D3F809A36AF666486A84171B70 /* BlurAnnotationView.swift */; };
+ 55BE74931A02A45A2B998D8C68F01B57 /* EditorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E18DF2E1B16F9D2594EDB9F604E9F433 /* EditorDelegate.swift */; };
+ 5710B9D0B4A51A2B8F9ABCC40F43A996 /* ArrowAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5405375C9539A665501AB80225CAE4C /* ArrowAnnotationView.swift */; };
+ 5D5EA6747C0A0C133C66C8A5A0732CA7 /* UIView+PinpointKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F810D8FBC04199EAC8E3101C3E35CC1 /* UIView+PinpointKit.swift */; };
+ 61980B61FFFDE1965C80CD49B3F497F1 /* FeedbackCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B5F92DE6DDE5F7DEFF293BA97FA8C2 /* FeedbackCollector.swift */; };
+ 68368D29672B7AFFC7806527A29481C6 /* CheckmarkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20F691B761C24DA681A7D03F04E1A1D7 /* CheckmarkCell.swift */; };
+ 6B3A4EA89714B8EA350D534E746349E3 /* LogViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61702B4EFC33BC4DA9B00C3B31BC2880 /* LogViewer.swift */; };
+ 7143A7367E0A26BCF2F126BD11A0AE24 /* BezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B521B28520A86CF57F15F4D0D65C77F /* BezierPath.swift */; };
7201B090132223218051A872C4BDA5D9 /* Pods-PinpointKitExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A0D2C935A4D39D21349416AF92B525 /* Pods-PinpointKitExample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 7339E7A595E0CAF6702FFAD60FCD5D7D /* TextAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 180ACFF870D9ED7234CBD7503CD9265D /* TextAnnotationView.swift */; };
- 733DB08BCA4B288F73DCA02614EBB013 /* LogViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18309B67A03316352ABDDA0BAF2DC2CF /* LogViewer.swift */; };
- 76FEFA36FA089B012BDCC32067BBC04E /* CheckmarkCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B932E629F980020571DD484C58C3E280 /* CheckmarkCell.swift */; };
- 84453A1054042F1B21A00D5F5A9223D1 /* ASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D2FF389C174AF86CDC69523123B0CDB /* ASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 84A73C8E2E35B259ED675BA88C1B4267 /* Sender.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8191274E9EE6BEB64155853C0A5BC0AC /* Sender.swift */; };
- 8628B516F3697C973719094520E408EE /* AnnotationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EE0640D67DCF599AFC9CE018015CB /* AnnotationViewFactory.swift */; };
- 886F3D053A9FA92DE3E53CCF0E5ACC8C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73216502745DEA689790BC09AE053707 /* Configuration.swift */; };
- 8E3AAB3C11D33641260D4FA99D189463 /* BezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4312F20E5920871682919138B36D14E9 /* BezierPath.swift */; };
- 8E4294EE0330D220947F74898809E812 /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF9588E8D07DD4BDDDB4E91AC8D41538 /* NavigationController.swift */; };
- 9095651C498EABD1D7E2911F03D5198A /* SourceSansPro-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B5C4CA2553793DA257689AD6CE78C56C /* SourceSansPro-Semibold.ttf */; };
- 93497D48EBE2E9BB0B81C7A92A28FD90 /* PinpointKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE75659618FF0482E28B29786972EB21 /* PinpointKit-dummy.m */; };
- 959E11680CFF6770C2CDCF70704073CB /* Annotations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28FAB9FF56EE10C26DCA5DB309AAFE27 /* Annotations.swift */; };
- 9768695F13681DEB8FA08B0DB44486A3 /* SystemLogCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C16983DE02892C7623CE4AC524D69A53 /* SystemLogCollector.swift */; };
- 9828EC589A1860C24953383D204BB241 /* PinpointKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D70AA6D401751FF12DF1877EEBA63297 /* PinpointKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 9DA24D9942244A970505575AF9C926FB /* FeedbackNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A23809C2ECD6D081A51823DA8CA7811B /* FeedbackNavigationController.swift */; };
- A53DFCD66AB042B8C354332080099EB1 /* BoxAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C206B06256E027D6524865A677BEC0 /* BoxAnnotationView.swift */; };
- A8BB7B4426E76E82D79D9CF8B8ACB157 /* ScreenshotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B07DE547D57814924E65E055C27DFC5 /* ScreenshotCell.swift */; };
- ABC29004EAAC5A4E29DA9A60CB97E47B /* PinpointKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C82FAA3A46DFCCF4732499CAAD099AA /* PinpointKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
- B52D585358DBCD46EF787F40CD62FB60 /* PinpointKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 728DB7C20BBC431552474C3DFC4F1D5C /* PinpointKit.swift */; };
- C02B8980A89C60D3C95F6222D8BF2A44 /* MailSender.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42B71BCC2909C871AEE75204F8B0F6E /* MailSender.swift */; };
- D67408C62D0FB1F6CFC37D0FCF9DFB19 /* EditImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A170EFB140353EC0C55B17D632ED4B53 /* EditImageViewController.swift */; };
- DEEA1D06FD17E8BB53A84849AF1CA666 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD0952F9B52A5DA37449AF14A1EA391B /* UIKit.framework */; };
- E477B03672E682B73B367C37410F1C21 /* Feedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736B91A6711BDAF01732E502C6BF9C6F /* Feedback.swift */; };
- E5226ABD9D10AEA052A9617624BEE0A6 /* Fonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 203D8212E29371F38C4DB4E3BCEC7082 /* Fonts.swift */; };
- E9A3CB58177E30C07EF8E65D613BA6DA /* NSBundle+PinpointKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3485FB818A7BB9F6B272428F73D3BDD /* NSBundle+PinpointKit.swift */; };
- EDB8B6E6FB5F72DCC0E09C2A4C3BBEBE /* ArrowAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3891D91CE129CAF1343139D685830F03 /* ArrowAnnotationView.swift */; };
- F025918332A3D23BDB3D9310E4AF7351 /* Tool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE7D863B542BF040C7ADE0603F88984 /* Tool.swift */; };
- F25AEBFAD3E95D2B41CB279397C0B40D /* UIBarButtonItem+TitleTextAttributeStates.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA28E9A868107C1DD9E805FFAE9D5746 /* UIBarButtonItem+TitleTextAttributeStates.swift */; };
- F2ACB339E62F889729EDA7B25E3E1E95 /* InterfaceCustomizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 618F3CAB614910C598CC27A94F7F38CA /* InterfaceCustomizable.swift */; };
- F660AAE2F3E34F081B3D0E86061B75DA /* InterfaceCustomization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1754B5B1176720C013796502290F3B13 /* InterfaceCustomization.swift */; };
- F66121D202FA3BE2EF9AC02FDC0E5B5C /* SourceSansPro-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 048E3E0B219F8E74673CA3E6B8EA9690 /* SourceSansPro-Bold.ttf */; };
- FA1E0D49274A1FDA23AF1581B140201E /* Screen.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4F353285BE1B32417F43EFCBB714DC /* Screen.swift */; };
- FCECA4F34938D9732045FFF0C24BF3E1 /* BasicLogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5032EE02BCED9C798618C18C3BC04D53 /* BasicLogViewController.swift */; };
+ 757F76FA8C2DF34871EA759EFBC80F6C /* EditImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 202E905D98F76997BAF66C7088329BB8 /* EditImageViewController.swift */; };
+ 7815EDEE467A8B93B68EBA3610E82977 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3D8132F9DC617E978F59BF7226AC88A /* Foundation.framework */; };
+ 829F85491BE0FF5C4A3D94CF831C6C18 /* BasicLogViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3031BF60D3756346CA4E1E08E7C7A465 /* BasicLogViewController.swift */; };
+ 83583C56D54388AEFF62B76C3C17F072 /* Fonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5537D60E0DAC5A2AE7D9E8FD7D88EEA6 /* Fonts.swift */; };
+ 83B6D2FEF34D03B357B9B87A4FE4B724 /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA419B5DA68D91A9A56DFA1F9FE3F991 /* NavigationController.swift */; };
+ 8659398477459CA64211B78138BF2717 /* MailSender.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B7B8DB40154D4574EC591581C59D04 /* MailSender.swift */; };
+ 8A021DD0839295297B78733A8128FFC2 /* ScreenshotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E13C8EBEC097B2210B9DFC8C4581FC83 /* ScreenshotCell.swift */; };
+ 8AC86F3A925432D69CED97B164765841 /* UIColor+Palette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C69C6365FB79370BDDFD3556A0BCC9A /* UIColor+Palette.swift */; };
+ 927D7B5E88793C02E77FC9CD264ABB34 /* BarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2709E283928DC3A69BFE47E5344F9F9 /* BarButtonItem.swift */; };
+ 9E653AB67A4F8916CDB7870536E95389 /* FeedbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2D2889641DD53462855DDD4F0F3E25 /* FeedbackViewController.swift */; };
+ A37D1DF2F979398DE4EAC8E11FDAA16F /* Tool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 501F051C6AF2176F6CF8516DE83EDEC8 /* Tool.swift */; };
+ A7578DBA511837C07CB23FBDAA1B2953 /* RequestScreenshotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F88C6BB404FA78E6D9A5864C95A226 /* RequestScreenshotCell.swift */; };
+ AD3EC705A8216176C6846A201AFF8ED5 /* Screen.swift in Sources */ = {isa = PBXBuildFile; fileRef = E855319846B9E71829F4398CBF61A5FE /* Screen.swift */; };
+ B07145BAED83D90A3B6A39ECDFB302AA /* ASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 05BE0DC4CB17ABD05D0DA3B8DD179858 /* ASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B178B8AC520BABF40A7F66E4EB35824D /* AnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BEB8C79B8D0DFC544E3A9554607AF2 /* AnnotationView.swift */; };
+ B2DD02CBAFBD36726EEE403110875AA3 /* ASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 541FCFF5C08437EB698A9C5CA9CEB4B2 /* ASLLogger.m */; };
+ B3DF0CAFA9CCF96A3756B8576CC6C669 /* MIMEType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC336467ECD3A956470FCE2475A393C /* MIMEType.swift */; };
+ B41C35D971BC52BBCD7D091984AF40E7 /* AnnotationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B2160E8A5CBB52809BFF637F911EEE9 /* AnnotationsView.swift */; };
+ BE0FB3B416BF9A5CDD80742C57805A77 /* Screenshotter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504CCFDFCF425BE9CD55AEAC721BC10B /* Screenshotter.swift */; };
+ C6086722AD53CC9750F505D4D15B99F7 /* SuccessType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1F7F78E49FB6DFA0149F33E057AA10 /* SuccessType.swift */; };
+ C72BF9B389BED609944AD89CD7416AF0 /* PinpointKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 821F22677A30C1AF4AC060DB834AC387 /* PinpointKit-dummy.m */; };
+ CA9C884DBB7F22488BAC5F7B29ECFF73 /* Annotations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16F5099BC6D66AA0F486EB148FBFB5D2 /* Annotations.swift */; };
+ CAB56A57223BCF0724E259DDAF5C33B6 /* InterfaceCustomizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE06415E1BE52EC2DA638F579458DD91 /* InterfaceCustomizable.swift */; };
+ CC5679DE9C8D903833B8FAAC4B3395D3 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCC9DFE70A35B1C9D56C07C8E27586F5 /* MessageUI.framework */; };
+ CD6AB3D3914E9EF89703F2C75F96651C /* PinpointKit+ShakePresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7755CBA9DDD85821BCF4AD10366D6E62 /* PinpointKit+ShakePresentation.swift */; };
+ D1F4DD03D25B6179D7E4834196B3E842 /* SourceSansPro-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 04C786CD2765884D582B3ECEFBA7955F /* SourceSansPro-Bold.ttf */; };
+ D6C8D11E7C640F86EC2955DE80A4B03B /* TextAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA1CB9E82E998EF45C00E13D09D76B02 /* TextAnnotationView.swift */; };
+ DA4BEB61320D668880DB9BAF2E2BBED7 /* UIBarButtonItem+TitleTextAttributeStates.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCC0F59E52846698CFFC0D7523468BF7 /* UIBarButtonItem+TitleTextAttributeStates.swift */; };
+ DB94C303676F830414CB1DAB9BA5D351 /* BoxAnnotationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B68B5934CDC29A9659237EBBABD3157 /* BoxAnnotationView.swift */; };
+ DC601F18851420E3E7BA928C26B8F496 /* PinpointKit.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3A281FBD8738A46DBB12F9533A552222 /* PinpointKit.xcassets */; };
+ DD3DD018057C8D761E31D7DD240DEE92 /* LogCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CCBA94DB772F4D1D279D8AA8109B494 /* LogCollector.swift */; };
+ DE6EDCD32448D2111968B18916D00BDD /* PinpointKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = E07E16C12D411F2531FA779157B7F8CB /* PinpointKit.swift */; };
+ DF091AD1A3F8BFD73593B39B1E6ED10B /* Feedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77506E7A3D83D4876FB8C8695B90D19C /* Feedback.swift */; };
+ E1964BF83BA075AC3218E292A4A6C9C7 /* FeedbackTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62EBA7864083952345AF5BF50410295B /* FeedbackTableViewDataSource.swift */; };
+ E1C6C7B1289E50897740CABB1DC552D4 /* StrokeLayoutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F159FD76DCD82C4732BDC378419433 /* StrokeLayoutManager.swift */; };
+ E2579B2F457B64BB491D4E165FF0692F /* FeedbackNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D2A06AA1F026E5EEA25EDEE51D7DAE6 /* FeedbackNavigationController.swift */; };
+ E3F6A8483CF0B488FB56BD48108CBC42 /* SourceSansPro-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 31A6B5842CAB506E7D318C2CE2FA6428 /* SourceSansPro-Semibold.ttf */; };
+ E56F8969D9C6A2984E22C796A43DA62E /* ShakeDetectingWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF2E6340B6D3E42DDD6DEA2E31516E4D /* ShakeDetectingWindow.swift */; };
+ E622FFBEF68DB590021806BE986E4706 /* PinpointKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 69B3A4B93BEBCEF16609E1D347C6BB14 /* PinpointKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F254E4BB33D2C75930AB753B92C6F6B0 /* UIGestureRecognizer+FailRecognizing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133C8123C233F53AA49AE37FC253D102 /* UIGestureRecognizer+FailRecognizing.swift */; };
+ FD9D2481535FEFCA806B1398A6CD2424 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 313BA0FFA7E8033DC4291F2D931FB273 /* Configuration.swift */; };
+ FE8A6526C8AEB627A9DAA0FA1737A63B /* KeyboardAvoider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3D9934C9601BED445ED206D76FCD6AC /* KeyboardAvoider.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -79,112 +80,113 @@
isa = PBXContainerItemProxy;
containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 74EF4866D3C70A92D70DA54E177D3738;
+ remoteGlobalIDString = 35433D18219DB934E9CB11A034357452;
remoteInfo = PinpointKit;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
0148F29BAA8B901AF499610F69E21EB0 /* PinpointKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PinpointKit.framework; path = PinpointKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 02556F4959ABD4DA3B2C14629CAB33F9 /* UIGestureRecognizer+FailRecognizing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIGestureRecognizer+FailRecognizing.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIGestureRecognizer+FailRecognizing.swift"; sourceTree = ""; };
- 048E3E0B219F8E74673CA3E6B8EA9690 /* SourceSansPro-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "SourceSansPro-Bold.ttf"; path = "PinpointKit/PinpointKit/Resources/SourceSansPro-Bold.ttf"; sourceTree = ""; };
+ 03DDED8597C0372367A6EAD6CA15A992 /* SourceSansPro-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "SourceSansPro-Regular.ttf"; path = "PinpointKit/PinpointKit/Resources/SourceSansPro-Regular.ttf"; sourceTree = ""; };
+ 04C786CD2765884D582B3ECEFBA7955F /* SourceSansPro-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "SourceSansPro-Bold.ttf"; path = "PinpointKit/PinpointKit/Resources/SourceSansPro-Bold.ttf"; sourceTree = ""; };
+ 05BE0DC4CB17ABD05D0DA3B8DD179858 /* ASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ASLLogger.h; path = PinpointKit/PinpointKit/Sources/Core/ASLLogger.h; sourceTree = ""; };
0A3984A794B8C50CF8A494535648E07D /* Pods-PinpointKitExample-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PinpointKitExample-resources.sh"; sourceTree = ""; };
0C52BEF82EABB07DA897A4885E9EDBC0 /* Pods-PinpointKitExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PinpointKitExample.debug.xcconfig"; sourceTree = ""; };
- 0C82FAA3A46DFCCF4732499CAAD099AA /* PinpointKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PinpointKit.h; path = PinpointKit/PinpointKit/Sources/Core/PinpointKit.h; sourceTree = ""; };
- 0D4BD74A19B6CF650D80FF631A66467D /* ShakeDetectingWindowDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShakeDetectingWindowDelegate.swift; path = PinpointKit/PinpointKit/Sources/Core/ShakeDetectingWindowDelegate.swift; sourceTree = ""; };
- 0EABD5DEFA1EF582E27B454D69953D11 /* KeyboardAvoider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardAvoider.swift; path = PinpointKit/PinpointKit/Sources/Core/KeyboardAvoider.swift; sourceTree = ""; };
- 0F8AE2A48FCCFE11832030C700DD7F5A /* PinpointKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PinpointKit-prefix.pch"; sourceTree = ""; };
- 1431876B7BC76FDDDE604094B7DC491B /* StrokeLayoutManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeLayoutManager.swift; path = PinpointKit/PinpointKit/Sources/Core/StrokeLayoutManager.swift; sourceTree = ""; };
- 1571D749AC0348FD5F88D5C830E00B61 /* EditImageViewControllerBarButtonItemProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EditImageViewControllerBarButtonItemProviding.swift; sourceTree = ""; };
- 15AD05FF662D619BE274B98D2D24BFA0 /* ShakeDetectingWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShakeDetectingWindow.swift; path = PinpointKit/PinpointKit/Sources/Core/ShakeDetectingWindow.swift; sourceTree = ""; };
- 1754B5B1176720C013796502290F3B13 /* InterfaceCustomization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InterfaceCustomization.swift; path = PinpointKit/PinpointKit/Sources/Core/InterfaceCustomization.swift; sourceTree = ""; };
- 17C206B06256E027D6524865A677BEC0 /* BoxAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BoxAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/BoxAnnotationView.swift; sourceTree = ""; };
- 180ACFF870D9ED7234CBD7503CD9265D /* TextAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/TextAnnotationView.swift; sourceTree = ""; };
- 18309B67A03316352ABDDA0BAF2DC2CF /* LogViewer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogViewer.swift; path = PinpointKit/PinpointKit/Sources/Core/LogViewer.swift; sourceTree = ""; };
- 1A56764F4F1609E980341799CD1C8213 /* PinpointKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PinpointKit.modulemap; sourceTree = ""; };
- 203D8212E29371F38C4DB4E3BCEC7082 /* Fonts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fonts.swift; path = PinpointKit/PinpointKit/Sources/Core/Fonts.swift; sourceTree = ""; };
- 20B27210C764A5BA8A50504377524D2E /* PinpointKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PinpointKit.xcconfig; sourceTree = ""; };
- 23B7EC7C7752576BC0E8CA669432B801 /* UIColor+Palette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Palette.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIColor+Palette.swift"; sourceTree = ""; };
- 26F4D76B313CC2C9B0784BEA95093715 /* Editor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Editor.swift; sourceTree = ""; };
- 28FAB9FF56EE10C26DCA5DB309AAFE27 /* Annotations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Annotations.swift; path = PinpointKit/PinpointKit/Sources/Core/Annotations.swift; sourceTree = ""; };
+ 0C69C6365FB79370BDDFD3556A0BCC9A /* UIColor+Palette.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIColor+Palette.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIColor+Palette.swift"; sourceTree = ""; };
+ 0D2D2889641DD53462855DDD4F0F3E25 /* FeedbackViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackViewController.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackViewController.swift; sourceTree = ""; };
+ 1051C54C2A571CD6B01945A2C6AC1E61 /* PinpointKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PinpointKit-prefix.pch"; sourceTree = ""; };
+ 133C8123C233F53AA49AE37FC253D102 /* UIGestureRecognizer+FailRecognizing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIGestureRecognizer+FailRecognizing.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIGestureRecognizer+FailRecognizing.swift"; sourceTree = ""; };
+ 16F5099BC6D66AA0F486EB148FBFB5D2 /* Annotations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Annotations.swift; path = PinpointKit/PinpointKit/Sources/Core/Annotations.swift; sourceTree = ""; };
+ 1B521B28520A86CF57F15F4D0D65C77F /* BezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BezierPath.swift; path = PinpointKit/PinpointKit/Sources/Core/BezierPath.swift; sourceTree = ""; };
+ 202E905D98F76997BAF66C7088329BB8 /* EditImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EditImageViewController.swift; sourceTree = ""; };
+ 20F691B761C24DA681A7D03F04E1A1D7 /* CheckmarkCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckmarkCell.swift; path = PinpointKit/PinpointKit/Sources/Core/CheckmarkCell.swift; sourceTree = ""; };
+ 2D2A06AA1F026E5EEA25EDEE51D7DAE6 /* FeedbackNavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackNavigationController.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackNavigationController.swift; sourceTree = ""; };
2FC5CAA91B7D788B096A7564D11AAF2F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 3003D7BE90B8A01FC115684F230C6341 /* PinpointKit.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = PinpointKit.xcassets; path = PinpointKit/PinpointKit/Resources/PinpointKit.xcassets; sourceTree = ""; };
- 31960227E584348F53A8265F461AC5AC /* FeedbackViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackViewController.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackViewController.swift; sourceTree = ""; };
+ 3031BF60D3756346CA4E1E08E7C7A465 /* BasicLogViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BasicLogViewController.swift; path = PinpointKit/PinpointKit/Sources/Core/BasicLogViewController.swift; sourceTree = ""; };
+ 313BA0FFA7E8033DC4291F2D931FB273 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = PinpointKit/PinpointKit/Sources/Core/Configuration.swift; sourceTree = ""; };
+ 31A6B5842CAB506E7D318C2CE2FA6428 /* SourceSansPro-Semibold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "SourceSansPro-Semibold.ttf"; path = "PinpointKit/PinpointKit/Resources/SourceSansPro-Semibold.ttf"; sourceTree = ""; };
+ 34F159FD76DCD82C4732BDC378419433 /* StrokeLayoutManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeLayoutManager.swift; path = PinpointKit/PinpointKit/Sources/Core/StrokeLayoutManager.swift; sourceTree = ""; };
37548A2BDDF0E66DC404FEDD259C88E5 /* Pods-PinpointKitExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PinpointKitExample-dummy.m"; sourceTree = ""; };
- 379EE0640D67DCF599AFC9CE018015CB /* AnnotationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnnotationViewFactory.swift; sourceTree = ""; };
- 3891D91CE129CAF1343139D685830F03 /* ArrowAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ArrowAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/ArrowAnnotationView.swift; sourceTree = ""; };
+ 3A281FBD8738A46DBB12F9533A552222 /* PinpointKit.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = PinpointKit.xcassets; path = PinpointKit/PinpointKit/Resources/PinpointKit.xcassets; sourceTree = ""; };
+ 3C0A031BD60372B640FAACF4CDA806FB /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
+ 3C56D413219A1EE75CBE088960E03985 /* NSBundle+PinpointKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSBundle+PinpointKit.swift"; path = "PinpointKit/PinpointKit/Sources/Core/NSBundle+PinpointKit.swift"; sourceTree = ""; };
3F135D9D2859350E531F62C2FF9E079A /* Pods-PinpointKitExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-PinpointKitExample.modulemap"; sourceTree = ""; };
- 40D1ED5B74B6FABE2530E111FD457A69 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
- 4312F20E5920871682919138B36D14E9 /* BezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BezierPath.swift; path = PinpointKit/PinpointKit/Sources/Core/BezierPath.swift; sourceTree = ""; };
- 4B07DE547D57814924E65E055C27DFC5 /* ScreenshotCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScreenshotCell.swift; path = PinpointKit/PinpointKit/Sources/Core/ScreenshotCell.swift; sourceTree = ""; };
- 4FE7D863B542BF040C7ADE0603F88984 /* Tool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Tool.swift; sourceTree = ""; };
- 5032EE02BCED9C798618C18C3BC04D53 /* BasicLogViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BasicLogViewController.swift; path = PinpointKit/PinpointKit/Sources/Core/BasicLogViewController.swift; sourceTree = ""; };
- 5687EDAF95DC76F30A5CAD49E01AE887 /* FeedbackConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackConfiguration.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackConfiguration.swift; sourceTree = ""; };
- 5BB28BB51E690F6DBD634842E54D60A1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- 5CA66761C7D9197C2364A1E173D9E26A /* UIView+PinpointKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+PinpointKit.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIView+PinpointKit.swift"; sourceTree = ""; };
- 618F3CAB614910C598CC27A94F7F38CA /* InterfaceCustomizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InterfaceCustomizable.swift; path = PinpointKit/PinpointKit/Sources/Core/InterfaceCustomizable.swift; sourceTree = ""; };
+ 3FCE75777949E78FDBA4ACD31EAF3BE7 /* AnnotationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnnotationViewFactory.swift; sourceTree = ""; };
+ 423C59FDA444FD62438F59C103268C25 /* Sender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sender.swift; path = PinpointKit/PinpointKit/Sources/Core/Sender.swift; sourceTree = ""; };
+ 47839A9413989B67F7B7D81E5D819F10 /* SystemLogCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SystemLogCollector.swift; path = PinpointKit/PinpointKit/Sources/Core/SystemLogCollector.swift; sourceTree = ""; };
+ 4CCBA94DB772F4D1D279D8AA8109B494 /* LogCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogCollector.swift; path = PinpointKit/PinpointKit/Sources/Core/LogCollector.swift; sourceTree = ""; };
+ 4CE7432717E9ED121CDFD7238747C005 /* ShakeDetectingWindowDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShakeDetectingWindowDelegate.swift; path = PinpointKit/PinpointKit/Sources/Core/ShakeDetectingWindowDelegate.swift; sourceTree = ""; };
+ 501F051C6AF2176F6CF8516DE83EDEC8 /* Tool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Tool.swift; sourceTree = ""; };
+ 504CCFDFCF425BE9CD55AEAC721BC10B /* Screenshotter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Screenshotter.swift; path = PinpointKit/PinpointKit/Sources/Core/Screenshotter.swift; sourceTree = ""; };
+ 541FCFF5C08437EB698A9C5CA9CEB4B2 /* ASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ASLLogger.m; path = PinpointKit/PinpointKit/Sources/Core/ASLLogger.m; sourceTree = ""; };
+ 5537D60E0DAC5A2AE7D9E8FD7D88EEA6 /* Fonts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fonts.swift; path = PinpointKit/PinpointKit/Sources/Core/Fonts.swift; sourceTree = ""; };
+ 55AB1C7C8E6BF81FBE6746A64B760DE0 /* InterfaceCustomization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InterfaceCustomization.swift; path = PinpointKit/PinpointKit/Sources/Core/InterfaceCustomization.swift; sourceTree = ""; };
+ 5B2160E8A5CBB52809BFF637F911EEE9 /* AnnotationsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnnotationsView.swift; path = PinpointKit/PinpointKit/Sources/Core/AnnotationsView.swift; sourceTree = ""; };
+ 5FC336467ECD3A956470FCE2475A393C /* MIMEType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MIMEType.swift; path = PinpointKit/PinpointKit/Sources/Core/MIMEType.swift; sourceTree = ""; };
+ 60F58D29F6906C15D42D7671FEABBCAA /* PinpointKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PinpointKit.modulemap; sourceTree = ""; };
+ 61702B4EFC33BC4DA9B00C3B31BC2880 /* LogViewer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogViewer.swift; path = PinpointKit/PinpointKit/Sources/Core/LogViewer.swift; sourceTree = ""; };
+ 62EBA7864083952345AF5BF50410295B /* FeedbackTableViewDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackTableViewDataSource.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackTableViewDataSource.swift; sourceTree = ""; };
+ 65F88C6BB404FA78E6D9A5864C95A226 /* RequestScreenshotCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestScreenshotCell.swift; path = PinpointKit/PinpointKit/Sources/Core/RequestScreenshotCell.swift; sourceTree = ""; };
+ 69B3A4B93BEBCEF16609E1D347C6BB14 /* PinpointKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PinpointKit.h; path = PinpointKit/PinpointKit/Sources/Core/PinpointKit.h; sourceTree = ""; };
+ 6A0AF4C5CF447E45AC1DB49F7E937D31 /* EditImageViewControllerBarButtonItemProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EditImageViewControllerBarButtonItemProviding.swift; sourceTree = ""; };
6F799E3827193EF1AF1D3B405780DEDB /* Pods-PinpointKitExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PinpointKitExample-acknowledgements.markdown"; sourceTree = ""; };
- 70DC07A9F0539B7448C64EA6B18D761A /* FeedbackCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackCollector.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackCollector.swift; sourceTree = ""; };
- 728DB7C20BBC431552474C3DFC4F1D5C /* PinpointKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PinpointKit.swift; path = PinpointKit/PinpointKit/Sources/Core/PinpointKit.swift; sourceTree = ""; };
- 73216502745DEA689790BC09AE053707 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = PinpointKit/PinpointKit/Sources/Core/Configuration.swift; sourceTree = ""; };
- 736B91A6711BDAF01732E502C6BF9C6F /* Feedback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Feedback.swift; path = PinpointKit/PinpointKit/Sources/Core/Feedback.swift; sourceTree = ""; };
- 75AFA24126628DC1FE801AF553F342B1 /* SuccessType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuccessType.swift; path = PinpointKit/PinpointKit/Sources/Core/SuccessType.swift; sourceTree = ""; };
- 80837CB18B5C2EB52C31363C5714141C /* AnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/AnnotationView.swift; sourceTree = ""; };
- 8191274E9EE6BEB64155853C0A5BC0AC /* Sender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sender.swift; path = PinpointKit/PinpointKit/Sources/Core/Sender.swift; sourceTree = ""; };
- 82888991C5F00E69C6DB5DDDAFAD18C3 /* PinpointKit.podspec.json */ = {isa = PBXFileReference; includeInIndex = 1; path = PinpointKit.podspec.json; sourceTree = ""; };
- 8402896BFCC3642F8E27CE6A065E7993 /* BlurAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlurAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/BlurAnnotationView.swift; sourceTree = ""; };
+ 7707CA5ACB7390A32251A2C6381A48F8 /* LogSupporting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogSupporting.swift; path = PinpointKit/PinpointKit/Sources/Core/LogSupporting.swift; sourceTree = ""; };
+ 771D150E499D5F8214E8FB312B435014 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
+ 77506E7A3D83D4876FB8C8695B90D19C /* Feedback.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Feedback.swift; path = PinpointKit/PinpointKit/Sources/Core/Feedback.swift; sourceTree = ""; };
+ 7755CBA9DDD85821BCF4AD10366D6E62 /* PinpointKit+ShakePresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PinpointKit+ShakePresentation.swift"; path = "PinpointKit/PinpointKit/Sources/Core/PinpointKit+ShakePresentation.swift"; sourceTree = ""; };
+ 79CCE648E9CAD14FDF3CE3A0AEA06623 /* FeedbackConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackConfiguration.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackConfiguration.swift; sourceTree = ""; };
+ 7B68B5934CDC29A9659237EBBABD3157 /* BoxAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BoxAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/BoxAnnotationView.swift; sourceTree = ""; };
+ 821F22677A30C1AF4AC060DB834AC387 /* PinpointKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PinpointKit-dummy.m"; sourceTree = ""; };
8E48D44046FC860DAC611BC5CA2F03A3 /* Pods-PinpointKitExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PinpointKitExample-acknowledgements.plist"; sourceTree = ""; };
93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
- 9645616158FCD460F41C8C58EA8331B2 /* BarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarButtonItem.swift; path = PinpointKit/PinpointKit/Sources/Core/BarButtonItem.swift; sourceTree = ""; };
- 9D2FF389C174AF86CDC69523123B0CDB /* ASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ASLLogger.h; path = PinpointKit/PinpointKit/Sources/Core/ASLLogger.h; sourceTree = ""; };
- 9F1FC8C5DE1A8716B5EFE846D811FA95 /* FeedbackTableViewDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackTableViewDataSource.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackTableViewDataSource.swift; sourceTree = ""; };
- A0987188EA3ED83EE724FA2ABE21383B /* PinpointKit+ShakePresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PinpointKit+ShakePresentation.swift"; path = "PinpointKit/PinpointKit/Sources/Core/PinpointKit+ShakePresentation.swift"; sourceTree = ""; };
- A0B9D23387D65BEEAA1060DF8E1435E1 /* Screenshotter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Screenshotter.swift; path = PinpointKit/PinpointKit/Sources/Core/Screenshotter.swift; sourceTree = ""; };
- A12089A08EF6E4E304BC40B880F1C276 /* MIMEType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MIMEType.swift; path = PinpointKit/PinpointKit/Sources/Core/MIMEType.swift; sourceTree = ""; };
- A1409EFC284A322894C04EE75B893B0D /* LogCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogCollector.swift; path = PinpointKit/PinpointKit/Sources/Core/LogCollector.swift; sourceTree = ""; };
- A170EFB140353EC0C55B17D632ED4B53 /* EditImageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EditImageViewController.swift; sourceTree = ""; };
- A23809C2ECD6D081A51823DA8CA7811B /* FeedbackNavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackNavigationController.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackNavigationController.swift; sourceTree = ""; };
+ 9F810D8FBC04199EAC8E3101C3E35CC1 /* UIView+PinpointKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+PinpointKit.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIView+PinpointKit.swift"; sourceTree = ""; };
A9A0D2C935A4D39D21349416AF92B525 /* Pods-PinpointKitExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-PinpointKitExample-umbrella.h"; sourceTree = ""; };
- AE11409F1492BCA70A73E93C5C85F61D /* ASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ASLLogger.m; path = PinpointKit/PinpointKit/Sources/Core/ASLLogger.m; sourceTree = ""; };
- B314898B993EAB442FFFE652B7A805E1 /* LogSupporting.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogSupporting.swift; path = PinpointKit/PinpointKit/Sources/Core/LogSupporting.swift; sourceTree = ""; };
- B5C4CA2553793DA257689AD6CE78C56C /* SourceSansPro-Semibold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "SourceSansPro-Semibold.ttf"; path = "PinpointKit/PinpointKit/Resources/SourceSansPro-Semibold.ttf"; sourceTree = ""; };
- B932E629F980020571DD484C58C3E280 /* CheckmarkCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CheckmarkCell.swift; path = PinpointKit/PinpointKit/Sources/Core/CheckmarkCell.swift; sourceTree = ""; };
- C16983DE02892C7623CE4AC524D69A53 /* SystemLogCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SystemLogCollector.swift; path = PinpointKit/PinpointKit/Sources/Core/SystemLogCollector.swift; sourceTree = ""; };
+ AA1CB9E82E998EF45C00E13D09D76B02 /* TextAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/TextAnnotationView.swift; sourceTree = ""; };
+ AA419B5DA68D91A9A56DFA1F9FE3F991 /* NavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationController.swift; path = PinpointKit/PinpointKit/Sources/Core/NavigationController.swift; sourceTree = ""; };
+ B6EEA985BB879E69398123846A65805C /* PinpointKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PinpointKit-umbrella.h"; sourceTree = ""; };
+ B7A5A0D3F809A36AF666486A84171B70 /* BlurAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlurAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/BlurAnnotationView.swift; sourceTree = ""; };
+ C0B5F92DE6DDE5F7DEFF293BA97FA8C2 /* FeedbackCollector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FeedbackCollector.swift; path = PinpointKit/PinpointKit/Sources/Core/FeedbackCollector.swift; sourceTree = ""; };
C4D9057897E22B5264C1439151CEB8B8 /* Pods-PinpointKitExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PinpointKitExample-frameworks.sh"; sourceTree = ""; };
- C77F62AD746A2F748D1BB4868D08F2C8 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
- CA4F353285BE1B32417F43EFCBB714DC /* Screen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Screen.swift; path = PinpointKit/PinpointKit/Sources/Core/Screen.swift; sourceTree = ""; };
+ C5B7B8DB40154D4574EC591581C59D04 /* MailSender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MailSender.swift; path = PinpointKit/PinpointKit/Sources/Core/MailSender.swift; sourceTree = ""; };
+ C5BEB8C79B8D0DFC544E3A9554607AF2 /* AnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/AnnotationView.swift; sourceTree = ""; };
CCC9DFE70A35B1C9D56C07C8E27586F5 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/MessageUI.framework; sourceTree = DEVELOPER_DIR; };
- D70AA6D401751FF12DF1877EEBA63297 /* PinpointKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PinpointKit-umbrella.h"; sourceTree = ""; };
+ CF2E6340B6D3E42DDD6DEA2E31516E4D /* ShakeDetectingWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShakeDetectingWindow.swift; path = PinpointKit/PinpointKit/Sources/Core/ShakeDetectingWindow.swift; sourceTree = ""; };
+ D4033607E136E6DE2A7228996DABA145 /* PinpointKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PinpointKit.xcconfig; sourceTree = ""; };
D816779985ABAD820D8B8B4720BA007D /* Pods-PinpointKitExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PinpointKitExample.release.xcconfig"; sourceTree = ""; };
- DA28E9A868107C1DD9E805FFAE9D5746 /* UIBarButtonItem+TitleTextAttributeStates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+TitleTextAttributeStates.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIBarButtonItem+TitleTextAttributeStates.swift"; sourceTree = ""; };
- DF9588E8D07DD4BDDDB4E91AC8D41538 /* NavigationController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigationController.swift; path = PinpointKit/PinpointKit/Sources/Core/NavigationController.swift; sourceTree = ""; };
- E334BD6C24DA15656F2A4F49B309C958 /* SourceSansPro-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; name = "SourceSansPro-Regular.ttf"; path = "PinpointKit/PinpointKit/Resources/SourceSansPro-Regular.ttf"; sourceTree = ""; };
- E3485FB818A7BB9F6B272428F73D3BDD /* NSBundle+PinpointKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSBundle+PinpointKit.swift"; path = "PinpointKit/PinpointKit/Sources/Core/NSBundle+PinpointKit.swift"; sourceTree = ""; };
- E42B71BCC2909C871AEE75204F8B0F6E /* MailSender.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MailSender.swift; path = PinpointKit/PinpointKit/Sources/Core/MailSender.swift; sourceTree = ""; };
- EE75659618FF0482E28B29786972EB21 /* PinpointKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PinpointKit-dummy.m"; sourceTree = ""; };
+ DC8C89794DFB630F25F11544DBCCBEE0 /* Editor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Editor.swift; sourceTree = ""; };
+ E07E16C12D411F2531FA779157B7F8CB /* PinpointKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PinpointKit.swift; path = PinpointKit/PinpointKit/Sources/Core/PinpointKit.swift; sourceTree = ""; };
+ E13C8EBEC097B2210B9DFC8C4581FC83 /* ScreenshotCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScreenshotCell.swift; path = PinpointKit/PinpointKit/Sources/Core/ScreenshotCell.swift; sourceTree = ""; };
+ E18DF2E1B16F9D2594EDB9F604E9F433 /* EditorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EditorDelegate.swift; sourceTree = ""; };
+ E1A3643B5B6DEC5F626A26349E3EDD28 /* PinpointKit.podspec.json */ = {isa = PBXFileReference; includeInIndex = 1; path = PinpointKit.podspec.json; sourceTree = ""; };
+ E5405375C9539A665501AB80225CAE4C /* ArrowAnnotationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ArrowAnnotationView.swift; path = PinpointKit/PinpointKit/Sources/Core/ArrowAnnotationView.swift; sourceTree = ""; };
+ E855319846B9E71829F4398CBF61A5FE /* Screen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Screen.swift; path = PinpointKit/PinpointKit/Sources/Core/Screen.swift; sourceTree = ""; };
+ EB1F7F78E49FB6DFA0149F33E057AA10 /* SuccessType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuccessType.swift; path = PinpointKit/PinpointKit/Sources/Core/SuccessType.swift; sourceTree = ""; };
+ EB8BF7DBC9C71540D094368B967AF8CE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ EE06415E1BE52EC2DA638F579458DD91 /* InterfaceCustomizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InterfaceCustomizable.swift; path = PinpointKit/PinpointKit/Sources/Core/InterfaceCustomizable.swift; sourceTree = ""; };
+ F2709E283928DC3A69BFE47E5344F9F9 /* BarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarButtonItem.swift; path = PinpointKit/PinpointKit/Sources/Core/BarButtonItem.swift; sourceTree = ""; };
F3D8132F9DC617E978F59BF7226AC88A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
- F7079189F26B2E4B24BA505DD2F8466F /* AnnotationsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnnotationsView.swift; path = PinpointKit/PinpointKit/Sources/Core/AnnotationsView.swift; sourceTree = ""; };
- F7E39150B97DA9F28E3498F9DA452BA4 /* EditorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EditorDelegate.swift; sourceTree = ""; };
+ F3D9934C9601BED445ED206D76FCD6AC /* KeyboardAvoider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardAvoider.swift; path = PinpointKit/PinpointKit/Sources/Core/KeyboardAvoider.swift; sourceTree = ""; };
+ FCC0F59E52846698CFFC0D7523468BF7 /* UIBarButtonItem+TitleTextAttributeStates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+TitleTextAttributeStates.swift"; path = "PinpointKit/PinpointKit/Sources/Core/UIBarButtonItem+TitleTextAttributeStates.swift"; sourceTree = ""; };
FD0952F9B52A5DA37449AF14A1EA391B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
FFC218B076577FDDB35FED8A4C0FBB33 /* Pods_PinpointKitExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_PinpointKitExample.framework; path = "Pods-PinpointKitExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
- 0CFC39FDEF2522BAB236CABCA2DE349C /* Frameworks */ = {
+ 5D26887CA8B9B1B6A7C54087657BDF90 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 640F4E58B57612A4863B5DF5D8C5B29E /* Foundation.framework in Frameworks */,
- 477CE286A5197C18C273B0716C5E56AA /* MessageUI.framework in Frameworks */,
- DEEA1D06FD17E8BB53A84849AF1CA666 /* UIKit.framework in Frameworks */,
+ 063B5EED534120B463E4A8446641E34D /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 5D26887CA8B9B1B6A7C54087657BDF90 /* Frameworks */ = {
+ 727AF2B48BBF00C197164BE27E42D7CC /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 063B5EED534120B463E4A8446641E34D /* Foundation.framework in Frameworks */,
+ 7815EDEE467A8B93B68EBA3610E82977 /* Foundation.framework in Frameworks */,
+ CC5679DE9C8D903833B8FAAC4B3395D3 /* MessageUI.framework in Frameworks */,
+ 1FE6D07F0E21DDC49BF7272940524383 /* UIKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -199,6 +201,17 @@
name = "Targets Support Files";
sourceTree = "";
};
+ 0E7C830D040C21817A42CB4AA4111310 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 3A281FBD8738A46DBB12F9533A552222 /* PinpointKit.xcassets */,
+ 04C786CD2765884D582B3ECEFBA7955F /* SourceSansPro-Bold.ttf */,
+ 03DDED8597C0372367A6EAD6CA15A992 /* SourceSansPro-Regular.ttf */,
+ 31A6B5842CAB506E7D318C2CE2FA6428 /* SourceSansPro-Semibold.ttf */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
122DA2E5084A4393C29BE363C764795C /* Frameworks */ = {
isa = PBXGroup;
children = (
@@ -225,26 +238,85 @@
name = iOS;
sourceTree = "";
};
- 4B1518DA3DA341FF7824DD17031C9E7C /* Resources */ = {
+ 4B37FEAC8A0BF8A3784B8C4B52FF3E92 /* Core */ = {
isa = PBXGroup;
children = (
- 3003D7BE90B8A01FC115684F230C6341 /* PinpointKit.xcassets */,
- 048E3E0B219F8E74673CA3E6B8EA9690 /* SourceSansPro-Bold.ttf */,
- E334BD6C24DA15656F2A4F49B309C958 /* SourceSansPro-Regular.ttf */,
- B5C4CA2553793DA257689AD6CE78C56C /* SourceSansPro-Semibold.ttf */,
+ 16F5099BC6D66AA0F486EB148FBFB5D2 /* Annotations.swift */,
+ 5B2160E8A5CBB52809BFF637F911EEE9 /* AnnotationsView.swift */,
+ C5BEB8C79B8D0DFC544E3A9554607AF2 /* AnnotationView.swift */,
+ E5405375C9539A665501AB80225CAE4C /* ArrowAnnotationView.swift */,
+ 05BE0DC4CB17ABD05D0DA3B8DD179858 /* ASLLogger.h */,
+ 541FCFF5C08437EB698A9C5CA9CEB4B2 /* ASLLogger.m */,
+ F2709E283928DC3A69BFE47E5344F9F9 /* BarButtonItem.swift */,
+ 3031BF60D3756346CA4E1E08E7C7A465 /* BasicLogViewController.swift */,
+ 1B521B28520A86CF57F15F4D0D65C77F /* BezierPath.swift */,
+ B7A5A0D3F809A36AF666486A84171B70 /* BlurAnnotationView.swift */,
+ 7B68B5934CDC29A9659237EBBABD3157 /* BoxAnnotationView.swift */,
+ 20F691B761C24DA681A7D03F04E1A1D7 /* CheckmarkCell.swift */,
+ 313BA0FFA7E8033DC4291F2D931FB273 /* Configuration.swift */,
+ 77506E7A3D83D4876FB8C8695B90D19C /* Feedback.swift */,
+ C0B5F92DE6DDE5F7DEFF293BA97FA8C2 /* FeedbackCollector.swift */,
+ 79CCE648E9CAD14FDF3CE3A0AEA06623 /* FeedbackConfiguration.swift */,
+ 2D2A06AA1F026E5EEA25EDEE51D7DAE6 /* FeedbackNavigationController.swift */,
+ 62EBA7864083952345AF5BF50410295B /* FeedbackTableViewDataSource.swift */,
+ 0D2D2889641DD53462855DDD4F0F3E25 /* FeedbackViewController.swift */,
+ 5537D60E0DAC5A2AE7D9E8FD7D88EEA6 /* Fonts.swift */,
+ EE06415E1BE52EC2DA638F579458DD91 /* InterfaceCustomizable.swift */,
+ 55AB1C7C8E6BF81FBE6746A64B760DE0 /* InterfaceCustomization.swift */,
+ F3D9934C9601BED445ED206D76FCD6AC /* KeyboardAvoider.swift */,
+ 4CCBA94DB772F4D1D279D8AA8109B494 /* LogCollector.swift */,
+ 7707CA5ACB7390A32251A2C6381A48F8 /* LogSupporting.swift */,
+ 61702B4EFC33BC4DA9B00C3B31BC2880 /* LogViewer.swift */,
+ C5B7B8DB40154D4574EC591581C59D04 /* MailSender.swift */,
+ 5FC336467ECD3A956470FCE2475A393C /* MIMEType.swift */,
+ AA419B5DA68D91A9A56DFA1F9FE3F991 /* NavigationController.swift */,
+ 3C56D413219A1EE75CBE088960E03985 /* NSBundle+PinpointKit.swift */,
+ 69B3A4B93BEBCEF16609E1D347C6BB14 /* PinpointKit.h */,
+ E07E16C12D411F2531FA779157B7F8CB /* PinpointKit.swift */,
+ 7755CBA9DDD85821BCF4AD10366D6E62 /* PinpointKit+ShakePresentation.swift */,
+ 65F88C6BB404FA78E6D9A5864C95A226 /* RequestScreenshotCell.swift */,
+ E855319846B9E71829F4398CBF61A5FE /* Screen.swift */,
+ E13C8EBEC097B2210B9DFC8C4581FC83 /* ScreenshotCell.swift */,
+ 504CCFDFCF425BE9CD55AEAC721BC10B /* Screenshotter.swift */,
+ 423C59FDA444FD62438F59C103268C25 /* Sender.swift */,
+ CF2E6340B6D3E42DDD6DEA2E31516E4D /* ShakeDetectingWindow.swift */,
+ 4CE7432717E9ED121CDFD7238747C005 /* ShakeDetectingWindowDelegate.swift */,
+ 34F159FD76DCD82C4732BDC378419433 /* StrokeLayoutManager.swift */,
+ EB1F7F78E49FB6DFA0149F33E057AA10 /* SuccessType.swift */,
+ 47839A9413989B67F7B7D81E5D819F10 /* SystemLogCollector.swift */,
+ AA1CB9E82E998EF45C00E13D09D76B02 /* TextAnnotationView.swift */,
+ FCC0F59E52846698CFFC0D7523468BF7 /* UIBarButtonItem+TitleTextAttributeStates.swift */,
+ 0C69C6365FB79370BDDFD3556A0BCC9A /* UIColor+Palette.swift */,
+ 133C8123C233F53AA49AE37FC253D102 /* UIGestureRecognizer+FailRecognizing.swift */,
+ 9F810D8FBC04199EAC8E3101C3E35CC1 /* UIView+PinpointKit.swift */,
+ 9221C2FF15C00D9D9088DC31388A0FDF /* Editing */,
+ 0E7C830D040C21817A42CB4AA4111310 /* Resources */,
);
- name = Resources;
+ name = Core;
sourceTree = "";
};
- 5B295E6C52D34666FCC5EC61B40807EC /* PinpointKit */ = {
+ 5675D3A53C18C8559A72219D972B7C67 /* Support Files */ = {
isa = PBXGroup;
children = (
- FB87CA318FA2A22F3B2AAD3C8B8A3008 /* Core */,
- D3B0D061D2CDE04FA29DA9878F439204 /* Pod */,
- 88CD7B1165D51AE94BD0F65E01F57C6B /* Support Files */,
+ EB8BF7DBC9C71540D094368B967AF8CE /* Info.plist */,
+ 60F58D29F6906C15D42D7671FEABBCAA /* PinpointKit.modulemap */,
+ D4033607E136E6DE2A7228996DABA145 /* PinpointKit.xcconfig */,
+ 821F22677A30C1AF4AC060DB834AC387 /* PinpointKit-dummy.m */,
+ 1051C54C2A571CD6B01945A2C6AC1E61 /* PinpointKit-prefix.pch */,
+ B6EEA985BB879E69398123846A65805C /* PinpointKit-umbrella.h */,
);
- name = PinpointKit;
- path = ../..;
+ name = "Support Files";
+ path = "Example/Pods/Target Support Files/PinpointKit";
+ sourceTree = "";
+ };
+ 6448BB305F859D7202E5D77560224F77 /* Pod */ = {
+ isa = PBXGroup;
+ children = (
+ 771D150E499D5F8214E8FB312B435014 /* LICENSE */,
+ E1A3643B5B6DEC5F626A26349E3EDD28 /* PinpointKit.podspec.json */,
+ 3C0A031BD60372B640FAACF4CDA806FB /* README.md */,
+ );
+ name = Pod;
sourceTree = "";
};
7DB346D0F39D3F0E887471402A8071AB = {
@@ -262,23 +334,34 @@
7EDB98DB12016E714DD1942B2E5F7E90 /* Development Pods */ = {
isa = PBXGroup;
children = (
- 5B295E6C52D34666FCC5EC61B40807EC /* PinpointKit */,
+ 82E6DB8E1394EB8B5AA87A980C7B1C33 /* PinpointKit */,
);
name = "Development Pods";
sourceTree = "";
};
- 88CD7B1165D51AE94BD0F65E01F57C6B /* Support Files */ = {
+ 82E6DB8E1394EB8B5AA87A980C7B1C33 /* PinpointKit */ = {
isa = PBXGroup;
children = (
- 5BB28BB51E690F6DBD634842E54D60A1 /* Info.plist */,
- 1A56764F4F1609E980341799CD1C8213 /* PinpointKit.modulemap */,
- 20B27210C764A5BA8A50504377524D2E /* PinpointKit.xcconfig */,
- EE75659618FF0482E28B29786972EB21 /* PinpointKit-dummy.m */,
- 0F8AE2A48FCCFE11832030C700DD7F5A /* PinpointKit-prefix.pch */,
- D70AA6D401751FF12DF1877EEBA63297 /* PinpointKit-umbrella.h */,
+ 4B37FEAC8A0BF8A3784B8C4B52FF3E92 /* Core */,
+ 6448BB305F859D7202E5D77560224F77 /* Pod */,
+ 5675D3A53C18C8559A72219D972B7C67 /* Support Files */,
);
- name = "Support Files";
- path = "Example/Pods/Target Support Files/PinpointKit";
+ name = PinpointKit;
+ path = ../..;
+ sourceTree = "";
+ };
+ 9221C2FF15C00D9D9088DC31388A0FDF /* Editing */ = {
+ isa = PBXGroup;
+ children = (
+ 3FCE75777949E78FDBA4ACD31EAF3BE7 /* AnnotationViewFactory.swift */,
+ 202E905D98F76997BAF66C7088329BB8 /* EditImageViewController.swift */,
+ 6A0AF4C5CF447E45AC1DB49F7E937D31 /* EditImageViewControllerBarButtonItemProviding.swift */,
+ DC8C89794DFB630F25F11544DBCCBEE0 /* Editor.swift */,
+ E18DF2E1B16F9D2594EDB9F604E9F433 /* EditorDelegate.swift */,
+ 501F051C6AF2176F6CF8516DE83EDEC8 /* Tool.swift */,
+ );
+ name = Editing;
+ path = PinpointKit/PinpointKit/Sources/Core/Editing;
sourceTree = "";
};
93187347FFE4E891D405722159860C98 /* Pods-PinpointKitExample */ = {
@@ -316,96 +399,16 @@
name = Products;
sourceTree = "";
};
- D3B0D061D2CDE04FA29DA9878F439204 /* Pod */ = {
- isa = PBXGroup;
- children = (
- C77F62AD746A2F748D1BB4868D08F2C8 /* LICENSE */,
- 82888991C5F00E69C6DB5DDDAFAD18C3 /* PinpointKit.podspec.json */,
- 40D1ED5B74B6FABE2530E111FD457A69 /* README.md */,
- );
- name = Pod;
- sourceTree = "";
- };
- F1A75CD77158F313182E53642841486D /* Editing */ = {
- isa = PBXGroup;
- children = (
- 379EE0640D67DCF599AFC9CE018015CB /* AnnotationViewFactory.swift */,
- A170EFB140353EC0C55B17D632ED4B53 /* EditImageViewController.swift */,
- 1571D749AC0348FD5F88D5C830E00B61 /* EditImageViewControllerBarButtonItemProviding.swift */,
- 26F4D76B313CC2C9B0784BEA95093715 /* Editor.swift */,
- F7E39150B97DA9F28E3498F9DA452BA4 /* EditorDelegate.swift */,
- 4FE7D863B542BF040C7ADE0603F88984 /* Tool.swift */,
- );
- name = Editing;
- path = PinpointKit/PinpointKit/Sources/Core/Editing;
- sourceTree = "";
- };
- FB87CA318FA2A22F3B2AAD3C8B8A3008 /* Core */ = {
- isa = PBXGroup;
- children = (
- 28FAB9FF56EE10C26DCA5DB309AAFE27 /* Annotations.swift */,
- F7079189F26B2E4B24BA505DD2F8466F /* AnnotationsView.swift */,
- 80837CB18B5C2EB52C31363C5714141C /* AnnotationView.swift */,
- 3891D91CE129CAF1343139D685830F03 /* ArrowAnnotationView.swift */,
- 9D2FF389C174AF86CDC69523123B0CDB /* ASLLogger.h */,
- AE11409F1492BCA70A73E93C5C85F61D /* ASLLogger.m */,
- 9645616158FCD460F41C8C58EA8331B2 /* BarButtonItem.swift */,
- 5032EE02BCED9C798618C18C3BC04D53 /* BasicLogViewController.swift */,
- 4312F20E5920871682919138B36D14E9 /* BezierPath.swift */,
- 8402896BFCC3642F8E27CE6A065E7993 /* BlurAnnotationView.swift */,
- 17C206B06256E027D6524865A677BEC0 /* BoxAnnotationView.swift */,
- B932E629F980020571DD484C58C3E280 /* CheckmarkCell.swift */,
- 73216502745DEA689790BC09AE053707 /* Configuration.swift */,
- 736B91A6711BDAF01732E502C6BF9C6F /* Feedback.swift */,
- 70DC07A9F0539B7448C64EA6B18D761A /* FeedbackCollector.swift */,
- 5687EDAF95DC76F30A5CAD49E01AE887 /* FeedbackConfiguration.swift */,
- A23809C2ECD6D081A51823DA8CA7811B /* FeedbackNavigationController.swift */,
- 9F1FC8C5DE1A8716B5EFE846D811FA95 /* FeedbackTableViewDataSource.swift */,
- 31960227E584348F53A8265F461AC5AC /* FeedbackViewController.swift */,
- 203D8212E29371F38C4DB4E3BCEC7082 /* Fonts.swift */,
- 618F3CAB614910C598CC27A94F7F38CA /* InterfaceCustomizable.swift */,
- 1754B5B1176720C013796502290F3B13 /* InterfaceCustomization.swift */,
- 0EABD5DEFA1EF582E27B454D69953D11 /* KeyboardAvoider.swift */,
- A1409EFC284A322894C04EE75B893B0D /* LogCollector.swift */,
- B314898B993EAB442FFFE652B7A805E1 /* LogSupporting.swift */,
- 18309B67A03316352ABDDA0BAF2DC2CF /* LogViewer.swift */,
- E42B71BCC2909C871AEE75204F8B0F6E /* MailSender.swift */,
- A12089A08EF6E4E304BC40B880F1C276 /* MIMEType.swift */,
- DF9588E8D07DD4BDDDB4E91AC8D41538 /* NavigationController.swift */,
- E3485FB818A7BB9F6B272428F73D3BDD /* NSBundle+PinpointKit.swift */,
- 0C82FAA3A46DFCCF4732499CAAD099AA /* PinpointKit.h */,
- 728DB7C20BBC431552474C3DFC4F1D5C /* PinpointKit.swift */,
- A0987188EA3ED83EE724FA2ABE21383B /* PinpointKit+ShakePresentation.swift */,
- CA4F353285BE1B32417F43EFCBB714DC /* Screen.swift */,
- 4B07DE547D57814924E65E055C27DFC5 /* ScreenshotCell.swift */,
- A0B9D23387D65BEEAA1060DF8E1435E1 /* Screenshotter.swift */,
- 8191274E9EE6BEB64155853C0A5BC0AC /* Sender.swift */,
- 15AD05FF662D619BE274B98D2D24BFA0 /* ShakeDetectingWindow.swift */,
- 0D4BD74A19B6CF650D80FF631A66467D /* ShakeDetectingWindowDelegate.swift */,
- 1431876B7BC76FDDDE604094B7DC491B /* StrokeLayoutManager.swift */,
- 75AFA24126628DC1FE801AF553F342B1 /* SuccessType.swift */,
- C16983DE02892C7623CE4AC524D69A53 /* SystemLogCollector.swift */,
- 180ACFF870D9ED7234CBD7503CD9265D /* TextAnnotationView.swift */,
- DA28E9A868107C1DD9E805FFAE9D5746 /* UIBarButtonItem+TitleTextAttributeStates.swift */,
- 23B7EC7C7752576BC0E8CA669432B801 /* UIColor+Palette.swift */,
- 02556F4959ABD4DA3B2C14629CAB33F9 /* UIGestureRecognizer+FailRecognizing.swift */,
- 5CA66761C7D9197C2364A1E173D9E26A /* UIView+PinpointKit.swift */,
- F1A75CD77158F313182E53642841486D /* Editing */,
- 4B1518DA3DA341FF7824DD17031C9E7C /* Resources */,
- );
- name = Core;
- sourceTree = "";
- };
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
- 6918FDD718540F0F4ECE2F747A721927 /* Headers */ = {
+ 8CCE9302FB71E8E63FAB4E862221A052 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
- 84453A1054042F1B21A00D5F5A9223D1 /* ASLLogger.h in Headers */,
- 9828EC589A1860C24953383D204BB241 /* PinpointKit-umbrella.h in Headers */,
- ABC29004EAAC5A4E29DA9A60CB97E47B /* PinpointKit.h in Headers */,
+ B07145BAED83D90A3B6A39ECDFB302AA /* ASLLogger.h in Headers */,
+ 22C49DB94C9A551A2CEC274DAB1BF9E3 /* PinpointKit-umbrella.h in Headers */,
+ E622FFBEF68DB590021806BE986E4706 /* PinpointKit.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -420,14 +423,14 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
- 74EF4866D3C70A92D70DA54E177D3738 /* PinpointKit */ = {
+ 35433D18219DB934E9CB11A034357452 /* PinpointKit */ = {
isa = PBXNativeTarget;
- buildConfigurationList = DB694C05030E8470DEDFBB79121D7A30 /* Build configuration list for PBXNativeTarget "PinpointKit" */;
+ buildConfigurationList = 6EB12EFC143A31AFC0685163319D5338 /* Build configuration list for PBXNativeTarget "PinpointKit" */;
buildPhases = (
- 1FA827428E5240A8921F7790AF92C6F4 /* Sources */,
- 0CFC39FDEF2522BAB236CABCA2DE349C /* Frameworks */,
- 6918FDD718540F0F4ECE2F747A721927 /* Headers */,
- 8AC12B4596BF399DF0034BC4D1A5A9C6 /* Resources */,
+ BA70A6F1059F2EAE13D25FACBE421628 /* Sources */,
+ 727AF2B48BBF00C197164BE27E42D7CC /* Frameworks */,
+ 8CCE9302FB71E8E63FAB4E862221A052 /* Headers */,
+ 1CE2F4C69431553D4BDA4D442A4CD231 /* Resources */,
);
buildRules = (
);
@@ -477,91 +480,92 @@
projectDirPath = "";
projectRoot = "";
targets = (
- 74EF4866D3C70A92D70DA54E177D3738 /* PinpointKit */,
+ 35433D18219DB934E9CB11A034357452 /* PinpointKit */,
7883FC5596C43D4116A971A780A7A715 /* Pods-PinpointKitExample */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
- 8AC12B4596BF399DF0034BC4D1A5A9C6 /* Resources */ = {
+ 1CE2F4C69431553D4BDA4D442A4CD231 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4B082E16E58550C176DAEBD112BE5747 /* PinpointKit.xcassets in Resources */,
- F66121D202FA3BE2EF9AC02FDC0E5B5C /* SourceSansPro-Bold.ttf in Resources */,
- 311E142970F18B5734A702827CD3A758 /* SourceSansPro-Regular.ttf in Resources */,
- 9095651C498EABD1D7E2911F03D5198A /* SourceSansPro-Semibold.ttf in Resources */,
+ DC601F18851420E3E7BA928C26B8F496 /* PinpointKit.xcassets in Resources */,
+ D1F4DD03D25B6179D7E4834196B3E842 /* SourceSansPro-Bold.ttf in Resources */,
+ 257D7D0855B1AE26CFC785812EFD60E1 /* SourceSansPro-Regular.ttf in Resources */,
+ E3F6A8483CF0B488FB56BD48108CBC42 /* SourceSansPro-Semibold.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
- 1FA827428E5240A8921F7790AF92C6F4 /* Sources */ = {
+ 390C0E919B6B63AAB124B5960910F0B9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 959E11680CFF6770C2CDCF70704073CB /* Annotations.swift in Sources */,
- 438597D9208F5128B7FF2AE6A0C83170 /* AnnotationsView.swift in Sources */,
- 4DC567BC9679DD15E54FF0BC2D24A583 /* AnnotationView.swift in Sources */,
- 8628B516F3697C973719094520E408EE /* AnnotationViewFactory.swift in Sources */,
- EDB8B6E6FB5F72DCC0E09C2A4C3BBEBE /* ArrowAnnotationView.swift in Sources */,
- 1F0B93A1A1CBC81CB2485FE3BF6AA925 /* ASLLogger.m in Sources */,
- 6DE352A3DE9996520F2E7EB6F4527723 /* BarButtonItem.swift in Sources */,
- FCECA4F34938D9732045FFF0C24BF3E1 /* BasicLogViewController.swift in Sources */,
- 8E3AAB3C11D33641260D4FA99D189463 /* BezierPath.swift in Sources */,
- 687C04050F836477B111FCC444C1BFD2 /* BlurAnnotationView.swift in Sources */,
- A53DFCD66AB042B8C354332080099EB1 /* BoxAnnotationView.swift in Sources */,
- 76FEFA36FA089B012BDCC32067BBC04E /* CheckmarkCell.swift in Sources */,
- 886F3D053A9FA92DE3E53CCF0E5ACC8C /* Configuration.swift in Sources */,
- D67408C62D0FB1F6CFC37D0FCF9DFB19 /* EditImageViewController.swift in Sources */,
- 3D563DBF770AF170E7CFA63D278AAC3B /* EditImageViewControllerBarButtonItemProviding.swift in Sources */,
- 2C96653C4721BDEEB7B15C842D44AD95 /* Editor.swift in Sources */,
- 43FB4DE1A656C6AEABB5E9362EAE5291 /* EditorDelegate.swift in Sources */,
- E477B03672E682B73B367C37410F1C21 /* Feedback.swift in Sources */,
- 50E39F7BFE3337933FFAF99287368E76 /* FeedbackCollector.swift in Sources */,
- 68955EE8C6CE7AE3223A7A6EE38E7002 /* FeedbackConfiguration.swift in Sources */,
- 9DA24D9942244A970505575AF9C926FB /* FeedbackNavigationController.swift in Sources */,
- 6FA56DE1FBDD2A0CFA22D51D312D817F /* FeedbackTableViewDataSource.swift in Sources */,
- 544A06EF131EFBBF9AC2126C224A365A /* FeedbackViewController.swift in Sources */,
- E5226ABD9D10AEA052A9617624BEE0A6 /* Fonts.swift in Sources */,
- F2ACB339E62F889729EDA7B25E3E1E95 /* InterfaceCustomizable.swift in Sources */,
- F660AAE2F3E34F081B3D0E86061B75DA /* InterfaceCustomization.swift in Sources */,
- 4F5C31FAA9A7D1DBF692B97745336421 /* KeyboardAvoider.swift in Sources */,
- 22AE8CDDCD0F380D2860903D7C970FB7 /* LogCollector.swift in Sources */,
- 2E253F9DCD013504F36D54760666DF77 /* LogSupporting.swift in Sources */,
- 733DB08BCA4B288F73DCA02614EBB013 /* LogViewer.swift in Sources */,
- C02B8980A89C60D3C95F6222D8BF2A44 /* MailSender.swift in Sources */,
- 6F91C631D4EC47731A8EE00A1937B425 /* MIMEType.swift in Sources */,
- 8E4294EE0330D220947F74898809E812 /* NavigationController.swift in Sources */,
- E9A3CB58177E30C07EF8E65D613BA6DA /* NSBundle+PinpointKit.swift in Sources */,
- 4EE0F6F971753AD8DCDF7CA1C78C71DE /* PinpointKit+ShakePresentation.swift in Sources */,
- 93497D48EBE2E9BB0B81C7A92A28FD90 /* PinpointKit-dummy.m in Sources */,
- B52D585358DBCD46EF787F40CD62FB60 /* PinpointKit.swift in Sources */,
- FA1E0D49274A1FDA23AF1581B140201E /* Screen.swift in Sources */,
- A8BB7B4426E76E82D79D9CF8B8ACB157 /* ScreenshotCell.swift in Sources */,
- 36F0E7A1756294F82BB4566BFD6989A6 /* Screenshotter.swift in Sources */,
- 84A73C8E2E35B259ED675BA88C1B4267 /* Sender.swift in Sources */,
- 4A010F621B25BC96ABFD0AA9F66FC698 /* ShakeDetectingWindow.swift in Sources */,
- 2A616C9BEAEA07B9E52E6D97BDC560AA /* ShakeDetectingWindowDelegate.swift in Sources */,
- 190C3089FF13B86AF4AF4B609AE8F16D /* StrokeLayoutManager.swift in Sources */,
- 492A18A04B511F8960FB56410A90B71F /* SuccessType.swift in Sources */,
- 9768695F13681DEB8FA08B0DB44486A3 /* SystemLogCollector.swift in Sources */,
- 7339E7A595E0CAF6702FFAD60FCD5D7D /* TextAnnotationView.swift in Sources */,
- F025918332A3D23BDB3D9310E4AF7351 /* Tool.swift in Sources */,
- F25AEBFAD3E95D2B41CB279397C0B40D /* UIBarButtonItem+TitleTextAttributeStates.swift in Sources */,
- 3EA169A7BE12FF8D632E9FF2C197C242 /* UIColor+Palette.swift in Sources */,
- 327D95B82D84A1C0FE261DEDF3833466 /* UIGestureRecognizer+FailRecognizing.swift in Sources */,
- 1EC5611C41921D5E5FD37DC30918723E /* UIView+PinpointKit.swift in Sources */,
+ 15FE598A776E6E89D656F15961C577BE /* Pods-PinpointKitExample-dummy.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 390C0E919B6B63AAB124B5960910F0B9 /* Sources */ = {
+ BA70A6F1059F2EAE13D25FACBE421628 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 15FE598A776E6E89D656F15961C577BE /* Pods-PinpointKitExample-dummy.m in Sources */,
+ CA9C884DBB7F22488BAC5F7B29ECFF73 /* Annotations.swift in Sources */,
+ B41C35D971BC52BBCD7D091984AF40E7 /* AnnotationsView.swift in Sources */,
+ B178B8AC520BABF40A7F66E4EB35824D /* AnnotationView.swift in Sources */,
+ 10E8DD88B949F7B01A91C06EBFF81F4D /* AnnotationViewFactory.swift in Sources */,
+ 5710B9D0B4A51A2B8F9ABCC40F43A996 /* ArrowAnnotationView.swift in Sources */,
+ B2DD02CBAFBD36726EEE403110875AA3 /* ASLLogger.m in Sources */,
+ 927D7B5E88793C02E77FC9CD264ABB34 /* BarButtonItem.swift in Sources */,
+ 829F85491BE0FF5C4A3D94CF831C6C18 /* BasicLogViewController.swift in Sources */,
+ 7143A7367E0A26BCF2F126BD11A0AE24 /* BezierPath.swift in Sources */,
+ 50F467A1BA24A5F849156E6868009258 /* BlurAnnotationView.swift in Sources */,
+ DB94C303676F830414CB1DAB9BA5D351 /* BoxAnnotationView.swift in Sources */,
+ 68368D29672B7AFFC7806527A29481C6 /* CheckmarkCell.swift in Sources */,
+ FD9D2481535FEFCA806B1398A6CD2424 /* Configuration.swift in Sources */,
+ 757F76FA8C2DF34871EA759EFBC80F6C /* EditImageViewController.swift in Sources */,
+ 2C05B2DFC6FFE1532BF5A7FEE84267ED /* EditImageViewControllerBarButtonItemProviding.swift in Sources */,
+ 2CADBF8CDFF48D1E9FE83834D5925FD6 /* Editor.swift in Sources */,
+ 55BE74931A02A45A2B998D8C68F01B57 /* EditorDelegate.swift in Sources */,
+ DF091AD1A3F8BFD73593B39B1E6ED10B /* Feedback.swift in Sources */,
+ 61980B61FFFDE1965C80CD49B3F497F1 /* FeedbackCollector.swift in Sources */,
+ 2079950AABCF71EC04291B4C8E422BF4 /* FeedbackConfiguration.swift in Sources */,
+ E2579B2F457B64BB491D4E165FF0692F /* FeedbackNavigationController.swift in Sources */,
+ E1964BF83BA075AC3218E292A4A6C9C7 /* FeedbackTableViewDataSource.swift in Sources */,
+ 9E653AB67A4F8916CDB7870536E95389 /* FeedbackViewController.swift in Sources */,
+ 83583C56D54388AEFF62B76C3C17F072 /* Fonts.swift in Sources */,
+ CAB56A57223BCF0724E259DDAF5C33B6 /* InterfaceCustomizable.swift in Sources */,
+ 09E9B53CEC8FF3F6816E202F3655A709 /* InterfaceCustomization.swift in Sources */,
+ FE8A6526C8AEB627A9DAA0FA1737A63B /* KeyboardAvoider.swift in Sources */,
+ DD3DD018057C8D761E31D7DD240DEE92 /* LogCollector.swift in Sources */,
+ 497A7F2F761E1B66AA5527BEC2B8F2BD /* LogSupporting.swift in Sources */,
+ 6B3A4EA89714B8EA350D534E746349E3 /* LogViewer.swift in Sources */,
+ 8659398477459CA64211B78138BF2717 /* MailSender.swift in Sources */,
+ B3DF0CAFA9CCF96A3756B8576CC6C669 /* MIMEType.swift in Sources */,
+ 83B6D2FEF34D03B357B9B87A4FE4B724 /* NavigationController.swift in Sources */,
+ 0DB32CF3855B442DB9C39B00C8941079 /* NSBundle+PinpointKit.swift in Sources */,
+ CD6AB3D3914E9EF89703F2C75F96651C /* PinpointKit+ShakePresentation.swift in Sources */,
+ C72BF9B389BED609944AD89CD7416AF0 /* PinpointKit-dummy.m in Sources */,
+ DE6EDCD32448D2111968B18916D00BDD /* PinpointKit.swift in Sources */,
+ A7578DBA511837C07CB23FBDAA1B2953 /* RequestScreenshotCell.swift in Sources */,
+ AD3EC705A8216176C6846A201AFF8ED5 /* Screen.swift in Sources */,
+ 8A021DD0839295297B78733A8128FFC2 /* ScreenshotCell.swift in Sources */,
+ BE0FB3B416BF9A5CDD80742C57805A77 /* Screenshotter.swift in Sources */,
+ 0ABFF3476234BC412F2925B4EAA82F20 /* Sender.swift in Sources */,
+ E56F8969D9C6A2984E22C796A43DA62E /* ShakeDetectingWindow.swift in Sources */,
+ 45507C67BD1C19B2057C6FDF011F6D79 /* ShakeDetectingWindowDelegate.swift in Sources */,
+ E1C6C7B1289E50897740CABB1DC552D4 /* StrokeLayoutManager.swift in Sources */,
+ C6086722AD53CC9750F505D4D15B99F7 /* SuccessType.swift in Sources */,
+ 3E3E45C9FA6F62A40A4BDA1BCE10CBB1 /* SystemLogCollector.swift in Sources */,
+ D6C8D11E7C640F86EC2955DE80A4B03B /* TextAnnotationView.swift in Sources */,
+ A37D1DF2F979398DE4EAC8E11FDAA16F /* Tool.swift in Sources */,
+ DA4BEB61320D668880DB9BAF2E2BBED7 /* UIBarButtonItem+TitleTextAttributeStates.swift in Sources */,
+ 8AC86F3A925432D69CED97B164765841 /* UIColor+Palette.swift in Sources */,
+ F254E4BB33D2C75930AB753B92C6F6B0 /* UIGestureRecognizer+FailRecognizing.swift in Sources */,
+ 5D5EA6747C0A0C133C66C8A5A0732CA7 /* UIView+PinpointKit.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -571,12 +575,44 @@
7E5002678ABA6FF9515E43AC0BAFEFED /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = PinpointKit;
- target = 74EF4866D3C70A92D70DA54E177D3738 /* PinpointKit */;
+ target = 35433D18219DB934E9CB11A034357452 /* PinpointKit */;
targetProxy = 9806AEF51849764C12CF65E03DC758D1 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
+ 1848CE03EFBEFAA5F74978F081C1D503 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = D4033607E136E6DE2A7228996DABA145 /* PinpointKit.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ GCC_PREFIX_HEADER = "Target Support Files/PinpointKit/PinpointKit-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/PinpointKit/Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MODULEMAP_FILE = "Target Support Files/PinpointKit/PinpointKit.modulemap";
+ PRODUCT_MODULE_NAME = PinpointKit;
+ PRODUCT_NAME = PinpointKit;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
1FE3B4CE8C074CE87C18B26C91020E15 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -640,6 +676,39 @@
};
name = Debug;
};
+ 7574218378631C7F23823D1B21B57AA3 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = D4033607E136E6DE2A7228996DABA145 /* PinpointKit.xcconfig */;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ GCC_PREFIX_HEADER = "Target Support Files/PinpointKit/PinpointKit-prefix.pch";
+ INFOPLIST_FILE = "Target Support Files/PinpointKit/Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MODULEMAP_FILE = "Target Support Files/PinpointKit/PinpointKit.modulemap";
+ PRODUCT_MODULE_NAME = PinpointKit;
+ PRODUCT_NAME = PinpointKit;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
89C68177307D3F04B055FD0AA2FC173A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -698,71 +767,6 @@
};
name = Release;
};
- 89FA81507935461A3CC98AE7C1A2B369 /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 20B27210C764A5BA8A50504377524D2E /* PinpointKit.xcconfig */;
- buildSettings = {
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/PinpointKit/PinpointKit-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/PinpointKit/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MODULEMAP_FILE = "Target Support Files/PinpointKit/PinpointKit.modulemap";
- PRODUCT_MODULE_NAME = PinpointKit;
- PRODUCT_NAME = PinpointKit;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Release;
- };
- 9D411FAA4A1FA079F2435B06ED18039E /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 20B27210C764A5BA8A50504377524D2E /* PinpointKit.xcconfig */;
- buildSettings = {
- CODE_SIGN_IDENTITY = "";
- "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
- "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
- CURRENT_PROJECT_VERSION = 1;
- DEFINES_MODULE = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- DYLIB_INSTALL_NAME_BASE = "@rpath";
- GCC_PREFIX_HEADER = "Target Support Files/PinpointKit/PinpointKit-prefix.pch";
- INFOPLIST_FILE = "Target Support Files/PinpointKit/Info.plist";
- INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
- MODULEMAP_FILE = "Target Support Files/PinpointKit/PinpointKit.modulemap";
- PRODUCT_MODULE_NAME = PinpointKit;
- PRODUCT_NAME = PinpointKit;
- SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
- };
- name = Debug;
- };
F438AC93E4D8049E6E5920B0AD3F164F /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0C52BEF82EABB07DA897A4885E9EDBC0 /* Pods-PinpointKitExample.debug.xcconfig */;
@@ -854,11 +858,11 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- DB694C05030E8470DEDFBB79121D7A30 /* Build configuration list for PBXNativeTarget "PinpointKit" */ = {
+ 6EB12EFC143A31AFC0685163319D5338 /* Build configuration list for PBXNativeTarget "PinpointKit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 9D411FAA4A1FA079F2435B06ED18039E /* Debug */,
- 89FA81507935461A3CC98AE7C1A2B369 /* Release */,
+ 1848CE03EFBEFAA5F74978F081C1D503 /* Debug */,
+ 7574218378631C7F23823D1B21B57AA3 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
diff --git a/PinpointKit/PinpointKit.xcodeproj/project.pbxproj b/PinpointKit/PinpointKit.xcodeproj/project.pbxproj
index 4640c3d..6430a6a 100644
--- a/PinpointKit/PinpointKit.xcodeproj/project.pbxproj
+++ b/PinpointKit/PinpointKit.xcodeproj/project.pbxproj
@@ -70,6 +70,7 @@
DA0DA60D1C53049B0012ADBE /* PinpointKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA0DA6021C53049B0012ADBE /* PinpointKit.framework */; };
F24381121D54CBAB004CC87F /* SystemLogCollectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F24381111D54CBAB004CC87F /* SystemLogCollectorTests.swift */; };
F24381151D54ECD2004CC87F /* XCTestCaseExpectationExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F24381141D54ECD2004CC87F /* XCTestCaseExpectationExtensions.swift */; };
+ F2619BA32512C6100083286C /* RequestScreenshotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2619BA22512C6100083286C /* RequestScreenshotCell.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -147,6 +148,7 @@
DA0DA6131C53049B0012ADBE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
F24381111D54CBAB004CC87F /* SystemLogCollectorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SystemLogCollectorTests.swift; sourceTree = ""; };
F24381141D54ECD2004CC87F /* XCTestCaseExpectationExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseExpectationExtensions.swift; sourceTree = ""; };
+ F2619BA22512C6100083286C /* RequestScreenshotCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RequestScreenshotCell.swift; path = Core/RequestScreenshotCell.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -206,6 +208,7 @@
4C4037F11D9EB01800305A6E /* FeedbackViewController.swift */,
4C4037EF1D9EB01800305A6E /* FeedbackNavigationController.swift */,
4C4037FC1D9EB04400305A6E /* Screenshotter.swift */,
+ F2619BA22512C6100083286C /* RequestScreenshotCell.swift */,
4C4037F91D9EB02300305A6E /* ScreenshotCell.swift */,
4C4037EE1D9EB01800305A6E /* FeedbackConfiguration.swift */,
4C4037F01D9EB01800305A6E /* FeedbackTableViewDataSource.swift */,
@@ -490,6 +493,7 @@
4C4038091D9EB0CB00305A6E /* UIView+PinpointKit.swift in Sources */,
4CFB58801E29464B00B64D0D /* EditImageViewControllerBarButtonItemProviding.swift in Sources */,
4C40382C1D9EB7A800305A6E /* ScreenshotDetector.swift in Sources */,
+ F2619BA32512C6100083286C /* RequestScreenshotCell.swift in Sources */,
4C4038011D9EB07000305A6E /* LogViewer.swift in Sources */,
4C4037FF1D9EB06900305A6E /* BasicLogViewController.swift in Sources */,
4C4037D51D9EAF0D00305A6E /* Editor.swift in Sources */,
diff --git a/PinpointKit/PinpointKit/Sources/Core/FeedbackCollector.swift b/PinpointKit/PinpointKit/Sources/Core/FeedbackCollector.swift
index ec64dc0..834820f 100644
--- a/PinpointKit/PinpointKit/Sources/Core/FeedbackCollector.swift
+++ b/PinpointKit/PinpointKit/Sources/Core/FeedbackCollector.swift
@@ -24,10 +24,10 @@ public protocol FeedbackCollector: class, LogSupporting, InterfaceCustomizable {
/**
Begins feedback collection about a screenshot from a view controller.
- - parameter screenshot: The screenshot the user will be providing feedback on.
+ - parameter screenshot: The screenshot the user will be providing feedback on. If the screenshot is nil, the user will be presented with a button to select a screenshot from their photo library.
- parameter viewController: The view controller from which to present.
*/
- func collectFeedback(with screenshot: UIImage, from viewController: UIViewController)
+ func collectFeedback(with screenshot: UIImage?, from viewController: UIViewController)
}
extension FeedbackCollector where Self: UIViewController {
diff --git a/PinpointKit/PinpointKit/Sources/Core/FeedbackNavigationController.swift b/PinpointKit/PinpointKit/Sources/Core/FeedbackNavigationController.swift
index c81d4dd..c187c71 100644
--- a/PinpointKit/PinpointKit/Sources/Core/FeedbackNavigationController.swift
+++ b/PinpointKit/PinpointKit/Sources/Core/FeedbackNavigationController.swift
@@ -114,9 +114,9 @@ public final class FeedbackNavigationController: UINavigationController, Feedbac
// MARK: - FeedbackCollector
- public func collectFeedback(with screenshot: UIImage, from viewController: UIViewController) {
+ public func collectFeedback(with screenshot: UIImage?, from viewController: UIViewController) {
guard presentingViewController == nil else {
- NSLog("Unable to present FeedbackNavigationController because it is already being presetned")
+ NSLog("Unable to present FeedbackNavigationController because it is already being presented")
return
}
diff --git a/PinpointKit/PinpointKit/Sources/Core/FeedbackTableViewDataSource.swift b/PinpointKit/PinpointKit/Sources/Core/FeedbackTableViewDataSource.swift
index 5596c5e..01a891c 100644
--- a/PinpointKit/PinpointKit/Sources/Core/FeedbackTableViewDataSource.swift
+++ b/PinpointKit/PinpointKit/Sources/Core/FeedbackTableViewDataSource.swift
@@ -18,12 +18,12 @@ final class FeedbackTableViewDataSource: NSObject, UITableViewDataSource {
Initializes the data source with a configuration and a boolean value indicating whether the user has enabled log collection.
- parameter interfaceCustomization: The interface customization used to set up the data source.
- - parameter screenshot: The screenshot to display for annotating.
+ - parameter screenshot: The screenshot to display for annotating. If nil, a button will appear allowing the user to select a screenshot.
- parameter logSupporting: The object the controls the support of logging.
- parameter userEnabledLogCollection: A boolean value indicating whether the user has enabled log collection.
- parameter delegate: The object informed when a screenshot is tapped.
*/
- init(interfaceCustomization: InterfaceCustomization, screenshot: UIImage, logSupporting: LogSupporting, userEnabledLogCollection: Bool, delegate: FeedbackTableViewDataSourceDelegate? = nil) {
+ init(interfaceCustomization: InterfaceCustomization, screenshot: UIImage?, logSupporting: LogSupporting, userEnabledLogCollection: Bool, delegate: FeedbackTableViewDataSourceDelegate? = nil) {
sections = type(of: self).sectionsFromConfiguration(interfaceCustomization, screenshot: screenshot, logSupporting: logSupporting, userEnabledLogCollection: userEnabledLogCollection)
self.delegate = delegate
}
@@ -40,19 +40,28 @@ final class FeedbackTableViewDataSource: NSObject, UITableViewDataSource {
}
private enum Row {
+ case selectScreenshot(text: String, font: UIFont)
case screenshot(screensot: UIImage, hintText: String?, hintFont: UIFont)
case collectLogs(enabled: Bool, title: String, font: UIFont, canView: Bool)
}
// MARK: - FeedbackTableViewDataSource
- private static func sectionsFromConfiguration(_ interfaceCustomization: InterfaceCustomization, screenshot: UIImage, logSupporting: LogSupporting, userEnabledLogCollection: Bool) -> [Section] {
+ private static func sectionsFromConfiguration(_ interfaceCustomization: InterfaceCustomization, screenshot: UIImage?, logSupporting: LogSupporting, userEnabledLogCollection: Bool) -> [Section] {
var sections: [Section] = []
- let screenshotRow = Row.screenshot(screensot: screenshot, hintText: interfaceCustomization.interfaceText.feedbackEditHint, hintFont: interfaceCustomization.appearance.feedbackEditHintFont)
- let screenshotSection = Section.feedback(rows: [screenshotRow])
-
- sections.append(screenshotSection)
+ if let screenshot = screenshot {
+ let screenshotRow = Row.screenshot(screensot: screenshot, hintText: interfaceCustomization.interfaceText.feedbackEditHint, hintFont: interfaceCustomization.appearance.feedbackEditHintFont)
+ let screenshotSection = Section.feedback(rows: [screenshotRow])
+
+ sections.append(screenshotSection)
+ } else {
+ let requestScreenshotRow = Row.selectScreenshot(text: interfaceCustomization.interfaceText.selectScreenshotButtonTitle, font: interfaceCustomization.appearance.selectScreenshotButtonFont)
+
+ let screenshotSection = Section.feedback(rows: [requestScreenshotRow])
+
+ sections.append(screenshotSection)
+ }
if logSupporting.logCollector != nil {
let collectLogsRow = Row.collectLogs(enabled: userEnabledLogCollection, title: interfaceCustomization.interfaceText.logCollectionPermissionTitle, font: interfaceCustomization.appearance.logCollectionPermissionFont, canView: logSupporting.logViewer != nil)
@@ -98,6 +107,26 @@ final class FeedbackTableViewDataSource: NSObject, UITableViewDataSource {
return cell
}
+ private func requestScreenshotCell(for row: Row) -> UITableViewCell {
+ let cell = RequestScreenshotCell()
+
+ guard case let .selectScreenshot(text, font) = row else {
+ assertionFailure("Found unexpected row type when creating screenshot cell.")
+ return cell
+ }
+
+ cell.viewModel = RequestScreenshotCell.ViewModel(buttonText: text, buttonFont: font)
+ cell.screenshotButtonTapHandler = { [weak self] _ in
+ guard let self = self else { return }
+
+ if #available(iOS 14, *) {
+ self.delegate?.feedbackTableViewDataSourceDidRequestScreenshot(feedbackTableViewDataSource: self)
+ }
+ }
+
+ return cell
+ }
+
// MARK: - UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
@@ -115,6 +144,8 @@ final class FeedbackTableViewDataSource: NSObject, UITableViewDataSource {
case let .feedback(rows):
let row = rows[indexPath.row]
switch row {
+ case .selectScreenshot:
+ return requestScreenshotCell(for: row)
case .screenshot:
return screenshotCell(for: row)
case .collectLogs:
@@ -134,4 +165,12 @@ protocol FeedbackTableViewDataSourceDelegate: class {
- parameter screenshot: The screenshot that was tapped.
*/
func feedbackTableViewDataSource(feedbackTableViewDataSource: FeedbackTableViewDataSource, didTapScreenshot screenshot: UIImage)
+
+ /**
+ Notifies the delegate that a screenshot is being requested.
+
+ - parameter feedbackTableViewDataSource: The feedback table view data source that sent the message.
+ */
+ @available(iOS 14, *)
+ func feedbackTableViewDataSourceDidRequestScreenshot(feedbackTableViewDataSource: FeedbackTableViewDataSource)
}
diff --git a/PinpointKit/PinpointKit/Sources/Core/FeedbackViewController.swift b/PinpointKit/PinpointKit/Sources/Core/FeedbackViewController.swift
index e2ed2a4..de93986 100644
--- a/PinpointKit/PinpointKit/Sources/Core/FeedbackViewController.swift
+++ b/PinpointKit/PinpointKit/Sources/Core/FeedbackViewController.swift
@@ -7,6 +7,7 @@
//
import UIKit
+import PhotosUI
/// A `UITableViewController` that conforms to `FeedbackCollector` in order to display an interface that allows the user to see, change, and send feedback.
public final class FeedbackViewController: UITableViewController {
@@ -108,7 +109,6 @@ public final class FeedbackViewController: UITableViewController {
private func updateDataSource() {
guard let interfaceCustomization = interfaceCustomization else { assertionFailure(); return }
- guard let screenshot = screenshot else { assertionFailure(); return }
let screenshotToDisplay = annotatedScreenshot ?? screenshot
dataSource = FeedbackTableViewDataSource(interfaceCustomization: interfaceCustomization, screenshot: screenshotToDisplay, logSupporting: self, userEnabledLogCollection: userEnabledLogCollection, delegate: self)
@@ -190,7 +190,7 @@ public final class FeedbackViewController: UITableViewController {
// MARK: - FeedbackCollector
extension FeedbackViewController: FeedbackCollector {
- public func collectFeedback(with screenshot: UIImage, from viewController: UIViewController) {
+ public func collectFeedback(with screenshot: UIImage?, from viewController: UIViewController) {
self.screenshot = screenshot
annotatedScreenshot = nil
viewController.showDetailViewController(self, sender: viewController)
@@ -249,4 +249,38 @@ extension FeedbackViewController: FeedbackTableViewDataSourceDelegate {
editImageViewController.modalPresentationStyle = feedbackConfiguration?.presentationStyle ?? .fullScreen
present(editImageViewController, animated: true, completion: nil)
}
+
+ @available(iOS 14, *)
+ func feedbackTableViewDataSourceDidRequestScreenshot(feedbackTableViewDataSource: FeedbackTableViewDataSource) {
+ var configuration = PHPickerConfiguration(photoLibrary: .shared())
+ configuration.filter = .images
+
+ let pickerController = PHPickerViewController(configuration: configuration)
+ pickerController.delegate = self
+ viewController.present(pickerController, animated: true, completion: nil)
+ }
+}
+
+@available(iOS 14, *)
+extension FeedbackViewController: PHPickerViewControllerDelegate {
+
+ public func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
+ guard let result = results.first else {
+ picker.presentingViewController?.dismiss(animated: true)
+ return
+ }
+
+ result.itemProvider.loadObject(ofClass: UIImage.self, completionHandler: { image, _ in
+ OperationQueue.main.addOperation {
+ defer {
+ picker.presentingViewController?.dismiss(animated: true)
+ }
+
+ guard let image = image as? UIImage else { return }
+ self.screenshot = image
+
+ self.tableView.reloadData()
+ }
+ })
+ }
}
diff --git a/PinpointKit/PinpointKit/Sources/Core/InterfaceCustomization.swift b/PinpointKit/PinpointKit/Sources/Core/InterfaceCustomization.swift
index ce88169..6b79295 100644
--- a/PinpointKit/PinpointKit/Sources/Core/InterfaceCustomization.swift
+++ b/PinpointKit/PinpointKit/Sources/Core/InterfaceCustomization.swift
@@ -47,6 +47,9 @@ public struct InterfaceCustomization {
/// The font used for navigation titles.
let navigationTitleFont: UIFont
+ /// The font used for the select screenshot button used for `.limited` photo library access.
+ let selectScreenshotButtonFont: UIFont
+
/// The font used for the button that sends feedback.
let feedbackSendButtonFont: UIFont
@@ -84,6 +87,7 @@ public struct InterfaceCustomization {
- parameter annotationTextAttributes: The text attributes for annotations.
- parameter navigationTitleColor: The color used for navigation titles.
- parameter navigationTitleFont: The font used for navigation titles.
+ - parameter selectScreenshotButtonFont: The font used for the select screenshot button.
- parameter feedbackSendButtonFont: The font used for the button that sends feedback.
- parameter feedbackCancelButtonFont: The font used for the button that cancels feedback collection.
- parameter feedbackEditHintFont: The font used for the hint to the user on how to edit the screenshot from the feedback screen.
@@ -101,6 +105,7 @@ public struct InterfaceCustomization {
annotationTextAttributes: [NSAttributedString.Key: AnyObject]? = nil,
navigationTitleColor: UIColor = Self.defaultNavigationTitleColor,
navigationTitleFont: UIFont = .sourceSansProFont(ofSize: 19, weight: .semibold),
+ selectScreenshotButtonFont: UIFont = .sourceSansProFont(ofSize: 19, weight: .semibold),
feedbackSendButtonFont: UIFont = .sourceSansProFont(ofSize: 19, weight: .semibold),
feedbackCancelButtonFont: UIFont = .sourceSansProFont(ofSize: 19),
feedbackEditHintFont: UIFont = .sourceSansProFont(ofSize: 14),
@@ -129,6 +134,7 @@ public struct InterfaceCustomization {
self.logFont = logFont
self.navigationTitleFont = navigationTitleFont
+ self.selectScreenshotButtonFont = selectScreenshotButtonFont
self.feedbackSendButtonFont = feedbackSendButtonFont
self.feedbackCancelButtonFont = feedbackCancelButtonFont
self.feedbackEditHintFont = feedbackEditHintFont
@@ -169,6 +175,9 @@ public struct InterfaceCustomization {
/// A hint to the user on how to edit the screenshot from the feedback screen.
let feedbackEditHint: String?
+ /// A title to use for the select screenshot button.
+ let selectScreenshotButtonTitle: String
+
/// The title of the log collection screen.
let logCollectorTitle: String?
@@ -189,6 +198,7 @@ public struct InterfaceCustomization {
- parameter feedbackCancelButtonTitle: The title of the cancel button.
- parameter feedbackBackButtonTitle: The title of the back button.
- parameter feedbackEditHint: The hint to show during editing.
+ - parameter selectScreenshotButtonTitle: The title of the select screenshot button.
- parameter logCollectorTitle: The title of the log collector.
- parameter logCollectionPermissionTitle: The title of the permission button.
- parameter textEditingDismissButtonTitle: The title of the text editing dismiss button.
@@ -199,6 +209,7 @@ public struct InterfaceCustomization {
feedbackCancelButtonTitle: String? = nil,
feedbackBackButtonTitle: String? = NSLocalizedString("Report", comment: "Back button title of a view that reports a bug"),
feedbackEditHint: String? = NSLocalizedString("Tap the screenshot to annotate.", comment: "A hint on how to edit the screenshot"),
+ selectScreenshotButtonTitle: String = NSLocalizedString("Select Screenshot…", comment: "A button that allows screenshot selection from the photo library."),
logCollectorTitle: String? = NSLocalizedString("Console Log", comment: "Title of a view that collects logs"),
logCollectionPermissionTitle: String = NSLocalizedString("Include Console Log", comment: "Title of a button asking the user to include system logs"),
textEditingDismissButtonTitle: String = NSLocalizedString("Dismiss", comment: "Title of a button that dismisses text editing"),
@@ -208,6 +219,7 @@ public struct InterfaceCustomization {
self.feedbackCancelButtonTitle = feedbackCancelButtonTitle
self.feedbackBackButtonTitle = feedbackBackButtonTitle
self.feedbackEditHint = feedbackEditHint
+ self.selectScreenshotButtonTitle = selectScreenshotButtonTitle
self.logCollectorTitle = logCollectorTitle
self.logCollectionPermissionTitle = logCollectionPermissionTitle
self.textEditingDismissButtonTitle = textEditingDismissButtonTitle
diff --git a/PinpointKit/PinpointKit/Sources/Core/PinpointKit.swift b/PinpointKit/PinpointKit/Sources/Core/PinpointKit.swift
index 2ee8f1e..2427a49 100644
--- a/PinpointKit/PinpointKit/Sources/Core/PinpointKit.swift
+++ b/PinpointKit/PinpointKit/Sources/Core/PinpointKit.swift
@@ -54,7 +54,7 @@ open class PinpointKit {
- parameter viewController: The view controller from which to present.
- parameter screenshot: The screenshot to be annotated. The default value is a screenshot taken at the time this method is called. This image is intended to match the device’s screen size in points.
*/
- open func show(from viewController: UIViewController, screenshot: UIImage = Screenshotter.takeScreenshot()) {
+ open func show(from viewController: UIViewController, screenshot: UIImage? = Screenshotter.takeScreenshot()) {
displayingViewController = viewController
configuration.editor.clearAllAnnotations()
configuration.feedbackCollector.collectFeedback(with: screenshot, from: viewController)
diff --git a/PinpointKit/PinpointKit/Sources/Core/RequestScreenshotCell.swift b/PinpointKit/PinpointKit/Sources/Core/RequestScreenshotCell.swift
new file mode 100644
index 0000000..28f3d29
--- /dev/null
+++ b/PinpointKit/PinpointKit/Sources/Core/RequestScreenshotCell.swift
@@ -0,0 +1,105 @@
+//
+// RequestScreenshotCell.swift
+// PinpointKit
+//
+// Created by Twig on 9/16/20.
+// Copyright © 2020 Lickability. All rights reserved.
+//
+
+import UIKit
+
+/// A cell that displays a button allowing a user to select a screenshot from their library.
+class RequestScreenshotCell: UITableViewCell {
+
+ // MARK: - RequestScreenshotCell
+
+ /// A type of closure that is invoked when a button is tapped.
+ typealias TapHandler = (_ button: UIButton) -> Void
+
+ /// A struct encapsulating the information necessary for this view to be displayed.
+ struct ViewModel {
+
+ /// The text displayed in the button requesting a screenshot.
+ let buttonText: String
+
+ /// The font for the text in the button that is requesting a screenshot.
+ let buttonFont: UIFont?
+ }
+
+ private enum DesignConstants {
+ static let buttonHeight: CGFloat = 54.0
+ static let topInset: CGFloat = 80.0
+ static let horizontalInset: CGFloat = 32.0
+ }
+
+ /// A closure that is invoked when the user taps on the button.
+ var screenshotButtonTapHandler: TapHandler?
+
+ /// Set the `viewModel` in order to update the receiver’s content.
+ var viewModel: ViewModel? {
+ didSet {
+ requestScreenshotButton.setTitle(viewModel?.buttonText, for: .normal)
+ requestScreenshotButton.titleLabel?.font = viewModel?.buttonFont
+ }
+ }
+
+ private lazy var requestScreenshotButton: UIButton = {
+ let button = UIButton(type: .system)
+ button.translatesAutoresizingMaskIntoConstraints = false
+ button.layer.cornerRadius = DesignConstants.buttonHeight / 2.0
+
+ return button
+ }()
+
+ // MARK: - UIView
+
+ public required init?(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+
+ setUp()
+ }
+
+ override func addSubview(_ view: UIView) {
+ // Prevents the adding of separators to this cell.
+ let separatorHeight = UIScreen.main.pixelHeight
+ guard view.frame.height != separatorHeight else {
+ return
+ }
+
+ super.addSubview(view)
+ }
+
+ // MARK: - UITableViewCell
+
+ public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+ super.init(style: style, reuseIdentifier: reuseIdentifier)
+
+ setUp()
+ }
+
+ // MARK: - RequestScreenshotCell
+
+ private func setUp() {
+ backgroundColor = .clear
+ selectionStyle = .none
+
+ contentView.addSubview(requestScreenshotButton)
+
+ setupRequestButton()
+ }
+
+ private func setupRequestButton() {
+ requestScreenshotButton.addTarget(self, action: #selector(screenshotButtonTapped), for: .primaryActionTriggered)
+
+ NSLayoutConstraint.activate([
+ requestScreenshotButton.topAnchor.constraint(equalTo: contentView.topAnchor, constant: DesignConstants.topInset),
+ requestScreenshotButton.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
+ requestScreenshotButton.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: DesignConstants.horizontalInset),
+ requestScreenshotButton.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -DesignConstants.horizontalInset)
+ ])
+ }
+
+ @objc private func screenshotButtonTapped(_ sender: UIButton) {
+ screenshotButtonTapHandler?(sender)
+ }
+}
diff --git a/PinpointKit/PinpointKit/Sources/ScreenshotDetector/ScreenshotDetector.swift b/PinpointKit/PinpointKit/Sources/ScreenshotDetector/ScreenshotDetector.swift
index 7ff887e..e670cd9 100644
--- a/PinpointKit/PinpointKit/Sources/ScreenshotDetector/ScreenshotDetector.swift
+++ b/PinpointKit/PinpointKit/Sources/ScreenshotDetector/ScreenshotDetector.swift
@@ -63,17 +63,37 @@ open class ScreenshotDetector: NSObject {
}
private func requestPhotosAuthorization() {
- PHPhotoLibrary.requestAuthorization { authorizationStatus in
- OperationQueue.main.addOperation {
- switch authorizationStatus {
- case .authorized:
- // Register for the next photo library change notification since the new screenshot
- // won’t be available immediately.
- self.photoLibrary.register(self)
- case .denied, .notDetermined, .restricted:
- self.fail(with: .unauthorized(status: authorizationStatus))
- @unknown default:
- break
+
+ func handleStatus(status: PHAuthorizationStatus) {
+ switch status {
+ case .authorized:
+ // Register for the next photo library change notification since the new screenshot
+ // won’t be available immediately.
+ self.photoLibrary.register(self)
+ case .limited:
+ let screenshotPresentationDelay = 0.5
+
+ /// Delaying the presentation, so that the feedback report doesn't immediately present while the screenshot is still being taken.
+ DispatchQueue.main.asyncAfter(deadline: .now() + screenshotPresentationDelay) {
+ self.succeed(with: nil)
+ }
+ case .denied, .notDetermined, .restricted:
+ self.fail(with: .unauthorized(status: status))
+ @unknown default:
+ break
+ }
+ }
+
+ if #available(iOS 14, *) {
+ PHPhotoLibrary.requestAuthorization(for: .readWrite) { authorizationStatus in
+ OperationQueue.main.addOperation {
+ handleStatus(status: authorizationStatus)
+ }
+ }
+ } else {
+ PHPhotoLibrary.requestAuthorization { authorizationStatus in
+ OperationQueue.main.addOperation {
+ handleStatus(status: authorizationStatus)
}
}
}
@@ -100,7 +120,7 @@ open class ScreenshotDetector: NSObject {
}
}
- private func succeed(with image: UIImage) {
+ private func succeed(with image: UIImage?) {
delegate?.screenshotDetector(self, didDetect: image)
}
@@ -118,9 +138,9 @@ public protocol ScreenshotDetectorDelegate: class {
Notifies the delegate that the detector did successfully detect a screenshot.
- parameter screenshotDetector: The detector responsible for the message.
- - parameter screenshot: The screenshot that was detected.
+ - parameter screenshot: The screenshot that was detected. Optional if the asset cannot be retrieved due to limited library access.
*/
- func screenshotDetector(_ screenshotDetector: ScreenshotDetector, didDetect screenshot: UIImage)
+ func screenshotDetector(_ screenshotDetector: ScreenshotDetector, didDetect screenshot: UIImage?)
/**
Notifies the delegate that the detector failed to detect a screenshot.