├── .gitignore ├── .swiftpm └── xcode │ └── package.xcworkspace │ └── contents.xcworkspacedata ├── CHANGELOG.md ├── Example ├── .gitignore ├── Podfile ├── Podfile.lock ├── Pods │ ├── Manifest.lock │ └── Pods.xcodeproj │ │ └── project.pbxproj ├── ReactionButton.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── EmojiSelectorView-Example.xcscheme ├── ReactionButton.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── ReactionButton │ ├── AppDelegate.swift │ ├── Assets │ │ ├── img_1.png │ │ ├── img_1@2x.png │ │ ├── img_1@3x.png │ │ ├── img_2.png │ │ ├── img_2@2x.png │ │ ├── img_2@3x.png │ │ ├── img_3.png │ │ ├── img_3@2x.png │ │ ├── img_3@3x.png │ │ ├── img_4.png │ │ ├── img_4@2x.png │ │ ├── img_4@3x.png │ │ ├── img_5.png │ │ ├── img_5@2x.png │ │ ├── img_5@3x.png │ │ ├── img_6.png │ │ ├── img_6@2x.png │ │ └── img_6@3x.png │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-1025.png │ │ │ ├── icon-29.png │ │ │ ├── icon-29@2x.png │ │ │ ├── icon-29@3x.png │ │ │ ├── icon-40.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-40@3x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-76.png │ │ │ └── icon-76@2x.png │ │ └── Contents.json │ ├── Info.plist │ ├── SampleTableViewController.swift │ └── SampleViewController.swift └── Tests │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── Package.swift ├── README.md ├── ReactionButton.podspec ├── Sources └── ReactionButton │ ├── Extensions │ ├── CGRect+init.swift │ ├── CGSize+init.swift │ ├── EmojiSelectorView.Config+rect.swift │ ├── UIColor+Selector.swift │ ├── UIView+animation.swift │ └── UIView+contains.swift │ ├── ReactionButton+protocols.swift │ ├── ReactionButton.swift │ └── ReactionButtonConfig.swift ├── Tests ├── LinuxMain.swift └── ReactionButtonTests │ ├── ReactionButtonTests.swift │ └── XCTestManifests.swift └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ----- 4 | 5 | ## [4.0.0](https://github.com/onevcat/ReactionButton/releases/tag/4.0.0) (2020-11-01) 6 | * Support to Swift 5 7 | * Increase target to iOS 13 8 | * Add support to Tableview and CollectionView usage 9 | * Improve interface 10 | * New DataSource and layout protocols 11 | * Update CocoaPod version 12 | * Support for DarkMode and multiple traits 13 | * Add support for Swift Package Manager -------------------------------------------------------------------------------- /Example/.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | 34 | Pods 35 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | platform :ios, '13.0' 3 | 4 | target 'ReactionButton_Example' do 5 | pod 'ReactionButton', :path => '../' 6 | end 7 | 8 | target 'ReactionButton_Tests' do 9 | pod 'ReactionButton', :path => '../' 10 | end 11 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ReactionButton (4.0.0) 3 | 4 | DEPENDENCIES: 5 | - ReactionButton (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | ReactionButton: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | ReactionButton: 0cb0f8142417bb738c59164339166e99ebf859c6 13 | 14 | PODFILE CHECKSUM: 7418ca581c2e0f390ac3d8da4bb8888c4bc25faa 15 | 16 | COCOAPODS: 1.8.4 17 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ReactionButton (4.0.0) 3 | 4 | DEPENDENCIES: 5 | - ReactionButton (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | ReactionButton: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | ReactionButton: 0cb0f8142417bb738c59164339166e99ebf859c6 13 | 14 | PODFILE CHECKSUM: 7418ca581c2e0f390ac3d8da4bb8888c4bc25faa 15 | 16 | COCOAPODS: 1.8.4 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0167EC59425DCB1241A6A32E610AC3AA /* ReactionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 081132FF23AC14B72D80EC06FA0040DE /* ReactionButton.swift */; }; 11 | 082B08E103A26399977E4FEEE4D02A43 /* EmojiSelectorView.Config+rect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A186FD5F7A49693BFDD63D62623BE9B /* EmojiSelectorView.Config+rect.swift */; }; 12 | 157ED89F863C3436B6287D6AE97CBC5C /* UIView+animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2113D9F113220A95301999A4CF19EC5E /* UIView+animation.swift */; }; 13 | 170F6CA354E56309407BA844717E0B5A /* Pods-ReactionButton_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E8F17DAB918EEB9C05615F951A7939A8 /* Pods-ReactionButton_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 1830969FC5B96C68D5040B17FC810C93 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 15 | 1F421860EA1A479BAE2035BCEC1CC5ED /* ReactionButton-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E4B61CDF9032C235FC37180845A68333 /* ReactionButton-dummy.m */; }; 16 | 2B342ABCA13861F220FCF6BA37CC76FB /* UIColor+Selector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B8CBE2D4256025613996BB89C6E365 /* UIColor+Selector.swift */; }; 17 | 497A4105A7E79EE4175B6549A7FBF55C /* Pods-ReactionButton_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DFC70B9345F00F95206131A0C436F87 /* Pods-ReactionButton_Tests-dummy.m */; }; 18 | 4D030FA677AFEE2D2F18CF57C93EAF98 /* ReactionButton-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E768FF67DD737AD53C01159C6658849 /* ReactionButton-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | 5AFD1C12956D52764C5A0A85AB99592D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 20 | 6C7AD3F1372328965A3C3F2A7603FA14 /* UIView+contains.swift in Sources */ = {isa = PBXBuildFile; fileRef = C82435B1C058F55240E7C92FE5DDD2EA /* UIView+contains.swift */; }; 21 | 751C47A864246551E7A5D9688B891EE4 /* CGSize+init.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBF99FE7DAA5937109C9B2BD589178DB /* CGSize+init.swift */; }; 22 | 7C8432391B83AB3104BCE6C8912A4E14 /* ReactionButton+protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8C91FBECFD466E2487D30135A1977E /* ReactionButton+protocols.swift */; }; 23 | 7CFAC2EC8265E7B12943AC5FCDDAAADA /* CGRect+init.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F4EF1DEC66E720A83356272E3A88AF4 /* CGRect+init.swift */; }; 24 | 9B94EE2E346C365A29BD93F95F2B5AB6 /* Pods-ReactionButton_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FCB0FFF5A310D2C9C1AA25D2BB3D2C42 /* Pods-ReactionButton_Example-dummy.m */; }; 25 | B3A881704A623E4BAF3D7D616DEDC1B3 /* Pods-ReactionButton_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 912C974DCE3329FC3CF832D442E39EBC /* Pods-ReactionButton_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 26 | B42822CB3ED0E784119B70C44A6C1074 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 27 | D515620C6EA8CF7ECB80D1C186EC9BB4 /* ReactionButtonConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64E6B4CADB733A766553A36E9D1E4972 /* ReactionButtonConfig.swift */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | 1752E607176C0AC28D875764F4072D92 /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 12541455ED6C44722C8E828D91681462; 36 | remoteInfo = ReactionButton; 37 | }; 38 | CF2A0F9AF88C3D30B42167A3C03F5EC5 /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 41 | proxyType = 1; 42 | remoteGlobalIDString = 12541455ED6C44722C8E828D91681462; 43 | remoteInfo = ReactionButton; 44 | }; 45 | /* End PBXContainerItemProxy section */ 46 | 47 | /* Begin PBXFileReference section */ 48 | 081132FF23AC14B72D80EC06FA0040DE /* ReactionButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReactionButton.swift; path = Sources/ReactionButton/ReactionButton.swift; sourceTree = ""; }; 49 | 0A186FD5F7A49693BFDD63D62623BE9B /* EmojiSelectorView.Config+rect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "EmojiSelectorView.Config+rect.swift"; sourceTree = ""; }; 50 | 0DFC70B9345F00F95206131A0C436F87 /* Pods-ReactionButton_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReactionButton_Tests-dummy.m"; sourceTree = ""; }; 51 | 1EC547090269357B7E36A4B1F2B78C2B /* Pods-ReactionButton_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReactionButton_Tests-acknowledgements.plist"; sourceTree = ""; }; 52 | 2113D9F113220A95301999A4CF19EC5E /* UIView+animation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIView+animation.swift"; sourceTree = ""; }; 53 | 23F11AEB8DDECBFDED097EFBF6000571 /* Pods-ReactionButton_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReactionButton_Example.release.xcconfig"; sourceTree = ""; }; 54 | 3212113385A8FBBDB272BD23C409FF61 /* 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; }; 55 | 3283995A80FCDC53AA21EA7B57C06EBF /* Pods-ReactionButton_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReactionButton_Example-Info.plist"; sourceTree = ""; }; 56 | 347AA17A84FE471B591F69B3A097F11D /* Pods-ReactionButton_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReactionButton_Tests.release.xcconfig"; sourceTree = ""; }; 57 | 397A92D4BFD73E3ED786F5137A184D91 /* Pods-ReactionButton_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReactionButton_Example.debug.xcconfig"; sourceTree = ""; }; 58 | 40B8CBE2D4256025613996BB89C6E365 /* UIColor+Selector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+Selector.swift"; sourceTree = ""; }; 59 | 4F59E629289283B603368F07FB6545CB /* ReactionButton.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = ReactionButton.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 60 | 550E6616961A8B94990F7221D0D5F973 /* ReactionButton-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReactionButton-Info.plist"; sourceTree = ""; }; 61 | 5F4EF1DEC66E720A83356272E3A88AF4 /* CGRect+init.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CGRect+init.swift"; sourceTree = ""; }; 62 | 64E6B4CADB733A766553A36E9D1E4972 /* ReactionButtonConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReactionButtonConfig.swift; path = Sources/ReactionButton/ReactionButtonConfig.swift; sourceTree = ""; }; 63 | 66519E80B48EA0A8B21331486D2970A2 /* Pods_ReactionButton_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ReactionButton_Tests.framework; path = "Pods-ReactionButton_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | 6DD500BD48C3A95EBEB73F3B0AC8B19A /* ReactionButton.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ReactionButton.framework; path = ReactionButton.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 65 | 6E768FF67DD737AD53C01159C6658849 /* ReactionButton-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReactionButton-umbrella.h"; sourceTree = ""; }; 66 | 87590F7772DA23CC2148BBDA0FA46196 /* ReactionButton-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReactionButton-prefix.pch"; sourceTree = ""; }; 67 | 8D1ACAD95B13DFE6B645C23F70611EF0 /* Pods_ReactionButton_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ReactionButton_Example.framework; path = "Pods-ReactionButton_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | 8E8C91FBECFD466E2487D30135A1977E /* ReactionButton+protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ReactionButton+protocols.swift"; path = "Sources/ReactionButton/ReactionButton+protocols.swift"; sourceTree = ""; }; 69 | 8F0D9657FA2D47E9A181A87F8D394AEA /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 70 | 912C974DCE3329FC3CF832D442E39EBC /* Pods-ReactionButton_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReactionButton_Tests-umbrella.h"; sourceTree = ""; }; 71 | 9A90DADD4D20F75F230A9D2BDD72CA53 /* Pods-ReactionButton_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReactionButton_Example.modulemap"; sourceTree = ""; }; 72 | 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; }; 73 | 9E50AB4F3071F27A8C24F59CBDD05124 /* Pods-ReactionButton_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReactionButton_Tests-frameworks.sh"; sourceTree = ""; }; 74 | A5E6EEC3E04F0B8B3A5AAC60F7DAB28B /* Pods-ReactionButton_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ReactionButton_Tests.debug.xcconfig"; sourceTree = ""; }; 75 | BFA3C4A4A9A0114CA9274E95266FB0D6 /* Pods-ReactionButton_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReactionButton_Example-acknowledgements.markdown"; sourceTree = ""; }; 76 | C0790C2C73215E3C9AE8F49040B61224 /* ReactionButton.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReactionButton.modulemap; sourceTree = ""; }; 77 | C6A91FEC93556E03CDE296B8C81B829F /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 78 | C7FFA0FABFB808501451F2C026B641CF /* Pods-ReactionButton_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReactionButton_Example-acknowledgements.plist"; sourceTree = ""; }; 79 | C82435B1C058F55240E7C92FE5DDD2EA /* UIView+contains.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIView+contains.swift"; sourceTree = ""; }; 80 | CB694CEC5496BC66EB177F7CBDFCA304 /* Pods-ReactionButton_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ReactionButton_Example-frameworks.sh"; sourceTree = ""; }; 81 | D6FADF543D1FDB26E76F90254E59F682 /* Pods-ReactionButton_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ReactionButton_Tests.modulemap"; sourceTree = ""; }; 82 | E4B61CDF9032C235FC37180845A68333 /* ReactionButton-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReactionButton-dummy.m"; sourceTree = ""; }; 83 | E8F17DAB918EEB9C05615F951A7939A8 /* Pods-ReactionButton_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ReactionButton_Example-umbrella.h"; sourceTree = ""; }; 84 | F466A30AB3AA956307FF7838D45C5EC6 /* ReactionButton.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReactionButton.xcconfig; sourceTree = ""; }; 85 | F996EEB09C7FC61779E492A35DED0C11 /* Pods-ReactionButton_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ReactionButton_Tests-Info.plist"; sourceTree = ""; }; 86 | FBF99FE7DAA5937109C9B2BD589178DB /* CGSize+init.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CGSize+init.swift"; sourceTree = ""; }; 87 | FCB0FFF5A310D2C9C1AA25D2BB3D2C42 /* Pods-ReactionButton_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ReactionButton_Example-dummy.m"; sourceTree = ""; }; 88 | FD0A6CA1A83FD07B71C66B8819452E4C /* Pods-ReactionButton_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ReactionButton_Tests-acknowledgements.markdown"; sourceTree = ""; }; 89 | /* End PBXFileReference section */ 90 | 91 | /* Begin PBXFrameworksBuildPhase section */ 92 | 1579099C2B3EAD3EB107DF4C04113F65 /* Frameworks */ = { 93 | isa = PBXFrameworksBuildPhase; 94 | buildActionMask = 2147483647; 95 | files = ( 96 | B42822CB3ED0E784119B70C44A6C1074 /* Foundation.framework in Frameworks */, 97 | ); 98 | runOnlyForDeploymentPostprocessing = 0; 99 | }; 100 | 270A910882AC3586755C073481078882 /* Frameworks */ = { 101 | isa = PBXFrameworksBuildPhase; 102 | buildActionMask = 2147483647; 103 | files = ( 104 | 1830969FC5B96C68D5040B17FC810C93 /* Foundation.framework in Frameworks */, 105 | ); 106 | runOnlyForDeploymentPostprocessing = 0; 107 | }; 108 | 9A616DAD916F42586FF836D894BBAD99 /* Frameworks */ = { 109 | isa = PBXFrameworksBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | 5AFD1C12956D52764C5A0A85AB99592D /* Foundation.framework in Frameworks */, 113 | ); 114 | runOnlyForDeploymentPostprocessing = 0; 115 | }; 116 | /* End PBXFrameworksBuildPhase section */ 117 | 118 | /* Begin PBXGroup section */ 119 | 169DA295921075ED10D6D0B470F7A715 /* Pods-ReactionButton_Tests */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | D6FADF543D1FDB26E76F90254E59F682 /* Pods-ReactionButton_Tests.modulemap */, 123 | FD0A6CA1A83FD07B71C66B8819452E4C /* Pods-ReactionButton_Tests-acknowledgements.markdown */, 124 | 1EC547090269357B7E36A4B1F2B78C2B /* Pods-ReactionButton_Tests-acknowledgements.plist */, 125 | 0DFC70B9345F00F95206131A0C436F87 /* Pods-ReactionButton_Tests-dummy.m */, 126 | 9E50AB4F3071F27A8C24F59CBDD05124 /* Pods-ReactionButton_Tests-frameworks.sh */, 127 | F996EEB09C7FC61779E492A35DED0C11 /* Pods-ReactionButton_Tests-Info.plist */, 128 | 912C974DCE3329FC3CF832D442E39EBC /* Pods-ReactionButton_Tests-umbrella.h */, 129 | A5E6EEC3E04F0B8B3A5AAC60F7DAB28B /* Pods-ReactionButton_Tests.debug.xcconfig */, 130 | 347AA17A84FE471B591F69B3A097F11D /* Pods-ReactionButton_Tests.release.xcconfig */, 131 | ); 132 | name = "Pods-ReactionButton_Tests"; 133 | path = "Target Support Files/Pods-ReactionButton_Tests"; 134 | sourceTree = ""; 135 | }; 136 | 5E4CF1FB0B7D86A3FE25D08363340F9A /* Extensions */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 5F4EF1DEC66E720A83356272E3A88AF4 /* CGRect+init.swift */, 140 | FBF99FE7DAA5937109C9B2BD589178DB /* CGSize+init.swift */, 141 | 0A186FD5F7A49693BFDD63D62623BE9B /* EmojiSelectorView.Config+rect.swift */, 142 | 40B8CBE2D4256025613996BB89C6E365 /* UIColor+Selector.swift */, 143 | 2113D9F113220A95301999A4CF19EC5E /* UIView+animation.swift */, 144 | C82435B1C058F55240E7C92FE5DDD2EA /* UIView+contains.swift */, 145 | ); 146 | name = Extensions; 147 | path = Sources/ReactionButton/Extensions; 148 | sourceTree = ""; 149 | }; 150 | 6E40287BA5B27362BB888DF273FECE83 /* Development Pods */ = { 151 | isa = PBXGroup; 152 | children = ( 153 | DC6BE866CE0395D58803308FE927E3E7 /* ReactionButton */, 154 | ); 155 | name = "Development Pods"; 156 | sourceTree = ""; 157 | }; 158 | 901852B1E8772AE959CEC0A0CD05B90B /* Pods-ReactionButton_Example */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 9A90DADD4D20F75F230A9D2BDD72CA53 /* Pods-ReactionButton_Example.modulemap */, 162 | BFA3C4A4A9A0114CA9274E95266FB0D6 /* Pods-ReactionButton_Example-acknowledgements.markdown */, 163 | C7FFA0FABFB808501451F2C026B641CF /* Pods-ReactionButton_Example-acknowledgements.plist */, 164 | FCB0FFF5A310D2C9C1AA25D2BB3D2C42 /* Pods-ReactionButton_Example-dummy.m */, 165 | CB694CEC5496BC66EB177F7CBDFCA304 /* Pods-ReactionButton_Example-frameworks.sh */, 166 | 3283995A80FCDC53AA21EA7B57C06EBF /* Pods-ReactionButton_Example-Info.plist */, 167 | E8F17DAB918EEB9C05615F951A7939A8 /* Pods-ReactionButton_Example-umbrella.h */, 168 | 397A92D4BFD73E3ED786F5137A184D91 /* Pods-ReactionButton_Example.debug.xcconfig */, 169 | 23F11AEB8DDECBFDED097EFBF6000571 /* Pods-ReactionButton_Example.release.xcconfig */, 170 | ); 171 | name = "Pods-ReactionButton_Example"; 172 | path = "Target Support Files/Pods-ReactionButton_Example"; 173 | sourceTree = ""; 174 | }; 175 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 179 | ); 180 | name = iOS; 181 | sourceTree = ""; 182 | }; 183 | C36203257002AC8B6821CE1A92CBE0FE /* Pod */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | 8F0D9657FA2D47E9A181A87F8D394AEA /* LICENSE */, 187 | 4F59E629289283B603368F07FB6545CB /* ReactionButton.podspec */, 188 | C6A91FEC93556E03CDE296B8C81B829F /* README.md */, 189 | ); 190 | name = Pod; 191 | sourceTree = ""; 192 | }; 193 | CF1408CF629C7361332E53B88F7BD30C = { 194 | isa = PBXGroup; 195 | children = ( 196 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 197 | 6E40287BA5B27362BB888DF273FECE83 /* Development Pods */, 198 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 199 | E2A8201FAC72E1BF7856990FB3E32A58 /* Products */, 200 | CFA8F1D012EFE01DCA33EEBEE55C59ED /* Targets Support Files */, 201 | ); 202 | sourceTree = ""; 203 | }; 204 | CFA8F1D012EFE01DCA33EEBEE55C59ED /* Targets Support Files */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | 901852B1E8772AE959CEC0A0CD05B90B /* Pods-ReactionButton_Example */, 208 | 169DA295921075ED10D6D0B470F7A715 /* Pods-ReactionButton_Tests */, 209 | ); 210 | name = "Targets Support Files"; 211 | sourceTree = ""; 212 | }; 213 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 214 | isa = PBXGroup; 215 | children = ( 216 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 217 | ); 218 | name = Frameworks; 219 | sourceTree = ""; 220 | }; 221 | DC6BE866CE0395D58803308FE927E3E7 /* ReactionButton */ = { 222 | isa = PBXGroup; 223 | children = ( 224 | 081132FF23AC14B72D80EC06FA0040DE /* ReactionButton.swift */, 225 | 8E8C91FBECFD466E2487D30135A1977E /* ReactionButton+protocols.swift */, 226 | 64E6B4CADB733A766553A36E9D1E4972 /* ReactionButtonConfig.swift */, 227 | 5E4CF1FB0B7D86A3FE25D08363340F9A /* Extensions */, 228 | C36203257002AC8B6821CE1A92CBE0FE /* Pod */, 229 | F1DE4631E2107D048AAC2C3E2719A683 /* Support Files */, 230 | ); 231 | name = ReactionButton; 232 | path = ../..; 233 | sourceTree = ""; 234 | }; 235 | E2A8201FAC72E1BF7856990FB3E32A58 /* Products */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | 8D1ACAD95B13DFE6B645C23F70611EF0 /* Pods_ReactionButton_Example.framework */, 239 | 66519E80B48EA0A8B21331486D2970A2 /* Pods_ReactionButton_Tests.framework */, 240 | 6DD500BD48C3A95EBEB73F3B0AC8B19A /* ReactionButton.framework */, 241 | ); 242 | name = Products; 243 | sourceTree = ""; 244 | }; 245 | F1DE4631E2107D048AAC2C3E2719A683 /* Support Files */ = { 246 | isa = PBXGroup; 247 | children = ( 248 | C0790C2C73215E3C9AE8F49040B61224 /* ReactionButton.modulemap */, 249 | F466A30AB3AA956307FF7838D45C5EC6 /* ReactionButton.xcconfig */, 250 | E4B61CDF9032C235FC37180845A68333 /* ReactionButton-dummy.m */, 251 | 550E6616961A8B94990F7221D0D5F973 /* ReactionButton-Info.plist */, 252 | 87590F7772DA23CC2148BBDA0FA46196 /* ReactionButton-prefix.pch */, 253 | 6E768FF67DD737AD53C01159C6658849 /* ReactionButton-umbrella.h */, 254 | ); 255 | name = "Support Files"; 256 | path = "Example/Pods/Target Support Files/ReactionButton"; 257 | sourceTree = ""; 258 | }; 259 | /* End PBXGroup section */ 260 | 261 | /* Begin PBXHeadersBuildPhase section */ 262 | 42ED1C69631C0E93CFAE41F248C6A3F3 /* Headers */ = { 263 | isa = PBXHeadersBuildPhase; 264 | buildActionMask = 2147483647; 265 | files = ( 266 | 170F6CA354E56309407BA844717E0B5A /* Pods-ReactionButton_Example-umbrella.h in Headers */, 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | C4EACE777BCCBEB6CC4A88455F237F89 /* Headers */ = { 271 | isa = PBXHeadersBuildPhase; 272 | buildActionMask = 2147483647; 273 | files = ( 274 | 4D030FA677AFEE2D2F18CF57C93EAF98 /* ReactionButton-umbrella.h in Headers */, 275 | ); 276 | runOnlyForDeploymentPostprocessing = 0; 277 | }; 278 | F175F2F087F375B5E994C6C2736C856D /* Headers */ = { 279 | isa = PBXHeadersBuildPhase; 280 | buildActionMask = 2147483647; 281 | files = ( 282 | B3A881704A623E4BAF3D7D616DEDC1B3 /* Pods-ReactionButton_Tests-umbrella.h in Headers */, 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | }; 286 | /* End PBXHeadersBuildPhase section */ 287 | 288 | /* Begin PBXNativeTarget section */ 289 | 12541455ED6C44722C8E828D91681462 /* ReactionButton */ = { 290 | isa = PBXNativeTarget; 291 | buildConfigurationList = 3E6D3C0863798C9B87DBF43919B03B36 /* Build configuration list for PBXNativeTarget "ReactionButton" */; 292 | buildPhases = ( 293 | C4EACE777BCCBEB6CC4A88455F237F89 /* Headers */, 294 | 2C53C46A5775D2052238DA28E31C696C /* Sources */, 295 | 9A616DAD916F42586FF836D894BBAD99 /* Frameworks */, 296 | D0DD37D58FE93550346411AE3B5EAE2F /* Resources */, 297 | ); 298 | buildRules = ( 299 | ); 300 | dependencies = ( 301 | ); 302 | name = ReactionButton; 303 | productName = ReactionButton; 304 | productReference = 6DD500BD48C3A95EBEB73F3B0AC8B19A /* ReactionButton.framework */; 305 | productType = "com.apple.product-type.framework"; 306 | }; 307 | 568C0B9A9698DAA944ED801676AF201D /* Pods-ReactionButton_Tests */ = { 308 | isa = PBXNativeTarget; 309 | buildConfigurationList = 781EDC52F2536B1B3A5867B3336821FD /* Build configuration list for PBXNativeTarget "Pods-ReactionButton_Tests" */; 310 | buildPhases = ( 311 | F175F2F087F375B5E994C6C2736C856D /* Headers */, 312 | A309A4545A4F539BE0F575AF11DC6E4B /* Sources */, 313 | 1579099C2B3EAD3EB107DF4C04113F65 /* Frameworks */, 314 | 89D97059765404987BFF0C8D47E9EA3B /* Resources */, 315 | ); 316 | buildRules = ( 317 | ); 318 | dependencies = ( 319 | 5DEB674558CCB04F44C557E37A76EA5E /* PBXTargetDependency */, 320 | ); 321 | name = "Pods-ReactionButton_Tests"; 322 | productName = "Pods-ReactionButton_Tests"; 323 | productReference = 66519E80B48EA0A8B21331486D2970A2 /* Pods_ReactionButton_Tests.framework */; 324 | productType = "com.apple.product-type.framework"; 325 | }; 326 | C634F85740AAB9094C5EAD7E3D3F729D /* Pods-ReactionButton_Example */ = { 327 | isa = PBXNativeTarget; 328 | buildConfigurationList = 7ABD8B1DC0B7D14FDB168B2DC83D2D29 /* Build configuration list for PBXNativeTarget "Pods-ReactionButton_Example" */; 329 | buildPhases = ( 330 | 42ED1C69631C0E93CFAE41F248C6A3F3 /* Headers */, 331 | 373B8778C2A9567A04115AA5857382A9 /* Sources */, 332 | 270A910882AC3586755C073481078882 /* Frameworks */, 333 | BA4005AE9207C6AEAC97AA5CA9AF15E5 /* Resources */, 334 | ); 335 | buildRules = ( 336 | ); 337 | dependencies = ( 338 | 463ABDAF9687BFF2622A85914BEA0F96 /* PBXTargetDependency */, 339 | ); 340 | name = "Pods-ReactionButton_Example"; 341 | productName = "Pods-ReactionButton_Example"; 342 | productReference = 8D1ACAD95B13DFE6B645C23F70611EF0 /* Pods_ReactionButton_Example.framework */; 343 | productType = "com.apple.product-type.framework"; 344 | }; 345 | /* End PBXNativeTarget section */ 346 | 347 | /* Begin PBXProject section */ 348 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 349 | isa = PBXProject; 350 | attributes = { 351 | LastSwiftUpdateCheck = 1100; 352 | LastUpgradeCheck = 1100; 353 | }; 354 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 355 | compatibilityVersion = "Xcode 3.2"; 356 | developmentRegion = en; 357 | hasScannedForEncodings = 0; 358 | knownRegions = ( 359 | en, 360 | Base, 361 | ); 362 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 363 | productRefGroup = E2A8201FAC72E1BF7856990FB3E32A58 /* Products */; 364 | projectDirPath = ""; 365 | projectRoot = ""; 366 | targets = ( 367 | C634F85740AAB9094C5EAD7E3D3F729D /* Pods-ReactionButton_Example */, 368 | 568C0B9A9698DAA944ED801676AF201D /* Pods-ReactionButton_Tests */, 369 | 12541455ED6C44722C8E828D91681462 /* ReactionButton */, 370 | ); 371 | }; 372 | /* End PBXProject section */ 373 | 374 | /* Begin PBXResourcesBuildPhase section */ 375 | 89D97059765404987BFF0C8D47E9EA3B /* Resources */ = { 376 | isa = PBXResourcesBuildPhase; 377 | buildActionMask = 2147483647; 378 | files = ( 379 | ); 380 | runOnlyForDeploymentPostprocessing = 0; 381 | }; 382 | BA4005AE9207C6AEAC97AA5CA9AF15E5 /* Resources */ = { 383 | isa = PBXResourcesBuildPhase; 384 | buildActionMask = 2147483647; 385 | files = ( 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | }; 389 | D0DD37D58FE93550346411AE3B5EAE2F /* Resources */ = { 390 | isa = PBXResourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | /* End PBXResourcesBuildPhase section */ 397 | 398 | /* Begin PBXSourcesBuildPhase section */ 399 | 2C53C46A5775D2052238DA28E31C696C /* Sources */ = { 400 | isa = PBXSourcesBuildPhase; 401 | buildActionMask = 2147483647; 402 | files = ( 403 | 7CFAC2EC8265E7B12943AC5FCDDAAADA /* CGRect+init.swift in Sources */, 404 | 751C47A864246551E7A5D9688B891EE4 /* CGSize+init.swift in Sources */, 405 | 082B08E103A26399977E4FEEE4D02A43 /* EmojiSelectorView.Config+rect.swift in Sources */, 406 | 7C8432391B83AB3104BCE6C8912A4E14 /* ReactionButton+protocols.swift in Sources */, 407 | 1F421860EA1A479BAE2035BCEC1CC5ED /* ReactionButton-dummy.m in Sources */, 408 | 0167EC59425DCB1241A6A32E610AC3AA /* ReactionButton.swift in Sources */, 409 | D515620C6EA8CF7ECB80D1C186EC9BB4 /* ReactionButtonConfig.swift in Sources */, 410 | 2B342ABCA13861F220FCF6BA37CC76FB /* UIColor+Selector.swift in Sources */, 411 | 157ED89F863C3436B6287D6AE97CBC5C /* UIView+animation.swift in Sources */, 412 | 6C7AD3F1372328965A3C3F2A7603FA14 /* UIView+contains.swift in Sources */, 413 | ); 414 | runOnlyForDeploymentPostprocessing = 0; 415 | }; 416 | 373B8778C2A9567A04115AA5857382A9 /* Sources */ = { 417 | isa = PBXSourcesBuildPhase; 418 | buildActionMask = 2147483647; 419 | files = ( 420 | 9B94EE2E346C365A29BD93F95F2B5AB6 /* Pods-ReactionButton_Example-dummy.m in Sources */, 421 | ); 422 | runOnlyForDeploymentPostprocessing = 0; 423 | }; 424 | A309A4545A4F539BE0F575AF11DC6E4B /* Sources */ = { 425 | isa = PBXSourcesBuildPhase; 426 | buildActionMask = 2147483647; 427 | files = ( 428 | 497A4105A7E79EE4175B6549A7FBF55C /* Pods-ReactionButton_Tests-dummy.m in Sources */, 429 | ); 430 | runOnlyForDeploymentPostprocessing = 0; 431 | }; 432 | /* End PBXSourcesBuildPhase section */ 433 | 434 | /* Begin PBXTargetDependency section */ 435 | 463ABDAF9687BFF2622A85914BEA0F96 /* PBXTargetDependency */ = { 436 | isa = PBXTargetDependency; 437 | name = ReactionButton; 438 | target = 12541455ED6C44722C8E828D91681462 /* ReactionButton */; 439 | targetProxy = CF2A0F9AF88C3D30B42167A3C03F5EC5 /* PBXContainerItemProxy */; 440 | }; 441 | 5DEB674558CCB04F44C557E37A76EA5E /* PBXTargetDependency */ = { 442 | isa = PBXTargetDependency; 443 | name = ReactionButton; 444 | target = 12541455ED6C44722C8E828D91681462 /* ReactionButton */; 445 | targetProxy = 1752E607176C0AC28D875764F4072D92 /* PBXContainerItemProxy */; 446 | }; 447 | /* End PBXTargetDependency section */ 448 | 449 | /* Begin XCBuildConfiguration section */ 450 | 1422B121EAEAEA11307496903FA623C6 /* Release */ = { 451 | isa = XCBuildConfiguration; 452 | buildSettings = { 453 | ALWAYS_SEARCH_USER_PATHS = NO; 454 | CLANG_ANALYZER_NONNULL = YES; 455 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 456 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 457 | CLANG_CXX_LIBRARY = "libc++"; 458 | CLANG_ENABLE_MODULES = YES; 459 | CLANG_ENABLE_OBJC_ARC = YES; 460 | CLANG_ENABLE_OBJC_WEAK = YES; 461 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 462 | CLANG_WARN_BOOL_CONVERSION = YES; 463 | CLANG_WARN_COMMA = YES; 464 | CLANG_WARN_CONSTANT_CONVERSION = YES; 465 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 466 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 467 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 468 | CLANG_WARN_EMPTY_BODY = YES; 469 | CLANG_WARN_ENUM_CONVERSION = YES; 470 | CLANG_WARN_INFINITE_RECURSION = YES; 471 | CLANG_WARN_INT_CONVERSION = YES; 472 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 473 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 474 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 475 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 476 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 477 | CLANG_WARN_STRICT_PROTOTYPES = YES; 478 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 479 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 480 | CLANG_WARN_UNREACHABLE_CODE = YES; 481 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 482 | COPY_PHASE_STRIP = NO; 483 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 484 | ENABLE_NS_ASSERTIONS = NO; 485 | ENABLE_STRICT_OBJC_MSGSEND = YES; 486 | GCC_C_LANGUAGE_STANDARD = gnu11; 487 | GCC_NO_COMMON_BLOCKS = YES; 488 | GCC_PREPROCESSOR_DEFINITIONS = ( 489 | "POD_CONFIGURATION_RELEASE=1", 490 | "$(inherited)", 491 | ); 492 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 493 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 494 | GCC_WARN_UNDECLARED_SELECTOR = YES; 495 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 496 | GCC_WARN_UNUSED_FUNCTION = YES; 497 | GCC_WARN_UNUSED_VARIABLE = YES; 498 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 499 | MTL_ENABLE_DEBUG_INFO = NO; 500 | MTL_FAST_MATH = YES; 501 | PRODUCT_NAME = "$(TARGET_NAME)"; 502 | STRIP_INSTALLED_PRODUCT = NO; 503 | SWIFT_COMPILATION_MODE = wholemodule; 504 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 505 | SWIFT_VERSION = 5.0; 506 | SYMROOT = "${SRCROOT}/../build"; 507 | }; 508 | name = Release; 509 | }; 510 | 289710AA008F9CFE2A92C95E58F9733B /* Release */ = { 511 | isa = XCBuildConfiguration; 512 | baseConfigurationReference = F466A30AB3AA956307FF7838D45C5EC6 /* ReactionButton.xcconfig */; 513 | buildSettings = { 514 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 515 | CLANG_ENABLE_OBJC_WEAK = NO; 516 | CODE_SIGN_IDENTITY = ""; 517 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 518 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 519 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 520 | CURRENT_PROJECT_VERSION = 1; 521 | DEFINES_MODULE = YES; 522 | DYLIB_COMPATIBILITY_VERSION = 1; 523 | DYLIB_CURRENT_VERSION = 1; 524 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 525 | GCC_PREFIX_HEADER = "Target Support Files/ReactionButton/ReactionButton-prefix.pch"; 526 | INFOPLIST_FILE = "Target Support Files/ReactionButton/ReactionButton-Info.plist"; 527 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 528 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 529 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 530 | MODULEMAP_FILE = "Target Support Files/ReactionButton/ReactionButton.modulemap"; 531 | PRODUCT_MODULE_NAME = ReactionButton; 532 | PRODUCT_NAME = ReactionButton; 533 | SDKROOT = iphoneos; 534 | SKIP_INSTALL = YES; 535 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 536 | TARGETED_DEVICE_FAMILY = "1,2"; 537 | VALIDATE_PRODUCT = YES; 538 | VERSIONING_SYSTEM = "apple-generic"; 539 | VERSION_INFO_PREFIX = ""; 540 | }; 541 | name = Release; 542 | }; 543 | 3C9C3F7EC698A07862AE34496864C78D /* Debug */ = { 544 | isa = XCBuildConfiguration; 545 | baseConfigurationReference = F466A30AB3AA956307FF7838D45C5EC6 /* ReactionButton.xcconfig */; 546 | buildSettings = { 547 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 548 | CLANG_ENABLE_OBJC_WEAK = NO; 549 | CODE_SIGN_IDENTITY = ""; 550 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 551 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 552 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 553 | CURRENT_PROJECT_VERSION = 1; 554 | DEFINES_MODULE = YES; 555 | DYLIB_COMPATIBILITY_VERSION = 1; 556 | DYLIB_CURRENT_VERSION = 1; 557 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 558 | GCC_PREFIX_HEADER = "Target Support Files/ReactionButton/ReactionButton-prefix.pch"; 559 | INFOPLIST_FILE = "Target Support Files/ReactionButton/ReactionButton-Info.plist"; 560 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 561 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 562 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 563 | MODULEMAP_FILE = "Target Support Files/ReactionButton/ReactionButton.modulemap"; 564 | PRODUCT_MODULE_NAME = ReactionButton; 565 | PRODUCT_NAME = ReactionButton; 566 | SDKROOT = iphoneos; 567 | SKIP_INSTALL = YES; 568 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 569 | TARGETED_DEVICE_FAMILY = "1,2"; 570 | VERSIONING_SYSTEM = "apple-generic"; 571 | VERSION_INFO_PREFIX = ""; 572 | }; 573 | name = Debug; 574 | }; 575 | 725790F14ABC8CF3AEC73BC34003DAAB /* Release */ = { 576 | isa = XCBuildConfiguration; 577 | baseConfigurationReference = 23F11AEB8DDECBFDED097EFBF6000571 /* Pods-ReactionButton_Example.release.xcconfig */; 578 | buildSettings = { 579 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 580 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 581 | CLANG_ENABLE_OBJC_WEAK = NO; 582 | CODE_SIGN_IDENTITY = ""; 583 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 584 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 585 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 586 | CURRENT_PROJECT_VERSION = 1; 587 | DEFINES_MODULE = YES; 588 | DYLIB_COMPATIBILITY_VERSION = 1; 589 | DYLIB_CURRENT_VERSION = 1; 590 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 591 | INFOPLIST_FILE = "Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example-Info.plist"; 592 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 593 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 594 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 595 | MACH_O_TYPE = staticlib; 596 | MODULEMAP_FILE = "Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example.modulemap"; 597 | OTHER_LDFLAGS = ""; 598 | OTHER_LIBTOOLFLAGS = ""; 599 | PODS_ROOT = "$(SRCROOT)"; 600 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 601 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 602 | SDKROOT = iphoneos; 603 | SKIP_INSTALL = YES; 604 | TARGETED_DEVICE_FAMILY = "1,2"; 605 | VALIDATE_PRODUCT = YES; 606 | VERSIONING_SYSTEM = "apple-generic"; 607 | VERSION_INFO_PREFIX = ""; 608 | }; 609 | name = Release; 610 | }; 611 | 7DC0DC8342F203113C013564F795BE55 /* Debug */ = { 612 | isa = XCBuildConfiguration; 613 | baseConfigurationReference = A5E6EEC3E04F0B8B3A5AAC60F7DAB28B /* Pods-ReactionButton_Tests.debug.xcconfig */; 614 | buildSettings = { 615 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 616 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 617 | CLANG_ENABLE_OBJC_WEAK = NO; 618 | CODE_SIGN_IDENTITY = ""; 619 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 620 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 621 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 622 | CURRENT_PROJECT_VERSION = 1; 623 | DEFINES_MODULE = YES; 624 | DYLIB_COMPATIBILITY_VERSION = 1; 625 | DYLIB_CURRENT_VERSION = 1; 626 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 627 | INFOPLIST_FILE = "Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests-Info.plist"; 628 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 629 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 630 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 631 | MACH_O_TYPE = staticlib; 632 | MODULEMAP_FILE = "Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests.modulemap"; 633 | OTHER_LDFLAGS = ""; 634 | OTHER_LIBTOOLFLAGS = ""; 635 | PODS_ROOT = "$(SRCROOT)"; 636 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 637 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 638 | SDKROOT = iphoneos; 639 | SKIP_INSTALL = YES; 640 | TARGETED_DEVICE_FAMILY = "1,2"; 641 | VERSIONING_SYSTEM = "apple-generic"; 642 | VERSION_INFO_PREFIX = ""; 643 | }; 644 | name = Debug; 645 | }; 646 | BFC56ACDC7044690941DAF31027BE3C6 /* Debug */ = { 647 | isa = XCBuildConfiguration; 648 | baseConfigurationReference = 397A92D4BFD73E3ED786F5137A184D91 /* Pods-ReactionButton_Example.debug.xcconfig */; 649 | buildSettings = { 650 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 651 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 652 | CLANG_ENABLE_OBJC_WEAK = NO; 653 | CODE_SIGN_IDENTITY = ""; 654 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 655 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 656 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 657 | CURRENT_PROJECT_VERSION = 1; 658 | DEFINES_MODULE = YES; 659 | DYLIB_COMPATIBILITY_VERSION = 1; 660 | DYLIB_CURRENT_VERSION = 1; 661 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 662 | INFOPLIST_FILE = "Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example-Info.plist"; 663 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 664 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 665 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 666 | MACH_O_TYPE = staticlib; 667 | MODULEMAP_FILE = "Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example.modulemap"; 668 | OTHER_LDFLAGS = ""; 669 | OTHER_LIBTOOLFLAGS = ""; 670 | PODS_ROOT = "$(SRCROOT)"; 671 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 672 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 673 | SDKROOT = iphoneos; 674 | SKIP_INSTALL = YES; 675 | TARGETED_DEVICE_FAMILY = "1,2"; 676 | VERSIONING_SYSTEM = "apple-generic"; 677 | VERSION_INFO_PREFIX = ""; 678 | }; 679 | name = Debug; 680 | }; 681 | E7905B0AF2F9EB643BBA39597BF780B9 /* Release */ = { 682 | isa = XCBuildConfiguration; 683 | baseConfigurationReference = 347AA17A84FE471B591F69B3A097F11D /* Pods-ReactionButton_Tests.release.xcconfig */; 684 | buildSettings = { 685 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 686 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 687 | CLANG_ENABLE_OBJC_WEAK = NO; 688 | CODE_SIGN_IDENTITY = ""; 689 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 690 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 691 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 692 | CURRENT_PROJECT_VERSION = 1; 693 | DEFINES_MODULE = YES; 694 | DYLIB_COMPATIBILITY_VERSION = 1; 695 | DYLIB_CURRENT_VERSION = 1; 696 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 697 | INFOPLIST_FILE = "Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests-Info.plist"; 698 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 699 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 700 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 701 | MACH_O_TYPE = staticlib; 702 | MODULEMAP_FILE = "Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests.modulemap"; 703 | OTHER_LDFLAGS = ""; 704 | OTHER_LIBTOOLFLAGS = ""; 705 | PODS_ROOT = "$(SRCROOT)"; 706 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 707 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 708 | SDKROOT = iphoneos; 709 | SKIP_INSTALL = YES; 710 | TARGETED_DEVICE_FAMILY = "1,2"; 711 | VALIDATE_PRODUCT = YES; 712 | VERSIONING_SYSTEM = "apple-generic"; 713 | VERSION_INFO_PREFIX = ""; 714 | }; 715 | name = Release; 716 | }; 717 | ED7888FA6713EABBF66D26A8003AD1CA /* Debug */ = { 718 | isa = XCBuildConfiguration; 719 | buildSettings = { 720 | ALWAYS_SEARCH_USER_PATHS = NO; 721 | CLANG_ANALYZER_NONNULL = YES; 722 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 723 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 724 | CLANG_CXX_LIBRARY = "libc++"; 725 | CLANG_ENABLE_MODULES = YES; 726 | CLANG_ENABLE_OBJC_ARC = YES; 727 | CLANG_ENABLE_OBJC_WEAK = YES; 728 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 729 | CLANG_WARN_BOOL_CONVERSION = YES; 730 | CLANG_WARN_COMMA = YES; 731 | CLANG_WARN_CONSTANT_CONVERSION = YES; 732 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 733 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 734 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 735 | CLANG_WARN_EMPTY_BODY = YES; 736 | CLANG_WARN_ENUM_CONVERSION = YES; 737 | CLANG_WARN_INFINITE_RECURSION = YES; 738 | CLANG_WARN_INT_CONVERSION = YES; 739 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 740 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 741 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 742 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 743 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 744 | CLANG_WARN_STRICT_PROTOTYPES = YES; 745 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 746 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 747 | CLANG_WARN_UNREACHABLE_CODE = YES; 748 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 749 | COPY_PHASE_STRIP = NO; 750 | DEBUG_INFORMATION_FORMAT = dwarf; 751 | ENABLE_STRICT_OBJC_MSGSEND = YES; 752 | ENABLE_TESTABILITY = YES; 753 | GCC_C_LANGUAGE_STANDARD = gnu11; 754 | GCC_DYNAMIC_NO_PIC = NO; 755 | GCC_NO_COMMON_BLOCKS = YES; 756 | GCC_OPTIMIZATION_LEVEL = 0; 757 | GCC_PREPROCESSOR_DEFINITIONS = ( 758 | "POD_CONFIGURATION_DEBUG=1", 759 | "DEBUG=1", 760 | "$(inherited)", 761 | ); 762 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 763 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 764 | GCC_WARN_UNDECLARED_SELECTOR = YES; 765 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 766 | GCC_WARN_UNUSED_FUNCTION = YES; 767 | GCC_WARN_UNUSED_VARIABLE = YES; 768 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 769 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 770 | MTL_FAST_MATH = YES; 771 | ONLY_ACTIVE_ARCH = YES; 772 | PRODUCT_NAME = "$(TARGET_NAME)"; 773 | STRIP_INSTALLED_PRODUCT = NO; 774 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 775 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 776 | SWIFT_VERSION = 5.0; 777 | SYMROOT = "${SRCROOT}/../build"; 778 | }; 779 | name = Debug; 780 | }; 781 | /* End XCBuildConfiguration section */ 782 | 783 | /* Begin XCConfigurationList section */ 784 | 3E6D3C0863798C9B87DBF43919B03B36 /* Build configuration list for PBXNativeTarget "ReactionButton" */ = { 785 | isa = XCConfigurationList; 786 | buildConfigurations = ( 787 | 3C9C3F7EC698A07862AE34496864C78D /* Debug */, 788 | 289710AA008F9CFE2A92C95E58F9733B /* Release */, 789 | ); 790 | defaultConfigurationIsVisible = 0; 791 | defaultConfigurationName = Release; 792 | }; 793 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 794 | isa = XCConfigurationList; 795 | buildConfigurations = ( 796 | ED7888FA6713EABBF66D26A8003AD1CA /* Debug */, 797 | 1422B121EAEAEA11307496903FA623C6 /* Release */, 798 | ); 799 | defaultConfigurationIsVisible = 0; 800 | defaultConfigurationName = Release; 801 | }; 802 | 781EDC52F2536B1B3A5867B3336821FD /* Build configuration list for PBXNativeTarget "Pods-ReactionButton_Tests" */ = { 803 | isa = XCConfigurationList; 804 | buildConfigurations = ( 805 | 7DC0DC8342F203113C013564F795BE55 /* Debug */, 806 | E7905B0AF2F9EB643BBA39597BF780B9 /* Release */, 807 | ); 808 | defaultConfigurationIsVisible = 0; 809 | defaultConfigurationName = Release; 810 | }; 811 | 7ABD8B1DC0B7D14FDB168B2DC83D2D29 /* Build configuration list for PBXNativeTarget "Pods-ReactionButton_Example" */ = { 812 | isa = XCConfigurationList; 813 | buildConfigurations = ( 814 | BFC56ACDC7044690941DAF31027BE3C6 /* Debug */, 815 | 725790F14ABC8CF3AEC73BC34003DAAB /* Release */, 816 | ); 817 | defaultConfigurationIsVisible = 0; 818 | defaultConfigurationName = Release; 819 | }; 820 | /* End XCConfigurationList section */ 821 | }; 822 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 823 | } 824 | -------------------------------------------------------------------------------- /Example/ReactionButton.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 11 | 607FACD81AFB9204008FA782 /* SampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* SampleViewController.swift */; }; 12 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 13 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 14 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 15 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 16 | 6CDA14413D15FF293F32AE0A /* Pods_ReactionButton_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 351E55CD4A2FDEA989D65319 /* Pods_ReactionButton_Tests.framework */; }; 17 | 7ACF52B0254D31A900B00C8D /* img_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF529E254D31A900B00C8D /* img_1.png */; }; 18 | 7ACF52B1254D31A900B00C8D /* img_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF529F254D31A900B00C8D /* img_1@3x.png */; }; 19 | 7ACF52B2254D31A900B00C8D /* img_3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A0254D31A900B00C8D /* img_3@2x.png */; }; 20 | 7ACF52B3254D31A900B00C8D /* img_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A1254D31A900B00C8D /* img_2.png */; }; 21 | 7ACF52B4254D31A900B00C8D /* img_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A2254D31A900B00C8D /* img_3.png */; }; 22 | 7ACF52B5254D31A900B00C8D /* img_6.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A3254D31A900B00C8D /* img_6.png */; }; 23 | 7ACF52B6254D31A900B00C8D /* img_3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A4254D31A900B00C8D /* img_3@3x.png */; }; 24 | 7ACF52B7254D31A900B00C8D /* img_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A5254D31A900B00C8D /* img_4.png */; }; 25 | 7ACF52B8254D31A900B00C8D /* img_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A6254D31A900B00C8D /* img_1@2x.png */; }; 26 | 7ACF52B9254D31A900B00C8D /* img_5.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A7254D31A900B00C8D /* img_5.png */; }; 27 | 7ACF52BA254D31A900B00C8D /* img_5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A8254D31A900B00C8D /* img_5@2x.png */; }; 28 | 7ACF52BB254D31A900B00C8D /* img_5@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52A9254D31A900B00C8D /* img_5@3x.png */; }; 29 | 7ACF52BC254D31A900B00C8D /* img_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52AA254D31A900B00C8D /* img_2@2x.png */; }; 30 | 7ACF52BD254D31A900B00C8D /* img_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52AB254D31A900B00C8D /* img_2@3x.png */; }; 31 | 7ACF52BE254D31A900B00C8D /* img_6@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52AC254D31A900B00C8D /* img_6@3x.png */; }; 32 | 7ACF52BF254D31A900B00C8D /* img_4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52AD254D31A900B00C8D /* img_4@2x.png */; }; 33 | 7ACF52C0254D31A900B00C8D /* img_4@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52AE254D31A900B00C8D /* img_4@3x.png */; }; 34 | 7ACF52C1254D31A900B00C8D /* img_6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7ACF52AF254D31A900B00C8D /* img_6@2x.png */; }; 35 | 7ADD2264254E0E030009B82F /* SampleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADD2263254E0E030009B82F /* SampleTableViewController.swift */; }; 36 | A8F4813110821649BBB25B0D /* Pods_ReactionButton_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95EEA5B4A599E390747AC670 /* Pods_ReactionButton_Example.framework */; }; 37 | /* End PBXBuildFile section */ 38 | 39 | /* Begin PBXContainerItemProxy section */ 40 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 41 | isa = PBXContainerItemProxy; 42 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 43 | proxyType = 1; 44 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 45 | remoteInfo = ReactionButton; 46 | }; 47 | /* End PBXContainerItemProxy section */ 48 | 49 | /* Begin PBXFileReference section */ 50 | 101AE47BC6731DC179008361 /* Pods-ReactionButton_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactionButton_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests.release.xcconfig"; sourceTree = ""; }; 51 | 31AF104F61726A4824CD7D70 /* Pods-ReactionButton_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactionButton_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example.debug.xcconfig"; sourceTree = ""; }; 52 | 351E55CD4A2FDEA989D65319 /* Pods_ReactionButton_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReactionButton_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 53 | 41BF3925EBD79D4DA4D6746E /* ReactionButton.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = ReactionButton.podspec; path = ../ReactionButton.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 54 | 607FACD01AFB9204008FA782 /* ReactionButton_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReactionButton_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 55 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 57 | 607FACD71AFB9204008FA782 /* SampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleViewController.swift; sourceTree = ""; }; 58 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 59 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 60 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 61 | 607FACE51AFB9204008FA782 /* ReactionButton_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactionButton_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 62 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 63 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 64 | 61D2E54C81E5775A6A4D887E /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 65 | 7ACF529E254D31A900B00C8D /* img_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_1.png; sourceTree = ""; }; 66 | 7ACF529F254D31A900B00C8D /* img_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_1@3x.png"; sourceTree = ""; }; 67 | 7ACF52A0254D31A900B00C8D /* img_3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_3@2x.png"; sourceTree = ""; }; 68 | 7ACF52A1254D31A900B00C8D /* img_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_2.png; sourceTree = ""; }; 69 | 7ACF52A2254D31A900B00C8D /* img_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_3.png; sourceTree = ""; }; 70 | 7ACF52A3254D31A900B00C8D /* img_6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_6.png; sourceTree = ""; }; 71 | 7ACF52A4254D31A900B00C8D /* img_3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_3@3x.png"; sourceTree = ""; }; 72 | 7ACF52A5254D31A900B00C8D /* img_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_4.png; sourceTree = ""; }; 73 | 7ACF52A6254D31A900B00C8D /* img_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_1@2x.png"; sourceTree = ""; }; 74 | 7ACF52A7254D31A900B00C8D /* img_5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = img_5.png; sourceTree = ""; }; 75 | 7ACF52A8254D31A900B00C8D /* img_5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_5@2x.png"; sourceTree = ""; }; 76 | 7ACF52A9254D31A900B00C8D /* img_5@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_5@3x.png"; sourceTree = ""; }; 77 | 7ACF52AA254D31A900B00C8D /* img_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_2@2x.png"; sourceTree = ""; }; 78 | 7ACF52AB254D31A900B00C8D /* img_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_2@3x.png"; sourceTree = ""; }; 79 | 7ACF52AC254D31A900B00C8D /* img_6@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_6@3x.png"; sourceTree = ""; }; 80 | 7ACF52AD254D31A900B00C8D /* img_4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_4@2x.png"; sourceTree = ""; }; 81 | 7ACF52AE254D31A900B00C8D /* img_4@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_4@3x.png"; sourceTree = ""; }; 82 | 7ACF52AF254D31A900B00C8D /* img_6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "img_6@2x.png"; sourceTree = ""; }; 83 | 7ADD2263254E0E030009B82F /* SampleTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleTableViewController.swift; sourceTree = ""; }; 84 | 896201CC5F9E13F3BEEB67AA /* Pods-ReactionButton_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactionButton_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example.release.xcconfig"; sourceTree = ""; }; 85 | 95EEA5B4A599E390747AC670 /* Pods_ReactionButton_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReactionButton_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 86 | C270B48A211A0387A65C0BFD /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 87 | DE3D7ABAD19542C0E0B84F33 /* Pods-ReactionButton_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactionButton_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests.debug.xcconfig"; sourceTree = ""; }; 88 | /* End PBXFileReference section */ 89 | 90 | /* Begin PBXFrameworksBuildPhase section */ 91 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 92 | isa = PBXFrameworksBuildPhase; 93 | buildActionMask = 2147483647; 94 | files = ( 95 | A8F4813110821649BBB25B0D /* Pods_ReactionButton_Example.framework in Frameworks */, 96 | ); 97 | runOnlyForDeploymentPostprocessing = 0; 98 | }; 99 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 100 | isa = PBXFrameworksBuildPhase; 101 | buildActionMask = 2147483647; 102 | files = ( 103 | 6CDA14413D15FF293F32AE0A /* Pods_ReactionButton_Tests.framework in Frameworks */, 104 | ); 105 | runOnlyForDeploymentPostprocessing = 0; 106 | }; 107 | /* End PBXFrameworksBuildPhase section */ 108 | 109 | /* Begin PBXGroup section */ 110 | 607FACC71AFB9204008FA782 = { 111 | isa = PBXGroup; 112 | children = ( 113 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 114 | 607FACD21AFB9204008FA782 /* Example for ReactionButton */, 115 | 607FACE81AFB9204008FA782 /* Tests */, 116 | 607FACD11AFB9204008FA782 /* Products */, 117 | 9918619326BD5D888853877F /* Pods */, 118 | 8271F654EE4033C22823CD90 /* Frameworks */, 119 | ); 120 | sourceTree = ""; 121 | }; 122 | 607FACD11AFB9204008FA782 /* Products */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 607FACD01AFB9204008FA782 /* ReactionButton_Example.app */, 126 | 607FACE51AFB9204008FA782 /* ReactionButton_Tests.xctest */, 127 | ); 128 | name = Products; 129 | sourceTree = ""; 130 | }; 131 | 607FACD21AFB9204008FA782 /* Example for ReactionButton */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 135 | 7ACF529D254D31A900B00C8D /* Assets */, 136 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 137 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 138 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 139 | 7ADD2263254E0E030009B82F /* SampleTableViewController.swift */, 140 | 607FACD71AFB9204008FA782 /* SampleViewController.swift */, 141 | 607FACD31AFB9204008FA782 /* Supporting Files */, 142 | ); 143 | name = "Example for ReactionButton"; 144 | path = ReactionButton; 145 | sourceTree = ""; 146 | }; 147 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 607FACD41AFB9204008FA782 /* Info.plist */, 151 | ); 152 | name = "Supporting Files"; 153 | sourceTree = ""; 154 | }; 155 | 607FACE81AFB9204008FA782 /* Tests */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 159 | 607FACE91AFB9204008FA782 /* Supporting Files */, 160 | ); 161 | path = Tests; 162 | sourceTree = ""; 163 | }; 164 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 165 | isa = PBXGroup; 166 | children = ( 167 | 607FACEA1AFB9204008FA782 /* Info.plist */, 168 | ); 169 | name = "Supporting Files"; 170 | sourceTree = ""; 171 | }; 172 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | 41BF3925EBD79D4DA4D6746E /* ReactionButton.podspec */, 176 | C270B48A211A0387A65C0BFD /* README.md */, 177 | 61D2E54C81E5775A6A4D887E /* LICENSE */, 178 | ); 179 | name = "Podspec Metadata"; 180 | sourceTree = ""; 181 | }; 182 | 7ACF529D254D31A900B00C8D /* Assets */ = { 183 | isa = PBXGroup; 184 | children = ( 185 | 7ACF529E254D31A900B00C8D /* img_1.png */, 186 | 7ACF529F254D31A900B00C8D /* img_1@3x.png */, 187 | 7ACF52A0254D31A900B00C8D /* img_3@2x.png */, 188 | 7ACF52A1254D31A900B00C8D /* img_2.png */, 189 | 7ACF52A2254D31A900B00C8D /* img_3.png */, 190 | 7ACF52A3254D31A900B00C8D /* img_6.png */, 191 | 7ACF52A4254D31A900B00C8D /* img_3@3x.png */, 192 | 7ACF52A5254D31A900B00C8D /* img_4.png */, 193 | 7ACF52A6254D31A900B00C8D /* img_1@2x.png */, 194 | 7ACF52A7254D31A900B00C8D /* img_5.png */, 195 | 7ACF52A8254D31A900B00C8D /* img_5@2x.png */, 196 | 7ACF52A9254D31A900B00C8D /* img_5@3x.png */, 197 | 7ACF52AA254D31A900B00C8D /* img_2@2x.png */, 198 | 7ACF52AB254D31A900B00C8D /* img_2@3x.png */, 199 | 7ACF52AC254D31A900B00C8D /* img_6@3x.png */, 200 | 7ACF52AD254D31A900B00C8D /* img_4@2x.png */, 201 | 7ACF52AE254D31A900B00C8D /* img_4@3x.png */, 202 | 7ACF52AF254D31A900B00C8D /* img_6@2x.png */, 203 | ); 204 | path = Assets; 205 | sourceTree = ""; 206 | }; 207 | 8271F654EE4033C22823CD90 /* Frameworks */ = { 208 | isa = PBXGroup; 209 | children = ( 210 | 95EEA5B4A599E390747AC670 /* Pods_ReactionButton_Example.framework */, 211 | 351E55CD4A2FDEA989D65319 /* Pods_ReactionButton_Tests.framework */, 212 | ); 213 | name = Frameworks; 214 | sourceTree = ""; 215 | }; 216 | 9918619326BD5D888853877F /* Pods */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | 31AF104F61726A4824CD7D70 /* Pods-ReactionButton_Example.debug.xcconfig */, 220 | 896201CC5F9E13F3BEEB67AA /* Pods-ReactionButton_Example.release.xcconfig */, 221 | DE3D7ABAD19542C0E0B84F33 /* Pods-ReactionButton_Tests.debug.xcconfig */, 222 | 101AE47BC6731DC179008361 /* Pods-ReactionButton_Tests.release.xcconfig */, 223 | ); 224 | name = Pods; 225 | sourceTree = ""; 226 | }; 227 | /* End PBXGroup section */ 228 | 229 | /* Begin PBXNativeTarget section */ 230 | 607FACCF1AFB9204008FA782 /* ReactionButton_Example */ = { 231 | isa = PBXNativeTarget; 232 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReactionButton_Example" */; 233 | buildPhases = ( 234 | D1AF8CF0DB203D8228D376D3 /* [CP] Check Pods Manifest.lock */, 235 | 607FACCC1AFB9204008FA782 /* Sources */, 236 | 607FACCD1AFB9204008FA782 /* Frameworks */, 237 | 607FACCE1AFB9204008FA782 /* Resources */, 238 | 4568B51128740B1D8BF20E24 /* [CP] Embed Pods Frameworks */, 239 | ); 240 | buildRules = ( 241 | ); 242 | dependencies = ( 243 | ); 244 | name = ReactionButton_Example; 245 | productName = ReactionButton; 246 | productReference = 607FACD01AFB9204008FA782 /* ReactionButton_Example.app */; 247 | productType = "com.apple.product-type.application"; 248 | }; 249 | 607FACE41AFB9204008FA782 /* ReactionButton_Tests */ = { 250 | isa = PBXNativeTarget; 251 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReactionButton_Tests" */; 252 | buildPhases = ( 253 | 724B5750F860396815138A6E /* [CP] Check Pods Manifest.lock */, 254 | 607FACE11AFB9204008FA782 /* Sources */, 255 | 607FACE21AFB9204008FA782 /* Frameworks */, 256 | 607FACE31AFB9204008FA782 /* Resources */, 257 | 9816FBD79E67711BE6C728D9 /* [CP] Embed Pods Frameworks */, 258 | ); 259 | buildRules = ( 260 | ); 261 | dependencies = ( 262 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 263 | ); 264 | name = ReactionButton_Tests; 265 | productName = Tests; 266 | productReference = 607FACE51AFB9204008FA782 /* ReactionButton_Tests.xctest */; 267 | productType = "com.apple.product-type.bundle.unit-test"; 268 | }; 269 | /* End PBXNativeTarget section */ 270 | 271 | /* Begin PBXProject section */ 272 | 607FACC81AFB9204008FA782 /* Project object */ = { 273 | isa = PBXProject; 274 | attributes = { 275 | LastSwiftUpdateCheck = 0720; 276 | LastUpgradeCheck = 1210; 277 | ORGANIZATIONNAME = CocoaPods; 278 | TargetAttributes = { 279 | 607FACCF1AFB9204008FA782 = { 280 | CreatedOnToolsVersion = 6.3.1; 281 | LastSwiftMigration = 1210; 282 | }; 283 | 607FACE41AFB9204008FA782 = { 284 | CreatedOnToolsVersion = 6.3.1; 285 | LastSwiftMigration = 1210; 286 | TestTargetID = 607FACCF1AFB9204008FA782; 287 | }; 288 | }; 289 | }; 290 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "ReactionButton" */; 291 | compatibilityVersion = "Xcode 3.2"; 292 | developmentRegion = English; 293 | hasScannedForEncodings = 0; 294 | knownRegions = ( 295 | English, 296 | en, 297 | Base, 298 | ); 299 | mainGroup = 607FACC71AFB9204008FA782; 300 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 301 | projectDirPath = ""; 302 | projectRoot = ""; 303 | targets = ( 304 | 607FACCF1AFB9204008FA782 /* ReactionButton_Example */, 305 | 607FACE41AFB9204008FA782 /* ReactionButton_Tests */, 306 | ); 307 | }; 308 | /* End PBXProject section */ 309 | 310 | /* Begin PBXResourcesBuildPhase section */ 311 | 607FACCE1AFB9204008FA782 /* Resources */ = { 312 | isa = PBXResourcesBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 316 | 7ACF52B0254D31A900B00C8D /* img_1.png in Resources */, 317 | 7ACF52C0254D31A900B00C8D /* img_4@3x.png in Resources */, 318 | 7ACF52BB254D31A900B00C8D /* img_5@3x.png in Resources */, 319 | 7ACF52B2254D31A900B00C8D /* img_3@2x.png in Resources */, 320 | 7ACF52BE254D31A900B00C8D /* img_6@3x.png in Resources */, 321 | 7ACF52B4254D31A900B00C8D /* img_3.png in Resources */, 322 | 7ACF52C1254D31A900B00C8D /* img_6@2x.png in Resources */, 323 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 324 | 7ACF52B3254D31A900B00C8D /* img_2.png in Resources */, 325 | 7ACF52BC254D31A900B00C8D /* img_2@2x.png in Resources */, 326 | 7ACF52BD254D31A900B00C8D /* img_2@3x.png in Resources */, 327 | 7ACF52B8254D31A900B00C8D /* img_1@2x.png in Resources */, 328 | 7ACF52B1254D31A900B00C8D /* img_1@3x.png in Resources */, 329 | 7ACF52B6254D31A900B00C8D /* img_3@3x.png in Resources */, 330 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 331 | 7ACF52BF254D31A900B00C8D /* img_4@2x.png in Resources */, 332 | 7ACF52B7254D31A900B00C8D /* img_4.png in Resources */, 333 | 7ACF52B5254D31A900B00C8D /* img_6.png in Resources */, 334 | 7ACF52BA254D31A900B00C8D /* img_5@2x.png in Resources */, 335 | 7ACF52B9254D31A900B00C8D /* img_5.png in Resources */, 336 | ); 337 | runOnlyForDeploymentPostprocessing = 0; 338 | }; 339 | 607FACE31AFB9204008FA782 /* Resources */ = { 340 | isa = PBXResourcesBuildPhase; 341 | buildActionMask = 2147483647; 342 | files = ( 343 | ); 344 | runOnlyForDeploymentPostprocessing = 0; 345 | }; 346 | /* End PBXResourcesBuildPhase section */ 347 | 348 | /* Begin PBXShellScriptBuildPhase section */ 349 | 4568B51128740B1D8BF20E24 /* [CP] Embed Pods Frameworks */ = { 350 | isa = PBXShellScriptBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | ); 354 | inputPaths = ( 355 | "${PODS_ROOT}/Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example-frameworks.sh", 356 | "${BUILT_PRODUCTS_DIR}/ReactionButton/ReactionButton.framework", 357 | ); 358 | name = "[CP] Embed Pods Frameworks"; 359 | outputPaths = ( 360 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactionButton.framework", 361 | ); 362 | runOnlyForDeploymentPostprocessing = 0; 363 | shellPath = /bin/sh; 364 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactionButton_Example/Pods-ReactionButton_Example-frameworks.sh\"\n"; 365 | showEnvVarsInLog = 0; 366 | }; 367 | 724B5750F860396815138A6E /* [CP] Check Pods Manifest.lock */ = { 368 | isa = PBXShellScriptBuildPhase; 369 | buildActionMask = 2147483647; 370 | files = ( 371 | ); 372 | inputPaths = ( 373 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 374 | "${PODS_ROOT}/Manifest.lock", 375 | ); 376 | name = "[CP] Check Pods Manifest.lock"; 377 | outputPaths = ( 378 | "$(DERIVED_FILE_DIR)/Pods-ReactionButton_Tests-checkManifestLockResult.txt", 379 | ); 380 | runOnlyForDeploymentPostprocessing = 0; 381 | shellPath = /bin/sh; 382 | 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"; 383 | showEnvVarsInLog = 0; 384 | }; 385 | 9816FBD79E67711BE6C728D9 /* [CP] Embed Pods Frameworks */ = { 386 | isa = PBXShellScriptBuildPhase; 387 | buildActionMask = 2147483647; 388 | files = ( 389 | ); 390 | inputPaths = ( 391 | "${PODS_ROOT}/Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests-frameworks.sh", 392 | "${BUILT_PRODUCTS_DIR}/ReactionButton/ReactionButton.framework", 393 | ); 394 | name = "[CP] Embed Pods Frameworks"; 395 | outputPaths = ( 396 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactionButton.framework", 397 | ); 398 | runOnlyForDeploymentPostprocessing = 0; 399 | shellPath = /bin/sh; 400 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactionButton_Tests/Pods-ReactionButton_Tests-frameworks.sh\"\n"; 401 | showEnvVarsInLog = 0; 402 | }; 403 | D1AF8CF0DB203D8228D376D3 /* [CP] Check Pods Manifest.lock */ = { 404 | isa = PBXShellScriptBuildPhase; 405 | buildActionMask = 2147483647; 406 | files = ( 407 | ); 408 | inputPaths = ( 409 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 410 | "${PODS_ROOT}/Manifest.lock", 411 | ); 412 | name = "[CP] Check Pods Manifest.lock"; 413 | outputPaths = ( 414 | "$(DERIVED_FILE_DIR)/Pods-ReactionButton_Example-checkManifestLockResult.txt", 415 | ); 416 | runOnlyForDeploymentPostprocessing = 0; 417 | shellPath = /bin/sh; 418 | 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"; 419 | showEnvVarsInLog = 0; 420 | }; 421 | /* End PBXShellScriptBuildPhase section */ 422 | 423 | /* Begin PBXSourcesBuildPhase section */ 424 | 607FACCC1AFB9204008FA782 /* Sources */ = { 425 | isa = PBXSourcesBuildPhase; 426 | buildActionMask = 2147483647; 427 | files = ( 428 | 607FACD81AFB9204008FA782 /* SampleViewController.swift in Sources */, 429 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 430 | 7ADD2264254E0E030009B82F /* SampleTableViewController.swift in Sources */, 431 | ); 432 | runOnlyForDeploymentPostprocessing = 0; 433 | }; 434 | 607FACE11AFB9204008FA782 /* Sources */ = { 435 | isa = PBXSourcesBuildPhase; 436 | buildActionMask = 2147483647; 437 | files = ( 438 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 439 | ); 440 | runOnlyForDeploymentPostprocessing = 0; 441 | }; 442 | /* End PBXSourcesBuildPhase section */ 443 | 444 | /* Begin PBXTargetDependency section */ 445 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 446 | isa = PBXTargetDependency; 447 | target = 607FACCF1AFB9204008FA782 /* ReactionButton_Example */; 448 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 449 | }; 450 | /* End PBXTargetDependency section */ 451 | 452 | /* Begin PBXVariantGroup section */ 453 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 454 | isa = PBXVariantGroup; 455 | children = ( 456 | 607FACDA1AFB9204008FA782 /* Base */, 457 | ); 458 | name = Main.storyboard; 459 | sourceTree = ""; 460 | }; 461 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 462 | isa = PBXVariantGroup; 463 | children = ( 464 | 607FACDF1AFB9204008FA782 /* Base */, 465 | ); 466 | name = LaunchScreen.xib; 467 | sourceTree = ""; 468 | }; 469 | /* End PBXVariantGroup section */ 470 | 471 | /* Begin XCBuildConfiguration section */ 472 | 607FACED1AFB9204008FA782 /* Debug */ = { 473 | isa = XCBuildConfiguration; 474 | buildSettings = { 475 | ALWAYS_SEARCH_USER_PATHS = NO; 476 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 477 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 478 | CLANG_CXX_LIBRARY = "libc++"; 479 | CLANG_ENABLE_MODULES = YES; 480 | CLANG_ENABLE_OBJC_ARC = YES; 481 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 482 | CLANG_WARN_BOOL_CONVERSION = YES; 483 | CLANG_WARN_COMMA = YES; 484 | CLANG_WARN_CONSTANT_CONVERSION = YES; 485 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 486 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 487 | CLANG_WARN_EMPTY_BODY = YES; 488 | CLANG_WARN_ENUM_CONVERSION = YES; 489 | CLANG_WARN_INFINITE_RECURSION = YES; 490 | CLANG_WARN_INT_CONVERSION = YES; 491 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 492 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 493 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 494 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 495 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 496 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 497 | CLANG_WARN_STRICT_PROTOTYPES = YES; 498 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 499 | CLANG_WARN_UNREACHABLE_CODE = YES; 500 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 501 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 502 | COPY_PHASE_STRIP = NO; 503 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 504 | ENABLE_STRICT_OBJC_MSGSEND = YES; 505 | ENABLE_TESTABILITY = YES; 506 | GCC_C_LANGUAGE_STANDARD = gnu99; 507 | GCC_DYNAMIC_NO_PIC = NO; 508 | GCC_NO_COMMON_BLOCKS = YES; 509 | GCC_OPTIMIZATION_LEVEL = 0; 510 | GCC_PREPROCESSOR_DEFINITIONS = ( 511 | "DEBUG=1", 512 | "$(inherited)", 513 | ); 514 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 515 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 516 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 517 | GCC_WARN_UNDECLARED_SELECTOR = YES; 518 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 519 | GCC_WARN_UNUSED_FUNCTION = YES; 520 | GCC_WARN_UNUSED_VARIABLE = YES; 521 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 522 | MTL_ENABLE_DEBUG_INFO = YES; 523 | ONLY_ACTIVE_ARCH = YES; 524 | SDKROOT = iphoneos; 525 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 526 | }; 527 | name = Debug; 528 | }; 529 | 607FACEE1AFB9204008FA782 /* Release */ = { 530 | isa = XCBuildConfiguration; 531 | buildSettings = { 532 | ALWAYS_SEARCH_USER_PATHS = NO; 533 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 534 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 535 | CLANG_CXX_LIBRARY = "libc++"; 536 | CLANG_ENABLE_MODULES = YES; 537 | CLANG_ENABLE_OBJC_ARC = YES; 538 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 539 | CLANG_WARN_BOOL_CONVERSION = YES; 540 | CLANG_WARN_COMMA = YES; 541 | CLANG_WARN_CONSTANT_CONVERSION = YES; 542 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 543 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 544 | CLANG_WARN_EMPTY_BODY = YES; 545 | CLANG_WARN_ENUM_CONVERSION = YES; 546 | CLANG_WARN_INFINITE_RECURSION = YES; 547 | CLANG_WARN_INT_CONVERSION = YES; 548 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 549 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 550 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 551 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 552 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 553 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 554 | CLANG_WARN_STRICT_PROTOTYPES = YES; 555 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 556 | CLANG_WARN_UNREACHABLE_CODE = YES; 557 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 558 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 559 | COPY_PHASE_STRIP = NO; 560 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 561 | ENABLE_NS_ASSERTIONS = NO; 562 | ENABLE_STRICT_OBJC_MSGSEND = YES; 563 | GCC_C_LANGUAGE_STANDARD = gnu99; 564 | GCC_NO_COMMON_BLOCKS = YES; 565 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 566 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 567 | GCC_WARN_UNDECLARED_SELECTOR = YES; 568 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 569 | GCC_WARN_UNUSED_FUNCTION = YES; 570 | GCC_WARN_UNUSED_VARIABLE = YES; 571 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 572 | MTL_ENABLE_DEBUG_INFO = NO; 573 | SDKROOT = iphoneos; 574 | SWIFT_COMPILATION_MODE = wholemodule; 575 | VALIDATE_PRODUCT = YES; 576 | }; 577 | name = Release; 578 | }; 579 | 607FACF01AFB9204008FA782 /* Debug */ = { 580 | isa = XCBuildConfiguration; 581 | baseConfigurationReference = 31AF104F61726A4824CD7D70 /* Pods-ReactionButton_Example.debug.xcconfig */; 582 | buildSettings = { 583 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 584 | INFOPLIST_FILE = ReactionButton/Info.plist; 585 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 586 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 587 | MODULE_NAME = ExampleApp; 588 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 589 | PRODUCT_NAME = "$(TARGET_NAME)"; 590 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 591 | SWIFT_VERSION = 5.0; 592 | }; 593 | name = Debug; 594 | }; 595 | 607FACF11AFB9204008FA782 /* Release */ = { 596 | isa = XCBuildConfiguration; 597 | baseConfigurationReference = 896201CC5F9E13F3BEEB67AA /* Pods-ReactionButton_Example.release.xcconfig */; 598 | buildSettings = { 599 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 600 | INFOPLIST_FILE = ReactionButton/Info.plist; 601 | IPHONEOS_DEPLOYMENT_TARGET = 13.0; 602 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 603 | MODULE_NAME = ExampleApp; 604 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 605 | PRODUCT_NAME = "$(TARGET_NAME)"; 606 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 607 | SWIFT_VERSION = 5.0; 608 | }; 609 | name = Release; 610 | }; 611 | 607FACF31AFB9204008FA782 /* Debug */ = { 612 | isa = XCBuildConfiguration; 613 | baseConfigurationReference = DE3D7ABAD19542C0E0B84F33 /* Pods-ReactionButton_Tests.debug.xcconfig */; 614 | buildSettings = { 615 | BUNDLE_LOADER = "$(TEST_HOST)"; 616 | DEVELOPMENT_TEAM = ""; 617 | FRAMEWORK_SEARCH_PATHS = ( 618 | "$(SDKROOT)/Developer/Library/Frameworks", 619 | "$(inherited)", 620 | ); 621 | GCC_PREPROCESSOR_DEFINITIONS = ( 622 | "DEBUG=1", 623 | "$(inherited)", 624 | ); 625 | INFOPLIST_FILE = Tests/Info.plist; 626 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 627 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 628 | PRODUCT_NAME = "$(TARGET_NAME)"; 629 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 630 | SWIFT_VERSION = 5.0; 631 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactionButton_Example.app/ReactionButton_Example"; 632 | }; 633 | name = Debug; 634 | }; 635 | 607FACF41AFB9204008FA782 /* Release */ = { 636 | isa = XCBuildConfiguration; 637 | baseConfigurationReference = 101AE47BC6731DC179008361 /* Pods-ReactionButton_Tests.release.xcconfig */; 638 | buildSettings = { 639 | BUNDLE_LOADER = "$(TEST_HOST)"; 640 | DEVELOPMENT_TEAM = ""; 641 | FRAMEWORK_SEARCH_PATHS = ( 642 | "$(SDKROOT)/Developer/Library/Frameworks", 643 | "$(inherited)", 644 | ); 645 | INFOPLIST_FILE = Tests/Info.plist; 646 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 647 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 648 | PRODUCT_NAME = "$(TARGET_NAME)"; 649 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 650 | SWIFT_VERSION = 5.0; 651 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactionButton_Example.app/ReactionButton_Example"; 652 | }; 653 | name = Release; 654 | }; 655 | /* End XCBuildConfiguration section */ 656 | 657 | /* Begin XCConfigurationList section */ 658 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "ReactionButton" */ = { 659 | isa = XCConfigurationList; 660 | buildConfigurations = ( 661 | 607FACED1AFB9204008FA782 /* Debug */, 662 | 607FACEE1AFB9204008FA782 /* Release */, 663 | ); 664 | defaultConfigurationIsVisible = 0; 665 | defaultConfigurationName = Release; 666 | }; 667 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReactionButton_Example" */ = { 668 | isa = XCConfigurationList; 669 | buildConfigurations = ( 670 | 607FACF01AFB9204008FA782 /* Debug */, 671 | 607FACF11AFB9204008FA782 /* Release */, 672 | ); 673 | defaultConfigurationIsVisible = 0; 674 | defaultConfigurationName = Release; 675 | }; 676 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "ReactionButton_Tests" */ = { 677 | isa = XCConfigurationList; 678 | buildConfigurations = ( 679 | 607FACF31AFB9204008FA782 /* Debug */, 680 | 607FACF41AFB9204008FA782 /* Release */, 681 | ); 682 | defaultConfigurationIsVisible = 0; 683 | defaultConfigurationName = Release; 684 | }; 685 | /* End XCConfigurationList section */ 686 | }; 687 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 688 | } 689 | -------------------------------------------------------------------------------- /Example/ReactionButton.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/ReactionButton.xcodeproj/xcshareddata/xcschemes/EmojiSelectorView-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 51 | 52 | 53 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 76 | 78 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /Example/ReactionButton.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/ReactionButton.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/ReactionButton/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge Ovalle on 02/29/2016. 6 | // 7 | 8 | import UIKit 9 | 10 | @UIApplicationMain 11 | class AppDelegate: UIResponder, UIApplicationDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | func application(_ application: UIApplication, 16 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | return true 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_1.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_1@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_1@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_1@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_2.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_2@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_2@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_2@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_3.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_3@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_3@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_3@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_4.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_4@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_4@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_4@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_5.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_5@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_5@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_5@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_6.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_6@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Assets/img_6@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Assets/img_6@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/ReactionButton/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 39 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 114 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "filename" : "icon-29@2x.png", 15 | "idiom" : "iphone", 16 | "scale" : "2x", 17 | "size" : "29x29" 18 | }, 19 | { 20 | "filename" : "icon-29@3x.png", 21 | "idiom" : "iphone", 22 | "scale" : "3x", 23 | "size" : "29x29" 24 | }, 25 | { 26 | "filename" : "icon-40@2x.png", 27 | "idiom" : "iphone", 28 | "scale" : "2x", 29 | "size" : "40x40" 30 | }, 31 | { 32 | "filename" : "icon-40@3x.png", 33 | "idiom" : "iphone", 34 | "scale" : "3x", 35 | "size" : "40x40" 36 | }, 37 | { 38 | "filename" : "icon-60@2x.png", 39 | "idiom" : "iphone", 40 | "scale" : "2x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "filename" : "icon-60@3x.png", 45 | "idiom" : "iphone", 46 | "scale" : "3x", 47 | "size" : "60x60" 48 | }, 49 | { 50 | "idiom" : "ipad", 51 | "scale" : "1x", 52 | "size" : "20x20" 53 | }, 54 | { 55 | "idiom" : "ipad", 56 | "scale" : "2x", 57 | "size" : "20x20" 58 | }, 59 | { 60 | "filename" : "icon-29.png", 61 | "idiom" : "ipad", 62 | "scale" : "1x", 63 | "size" : "29x29" 64 | }, 65 | { 66 | "filename" : "icon-29@2x.png", 67 | "idiom" : "ipad", 68 | "scale" : "2x", 69 | "size" : "29x29" 70 | }, 71 | { 72 | "filename" : "icon-40.png", 73 | "idiom" : "ipad", 74 | "scale" : "1x", 75 | "size" : "40x40" 76 | }, 77 | { 78 | "filename" : "icon-40@2x.png", 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "40x40" 82 | }, 83 | { 84 | "filename" : "icon-76.png", 85 | "idiom" : "ipad", 86 | "scale" : "1x", 87 | "size" : "76x76" 88 | }, 89 | { 90 | "filename" : "icon-76@2x.png", 91 | "idiom" : "ipad", 92 | "scale" : "2x", 93 | "size" : "76x76" 94 | }, 95 | { 96 | "idiom" : "ipad", 97 | "scale" : "2x", 98 | "size" : "83.5x83.5" 99 | }, 100 | { 101 | "filename" : "icon-1025.png", 102 | "idiom" : "ios-marketing", 103 | "scale" : "1x", 104 | "size" : "1024x1024" 105 | } 106 | ], 107 | "info" : { 108 | "author" : "xcode", 109 | "version" : 1 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-1025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-1025.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lojals/ReactionButton/8ec7673d1a8d15047b5fd93640857a0e49dceaf4/Example/ReactionButton/Images.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /Example/ReactionButton/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/ReactionButton/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Example/ReactionButton/SampleTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SampleTableViewController.swift 3 | // ReactionButton_Example 4 | // 5 | // Created by Jorge Ovalle on 31/10/20. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ReactionButton 11 | 12 | final class SampleTableViewController: UITableViewController { 13 | 14 | override func numberOfSections(in tableView: UITableView) -> Int { 15 | return 1 16 | } 17 | 18 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 19 | return 10 20 | } 21 | 22 | 23 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 24 | return tableView.dequeueReusableCell(withIdentifier: "SampleCell", for: indexPath) 25 | } 26 | 27 | } 28 | 29 | final class CustomSelectorView: ReactionButton, ReactionButtonDataSource { 30 | 31 | let optionsDataset = [ 32 | (imageName: "img_1", title: "Like"), 33 | (imageName: "img_2", title: "Smile"), 34 | (imageName: "img_3", title: "Heart"), 35 | (imageName: "img_4", title: "Idea"), 36 | (imageName: "img_5", title: "Slow"), 37 | (imageName: "img_6", title: "Fast") 38 | ] 39 | 40 | override init(frame: CGRect) { 41 | super.init(frame: frame) 42 | self.dataSource = self 43 | } 44 | 45 | required init?(coder aDecoder: NSCoder) { 46 | super.init(coder: aDecoder) 47 | self.dataSource = self 48 | } 49 | 50 | func numberOfOptions(in selector: ReactionButton) -> Int { 51 | optionsDataset.count 52 | } 53 | 54 | func ReactionSelector(_ selector: ReactionButton, viewForIndex index: Int) -> UIView { 55 | let option = optionsDataset[index].imageName 56 | guard let image = UIImage(named: option) else { 57 | return UIView() 58 | } 59 | return UIImageView(image: image) 60 | } 61 | 62 | func ReactionSelector(_ selector: ReactionButton, nameForIndex index: Int) -> String { 63 | optionsDataset[index].title 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Example/ReactionButton/SampleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SampleViewController.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge R Ovalle Z on 2/28/16. 6 | // 7 | 8 | import UIKit 9 | import ReactionButton 10 | 11 | final class SampleViewController: UIViewController { 12 | 13 | @IBOutlet weak var selectorView: ReactionButton! 14 | @IBOutlet weak var informationLabel: UILabel! 15 | 16 | let optionsDataset = [ 17 | (imageName: "img_1", title: "Like"), 18 | (imageName: "img_2", title: "Smile"), 19 | (imageName: "img_3", title: "Heart"), 20 | (imageName: "img_4", title: "Idea"), 21 | (imageName: "img_5", title: "Slow"), 22 | (imageName: "img_6", title: "Fast") 23 | ] 24 | 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | selectorView.delegate = self 28 | selectorView.dataSource = self 29 | } 30 | 31 | } 32 | 33 | // MARK: ReactionButtonDelegate 34 | extension SampleViewController: ReactionButtonDelegate { 35 | 36 | func ReactionSelector(_ sender: ReactionButton, didSelectedIndex index: Int) { 37 | informationLabel.text = "Option \(index) selected" 38 | } 39 | 40 | func ReactionSelector(_ sender: ReactionButton, didChangeFocusTo index: Int?) { 41 | guard let index = index else { 42 | informationLabel.text = "Lost Focus" 43 | return 44 | } 45 | 46 | informationLabel.text = "Focused on \(index) option" 47 | } 48 | 49 | func ReactionSelectorDidCancelledAction(_ sender: ReactionButton) { 50 | informationLabel.text = "User cancelled selection" 51 | } 52 | 53 | } 54 | 55 | // MARK: ReactionButtonDataSource 56 | extension SampleViewController: ReactionButtonDataSource { 57 | 58 | func numberOfOptions(in selector: ReactionButton) -> Int { 59 | optionsDataset.count 60 | } 61 | 62 | func ReactionSelector(_ selector: ReactionButton, viewForIndex index: Int) -> UIView { 63 | let option = optionsDataset[index].imageName 64 | guard let image = UIImage(named: option) else { 65 | return UIView() 66 | } 67 | return UIImageView(image: image) 68 | } 69 | 70 | func ReactionSelector(_ selector: ReactionButton, nameForIndex index: Int) -> String { 71 | optionsDataset[index].title 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | import ReactionButton 4 | 5 | class Tests: XCTestCase { 6 | } 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Jorge Ovalle 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.3 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "ReactionButton", 6 | platforms: [.iOS(.v13)], 7 | products: [ 8 | .library( 9 | name: "ReactionButton", 10 | targets: ["ReactionButton"]), 11 | ], 12 | dependencies: [], 13 | targets: [ 14 | .target( 15 | name: "ReactionButton", 16 | dependencies: []), 17 | .testTarget( 18 | name: "ReactionButtonTests", 19 | dependencies: ["ReactionButton"]), 20 | ] 21 | ) 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 |

