From 3bc243861cb8d62d89172f055f6d64da9552f10a Mon Sep 17 00:00:00 2001 From: jhpark-steve Date: Thu, 22 Apr 2021 15:17:43 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20Toast=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/sidedish/Podfile | 10 + ios/sidedish/Podfile.lock | 16 + ios/sidedish/Pods/Manifest.lock | 16 + .../Pods/Pods.xcodeproj/project.pbxproj | 638 ++++++++++++++++++ .../Pods-sidedish/Pods-sidedish-Info.plist | 26 + .../Pods-sidedish-acknowledgements.markdown | 20 + .../Pods-sidedish-acknowledgements.plist | 52 ++ .../Pods-sidedish/Pods-sidedish-dummy.m | 5 + ...sh-frameworks-Debug-input-files.xcfilelist | 2 + ...h-frameworks-Debug-output-files.xcfilelist | 1 + ...-frameworks-Release-input-files.xcfilelist | 2 + ...frameworks-Release-output-files.xcfilelist | 1 + .../Pods-sidedish/Pods-sidedish-frameworks.sh | 207 ++++++ .../Pods-sidedish/Pods-sidedish-umbrella.h | 16 + .../Pods-sidedish.debug.xcconfig | 12 + .../Pods-sidedish/Pods-sidedish.modulemap | 6 + .../Pods-sidedish.release.xcconfig | 12 + .../Toaster/Toaster-Info.plist | 26 + .../Toaster/Toaster-dummy.m | 5 + .../Toaster/Toaster-prefix.pch | 12 + .../Toaster/Toaster-umbrella.h | 17 + .../Toaster/Toaster.debug.xcconfig | 11 + .../Toaster/Toaster.modulemap | 6 + .../Toaster/Toaster.release.xcconfig | 11 + ios/sidedish/Pods/Toaster/LICENSE | 13 + ios/sidedish/Pods/Toaster/README.md | 133 ++++ .../Toaster/Sources/KeyboardObserver.swift | 48 ++ ios/sidedish/Pods/Toaster/Sources/Toast.swift | 176 +++++ .../Pods/Toaster/Sources/ToastCenter.swift | 71 ++ .../Pods/Toaster/Sources/ToastView.swift | 233 +++++++ .../Pods/Toaster/Sources/ToastWindow.swift | 227 +++++++ ios/sidedish/Pods/Toaster/Sources/Toaster.h | 4 + .../Toaster/Sources/UIApplication+Load.swift | 22 + .../sidedish.xcodeproj/project.pbxproj | 71 ++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../View/Base.lproj/Main.storyboard | 12 +- .../ViewController/MainViewController.swift | 3 +- 38 files changed, 2150 insertions(+), 11 deletions(-) create mode 100644 ios/sidedish/Podfile create mode 100644 ios/sidedish/Podfile.lock create mode 100644 ios/sidedish/Pods/Manifest.lock create mode 100644 ios/sidedish/Pods/Pods.xcodeproj/project.pbxproj create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-Info.plist create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.markdown create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.plist create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-dummy.m create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-input-files.xcfilelist create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-output-files.xcfilelist create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-input-files.xcfilelist create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-output-files.xcfilelist create mode 100755 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-umbrella.h create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.debug.xcconfig create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.modulemap create mode 100644 ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.release.xcconfig create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster-Info.plist create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster-dummy.m create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster-prefix.pch create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster-umbrella.h create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster.debug.xcconfig create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster.modulemap create mode 100644 ios/sidedish/Pods/Target Support Files/Toaster/Toaster.release.xcconfig create mode 100644 ios/sidedish/Pods/Toaster/LICENSE create mode 100644 ios/sidedish/Pods/Toaster/README.md create mode 100644 ios/sidedish/Pods/Toaster/Sources/KeyboardObserver.swift create mode 100644 ios/sidedish/Pods/Toaster/Sources/Toast.swift create mode 100644 ios/sidedish/Pods/Toaster/Sources/ToastCenter.swift create mode 100644 ios/sidedish/Pods/Toaster/Sources/ToastView.swift create mode 100644 ios/sidedish/Pods/Toaster/Sources/ToastWindow.swift create mode 100644 ios/sidedish/Pods/Toaster/Sources/Toaster.h create mode 100644 ios/sidedish/Pods/Toaster/Sources/UIApplication+Load.swift create mode 100644 ios/sidedish/sidedish.xcworkspace/contents.xcworkspacedata create mode 100644 ios/sidedish/sidedish.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/ios/sidedish/Podfile b/ios/sidedish/Podfile new file mode 100644 index 000000000..c912bab74 --- /dev/null +++ b/ios/sidedish/Podfile @@ -0,0 +1,10 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'sidedish' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! +pod 'Toaster' + # Pods for sidedish + +end diff --git a/ios/sidedish/Podfile.lock b/ios/sidedish/Podfile.lock new file mode 100644 index 000000000..e2a6224c7 --- /dev/null +++ b/ios/sidedish/Podfile.lock @@ -0,0 +1,16 @@ +PODS: + - Toaster (2.3.0) + +DEPENDENCIES: + - Toaster + +SPEC REPOS: + trunk: + - Toaster + +SPEC CHECKSUMS: + Toaster: c3473963c78e8cabbf6ea6f11ad0fdaae6f54987 + +PODFILE CHECKSUM: 6091b6450d4fbc3b91c69e324781111a3e39d762 + +COCOAPODS: 1.9.3 diff --git a/ios/sidedish/Pods/Manifest.lock b/ios/sidedish/Pods/Manifest.lock new file mode 100644 index 000000000..e2a6224c7 --- /dev/null +++ b/ios/sidedish/Pods/Manifest.lock @@ -0,0 +1,16 @@ +PODS: + - Toaster (2.3.0) + +DEPENDENCIES: + - Toaster + +SPEC REPOS: + trunk: + - Toaster + +SPEC CHECKSUMS: + Toaster: c3473963c78e8cabbf6ea6f11ad0fdaae6f54987 + +PODFILE CHECKSUM: 6091b6450d4fbc3b91c69e324781111a3e39d762 + +COCOAPODS: 1.9.3 diff --git a/ios/sidedish/Pods/Pods.xcodeproj/project.pbxproj b/ios/sidedish/Pods/Pods.xcodeproj/project.pbxproj new file mode 100644 index 000000000..9723f41e1 --- /dev/null +++ b/ios/sidedish/Pods/Pods.xcodeproj/project.pbxproj @@ -0,0 +1,638 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 1027FC1FCA5E364300F5E87E1123DB70 /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9CB5D65DDF256A065521EF41CAE4C9F /* ToastView.swift */; }; + 23FBED90B4DAF9F839F9233AC2B0B10E /* Toaster-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 634B0E0473A0833DEBBAED7F2DA6C63A /* Toaster-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29E5AC5BDA3B53E990F52DBDDA5D21E2 /* Toaster.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2AB2C9E55573CD8D62EE95011B3BC4 /* Toaster.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D7C14621C625C9D5576C89C272ABD55 /* UIApplication+Load.swift in Sources */ = {isa = PBXBuildFile; fileRef = B025EC872747CFE2D9A261CAE0CF2546 /* UIApplication+Load.swift */; }; + 333EF367E5EE0B72660C1FEFF3F2621C /* Pods-sidedish-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D63B5C502074BCAF80D22551044F5A1D /* Pods-sidedish-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 791EC4658E211111720E7B602E14C565 /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76CF8FE4E99744730CC977CFFB8A78AE /* Toast.swift */; }; + 7D1B3429B9DC2EEE6C55CE7858456FE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950B64BEB39CC506B65115EE95302D64 /* Foundation.framework */; }; + 8017B2EB871A6FED72499956E8E66187 /* ToastCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1AEEF08EFC76ADFB3412EB38C750D19 /* ToastCenter.swift */; }; + 99CD09F5A004259FC64838C9A7DC498F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49F545AB76C9016ECAD7D83A1129E704 /* UIKit.framework */; }; + 9BDEF9144B5B9BF5EDD19B661A91872A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 950B64BEB39CC506B65115EE95302D64 /* Foundation.framework */; }; + B00650483E760735EB7CBDD96DD1488F /* Pods-sidedish-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A4C71E855B5DA0E66D216FF4BE8BC481 /* Pods-sidedish-dummy.m */; }; + C3686078E3421110F851738D9DF6DEB0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBCD5169B524477639A9A41855A47F99 /* QuartzCore.framework */; }; + DEE719FFF61C5B8FD4E22256471EF950 /* ToastWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1418CF13AC9FA458933B3244DFD7979E /* ToastWindow.swift */; }; + E4AD1FBAA863947DCF4F61175C5D15E8 /* KeyboardObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1E9116C1382844BB21598367F8EE75 /* KeyboardObserver.swift */; }; + F51C9BC311A902D5B1C72F03D55C1CEC /* Toaster-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EEE85B3501202EF6281A9030F27D409 /* Toaster-dummy.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 3BF2550F1E1CA01240C2871EDEDFD758 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B90AB98A7BC6A346D671B36DB990DAC2; + remoteInfo = Toaster; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 0685202DD3233C65C4FA8A322214FAE6 /* Pods-sidedish-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-sidedish-acknowledgements.markdown"; sourceTree = ""; }; + 1418CF13AC9FA458933B3244DFD7979E /* ToastWindow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToastWindow.swift; path = Sources/ToastWindow.swift; sourceTree = ""; }; + 16FEDAAFA144A09E5BD1997929F72441 /* Toaster.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Toaster.modulemap; sourceTree = ""; }; + 3D99DDA96D4A9A0CE76EC364E1CD9FD4 /* Pods-sidedish-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-sidedish-frameworks.sh"; sourceTree = ""; }; + 439D4DBBC9479B2251E69D7941937D51 /* Pods-sidedish.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-sidedish.modulemap"; sourceTree = ""; }; + 49F545AB76C9016ECAD7D83A1129E704 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 518A11066844170EF04B4AFB9E703EEA /* Pods-sidedish-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-sidedish-Info.plist"; sourceTree = ""; }; + 58D524B1F7BF9AC5A343DF20747FB94E /* Pods-sidedish.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-sidedish.release.xcconfig"; sourceTree = ""; }; + 634B0E0473A0833DEBBAED7F2DA6C63A /* Toaster-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toaster-umbrella.h"; sourceTree = ""; }; + 6EEE85B3501202EF6281A9030F27D409 /* Toaster-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Toaster-dummy.m"; sourceTree = ""; }; + 76CF8FE4E99744730CC977CFFB8A78AE /* Toast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Toast.swift; path = Sources/Toast.swift; sourceTree = ""; }; + 784BAF5A46E405BCD27575653EE82ABB /* Toaster.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Toaster.debug.xcconfig; sourceTree = ""; }; + 814790908538E15DCAF784AFDBBB211C /* Pods-sidedish.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-sidedish.debug.xcconfig"; sourceTree = ""; }; + 8D11F23682012248871BF32D4618F1AA /* Pods_sidedish.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_sidedish.framework; path = "Pods-sidedish.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8F1638E79C4159E20246573103532422 /* Toaster.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Toaster.release.xcconfig; sourceTree = ""; }; + 950B64BEB39CC506B65115EE95302D64 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 9A1E9116C1382844BB21598367F8EE75 /* KeyboardObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyboardObserver.swift; path = Sources/KeyboardObserver.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A4C71E855B5DA0E66D216FF4BE8BC481 /* Pods-sidedish-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-sidedish-dummy.m"; sourceTree = ""; }; + AA50AC81A52A034983B2B460B3FF0844 /* Pods-sidedish-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-sidedish-acknowledgements.plist"; sourceTree = ""; }; + B025EC872747CFE2D9A261CAE0CF2546 /* UIApplication+Load.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+Load.swift"; path = "Sources/UIApplication+Load.swift"; sourceTree = ""; }; + BC2AB2C9E55573CD8D62EE95011B3BC4 /* Toaster.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Toaster.h; path = Sources/Toaster.h; sourceTree = ""; }; + BD810337F4A305D60D9250A197AA1EF1 /* Toaster.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Toaster.framework; path = Toaster.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C9CB5D65DDF256A065521EF41CAE4C9F /* ToastView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToastView.swift; path = Sources/ToastView.swift; sourceTree = ""; }; + CBCD5169B524477639A9A41855A47F99 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + D63B5C502074BCAF80D22551044F5A1D /* Pods-sidedish-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-sidedish-umbrella.h"; sourceTree = ""; }; + E0C9EAAB5F571DF954F946BB520A250F /* Toaster-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Toaster-prefix.pch"; sourceTree = ""; }; + E6C5C0F157CFD9D6C34E18E95318EECD /* Toaster-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Toaster-Info.plist"; sourceTree = ""; }; + F1AEEF08EFC76ADFB3412EB38C750D19 /* ToastCenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToastCenter.swift; path = Sources/ToastCenter.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + B9F90E78CCA2024DCAB136B1E07A8BC8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9BDEF9144B5B9BF5EDD19B661A91872A /* Foundation.framework in Frameworks */, + C3686078E3421110F851738D9DF6DEB0 /* QuartzCore.framework in Frameworks */, + 99CD09F5A004259FC64838C9A7DC498F /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F97002A8499DD63BD251DCD307251EA8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7D1B3429B9DC2EEE6C55CE7858456FE2 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 03C5C200A0787E300053CFA8F53CA094 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C18BABFF9523A33465B5A91496FF0C3D /* iOS */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2E1F52139F3939AC61F0FC230285C200 /* Pods-sidedish */ = { + isa = PBXGroup; + children = ( + 439D4DBBC9479B2251E69D7941937D51 /* Pods-sidedish.modulemap */, + 0685202DD3233C65C4FA8A322214FAE6 /* Pods-sidedish-acknowledgements.markdown */, + AA50AC81A52A034983B2B460B3FF0844 /* Pods-sidedish-acknowledgements.plist */, + A4C71E855B5DA0E66D216FF4BE8BC481 /* Pods-sidedish-dummy.m */, + 3D99DDA96D4A9A0CE76EC364E1CD9FD4 /* Pods-sidedish-frameworks.sh */, + 518A11066844170EF04B4AFB9E703EEA /* Pods-sidedish-Info.plist */, + D63B5C502074BCAF80D22551044F5A1D /* Pods-sidedish-umbrella.h */, + 814790908538E15DCAF784AFDBBB211C /* Pods-sidedish.debug.xcconfig */, + 58D524B1F7BF9AC5A343DF20747FB94E /* Pods-sidedish.release.xcconfig */, + ); + name = "Pods-sidedish"; + path = "Target Support Files/Pods-sidedish"; + sourceTree = ""; + }; + 664CDE497676A3A9D3D1CB77BFA01709 /* Pods */ = { + isa = PBXGroup; + children = ( + 958A8FEB40590C369CD763D58B4F148C /* Toaster */, + ); + name = Pods; + sourceTree = ""; + }; + 92E2DE454490FF1D664D62A110F7992B /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 2E1F52139F3939AC61F0FC230285C200 /* Pods-sidedish */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + 958A8FEB40590C369CD763D58B4F148C /* Toaster */ = { + isa = PBXGroup; + children = ( + 9A1E9116C1382844BB21598367F8EE75 /* KeyboardObserver.swift */, + 76CF8FE4E99744730CC977CFFB8A78AE /* Toast.swift */, + F1AEEF08EFC76ADFB3412EB38C750D19 /* ToastCenter.swift */, + BC2AB2C9E55573CD8D62EE95011B3BC4 /* Toaster.h */, + C9CB5D65DDF256A065521EF41CAE4C9F /* ToastView.swift */, + 1418CF13AC9FA458933B3244DFD7979E /* ToastWindow.swift */, + B025EC872747CFE2D9A261CAE0CF2546 /* UIApplication+Load.swift */, + ACB4C8950F1210F21FBC5DA45916F156 /* Support Files */, + ); + name = Toaster; + path = Toaster; + sourceTree = ""; + }; + A1FF9EE37D1105026F85950E9ACA3CF6 /* Products */ = { + isa = PBXGroup; + children = ( + 8D11F23682012248871BF32D4618F1AA /* Pods_sidedish.framework */, + BD810337F4A305D60D9250A197AA1EF1 /* Toaster.framework */, + ); + name = Products; + sourceTree = ""; + }; + ACB4C8950F1210F21FBC5DA45916F156 /* Support Files */ = { + isa = PBXGroup; + children = ( + 16FEDAAFA144A09E5BD1997929F72441 /* Toaster.modulemap */, + 6EEE85B3501202EF6281A9030F27D409 /* Toaster-dummy.m */, + E6C5C0F157CFD9D6C34E18E95318EECD /* Toaster-Info.plist */, + E0C9EAAB5F571DF954F946BB520A250F /* Toaster-prefix.pch */, + 634B0E0473A0833DEBBAED7F2DA6C63A /* Toaster-umbrella.h */, + 784BAF5A46E405BCD27575653EE82ABB /* Toaster.debug.xcconfig */, + 8F1638E79C4159E20246573103532422 /* Toaster.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Toaster"; + sourceTree = ""; + }; + C18BABFF9523A33465B5A91496FF0C3D /* iOS */ = { + isa = PBXGroup; + children = ( + 950B64BEB39CC506B65115EE95302D64 /* Foundation.framework */, + CBCD5169B524477639A9A41855A47F99 /* QuartzCore.framework */, + 49F545AB76C9016ECAD7D83A1129E704 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + CF1408CF629C7361332E53B88F7BD30C = { + isa = PBXGroup; + children = ( + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, + 03C5C200A0787E300053CFA8F53CA094 /* Frameworks */, + 664CDE497676A3A9D3D1CB77BFA01709 /* Pods */, + A1FF9EE37D1105026F85950E9ACA3CF6 /* Products */, + 92E2DE454490FF1D664D62A110F7992B /* Targets Support Files */, + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 4A7F084E72AEEA5DB6EEF93F4608826E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 23FBED90B4DAF9F839F9233AC2B0B10E /* Toaster-umbrella.h in Headers */, + 29E5AC5BDA3B53E990F52DBDDA5D21E2 /* Toaster.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C5C8E24F6F71CE5777C40E3509D6D0F9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 333EF367E5EE0B72660C1FEFF3F2621C /* Pods-sidedish-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + B90AB98A7BC6A346D671B36DB990DAC2 /* Toaster */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8C6C87E141676D7C22C7249D25E25610 /* Build configuration list for PBXNativeTarget "Toaster" */; + buildPhases = ( + 4A7F084E72AEEA5DB6EEF93F4608826E /* Headers */, + 2FB961BEFF478633ECE0DC3870202427 /* Sources */, + B9F90E78CCA2024DCAB136B1E07A8BC8 /* Frameworks */, + 453F08A10F2AEE35C52D7DB3737ED025 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Toaster; + productName = Toaster; + productReference = BD810337F4A305D60D9250A197AA1EF1 /* Toaster.framework */; + productType = "com.apple.product-type.framework"; + }; + DD666341FA753912090A6334538A6411 /* Pods-sidedish */ = { + isa = PBXNativeTarget; + buildConfigurationList = F6D41D8DB06F7D60E63F407C36F4FD79 /* Build configuration list for PBXNativeTarget "Pods-sidedish" */; + buildPhases = ( + C5C8E24F6F71CE5777C40E3509D6D0F9 /* Headers */, + 67CF6CACFFB6708558238A09D9F17CB2 /* Sources */, + F97002A8499DD63BD251DCD307251EA8 /* Frameworks */, + 3EF5C3D90EAFC7C0E044B4852EEF2595 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + C42C3E77DB40D10C13A29B796D4FE4F6 /* PBXTargetDependency */, + ); + name = "Pods-sidedish"; + productName = "Pods-sidedish"; + productReference = 8D11F23682012248871BF32D4618F1AA /* Pods_sidedish.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BFDFE7DC352907FC980B868725387E98 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; + }; + buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CF1408CF629C7361332E53B88F7BD30C; + productRefGroup = A1FF9EE37D1105026F85950E9ACA3CF6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DD666341FA753912090A6334538A6411 /* Pods-sidedish */, + B90AB98A7BC6A346D671B36DB990DAC2 /* Toaster */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 3EF5C3D90EAFC7C0E044B4852EEF2595 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 453F08A10F2AEE35C52D7DB3737ED025 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2FB961BEFF478633ECE0DC3870202427 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E4AD1FBAA863947DCF4F61175C5D15E8 /* KeyboardObserver.swift in Sources */, + 791EC4658E211111720E7B602E14C565 /* Toast.swift in Sources */, + 8017B2EB871A6FED72499956E8E66187 /* ToastCenter.swift in Sources */, + F51C9BC311A902D5B1C72F03D55C1CEC /* Toaster-dummy.m in Sources */, + 1027FC1FCA5E364300F5E87E1123DB70 /* ToastView.swift in Sources */, + DEE719FFF61C5B8FD4E22256471EF950 /* ToastWindow.swift in Sources */, + 2D7C14621C625C9D5576C89C272ABD55 /* UIApplication+Load.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 67CF6CACFFB6708558238A09D9F17CB2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B00650483E760735EB7CBDD96DD1488F /* Pods-sidedish-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + C42C3E77DB40D10C13A29B796D4FE4F6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Toaster; + target = B90AB98A7BC6A346D671B36DB990DAC2 /* Toaster */; + targetProxy = 3BF2550F1E1CA01240C2871EDEDFD758 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 0C362D60953AB8C3CE6296B04039C734 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + 1EBC66D4C24CB383E9320F316D251DBC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8F1638E79C4159E20246573103532422 /* Toaster.release.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/Toaster/Toaster-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Toaster/Toaster-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/Toaster/Toaster.modulemap"; + PRODUCT_MODULE_NAME = Toaster; + PRODUCT_NAME = Toaster; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 219F1F2A6CCD0B2DDA1914120A4BA4AE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 784BAF5A46E405BCD27575653EE82ABB /* Toaster.debug.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/Toaster/Toaster-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Toaster/Toaster-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/Toaster/Toaster.modulemap"; + PRODUCT_MODULE_NAME = Toaster; + PRODUCT_NAME = Toaster; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 70316595C2F2AE9923F8DA14508E87F3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + DD45A6FC6F1E21A8A2D88B8F4FB92204 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 814790908538E15DCAF784AFDBBB211C /* Pods-sidedish.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + 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"; + INFOPLIST_FILE = "Target Support Files/Pods-sidedish/Pods-sidedish-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-sidedish/Pods-sidedish.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E6118FB4E83E61467A3E83678FEA708B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 58D524B1F7BF9AC5A343DF20747FB94E /* Pods-sidedish.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + 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"; + INFOPLIST_FILE = "Target Support Files/Pods-sidedish/Pods-sidedish-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 14.4; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-sidedish/Pods-sidedish.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0C362D60953AB8C3CE6296B04039C734 /* Debug */, + 70316595C2F2AE9923F8DA14508E87F3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8C6C87E141676D7C22C7249D25E25610 /* Build configuration list for PBXNativeTarget "Toaster" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 219F1F2A6CCD0B2DDA1914120A4BA4AE /* Debug */, + 1EBC66D4C24CB383E9320F316D251DBC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F6D41D8DB06F7D60E63F407C36F4FD79 /* Build configuration list for PBXNativeTarget "Pods-sidedish" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DD45A6FC6F1E21A8A2D88B8F4FB92204 /* Debug */, + E6118FB4E83E61467A3E83678FEA708B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; +} diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-Info.plist b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-Info.plist new file mode 100644 index 000000000..2243fe6e2 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.markdown b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.markdown new file mode 100644 index 000000000..e3ce7cac4 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.markdown @@ -0,0 +1,20 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## Toaster + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2013-2017 Suyeol Jeon + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + +Generated by CocoaPods - https://cocoapods.org diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.plist b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.plist new file mode 100644 index 000000000..aa7af0288 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-acknowledgements.plist @@ -0,0 +1,52 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2013-2017 Suyeol Jeon <devxoul@gmail.com> + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + + License + WTPFL + Title + Toaster + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-dummy.m b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-dummy.m new file mode 100644 index 000000000..5a54e5205 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_sidedish : NSObject +@end +@implementation PodsDummy_Pods_sidedish +@end diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-input-files.xcfilelist b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-input-files.xcfilelist new file mode 100644 index 000000000..8ba18c05d --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh +${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework \ No newline at end of file diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-output-files.xcfilelist b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-output-files.xcfilelist new file mode 100644 index 000000000..8bcc097ea --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Debug-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toaster.framework \ No newline at end of file diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-input-files.xcfilelist b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-input-files.xcfilelist new file mode 100644 index 000000000..8ba18c05d --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-input-files.xcfilelist @@ -0,0 +1,2 @@ +${PODS_ROOT}/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh +${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework \ No newline at end of file diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-output-files.xcfilelist b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-output-files.xcfilelist new file mode 100644 index 000000000..8bcc097ea --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-Release-output-files.xcfilelist @@ -0,0 +1 @@ +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toaster.framework \ No newline at end of file diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh new file mode 100755 index 000000000..899845834 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh @@ -0,0 +1,207 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + elif [ -L "${binary}" ]; then + echo "Destination binary is symlinked..." + dirname="$(dirname "${binary}")" + binary="${dirname}/$(readlink "${binary}")" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + warn_missing_arch=${2:-true} + if [ -r "$source" ]; then + # Copy the dSYM into the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .dSYM "$source")" + binary_name="$(ls "$source/Contents/Resources/DWARF")" + binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then + strip_invalid_archs "$binary" "$warn_missing_arch" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" + fi + fi +} + +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identity + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + warn_missing_arch=${2:-true} + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + if [[ "$warn_missing_arch" == "true" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + fi + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + +install_artifact() { + artifact="$1" + base="$(basename "$artifact")" + case $base in + *.framework) + install_framework "$artifact" + ;; + *.dSYM) + # Suppress arch warnings since XCFrameworks will include many dSYM files + install_dsym "$artifact" "false" + ;; + *.bcsymbolmap) + install_bcsymbolmap "$artifact" + ;; + *) + echo "error: Unrecognized artifact "$artifact"" + ;; + esac +} + +copy_artifacts() { + file_list="$1" + while read artifact; do + install_artifact "$artifact" + done <$file_list +} + +ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" +if [ -r "${ARTIFACT_LIST_FILE}" ]; then + copy_artifacts "${ARTIFACT_LIST_FILE}" +fi + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/Toaster/Toaster.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-umbrella.h b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-umbrella.h new file mode 100644 index 000000000..210aafda2 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_sidedishVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_sidedishVersionString[]; + diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.debug.xcconfig b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.debug.xcconfig new file mode 100644 index 000000000..468bd16e3 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.debug.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Toaster" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Toaster/Toaster.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "QuartzCore" -framework "Toaster" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.modulemap b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.modulemap new file mode 100644 index 000000000..aed9c0da9 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.modulemap @@ -0,0 +1,6 @@ +framework module Pods_sidedish { + umbrella header "Pods-sidedish-umbrella.h" + + export * + module * { export * } +} diff --git a/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.release.xcconfig b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.release.xcconfig new file mode 100644 index 000000000..468bd16e3 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Pods-sidedish/Pods-sidedish.release.xcconfig @@ -0,0 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Toaster" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Toaster/Toaster.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "QuartzCore" -framework "Toaster" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-Info.plist b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-Info.plist new file mode 100644 index 000000000..d135faf18 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-dummy.m b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-dummy.m new file mode 100644 index 000000000..69744aeb6 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Toaster : NSObject +@end +@implementation PodsDummy_Toaster +@end diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-prefix.pch b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-prefix.pch new file mode 100644 index 000000000..beb2a2441 --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-umbrella.h b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-umbrella.h new file mode 100644 index 000000000..09c15c7dc --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "Toaster.h" + +FOUNDATION_EXPORT double ToasterVersionNumber; +FOUNDATION_EXPORT const unsigned char ToasterVersionString[]; + diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.debug.xcconfig b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.debug.xcconfig new file mode 100644 index 000000000..421052bdc --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.debug.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toaster +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Toaster +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.modulemap b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.modulemap new file mode 100644 index 000000000..dd6c141ce --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.modulemap @@ -0,0 +1,6 @@ +framework module Toaster { + umbrella header "Toaster-umbrella.h" + + export * + module * { export * } +} diff --git a/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.release.xcconfig b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.release.xcconfig new file mode 100644 index 000000000..421052bdc --- /dev/null +++ b/ios/sidedish/Pods/Target Support Files/Toaster/Toaster.release.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Toaster +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "QuartzCore" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Toaster +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/ios/sidedish/Pods/Toaster/LICENSE b/ios/sidedish/Pods/Toaster/LICENSE new file mode 100644 index 000000000..6a16a33bf --- /dev/null +++ b/ios/sidedish/Pods/Toaster/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2013-2017 Suyeol Jeon + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/ios/sidedish/Pods/Toaster/README.md b/ios/sidedish/Pods/Toaster/README.md new file mode 100644 index 000000000..dca67caac --- /dev/null +++ b/ios/sidedish/Pods/Toaster/README.md @@ -0,0 +1,133 @@ +Toaster +======= + +[![Build Status](https://travis-ci.org/devxoul/Toaster.svg?branch=master)](https://travis-ci.org/devxoul/Toaster) +![Swift](https://img.shields.io/badge/Swift-5.0-orange.svg) +[![CocoaPods](https://img.shields.io/cocoapods/v/Toaster.svg?style=flat)](https://cocoapods.org/?q=name%3AToaster%20author%3Adevxoul) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +Android-like toast with very simple interface. (formerly JLToast) + + +Screenshots +----------- + +![Toaster Screenshot](https://raw.github.com/devxoul/Toaster/master/Screenshots/Toaster.png) + + +Features +-------- + +- **Queueing**: Centralized toast center manages the toast queue. +- **Customizable**: See the [Appearance](#appearance) section. +- **String** or **AttributedString**: Both supported. +- **UIAccessibility**: VoiceOver support. + + +At a Glance +----------- + +```swift +import Toaster + +Toast(text: "Hello, world!").show() +``` + + +Installation +------------ + +- **For iOS 8+ projects with [CocoaPods](https://cocoapods.org):** + + ```ruby + pod 'Toaster' + ``` + +- **For iOS 8+ projects with [Carthage](https://github.com/Carthage/Carthage):** + + ``` + github "devxoul/Toaster" + ``` + + +Getting Started +--------------- + +### Setting Duration and Delay + +```swift +Toast(text: "Hello, world!", duration: Delay.long) +Toast(text: "Hello, world!", delay: Delay.short, duration: Delay.long) +``` + +### Removing Toasts + +- **Removing toast with reference**: + + ```swift + let toast = Toast(text: "Hello") + toast.show() + toast.cancel() // remove toast immediately + ``` + +- **Removing current toast**: + + ```swift + if let currentToast = ToastCenter.default.currentToast { + currentToast.cancel() + } + ``` + +- **Removing all toasts**: + + ```swift + ToastCenter.default.cancelAll() + ``` + +### Appearance + +Since Toaster 2.0.0, you can use `UIAppearance` to set default appearance. This is an short example to set default background color to red. + +```swift +ToastView.appearance().backgroundColor = .red +``` + +Supported appearance properties are: + +| Property | Type | Description | +|---|---|---| +| `backgroundColor` | `UIColor` | Background color | +| `cornerRadius` | `CGFloat` | Corner radius | +| `textInsets` | `UIEdgeInsets` | Text inset | +| `textColor` | `UIColor` | Text color | +| `font` | `UIFont` | Font | +| `bottomOffsetPortrait` | `CGFloat` | Vertical offfset from bottom in portrait mode | +| `bottomOffsetLandscape` | `CGFloat` | Vertical offfset from bottom in landscape mode | +| `shadowPath` | `CGPath` | The shape of the layer’s shadow | +| `shadowColor` | `UIColor` | The color of the layer’s shadow | +| `shadowOpacity` | `Float` | The opacity of the layer’s shadow | +| `shadowOffset` | `CGSize` | The offset (in points) of the layer’s shadow | +| `shadowRadius` | `CGFloat` | The blur radius (in points) used to render the layer’s shadow | +| `maxWidthRatio` | `CGFloat` | The width ratio of toast view in window | +| `useSafeAreaForBottomOffset` | `Bool` | A Boolean value that determines `safeAreaInsets.bottom` is added to `bottomOffset` | + +### Attributed string + +Since Toaster 2.3.0, you can also set an attributed string: + +```swift +Toast(attributedText: NSAttributedString(string: "AttributedString Toast", attributes: [NSAttributedString.Key.backgroundColor: UIColor.yellow])) +``` + +### Accessibility + +By default, VoiceOver with UIAccessibility is enabled since Toaster 2.3.0. To disable it: +```swift +ToastCenter.default.isSupportAccessibility = false +``` + + +License +------- + +Toaster is under [WTFPL](http://www.wtfpl.net/). You can do what the fuck you want with Toast. See [LICENSE](LICENSE) file for more info. diff --git a/ios/sidedish/Pods/Toaster/Sources/KeyboardObserver.swift b/ios/sidedish/Pods/Toaster/Sources/KeyboardObserver.swift new file mode 100644 index 000000000..f0cd8901a --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/KeyboardObserver.swift @@ -0,0 +1,48 @@ +// +// KeyboardObserver.swift +// Toaster +// +// Created by SeongHo Hong on 28/08/2019. +// Copyright © 2019 Suyeol Jeon. All rights reserved. +// + +import UIKit + +final class KeyboardObserver { + + static let shared = KeyboardObserver() + + private(set) var didKeyboardShow: Bool = false + + init() { + #if swift(>=4.2) + let keyboardWillShowName = UIWindow.keyboardWillShowNotification + let keyboardDidHideName = UIWindow.keyboardDidHideNotification + #else + let keyboardWillShowName = NSNotification.Name.UIKeyboardWillShow + let keyboardDidHideName = NSNotification.Name.UIKeyboardDidHide + #endif + NotificationCenter.default.addObserver( + self, + selector: #selector(keyboardWillShow), + name: keyboardWillShowName, + object: nil + ) + NotificationCenter.default.addObserver( + self, + selector: #selector(keyboardDidHide), + name: keyboardDidHideName, + object: nil + ) + } + + @objc private func keyboardWillShow() { + didKeyboardShow = true + } + + @objc private func keyboardDidHide() { + didKeyboardShow = false + } + +} + diff --git a/ios/sidedish/Pods/Toaster/Sources/Toast.swift b/ios/sidedish/Pods/Toaster/Sources/Toast.swift new file mode 100644 index 000000000..ce8b7cc8e --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/Toast.swift @@ -0,0 +1,176 @@ +import UIKit + +public class Delay: NSObject { + @available(*, unavailable) private override init() {} + // `short` and `long` (lowercase) are reserved words in Objective-C + // so we capitalize them instead of the default `short_` and `long_` + @objc(Short) public static let short: TimeInterval = 2.0 + @objc(Long) public static let long: TimeInterval = 3.5 +} + +open class Toast: Operation { + + // MARK: Properties + + @objc public var text: String? { + get { return self.view.text } + set { self.view.text = newValue } + } + + @objc public var attributedText: NSAttributedString? { + get { return self.view.attributedText } + set { self.view.attributedText = newValue } + } + + @objc public var delay: TimeInterval + @objc public var duration: TimeInterval + + private var _executing = false + override open var isExecuting: Bool { + get { + return self._executing + } + set { + self.willChangeValue(forKey: "isExecuting") + self._executing = newValue + self.didChangeValue(forKey: "isExecuting") + } + } + + private var _finished = false + override open var isFinished: Bool { + get { + return self._finished + } + set { + self.willChangeValue(forKey: "isFinished") + self._finished = newValue + self.didChangeValue(forKey: "isFinished") + } + } + + + // MARK: UI + + @objc public var view: ToastView = ToastView() + + + // MARK: Initializing + + /// Initializer. + /// Instantiates `self.view`, so must be called on main thread. + @objc public init(text: String?, delay: TimeInterval = 0, duration: TimeInterval = Delay.short) { + self.delay = delay + self.duration = duration + super.init() + self.text = text + } + + @objc public init(attributedText: NSAttributedString?, delay: TimeInterval = 0, duration: TimeInterval = Delay.short) { + self.delay = delay + self.duration = duration + super.init() + self.attributedText = attributedText + } + + + // MARK: Factory (Deprecated) + + @available(*, deprecated, message: "Use 'init(text:)' instead.") + public class func makeText(_ text: String) -> Toast { + return Toast(text: text) + } + + @available(*, deprecated, message: "Use 'init(text:duration:)' instead.") + public class func makeText(_ text: String, duration: TimeInterval) -> Toast { + return Toast(text: text, duration: duration) + } + + @available(*, deprecated, message: "Use 'init(text:delay:duration:)' instead.") + public class func makeText(_ text: String?, delay: TimeInterval, duration: TimeInterval) -> Toast { + return Toast(text: text, delay: delay, duration: duration) + } + + + // MARK: Showing + + @objc public func show() { + ToastCenter.default.add(self) + } + + + // MARK: Cancelling + + open override func cancel() { + super.cancel() + self.finish() + self.view.removeFromSuperview() + } + + + // MARK: Operation Subclassing + + override open func start() { + let isRunnable = !self.isFinished && !self.isCancelled && !self.isExecuting + guard isRunnable else { return } + guard Thread.isMainThread else { + DispatchQueue.main.async { [weak self] in + self?.start() + } + return + } + main() + } + + override open func main() { + self.isExecuting = true + + DispatchQueue.main.async { + self.view.setNeedsLayout() + self.view.alpha = 0 + ToastWindow.shared.addSubview(self.view) + + UIView.animate( + withDuration: 0.5, + delay: self.delay, + options: .beginFromCurrentState, + animations: { + self.view.alpha = 1 + }, + completion: { completed in + if ToastCenter.default.isSupportAccessibility { + #if swift(>=4.2) + UIAccessibility.post(notification: .announcement, argument: self.view.text) + #else + UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, self.view.text) + #endif + } + UIView.animate( + withDuration: self.duration, + animations: { + self.view.alpha = 1.0001 + }, + completion: { completed in + self.finish() + UIView.animate( + withDuration: 0.5, + animations: { + self.view.alpha = 0 + }, + completion: { completed in + self.view.removeFromSuperview() + } + ) + } + ) + } + ) + } + } + + func finish() { + self.isExecuting = false + self.isFinished = true + } + +} diff --git a/ios/sidedish/Pods/Toaster/Sources/ToastCenter.swift b/ios/sidedish/Pods/Toaster/Sources/ToastCenter.swift new file mode 100644 index 000000000..09ec6494d --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/ToastCenter.swift @@ -0,0 +1,71 @@ +import UIKit + +open class ToastCenter: NSObject { + + // MARK: Properties + + private let queue: OperationQueue = { + let queue = OperationQueue() + queue.maxConcurrentOperationCount = 1 + return queue + }() + + open var currentToast: Toast? { + return self.queue.operations.first { !$0.isCancelled && !$0.isFinished } as? Toast + } + + /// If this value is `true` and the user is using VoiceOver, + /// VoiceOver will announce the text in the toast when `ToastView` is displayed. + @objc public var isSupportAccessibility: Bool = true + + /// By default, queueing for toast is enabled. + /// If this value is `false`, only the last requested toast will be shown. + @objc public var isQueueEnabled: Bool = true + + @objc public static let `default` = ToastCenter() + + + // MARK: Initializing + + override init() { + super.init() + #if swift(>=4.2) + let name = UIDevice.orientationDidChangeNotification + #else + let name = NSNotification.Name.UIDeviceOrientationDidChange + #endif + NotificationCenter.default.addObserver( + self, + selector: #selector(self.deviceOrientationDidChange), + name: name, + object: nil + ) + } + + + // MARK: Adding Toasts + + open func add(_ toast: Toast) { + if !isQueueEnabled { + cancelAll() + } + self.queue.addOperation(toast) + } + + + // MARK: Cancelling Toasts + + @objc open func cancelAll() { + queue.cancelAllOperations() + } + + + // MARK: Notifications + + @objc dynamic func deviceOrientationDidChange() { + if let lastToast = self.queue.operations.first as? Toast { + lastToast.view.setNeedsLayout() + } + } + +} diff --git a/ios/sidedish/Pods/Toaster/Sources/ToastView.swift b/ios/sidedish/Pods/Toaster/Sources/ToastView.swift new file mode 100644 index 000000000..f33762944 --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/ToastView.swift @@ -0,0 +1,233 @@ +import UIKit + +open class ToastView: UIView { + + // MARK: Properties + + open var text: String? { + get { return self.textLabel.text } + set { self.textLabel.text = newValue } + } + + open var attributedText: NSAttributedString? { + get { return self.textLabel.attributedText } + set { self.textLabel.attributedText = newValue } + } + + + // MARK: Appearance + + /// The background view's color. + override open dynamic var backgroundColor: UIColor? { + get { return self.backgroundView.backgroundColor } + set { self.backgroundView.backgroundColor = newValue } + } + + /// The background view's corner radius. + @objc open dynamic var cornerRadius: CGFloat { + get { return self.backgroundView.layer.cornerRadius } + set { self.backgroundView.layer.cornerRadius = newValue } + } + + /// The inset of the text label. + @objc open dynamic var textInsets = UIEdgeInsets(top: 6, left: 10, bottom: 6, right: 10) + + /// The color of the text label's text. + @objc open dynamic var textColor: UIColor? { + get { return self.textLabel.textColor } + set { self.textLabel.textColor = newValue } + } + + /// The font of the text label. + @objc open dynamic var font: UIFont? { + get { return self.textLabel.font } + set { self.textLabel.font = newValue } + } + + /// The bottom offset from the screen's bottom in portrait mode. + @objc open dynamic var bottomOffsetPortrait: CGFloat = { + switch UIDevice.current.userInterfaceIdiom { + // specific values + case .phone: return 30 + case .pad: return 60 + case .tv: return 90 + case .carPlay: return 30 + #if compiler(>=5.3) + case .mac: return 60 + #endif + // default values + case .unspecified: fallthrough + @unknown default: return 30 + } + }() + + /// The bottom offset from the screen's bottom in landscape mode. + @objc open dynamic var bottomOffsetLandscape: CGFloat = { + switch UIDevice.current.userInterfaceIdiom { + // specific values + case .phone: return 20 + case .pad: return 40 + case .tv: return 60 + case .carPlay: return 20 + #if compiler(>=5.3) + case .mac: return 40 + #endif + // default values + case .unspecified: fallthrough + @unknown default: return 20 + } + }() + + /// If this value is `true` and SafeArea is available, + /// `safeAreaInsets.bottom` will be added to the `bottomOffsetPortrait` and `bottomOffsetLandscape`. + /// Default value: false + @objc open dynamic var useSafeAreaForBottomOffset: Bool = false + + /// The width ratio of toast view in window, specified as a value from 0.0 to 1.0. + /// Default value: 0.875 + @objc open dynamic var maxWidthRatio: CGFloat = (280.0 / 320.0) + + /// The shape of the layer’s shadow. + @objc open dynamic var shadowPath: CGPath? { + get { return self.layer.shadowPath } + set { self.layer.shadowPath = newValue } + } + + /// The color of the layer’s shadow. + @objc open dynamic var shadowColor: UIColor? { + get { return self.layer.shadowColor.flatMap { UIColor(cgColor: $0) } } + set { self.layer.shadowColor = newValue?.cgColor } + } + + /// The opacity of the layer’s shadow. + @objc open dynamic var shadowOpacity: Float { + get { return self.layer.shadowOpacity } + set { self.layer.shadowOpacity = newValue } + } + + /// The offset (in points) of the layer’s shadow. + @objc open dynamic var shadowOffset: CGSize { + get { return self.layer.shadowOffset } + set { self.layer.shadowOffset = newValue } + } + + /// The blur radius (in points) used to render the layer’s shadow. + @objc open dynamic var shadowRadius: CGFloat { + get { return self.layer.shadowRadius } + set { self.layer.shadowRadius = newValue } + } + + // MARK: UI + + private let backgroundView: UIView = { + let `self` = UIView() + self.backgroundColor = UIColor(white: 0, alpha: 0.7) + self.layer.cornerRadius = 5 + self.clipsToBounds = true + return self + }() + + private let textLabel: UILabel = { + let `self` = UILabel() + self.textColor = .white + self.backgroundColor = .clear + self.font = { + switch UIDevice.current.userInterfaceIdiom { + // specific values + case .phone: return .systemFont(ofSize: 12) + case .pad: return .systemFont(ofSize: 16) + case .tv: return .systemFont(ofSize: 20) + case .carPlay: return .systemFont(ofSize: 12) + #if compiler(>=5.3) + case .mac: return .systemFont(ofSize: 16) + #endif + // default values + case .unspecified: fallthrough + @unknown default: return .systemFont(ofSize: 12) + } + }() + self.numberOfLines = 0 + self.textAlignment = .center + return self + }() + + + // MARK: Initializing + + public init() { + super.init(frame: .zero) + self.isUserInteractionEnabled = false + self.addSubview(self.backgroundView) + self.addSubview(self.textLabel) + } + + required convenience public init?(coder aDecoder: NSCoder) { + self.init() + } + + + // MARK: Layout + + override open func layoutSubviews() { + super.layoutSubviews() + let containerSize = ToastWindow.shared.frame.size + let constraintSize = CGSize( + width: containerSize.width * maxWidthRatio - self.textInsets.left - self.textInsets.right, + height: CGFloat.greatestFiniteMagnitude + ) + let textLabelSize = self.textLabel.sizeThatFits(constraintSize) + self.textLabel.frame = CGRect( + x: self.textInsets.left, + y: self.textInsets.top, + width: textLabelSize.width, + height: textLabelSize.height + ) + self.backgroundView.frame = CGRect( + x: 0, + y: 0, + width: self.textLabel.frame.size.width + self.textInsets.left + self.textInsets.right, + height: self.textLabel.frame.size.height + self.textInsets.top + self.textInsets.bottom + ) + + var x: CGFloat + var y: CGFloat + var width: CGFloat + var height: CGFloat + + let orientation = UIApplication.shared.statusBarOrientation + if orientation.isPortrait || !ToastWindow.shared.shouldRotateManually { + width = containerSize.width + height = containerSize.height + y = self.bottomOffsetPortrait + } else { + width = containerSize.height + height = containerSize.width + y = self.bottomOffsetLandscape + } + if #available(iOS 11.0, *), useSafeAreaForBottomOffset { + y += ToastWindow.shared.safeAreaInsets.bottom + } + + let backgroundViewSize = self.backgroundView.frame.size + x = (width - backgroundViewSize.width) * 0.5 + y = height - (backgroundViewSize.height + y) + self.frame = CGRect( + x: x, + y: y, + width: backgroundViewSize.width, + height: backgroundViewSize.height + ) + } + + override open func hitTest(_ point: CGPoint, with event: UIEvent!) -> UIView? { + if let superview = self.superview { + let pointInWindow = self.convert(point, to: superview) + let contains = self.frame.contains(pointInWindow) + if contains && self.isUserInteractionEnabled { + return self + } + } + return nil + } + +} diff --git a/ios/sidedish/Pods/Toaster/Sources/ToastWindow.swift b/ios/sidedish/Pods/Toaster/Sources/ToastWindow.swift new file mode 100644 index 000000000..c258773ed --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/ToastWindow.swift @@ -0,0 +1,227 @@ +import UIKit + +open class ToastWindow: UIWindow { + + // MARK: - Public Property + + public static let shared = ToastWindow(frame: UIScreen.main.bounds, mainWindow: UIApplication.shared.keyWindow) + + override open var rootViewController: UIViewController? { + get { + guard !self.isShowing else { + isShowing = false + return nil + } + guard !self.isStatusBarOrientationChanging else { return nil } + guard let firstWindow = UIApplication.shared.delegate?.window else { return nil } + return firstWindow is ToastWindow ? nil : firstWindow?.rootViewController + } + set { /* Do nothing */ } + } + + override open var isHidden: Bool { + willSet { + if #available(iOS 13.0, *) { + isShowing = true + } + } + didSet { + if #available(iOS 13.0, *) { + isShowing = false + } + } + } + + /// Don't rotate manually if the application: + /// + /// - is running on iPad + /// - is running on iOS 9 + /// - supports all orientations + /// - doesn't require full screen + /// - has launch storyboard + /// + var shouldRotateManually: Bool { + let iPad = UIDevice.current.userInterfaceIdiom == .pad + let application = UIApplication.shared + let window = application.delegate?.window ?? nil + let supportsAllOrientations = application.supportedInterfaceOrientations(for: window) == .all + + let info = Bundle.main.infoDictionary + let requiresFullScreen = (info?["UIRequiresFullScreen"] as? NSNumber)?.boolValue == true + let hasLaunchStoryboard = info?["UILaunchStoryboardName"] != nil + + if #available(iOS 9, *), iPad && supportsAllOrientations && !requiresFullScreen && hasLaunchStoryboard { + return false + } + return true + } + + + // MARK: - Private Property + + /// Will not return `rootViewController` while this value is `true`. Or the rotation will be fucked in iOS 9. + private var isStatusBarOrientationChanging = false + + /// Will not return `rootViewController` while this value is `true`. Needed for iOS 13. + private var isShowing = false + + /// Returns original subviews. `ToastWindow` overrides `addSubview()` to add a subview to the + /// top window instead itself. + private var originalSubviews = NSPointerArray.weakObjects() + + private weak var mainWindow: UIWindow? + + + // MARK: - Initializing + + public init(frame: CGRect, mainWindow: UIWindow?) { + super.init(frame: frame) + self.mainWindow = mainWindow + self.isUserInteractionEnabled = false + self.gestureRecognizers = nil + #if swift(>=4.2) + self.windowLevel = .init(rawValue: .greatestFiniteMagnitude) + let willChangeStatusBarOrientationName = UIApplication.willChangeStatusBarOrientationNotification + let didChangeStatusBarOrientationName = UIApplication.didChangeStatusBarOrientationNotification + let didBecomeActiveName = UIApplication.didBecomeActiveNotification + let keyboardWillShowName = UIWindow.keyboardWillShowNotification + let keyboardDidHideName = UIWindow.keyboardDidHideNotification + #else + self.windowLevel = .greatestFiniteMagnitude + let willChangeStatusBarOrientationName = NSNotification.Name.UIApplicationWillChangeStatusBarOrientation + let didChangeStatusBarOrientationName = NSNotification.Name.UIApplicationDidChangeStatusBarOrientation + let didBecomeActiveName = NSNotification.Name.UIApplicationDidBecomeActive + let keyboardWillShowName = NSNotification.Name.UIKeyboardWillShow + let keyboardDidHideName = NSNotification.Name.UIKeyboardDidHide + #endif + self.backgroundColor = .clear + self.isHidden = false + self.handleRotate(UIApplication.shared.statusBarOrientation) + + NotificationCenter.default.addObserver( + self, + selector: #selector(self.statusBarOrientationWillChange), + name: willChangeStatusBarOrientationName, + object: nil + ) + NotificationCenter.default.addObserver( + self, + selector: #selector(self.statusBarOrientationDidChange), + name: didChangeStatusBarOrientationName, + object: nil + ) + NotificationCenter.default.addObserver( + self, + selector: #selector(self.applicationDidBecomeActive), + name: didBecomeActiveName, + object: nil + ) + NotificationCenter.default.addObserver( + self, + selector: #selector(self.keyboardWillShow), + name: keyboardWillShowName, + object: nil + ) + NotificationCenter.default.addObserver( + self, + selector: #selector(self.keyboardDidHide), + name: keyboardDidHideName, + object: nil + ) + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented: please use ToastWindow.shared") + } + + + // MARK: - Public method + + override open func addSubview(_ view: UIView) { + super.addSubview(view) + self.originalSubviews.addPointer(Unmanaged.passUnretained(view).toOpaque()) + self.topWindow()?.addSubview(view) + } + + open override func becomeKey() { + super.becomeKey() + mainWindow?.makeKey() + } + + + // MARK: - Private method + + @objc private func statusBarOrientationWillChange() { + self.isStatusBarOrientationChanging = true + } + + @objc private func statusBarOrientationDidChange() { + let orientation = UIApplication.shared.statusBarOrientation + self.handleRotate(orientation) + self.isStatusBarOrientationChanging = false + } + + @objc private func applicationDidBecomeActive() { + let orientation = UIApplication.shared.statusBarOrientation + self.handleRotate(orientation) + } + + @objc private func keyboardWillShow() { + guard let topWindow = self.topWindow(), + let subviews = self.originalSubviews.allObjects as? [UIView] else { return } + for subview in subviews { + topWindow.addSubview(subview) + } + } + + @objc private func keyboardDidHide() { + guard let subviews = self.originalSubviews.allObjects as? [UIView] else { return } + for subview in subviews { + super.addSubview(subview) + } + } + + private func handleRotate(_ orientation: UIInterfaceOrientation) { + let angle = self.angleForOrientation(orientation) + if self.shouldRotateManually { + self.transform = CGAffineTransform(rotationAngle: CGFloat(angle)) + } + + if let window = UIApplication.shared.windows.first { + if orientation.isPortrait || !self.shouldRotateManually { + self.frame.size.width = window.bounds.size.width + self.frame.size.height = window.bounds.size.height + } else { + self.frame.size.width = window.bounds.size.height + self.frame.size.height = window.bounds.size.width + } + } + + self.frame.origin = .zero + + DispatchQueue.main.async { + ToastCenter.default.currentToast?.view.setNeedsLayout() + } + } + + private func angleForOrientation(_ orientation: UIInterfaceOrientation) -> Double { + switch orientation { + case .landscapeLeft: return -.pi / 2 + case .landscapeRight: return .pi / 2 + case .portraitUpsideDown: return .pi + default: return 0 + } + } + + /// Returns top window that isn't self + private func topWindow() -> UIWindow? { + if let window = UIApplication.shared.windows.last(where: { + // https://github.com/devxoul/Toaster/issues/152 + KeyboardObserver.shared.didKeyboardShow || $0.isOpaque + }), window !== self { + return window + } + return nil + } + +} diff --git a/ios/sidedish/Pods/Toaster/Sources/Toaster.h b/ios/sidedish/Pods/Toaster/Sources/Toaster.h new file mode 100644 index 000000000..6fca4cdfe --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/Toaster.h @@ -0,0 +1,4 @@ +#import + +FOUNDATION_EXPORT double ToasterVersionNumber; +FOUNDATION_EXPORT const unsigned char ToasterVersionString[]; diff --git a/ios/sidedish/Pods/Toaster/Sources/UIApplication+Load.swift b/ios/sidedish/Pods/Toaster/Sources/UIApplication+Load.swift new file mode 100644 index 000000000..cc62c13c0 --- /dev/null +++ b/ios/sidedish/Pods/Toaster/Sources/UIApplication+Load.swift @@ -0,0 +1,22 @@ +// +// UIApplication+Load.swift +// Toaster +// +// Created by SeongHo Hong on 28/08/2019. +// Copyright © 2019 Suyeol Jeon. All rights reserved. +// + +import Foundation + +extension UIApplication { + + open override var next: UIResponder? { + UIApplication.runOnce + return super.next + } + + private static let runOnce: Void = { + _ = KeyboardObserver.shared + }() + +} diff --git a/ios/sidedish/sidedish.xcodeproj/project.pbxproj b/ios/sidedish/sidedish.xcodeproj/project.pbxproj index 4b0ac69be..af9ddff20 100644 --- a/ios/sidedish/sidedish.xcodeproj/project.pbxproj +++ b/ios/sidedish/sidedish.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 17538AAD0603F758E1AAC00B /* Pods_sidedish.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 459C010001522437FAFEDBD0 /* Pods_sidedish.framework */; }; 8214B70B262DE07A004467C2 /* MenuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8214B70A262DE07A004467C2 /* MenuCell.swift */; }; 8214B70E262DE253004467C2 /* MainTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8214B70D262DE253004467C2 /* MainTableViewDataSource.swift */; }; 8214B711262DE4B4004467C2 /* MainTableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8214B710262DE4B4004467C2 /* MainTableViewDelegate.swift */; }; @@ -30,6 +31,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 0E08E6E66A3FCD82FAA2F8E9 /* Pods-sidedish.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sidedish.debug.xcconfig"; path = "Target Support Files/Pods-sidedish/Pods-sidedish.debug.xcconfig"; sourceTree = ""; }; + 459C010001522437FAFEDBD0 /* Pods_sidedish.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_sidedish.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8214B70A262DE07A004467C2 /* MenuCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuCell.swift; sourceTree = ""; }; 8214B70D262DE253004467C2 /* MainTableViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTableViewDataSource.swift; sourceTree = ""; }; 8214B710262DE4B4004467C2 /* MainTableViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTableViewDelegate.swift; sourceTree = ""; }; @@ -46,6 +49,7 @@ 82FDB9CF262DCFD8009E3EB7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 82FDB9D2262DCFD8009E3EB7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 82FDB9D4262DCFD8009E3EB7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D1C31EB2092041E463E69524 /* Pods-sidedish.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sidedish.release.xcconfig"; path = "Target Support Files/Pods-sidedish/Pods-sidedish.release.xcconfig"; sourceTree = ""; }; E41EC950262E6E9A0043CC44 /* SideDish.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideDish.swift; sourceTree = ""; }; E41EC953262EBA2E0043CC44 /* SideDishes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SideDishes.swift; sourceTree = ""; }; E41EC962263013220043CC44 /* RequestManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestManager.swift; sourceTree = ""; }; @@ -59,12 +63,21 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 17538AAD0603F758E1AAC00B /* Pods_sidedish.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 8105A61D1BABE404AD111496 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 459C010001522437FAFEDBD0 /* Pods_sidedish.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 8268E35D26301A63002F518C /* UseCase */ = { isa = PBXGroup; children = ( @@ -175,6 +188,8 @@ children = ( 82FDB9C5262DCFD8009E3EB7 /* sidedish */, 82FDB9C4262DCFD8009E3EB7 /* Products */, + 83409A54F767EABF46AE2567 /* Pods */, + 8105A61D1BABE404AD111496 /* Frameworks */, ); sourceTree = ""; }; @@ -198,6 +213,16 @@ path = sidedish; sourceTree = ""; }; + 83409A54F767EABF46AE2567 /* Pods */ = { + isa = PBXGroup; + children = ( + 0E08E6E66A3FCD82FAA2F8E9 /* Pods-sidedish.debug.xcconfig */, + D1C31EB2092041E463E69524 /* Pods-sidedish.release.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; E41EC94F262E6DF40043CC44 /* Entity */ = { isa = PBXGroup; children = ( @@ -228,9 +253,11 @@ isa = PBXNativeTarget; buildConfigurationList = 82FDB9D7262DCFD8009E3EB7 /* Build configuration list for PBXNativeTarget "sidedish" */; buildPhases = ( + 5B959C1C1AEEB396221F9BFF /* [CP] Check Pods Manifest.lock */, 82FDB9BF262DCFD8009E3EB7 /* Sources */, 82FDB9C0262DCFD8009E3EB7 /* Frameworks */, 82FDB9C1262DCFD8009E3EB7 /* Resources */, + 0A6A544C12ED36E7514D02EF /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,6 +313,48 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 0A6A544C12ED36E7514D02EF /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-sidedish/Pods-sidedish-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 5B959C1C1AEEB396221F9BFF /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-sidedish-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 82FDB9BF262DCFD8009E3EB7 /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -451,6 +520,7 @@ }; 82FDB9D8262DCFD8009E3EB7 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 0E08E6E66A3FCD82FAA2F8E9 /* Pods-sidedish.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -470,6 +540,7 @@ }; 82FDB9D9262DCFD8009E3EB7 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = D1C31EB2092041E463E69524 /* Pods-sidedish.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; diff --git a/ios/sidedish/sidedish.xcworkspace/contents.xcworkspacedata b/ios/sidedish/sidedish.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..c00f6c810 --- /dev/null +++ b/ios/sidedish/sidedish.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/sidedish/sidedish.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/sidedish/sidedish.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/sidedish/sidedish.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard b/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard index b3ca26143..3d6663185 100644 --- a/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard +++ b/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard @@ -91,14 +91,6 @@ - @@ -176,7 +168,7 @@ - + @@ -458,7 +450,7 @@ - + diff --git a/ios/sidedish/sidedish/Presentation/ViewController/MainViewController.swift b/ios/sidedish/sidedish/Presentation/ViewController/MainViewController.swift index ce06fc48d..3c81fe446 100644 --- a/ios/sidedish/sidedish/Presentation/ViewController/MainViewController.swift +++ b/ios/sidedish/sidedish/Presentation/ViewController/MainViewController.swift @@ -7,6 +7,7 @@ import UIKit import Combine +import Toaster class MainViewController: UIViewController { @IBOutlet weak var menuTableView: UITableView! @@ -30,7 +31,7 @@ class MainViewController: UIViewController { self.tableViewDelegate = MainTableViewDelegate(viewModel: mainMenuViewModel) super.init(coder: coder) } - + func bind() { mainMenuViewModel.$dishes .receive(on: DispatchQueue.main) From 677c232cbd51830e02830319bc8c39aadc48967a Mon Sep 17 00:00:00 2001 From: jhpark-steve Date: Thu, 22 Apr 2021 16:44:47 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20Toast=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20:=20MenuCategory=20=EB=B6=80=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pods/Toaster/Sources/ToastView.swift | 2 +- .../sidedish.xcodeproj/project.pbxproj | 7 ++-- .../View/TableViewTapToasterGesture.swift | 32 +++++++++++++++++++ .../MainTableViewDelegate.swift | 8 +++++ 4 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 ios/sidedish/sidedish/Presentation/MainMenuList/View/TableViewTapToasterGesture.swift diff --git a/ios/sidedish/Pods/Toaster/Sources/ToastView.swift b/ios/sidedish/Pods/Toaster/Sources/ToastView.swift index f33762944..70f076418 100644 --- a/ios/sidedish/Pods/Toaster/Sources/ToastView.swift +++ b/ios/sidedish/Pods/Toaster/Sources/ToastView.swift @@ -147,7 +147,7 @@ open class ToastView: UIView { } }() self.numberOfLines = 0 - self.textAlignment = .center + self.textAlignment = .left return self }() diff --git a/ios/sidedish/sidedish.xcodeproj/project.pbxproj b/ios/sidedish/sidedish.xcodeproj/project.pbxproj index af9ddff20..41e78bc27 100644 --- a/ios/sidedish/sidedish.xcodeproj/project.pbxproj +++ b/ios/sidedish/sidedish.xcodeproj/project.pbxproj @@ -3,11 +3,12 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 51; objects = { /* Begin PBXBuildFile section */ 17538AAD0603F758E1AAC00B /* Pods_sidedish.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 459C010001522437FAFEDBD0 /* Pods_sidedish.framework */; }; + 8208FC5926315CCA009504EE /* TableViewTapToasterGesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8208FC5826315CCA009504EE /* TableViewTapToasterGesture.swift */; }; 8214B70B262DE07A004467C2 /* MenuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8214B70A262DE07A004467C2 /* MenuCell.swift */; }; 8214B70E262DE253004467C2 /* MainTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8214B70D262DE253004467C2 /* MainTableViewDataSource.swift */; }; 8214B711262DE4B4004467C2 /* MainTableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8214B710262DE4B4004467C2 /* MainTableViewDelegate.swift */; }; @@ -33,6 +34,7 @@ /* Begin PBXFileReference section */ 0E08E6E66A3FCD82FAA2F8E9 /* Pods-sidedish.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sidedish.debug.xcconfig"; path = "Target Support Files/Pods-sidedish/Pods-sidedish.debug.xcconfig"; sourceTree = ""; }; 459C010001522437FAFEDBD0 /* Pods_sidedish.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_sidedish.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8208FC5826315CCA009504EE /* TableViewTapToasterGesture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewTapToasterGesture.swift; sourceTree = ""; }; 8214B70A262DE07A004467C2 /* MenuCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuCell.swift; sourceTree = ""; }; 8214B70D262DE253004467C2 /* MainTableViewDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTableViewDataSource.swift; sourceTree = ""; }; 8214B710262DE4B4004467C2 /* MainTableViewDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTableViewDelegate.swift; sourceTree = ""; }; @@ -138,6 +140,7 @@ children = ( 82FDB9CC262DCFD8009E3EB7 /* Main.storyboard */, 8214B70A262DE07A004467C2 /* MenuCell.swift */, + 8208FC5826315CCA009504EE /* TableViewTapToasterGesture.swift */, ); path = View; sourceTree = ""; @@ -219,7 +222,6 @@ 0E08E6E66A3FCD82FAA2F8E9 /* Pods-sidedish.debug.xcconfig */, D1C31EB2092041E463E69524 /* Pods-sidedish.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -372,6 +374,7 @@ 8268E35F26301B00002F518C /* TurnonAppUsecase.swift in Sources */, 82FDB9C9262DCFD8009E3EB7 /* SceneDelegate.swift in Sources */, 82BBBBB72630067B008F89CB /* SideDishFindable.swift in Sources */, + 8208FC5926315CCA009504EE /* TableViewTapToasterGesture.swift in Sources */, E41EC97D263119E90043CC44 /* EndPoint.swift in Sources */, E41EC976263030980043CC44 /* NetworkManager.swift in Sources */, 821A75F226306F1F0083026F /* NetworkProtocol.swift in Sources */, diff --git a/ios/sidedish/sidedish/Presentation/MainMenuList/View/TableViewTapToasterGesture.swift b/ios/sidedish/sidedish/Presentation/MainMenuList/View/TableViewTapToasterGesture.swift new file mode 100644 index 000000000..51bf01c95 --- /dev/null +++ b/ios/sidedish/sidedish/Presentation/MainMenuList/View/TableViewTapToasterGesture.swift @@ -0,0 +1,32 @@ +// +// CustomTapGesture.swift +// sidedish +// +// Created by 박정하 on 2021/04/22. +// + +import UIKit +import Toaster + +class TableViewTapToasterGesture : UITapGestureRecognizer { + + var count : Int? + + enum MessageType: String { + case category = "현재 품목은 " + case stock = "남은 수량은 " + + var leadingText: String { + return rawValue + } + } + + func show(messageType: MessageType) { + guard let count = count else { return } + let toast = Toast(text: messageType.leadingText + "\(count)개입니다.") + toast.view.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.65) + toast.view.textColor = .white + toast.view.bottomOffsetPortrait = CGFloat(ToastWindow.shared.screen.bounds.height/100 * 85) + toast.start() + } +} diff --git a/ios/sidedish/sidedish/Presentation/ViewController/MainTableViewDelegate.swift b/ios/sidedish/sidedish/Presentation/ViewController/MainTableViewDelegate.swift index 0d19e1b10..9ffc3f97d 100644 --- a/ios/sidedish/sidedish/Presentation/ViewController/MainTableViewDelegate.swift +++ b/ios/sidedish/sidedish/Presentation/ViewController/MainTableViewDelegate.swift @@ -23,7 +23,11 @@ class MainTableViewDelegate : NSObject, UITableViewDelegate { label.font = .boldSystemFont(ofSize: 22) label.backgroundColor = .white + let popupGesture : TableViewTapToasterGesture = TableViewTapToasterGesture(target: self, action: #selector(popupToast(sender: ))) + popupGesture.count = viewModel.sideDishesCount(section: section) + headerView.addSubview(label) + headerView.addGestureRecognizer(popupGesture) return headerView } @@ -31,4 +35,8 @@ class MainTableViewDelegate : NSObject, UITableViewDelegate { func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 56 // headerView의 height(32) + figma에서 지정해 준 헤더와 셀 간의 간격! } + + @objc func popupToast(sender : TableViewTapToasterGesture){ + sender.show(messageType: .category) + } } From 665dcc5f8a7ff0af391b03a74a58d604cb17b692 Mon Sep 17 00:00:00 2001 From: Song Lee Date: Thu, 22 Apr 2021 18:29:29 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20Toaster=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C=20Detail=20view=20=EB=B6=80=EB=B6=84=20(#10)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sidedish.xcodeproj/project.pbxproj | 4 ++ .../View/Base.lproj/Main.storyboard | 70 +++++++++---------- .../MainMenuList/View/CustomToaster.swift | 34 +++++++++ .../MainMenuList/View/MenuCell.swift | 1 + .../View/TableViewTapToasterGesture.swift | 20 ------ .../MainTableViewDelegate.swift | 15 +++- .../ViewController/MainViewController.swift | 13 +++- 7 files changed, 99 insertions(+), 58 deletions(-) create mode 100644 ios/sidedish/sidedish/Presentation/MainMenuList/View/CustomToaster.swift diff --git a/ios/sidedish/sidedish.xcodeproj/project.pbxproj b/ios/sidedish/sidedish.xcodeproj/project.pbxproj index 41e78bc27..cff8c1157 100644 --- a/ios/sidedish/sidedish.xcodeproj/project.pbxproj +++ b/ios/sidedish/sidedish.xcodeproj/project.pbxproj @@ -29,6 +29,7 @@ E41EC96F263030730043CC44 /* RequestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41EC96E263030730043CC44 /* RequestType.swift */; }; E41EC976263030980043CC44 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41EC975263030980043CC44 /* NetworkManager.swift */; }; E41EC97D263119E90043CC44 /* EndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41EC97C263119E90043CC44 /* EndPoint.swift */; }; + E41EC98B263172760043CC44 /* CustomToaster.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41EC98A263172760043CC44 /* CustomToaster.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -58,6 +59,7 @@ E41EC96E263030730043CC44 /* RequestType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestType.swift; sourceTree = ""; }; E41EC975263030980043CC44 /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; E41EC97C263119E90043CC44 /* EndPoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EndPoint.swift; sourceTree = ""; }; + E41EC98A263172760043CC44 /* CustomToaster.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomToaster.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -141,6 +143,7 @@ 82FDB9CC262DCFD8009E3EB7 /* Main.storyboard */, 8214B70A262DE07A004467C2 /* MenuCell.swift */, 8208FC5826315CCA009504EE /* TableViewTapToasterGesture.swift */, + E41EC98A263172760043CC44 /* CustomToaster.swift */, ); path = View; sourceTree = ""; @@ -362,6 +365,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E41EC98B263172760043CC44 /* CustomToaster.swift in Sources */, 82BBBBB82630067B008F89CB /* SideDishesCollection.swift in Sources */, E41EC954262EBA2E0043CC44 /* SideDishes.swift in Sources */, 8268E35726301419002F518C /* MenuCellViewModel.swift in Sources */, diff --git a/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard b/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard index 3d6663185..c86153232 100644 --- a/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard +++ b/ios/sidedish/sidedish/Presentation/MainMenuList/View/Base.lproj/Main.storyboard @@ -1,6 +1,6 @@ - + @@ -13,21 +13,21 @@ - + - + - + - + - + @@ -38,7 +38,7 @@