5 | 6 | 7 | 8 |
9 | 10 | 11 |

12 | 13 |

Since Facebook introduced reactions in 2016, it became a standard in several applications as a way for users to interact with content. ReactionButton is a control that allows developers to add this functionality to their apps in an easy way.

14 | 15 | ## Features 16 | - [x] Support of Dark Mode 17 | - [x] Customizable layout using `ReactionButtonDelegateLayout` 18 | - [x] Extensible DataSource for the control 19 | - [x] Layout support for scrolling interfaces (UICollectionView/UITableView) 20 | - [x] Codable initializer for usage on storyboards 21 | - [x] Events 22 | 23 | ## Requirements 24 | * iOS 13.0+ 25 | * Swift 5.0+ 26 | 27 | ## Installation 28 | 29 | * [Installation guide](https://github.com/lojals/ReactionButton/wiki/Installation-guide) 30 | 31 | ## Usage 32 | 33 | ### 1. Basic Instance 34 | There are multiple ways to instantiate a `ReactionButton`, using a frame, storyboards, or an empty convenience initializer. 35 | 36 | #### Example Code 37 | 38 | ```swift 39 | let buttonSample = ReactionButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 40 | buttonSample.dataSource = self 41 | view.addSubview(buttonSample) 42 | ``` 43 | 44 | ![Basic usage](https://user-images.githubusercontent.com/6756995/97816507-652d4780-1c5b-11eb-8479-0d003197b149.gif) 45 | > Images from [Trump reactionpacks style](http://www.reactionpacks.com/packs/2c1a1e41-e9e9-407a-a532-3bfdfef6b3e6). 46 | 47 | ### 2. Delegate 48 | The `ReactionButton` has a delegate to communicate events of option selection, option focus, and cancel of actions. To use it, set the `ReactionButtonDelegate` conform as a delegate. 49 | 50 | ```swift 51 | let buttonSample = ReactionButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 52 | buttonSample.delegate = self 53 | view.addSubview(buttonSample) 54 | ``` 55 | ![Delegate example](https://user-images.githubusercontent.com/6756995/97816887-4e3c2480-1c5e-11eb-9028-5fed1ed22458.gif) 56 | > Images from [Trump reactionpacks style](http://www.reactionpacks.com/packs/2c1a1e41-e9e9-407a-a532-3bfdfef6b3e6). 57 | 58 | ### 3. Custom layout instance 59 | `ReactionButton` allows customization of the layout with the help of `ReactionButtonDelegateLayout`. To use it, please conform to that protocol and set it as delegate (Same pattern as UICollectionView). 60 | 61 | ```swift 62 | func ReactionSelectorConfiguration(_ selector: ReactionButton) -> ReactionButton.Config { 63 | ReactionButton.Config(spacing: 2, 64 | size: 30, 65 | minSize: 34, 66 | maxSize: 45, 67 | spaceBetweenComponents: 30) 68 | } 69 | ``` 70 | You can custom your selector with the following variables, used in the 71 | 72 | ![New](https://user-images.githubusercontent.com/6756995/97817123-0cac7900-1c60-11eb-8df3-09ba7c19908b.png) 73 | 74 | ![sizes](https://i.imgur.com/yNfyP3c.png?1) 75 | 76 | ## Author 77 | Jorge Ovalle, jroz9105@gmail.com 78 | -------------------------------------------------------------------------------- /ReactionButton.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "ReactionButton" 3 | s.version = "4.0.0" 4 | s.summary = "Option selector that can be used as reactions" 5 | 6 | s.description = "Totally customizable Options (Reaction) Selector based on Reactions" 7 | 8 | s.homepage = "https://github.com/lojals/ReactionButton" 9 | s.license = { :type => 'MIT', :file => 'LICENSE' } 10 | s.author = { "Jorge Ovalle" => "jroz9105@gmail.com" } 11 | s.source = { :git => "https://github.com/lojals/ReactionButton.git", :tag => s.version.to_s } 12 | s.social_media_url = 'https://github.com/lojals' 13 | 14 | s.ios.deployment_target = '13.0' 15 | s.pod_target_xcconfig = { 'SWIFT_VERSION' => '5.0' } 16 | s.swift_version = '5.0' 17 | 18 | s.source_files = 'Sources/ReactionButton/**/*' 19 | 20 | end 21 | -------------------------------------------------------------------------------- /Sources/ReactionButton/Extensions/CGRect+init.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGRect+init.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge R Ovalle Z on 4/7/18. 6 | // 7 | 8 | import CoreGraphics 9 | 10 | extension CGRect { 11 | 12 | /// Creates an instance of `CGRect` with the same width and height. 13 | /// 14 | /// - Parameters: 15 | /// - x: Position in `x` coordinate. 16 | /// - y: Position in `y` coordinate. 17 | /// - sideSize: Size of the rect side. 18 | init(x: CGFloat, y: CGFloat, sideSize: CGFloat) { 19 | self.init(origin: CGPoint(x: x, y: y), size: CGSize(sideSize: sideSize)) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Sources/ReactionButton/Extensions/CGSize+init.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGSize+init.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge R Ovalle Z on 4/7/18. 6 | // 7 | 8 | import CoreGraphics 9 | 10 | extension CGSize { 11 | 12 | /// Creates an instance of `CGSize` with the same width and height. 13 | /// 14 | /// - Parameter sideSize: Size of the side. 15 | init(sideSize: CGFloat) { 16 | self.init(width: sideSize, height: sideSize) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Sources/ReactionButton/Extensions/EmojiSelectorView.Config+rect.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReactionButton.Config+rect.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge Ovalle on 30/10/20. 6 | // 7 | 8 | import UIKit 9 | 10 | extension ReactionButton.Config { 11 | 12 | func rect(items: Int, originalPos: CGPoint, trait: UITraitCollection) -> CGRect { 13 | var originalPos = CGPoint(x: originalPos.x, y: originalPos.y - heightForSize - 10) 14 | let option = CGFloat(items) 15 | let width = (option + 1) * spacing + self.size * option 16 | 17 | if trait.horizontalSizeClass == .compact && trait.verticalSizeClass == .regular { 18 | originalPos.x = (UIScreen.main.bounds.width - width) / 2 19 | } 20 | 21 | return CGRect(origin: originalPos, size: CGSize(width: width, height: heightForSize)) 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Sources/ReactionButton/Extensions/UIColor+Selector.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIColor+Selector.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge Ovalle on 31/10/20. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIColor { 11 | 12 | public static var background: UIColor = { 13 | return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in 14 | if UITraitCollection.userInterfaceStyle == .dark { 15 | return UIColor.systemGray6 16 | } else { 17 | return UIColor.white 18 | } 19 | } 20 | }() 21 | 22 | public static var shadow: UIColor = { 23 | return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in 24 | if UITraitCollection.userInterfaceStyle == .dark { 25 | return UIColor.clear 26 | } else { 27 | return UIColor.lightGray 28 | } 29 | } 30 | }() 31 | 32 | } 33 | -------------------------------------------------------------------------------- /Sources/ReactionButton/Extensions/UIView+animation.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+animation.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge Ovalle on 29/10/20. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIView { 11 | static func animate(index: Int, animations: @escaping () -> Void, completion: ((Bool) -> Void)? = nil) { 12 | UIView.animate(withDuration: 0.2, delay: 0.05 * Double(index), options: .curveEaseInOut) { 13 | animations() 14 | } completion: { finished in 15 | completion?(finished) 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Sources/ReactionButton/Extensions/UIView+contains.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+contains.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge Ovalle on 29/10/20. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIView { 11 | 12 | /// A function that checks if a given point is whether or not in the frame of the view. 13 | /// - Parameter point: The point to look for. 14 | /// - Returns: A boolean that represents if the point is inside the frame. 15 | func contains(_ point: CGPoint) -> Bool { 16 | point.x > frame.minX && point.x < frame.maxX && point.y > frame.minY && point.y < frame.maxY 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /Sources/ReactionButton/ReactionButton+protocols.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReactionButton+protocols.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge R Ovalle Z on 4/11/18. 6 | // 7 | 8 | import UIKit 9 | 10 | /// Describes a type that is informed of events occurring within a `ReactionButton`. 11 | public protocol ReactionButtonDelegate: class { 12 | 13 | /// The user selected an option from the sender. 14 | /// 15 | /// - Parameters: 16 | /// - sender: The `ReactionButton` which is sending the action. 17 | /// - index: Index of the selected option. 18 | func ReactionSelector(_ sender: ReactionButton, didSelectedIndex index: Int) 19 | 20 | /// The user is moving through the options. 21 | /// - Parameters: 22 | /// - sender: The `ReactionButton` which is sending the action. 23 | /// - index: Index of the selected option. 24 | func ReactionSelector(_ sender: ReactionButton, didChangeFocusTo index: Int?) 25 | 26 | /// The user cancelled the option selection. 27 | /// 28 | /// - Parameter sender: The `ReactionButton` which is sending the action. 29 | func ReactionSelectorDidCancelledAction(_ sender: ReactionButton) 30 | 31 | } 32 | 33 | public protocol ReactionButtonDelegateLayout: ReactionButtonDelegate { 34 | func ReactionSelectorConfiguration(_ selector: ReactionButton) -> ReactionButton.Config 35 | } 36 | 37 | public extension ReactionButtonDelegateLayout { 38 | func ReactionSelectorConfiguration(_ selector: ReactionButton) -> ReactionButton.Config { 39 | .default 40 | } 41 | } 42 | 43 | /// Default implementation for delegate 44 | public extension ReactionButtonDelegate { 45 | func ReactionSelector(_ sender: ReactionButton, didSelectedIndex index: Int) {} 46 | func ReactionSelector(_ sender: ReactionButton, didChangeFocusTo index: Int?) {} 47 | func ReactionSelectorDidCancelledAction(_ sender: ReactionButton) {} 48 | } 49 | 50 | public protocol ReactionButtonDataSource: class { 51 | 52 | /// Asks the data source to return the number of items in the ReactionButton. 53 | func numberOfOptions(in selector: ReactionButton) -> Int 54 | 55 | /// Asks the data source for the view of the specific item. 56 | func ReactionSelector(_ selector: ReactionButton, viewForIndex index: Int) -> UIView 57 | 58 | /// Asks the data source for the name of the specific item. 59 | func ReactionSelector(_ selector: ReactionButton, nameForIndex index: Int) -> String 60 | } 61 | -------------------------------------------------------------------------------- /Sources/ReactionButton/ReactionButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReactionButton.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge R Ovalle Z on 2/28/16. 6 | // 7 | 8 | import UIKit 9 | 10 | /// A type that represents the selector with options froma items. 11 | open class ReactionButton: UIButton { 12 | 13 | public weak var delegate: ReactionButtonDelegate? 14 | public weak var dataSource: ReactionButtonDataSource? 15 | 16 | private var _dataSource: ReactionButtonDataSource { 17 | guard let dataSource = dataSource else { 18 | fatalError("❌ Please set up a datasource for the ReactionButton") 19 | } 20 | return dataSource 21 | } 22 | 23 | private var selectedItem: Int? { 24 | didSet { 25 | if oldValue != selectedItem { 26 | delegate?.ReactionSelector(self, didChangeFocusTo: selectedItem) 27 | } 28 | } 29 | } 30 | 31 | private lazy var optionsBarView: UIView = { 32 | let optionsBarView = UIView(frame: .zero) 33 | optionsBarView.layer.cornerRadius = config.heightForSize/2 34 | optionsBarView.alpha = 0.3 35 | return optionsBarView 36 | }() 37 | 38 | private var config: ReactionButton.Config { 39 | guard let delegate = delegate as? ReactionButtonDelegateLayout else { 40 | return .default 41 | } 42 | return delegate.ReactionSelectorConfiguration(self) 43 | } 44 | 45 | private var rootView: UIView? { 46 | UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.rootViewController?.view 47 | } 48 | 49 | // MARK: - View lifecycle 50 | 51 | /// Creates a new instance of `ReactionButton`. 52 | public convenience init() { 53 | self.init(frame: .zero) 54 | } 55 | 56 | /// Creates a new instace of `ReactionButton`. 57 | /// 58 | /// - Parameters: 59 | /// - frame: Frame of the button will open the selector 60 | /// - config: The custom configuration for the UI components. 61 | public override init(frame: CGRect) { 62 | super.init(frame: frame) 63 | setup() 64 | } 65 | 66 | required public init?(coder aDecoder: NSCoder) { 67 | super.init(coder: aDecoder) 68 | setup() 69 | } 70 | 71 | private func setup() { 72 | addGestureRecognizer(UILongPressGestureRecognizer(target: self, 73 | action: #selector(ReactionButton.handlePress(sender:)))) 74 | } 75 | 76 | // MARK: - Visual component interaction / animation 77 | 78 | /// Function that open and expand the Options Selector. 79 | @objc private func handlePress(sender: UILongPressGestureRecognizer) { 80 | switch sender.state { 81 | case .began: 82 | expand() 83 | case .changed: 84 | let point = sender.location(in: rootView) 85 | move(point) 86 | case .ended: 87 | collapse() 88 | default: break 89 | } 90 | } 91 | 92 | private func expand() { 93 | selectedItem = nil 94 | updateOptionsView(with: UIScreen.main.traitCollection) 95 | 96 | let config = self.config 97 | rootView?.addSubview(optionsBarView) 98 | 99 | UIView.animate(withDuration: 0.2) { 100 | self.optionsBarView.alpha = 1 101 | } 102 | 103 | for i in 0..<_dataSource.numberOfOptions(in: self) { 104 | let optionFrame = CGRect(x: xPosition(for: i), y: config.heightForSize * 1.2, 105 | sideSize: config.sizeBeforeOpen) 106 | let option = _dataSource.ReactionSelector(self, viewForIndex: i) 107 | option.frame = optionFrame 108 | option.alpha = 0.6 109 | optionsBarView.addSubview(option) 110 | 111 | UIView.animate(index: i) { 112 | option.frame.origin.y = config.spacing 113 | option.alpha = 1 114 | option.frame.size = CGSize(sideSize: config.size) 115 | let sizeCenter = config.size/2 116 | option.center = CGPoint(x: optionFrame.origin.x + sizeCenter, 117 | y: config.spacing + sizeCenter) 118 | } 119 | } 120 | } 121 | 122 | private func move(_ point: CGPoint) { 123 | // Check if the point's position is inside the defined area. 124 | if optionsBarView.contains(point) { 125 | let relativeSizePerOption = optionsBarView.frame.width / CGFloat(_dataSource.numberOfOptions(in: self)) 126 | focusOption(withIndex: Int(round((point.x - optionsBarView.frame.minX) / relativeSizePerOption))) 127 | } else { 128 | selectedItem = nil 129 | UIView.animate(withDuration: 0.2) { 130 | for (idx, view) in self.optionsBarView.subviews.enumerated() { 131 | view.frame = CGRect(x: self.xPosition(for: idx), y: self.config.spacing, sideSize: self.config.size) 132 | } 133 | } 134 | } 135 | } 136 | 137 | /// Function that collapse and close the Options Selector. 138 | private func collapse() { 139 | for (index, option) in optionsBarView.subviews.enumerated() { 140 | UIView.animate(index: index) { 141 | option.alpha = 0 142 | option.frame.size = CGSize(sideSize: self.config.sizeBeforeOpen) 143 | } completion: { finished in 144 | guard finished, index == self._dataSource.numberOfOptions(in: self)/2 else { 145 | return 146 | } 147 | self.optionsBarView.removeFromSuperview() 148 | self.optionsBarView.subviews.forEach { $0.removeFromSuperview() } 149 | if let selectedItem = self.selectedItem { 150 | self.delegate?.ReactionSelector(self, didSelectedIndex: selectedItem) 151 | } else { 152 | self.delegate?.ReactionSelectorDidCancelledAction(self) 153 | } 154 | } 155 | } 156 | } 157 | 158 | /// When a user in focusing an option, that option should magnify. 159 | /// 160 | /// - Parameter index: The index of the option in the items. 161 | private func focusOption(withIndex index: Int) { 162 | guard (0..<_dataSource.numberOfOptions(in: self)).contains(index) else { return } 163 | selectedItem = index 164 | let config = self.config 165 | var xCarry: CGFloat = index != 0 ? config.spacing : 0 166 | 167 | UIView.animate(withDuration: 0.2) { 168 | for (i, optionView) in self.optionsBarView.subviews.enumerated() { 169 | optionView.frame = CGRect(x: xCarry, y: config.spacing, sideSize: config.minSize) 170 | optionView.center.y = config.heightForSize/2 171 | switch i { 172 | case (index-1): 173 | xCarry += config.minSize 174 | case index: 175 | optionView.frame = CGRect(x: xCarry, y: -config.maxSize/2, sideSize: config.maxSize) 176 | xCarry += config.maxSize 177 | default: 178 | xCarry += config.minSize + config.spacing 179 | } 180 | } 181 | } 182 | } 183 | 184 | /// Calculate the `x` position for a given items option. 185 | /// 186 | /// - Parameter option: the position of the option in the items. <0... items.count>. 187 | /// - Returns: The x position for a given option. 188 | private func xPosition(for option: Int) -> CGFloat { 189 | let option = CGFloat(option) 190 | return (option + 1) * config.spacing + config.size * option 191 | } 192 | 193 | private func updateOptionsView(with trait: UITraitCollection) { 194 | let originPoint = superview?.convert(frame.origin, to: rootView) ?? .zero 195 | 196 | optionsBarView.backgroundColor = UIColor.background 197 | optionsBarView.layer.shadowColor = UIColor.shadow.cgColor 198 | optionsBarView.layer.shadowOpacity = 0.5 199 | optionsBarView.layer.shadowOffset = .zero 200 | 201 | optionsBarView.frame = config.rect(items: _dataSource.numberOfOptions(in: self), 202 | originalPos: originPoint, 203 | trait: trait) 204 | } 205 | } 206 | -------------------------------------------------------------------------------- /Sources/ReactionButton/ReactionButtonConfig.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReactionButtonConfig.swift 3 | // ReactionButton 4 | // 5 | // Created by Jorge R Ovalle Z on 4/6/18. 6 | // 7 | 8 | import CoreGraphics 9 | 10 | public extension ReactionButton { 11 | /// A type representing the basic configurations for a `ReactionButton`. 12 | struct Config { 13 | 14 | /// The space between options. 15 | let spacing: CGFloat 16 | 17 | /// The default size for an option. 18 | let size: CGFloat 19 | 20 | /// The size of an option before expand. 21 | let sizeBeforeOpen: CGFloat 22 | 23 | /// The minimum size when an option is being selected. 24 | let minSize: CGFloat 25 | 26 | /// The maximum size when the option is beign selected. 27 | let maxSize: CGFloat 28 | 29 | var heightForSize: CGFloat { 30 | size + 2 * spacing 31 | } 32 | 33 | /// Creates an instance of `JOReactionableConfig` 34 | /// 35 | /// - Parameters: 36 | /// - spacing: The space between options. 37 | /// - size: The default size for an option. 38 | /// - minSize: The minimum size when an option is being selected. 39 | /// - maxSize: The maximum size when the option is beign selected. 40 | /// - spaceBetweenComponents: The space between the `SelectorView` and the `InformationView`. 41 | public init(spacing: CGFloat, size: CGFloat, minSize: CGFloat, maxSize: CGFloat) { 42 | self.spacing = spacing 43 | self.size = size 44 | self.minSize = minSize 45 | self.maxSize = maxSize 46 | self.sizeBeforeOpen = 10 47 | } 48 | 49 | /// A `default` definition of `ReactionButton.Config`. 50 | public static let `default` = Config(spacing: 6, 51 | size: 40, 52 | minSize: 34, 53 | maxSize: 80) 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import JOEmojiableBtnTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += JOEmojiableBtnTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Tests/ReactionButtonTests/ReactionButtonTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import ReactionButton 3 | 4 | final class ReactionButtonTests: XCTestCase { 5 | func testExample() { 6 | } 7 | 8 | static var allTests = [ 9 | ("testExample", testExample), 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /Tests/ReactionButtonTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | #if !canImport(ObjectiveC) 4 | public func allTests() -> [XCTestCaseEntry] { 5 | return [ 6 | testCase(JOEmojiableBtnTests.allTests), 7 | ] 8 | } 9 | #endif 10 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------