diff --git a/Example/Podfile b/Example/Podfile index 80c1d99..7f8b446 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -1,6 +1,6 @@ use_frameworks! -platform :ios, '11.0' +platform :ios, '13.0' target 'RadioColorPicker_Example' do pod 'RadioColorPicker', :path => '../' diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 5319790..7eeb6be 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - RadioColorPicker: a3e6e48a27ebefba08253d7d1808354237cd868d + RadioColorPicker: d698ee589d841d8384919cd6fddb68debb28610f -PODFILE CHECKSUM: bea30b00c882a2a46985530fd5cfb32969773b5c +PODFILE CHECKSUM: c82bea26919ba0d25cf9658f6a786d2a2cbf9a6f COCOAPODS: 1.11.3 diff --git a/Example/Pods/Local Podspecs/RadioColorPicker.podspec.json b/Example/Pods/Local Podspecs/RadioColorPicker.podspec.json index d6fc353..2156950 100644 --- a/Example/Pods/Local Podspecs/RadioColorPicker.podspec.json +++ b/Example/Pods/Local Podspecs/RadioColorPicker.podspec.json @@ -1,7 +1,8 @@ { "name": "RadioColorPicker", "version": "0.1.0", - "summary": "A short description of RadioColorPicker.", + "summary": "사용하기 쉽고 알잘딱 할 줄 아는 ColorPicker", + "swift_versions": "5.0", "description": "TODO: Add long description of the pod here.", "homepage": "https://github.com/WallabyStuff/RadioColorPicker", "license": { @@ -16,7 +17,8 @@ "tag": "0.1.0" }, "platforms": { - "ios": "11.0" + "ios": "13.0" }, - "source_files": "Sources/**/*" + "source_files": "Sources/**/*", + "swift_version": "5.0" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 5319790..7eeb6be 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -9,8 +9,8 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - RadioColorPicker: a3e6e48a27ebefba08253d7d1808354237cd868d + RadioColorPicker: d698ee589d841d8384919cd6fddb68debb28610f -PODFILE CHECKSUM: bea30b00c882a2a46985530fd5cfb32969773b5c +PODFILE CHECKSUM: c82bea26919ba0d25cf9658f6a786d2a2cbf9a6f COCOAPODS: 1.11.3 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 5491bbf..0499015 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -8,26 +8,27 @@ /* Begin PBXBuildFile section */ 1041C7F3805D3C719A3E46D73DDB0CC7 /* Pods-RadioColorPicker_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F90034A233BCCC85E7EFC910CEA7EE /* Pods-RadioColorPicker_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47CC347E6BB9680819353177B7CDBCDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; - 4C2D13983CA2E264777B5F0C8FFDA5DE /* RadioColorPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A64C9C787761EBBED709E5B7BC4B8F5F /* RadioColorPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 514AC826AA860AE4217EFFCB0FEAD86C /* RadioColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE5E7F3B6F66986A630C1F8A6F417C2E /* RadioColorPicker.swift */; }; + 4C6922F67F97261CEBBE3F517FAE6FEE /* RadioColorPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EE4E8FBD0E063B259AF3DC058D9C4FD1 /* RadioColorPicker-dummy.m */; }; 548A69B3C756402A54B993E70811C400 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; 5A3CDD3DF6139480ED2167C4DB1AF16F /* Pods-RadioColorPicker_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E7915501D91A2CA67E6F004CBAB9BE7F /* Pods-RadioColorPicker_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C132FC19A42C846563D97DE1DEFDBC8 /* RadioColorPickerCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7671D4085518068AE80991A467A76B6D /* RadioColorPickerCollectionViewCell.swift */; }; ABD7EBAA4950CD246BB7E28E801A4CD9 /* Pods-RadioColorPicker_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CDFECB5D2255C835DD1E30FB79C3AF9 /* Pods-RadioColorPicker_Example-dummy.m */; }; - BE76BB064EFFDF51065386EA93432004 /* RadioColorPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 82A0DE0E315EA59CD25C30E092426D49 /* RadioColorPicker-dummy.m */; }; + B49313E07858A13EBED83155A994C79F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; CF384F7909274AEF3977727F264AFF32 /* Pods-RadioColorPicker_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BB9916A2EA3EEC89842DE901756A8ECD /* Pods-RadioColorPicker_Tests-dummy.m */; }; D048289BA5169F307E9F711CEB707AF1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + DB9BA25E72EB050964C59EBF7CFE86A8 /* RadioColorPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 996536AFB43B8317544BABC0AFED347B /* RadioColorPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EFB0C7004C3A12BCE95E647BDABB0B68 /* RadioColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 635E5D7E446E0335564E24561E5D42BC /* RadioColorPicker.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 505AE089563EABD81823650055E6FC12 /* PBXContainerItemProxy */ = { + 7B3DA003C82139EF453B99D18BDB5AF9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = F174D5934760972A2A5B7D6365813ADA; remoteInfo = RadioColorPicker; }; - C51A830C3FF1328FE3D0AC1F512C6013 /* PBXContainerItemProxy */ = { + B82DE9D675D3DBEC37B90E5254BCE3D4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -40,52 +41,53 @@ 05F90034A233BCCC85E7EFC910CEA7EE /* Pods-RadioColorPicker_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RadioColorPicker_Tests-umbrella.h"; sourceTree = ""; }; 10C196624E71C2DD58707C4610E05E9F /* Pods-RadioColorPicker_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RadioColorPicker_Tests-acknowledgements.markdown"; sourceTree = ""; }; 1CE87E1A5F33AE59C428FD1EF88109EB /* Pods-RadioColorPicker_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-RadioColorPicker_Example.modulemap"; sourceTree = ""; }; - 2728A6E73F84CDF7FB4084C57C821140 /* RadioColorPicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RadioColorPicker-prefix.pch"; sourceTree = ""; }; 31709873E2F14B4E9DAC5F7D774A2E03 /* Pods-RadioColorPicker_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-RadioColorPicker_Tests.modulemap"; sourceTree = ""; }; - 3CEBD47BA8F1ECA5F3E780FCB48791FB /* RadioColorPicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RadioColorPicker.release.xcconfig; sourceTree = ""; }; 5494A9E36D2295A4088059FD96870ADE /* Pods-RadioColorPicker_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RadioColorPicker_Example.release.xcconfig"; sourceTree = ""; }; 56068BD0E7AE3FEEA8CFF834AD0D78F1 /* Pods-RadioColorPicker_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RadioColorPicker_Tests.release.xcconfig"; sourceTree = ""; }; - 5923281D99CD13C00D30FEAEF07AD8A9 /* RadioColorPicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RadioColorPicker-Info.plist"; sourceTree = ""; }; - 5C466F0B852F56EF64A992562E6D7008 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 59F32A90A157D056713A942D2A139F14 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 6200EE6401A37BA7A41E81FBE532ED1C /* RadioColorPicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RadioColorPicker.debug.xcconfig; sourceTree = ""; }; + 635E5D7E446E0335564E24561E5D42BC /* RadioColorPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadioColorPicker.swift; path = Sources/RadioColorPicker.swift; sourceTree = ""; }; 6CDFECB5D2255C835DD1E30FB79C3AF9 /* Pods-RadioColorPicker_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RadioColorPicker_Example-dummy.m"; sourceTree = ""; }; + 706621CE2D11FEE846BBA25F7B938B80 /* RadioColorPicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RadioColorPicker-prefix.pch"; sourceTree = ""; }; 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 7671D4085518068AE80991A467A76B6D /* RadioColorPickerCollectionViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadioColorPickerCollectionViewCell.swift; path = Sources/RadioColorPickerCollectionViewCell.swift; sourceTree = ""; }; 79581C1EE4FE44092C81D0B288F3A20E /* Pods-RadioColorPicker_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RadioColorPicker_Example-Info.plist"; sourceTree = ""; }; 815A1F77AE207C3AF505328F5CF3D077 /* RadioColorPicker */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RadioColorPicker; path = RadioColorPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 82A0DE0E315EA59CD25C30E092426D49 /* RadioColorPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RadioColorPicker-dummy.m"; sourceTree = ""; }; - 91B100B127D2C36F54F13A7D6279F6E8 /* RadioColorPicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RadioColorPicker.debug.xcconfig; sourceTree = ""; }; 97C76592E1943922D965DDD10AEB107D /* Pods-RadioColorPicker_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RadioColorPicker_Example-acknowledgements.markdown"; sourceTree = ""; }; 9876B98180B2BFFF23FA385039F09B15 /* Pods-RadioColorPicker_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RadioColorPicker_Tests.debug.xcconfig"; sourceTree = ""; }; + 996536AFB43B8317544BABC0AFED347B /* RadioColorPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RadioColorPicker-umbrella.h"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9FF6E330A2B15543250275DCF8273947 /* Pods-RadioColorPicker_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RadioColorPicker_Tests-Info.plist"; sourceTree = ""; }; - A64C9C787761EBBED709E5B7BC4B8F5F /* RadioColorPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RadioColorPicker-umbrella.h"; sourceTree = ""; }; AB708E67EF3145296B1A4737F6F86342 /* Pods-RadioColorPicker_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RadioColorPicker_Example-acknowledgements.plist"; sourceTree = ""; }; BB9916A2EA3EEC89842DE901756A8ECD /* Pods-RadioColorPicker_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RadioColorPicker_Tests-dummy.m"; sourceTree = ""; }; + C56EE3402CEB7CC24C55FD8C06AF30D2 /* RadioColorPicker.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RadioColorPicker.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; C8DA8F09FC60BC719AC8FB252A08E4D0 /* Pods-RadioColorPicker_Example */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-RadioColorPicker_Example"; path = Pods_RadioColorPicker_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CABF81BD62405563BF506A8FB0D0FFF5 /* RadioColorPicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RadioColorPicker.release.xcconfig; sourceTree = ""; }; CDB02291939382E8BADB2EB4BC7914F5 /* Pods-RadioColorPicker_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RadioColorPicker_Example-frameworks.sh"; sourceTree = ""; }; - CE5E7F3B6F66986A630C1F8A6F417C2E /* RadioColorPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadioColorPicker.swift; path = Sources/RadioColorPicker.swift; sourceTree = ""; }; DEB6F1CCB169725C3FE38F33AA1CE975 /* Pods-RadioColorPicker_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RadioColorPicker_Example.debug.xcconfig"; sourceTree = ""; }; - E0213010D287417652642CE044091F77 /* RadioColorPicker.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = RadioColorPicker.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; E1495E05AC140FDAF4FA04784958402D /* Pods-RadioColorPicker_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RadioColorPicker_Tests-acknowledgements.plist"; sourceTree = ""; }; E7915501D91A2CA67E6F004CBAB9BE7F /* Pods-RadioColorPicker_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RadioColorPicker_Example-umbrella.h"; sourceTree = ""; }; - E9BC099A1C9D609455AC43569116B495 /* RadioColorPicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RadioColorPicker.modulemap; sourceTree = ""; }; + E8772102571C824506FA7AA155C8C66D /* RadioColorPicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RadioColorPicker-Info.plist"; sourceTree = ""; }; EA549E2075E568A169C8935775CCC0E0 /* Pods-RadioColorPicker_Tests */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-RadioColorPicker_Tests"; path = Pods_RadioColorPicker_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF3A4331701757182B908EAA57B88F0E /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + ECE928E680465F2774D97B6E571FA0BF /* RadioColorPicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RadioColorPicker.modulemap; sourceTree = ""; }; + EE4E8FBD0E063B259AF3DC058D9C4FD1 /* RadioColorPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RadioColorPicker-dummy.m"; sourceTree = ""; }; + FBE1D7E3D86B9BFE10EA20EB66682D13 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - C48D5AD3FC05C2CE7F831E6FD153C748 /* Frameworks */ = { + B885107C03345D8DD9AFC67EF67A656F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 548A69B3C756402A54B993E70811C400 /* Foundation.framework in Frameworks */, + B49313E07858A13EBED83155A994C79F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C871FE0AABE4ED2D57C3689D5E2CC11A /* Frameworks */ = { + C48D5AD3FC05C2CE7F831E6FD153C748 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 47CC347E6BB9680819353177B7CDBCDE /* Foundation.framework in Frameworks */, + 548A69B3C756402A54B993E70811C400 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -100,6 +102,33 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 369B202E04824852850B475BCAFB80E5 /* Support Files */ = { + isa = PBXGroup; + children = ( + ECE928E680465F2774D97B6E571FA0BF /* RadioColorPicker.modulemap */, + EE4E8FBD0E063B259AF3DC058D9C4FD1 /* RadioColorPicker-dummy.m */, + E8772102571C824506FA7AA155C8C66D /* RadioColorPicker-Info.plist */, + 706621CE2D11FEE846BBA25F7B938B80 /* RadioColorPicker-prefix.pch */, + 996536AFB43B8317544BABC0AFED347B /* RadioColorPicker-umbrella.h */, + 6200EE6401A37BA7A41E81FBE532ED1C /* RadioColorPicker.debug.xcconfig */, + CABF81BD62405563BF506A8FB0D0FFF5 /* RadioColorPicker.release.xcconfig */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/RadioColorPicker"; + sourceTree = ""; + }; + 565D7E3AC548997BF113E90BB10310F8 /* RadioColorPicker */ = { + isa = PBXGroup; + children = ( + 635E5D7E446E0335564E24561E5D42BC /* RadioColorPicker.swift */, + 7671D4085518068AE80991A467A76B6D /* RadioColorPickerCollectionViewCell.swift */, + 77F9FA1FD6A0E701661DE3F4355A4E4E /* Pod */, + 369B202E04824852850B475BCAFB80E5 /* Support Files */, + ); + name = RadioColorPicker; + path = ../..; + sourceTree = ""; + }; 578452D2E740E91742655AC8F1636D1F /* iOS */ = { isa = PBXGroup; children = ( @@ -118,6 +147,24 @@ name = Products; sourceTree = ""; }; + 7537BE26FB1DC0F428E5E022212A6FA0 /* Development Pods */ = { + isa = PBXGroup; + children = ( + 565D7E3AC548997BF113E90BB10310F8 /* RadioColorPicker */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + 77F9FA1FD6A0E701661DE3F4355A4E4E /* Pod */ = { + isa = PBXGroup; + children = ( + 59F32A90A157D056713A942D2A139F14 /* LICENSE */, + C56EE3402CEB7CC24C55FD8C06AF30D2 /* RadioColorPicker.podspec */, + FBE1D7E3D86B9BFE10EA20EB66682D13 /* README.md */, + ); + name = Pod; + sourceTree = ""; + }; 88E934D8C8C94CCD47AB393803C24595 /* Pods-RadioColorPicker_Tests */ = { isa = PBXGroup; children = ( @@ -134,17 +181,6 @@ path = "Target Support Files/Pods-RadioColorPicker_Tests"; sourceTree = ""; }; - 9598F3112AE222198AAE446E0DA976FB /* RadioColorPicker */ = { - isa = PBXGroup; - children = ( - CE5E7F3B6F66986A630C1F8A6F417C2E /* RadioColorPicker.swift */, - D4E118B2984533C238458EADC8BCE135 /* Pod */, - A8768A18374925F10290FA7486F6D8E2 /* Support Files */, - ); - name = RadioColorPicker; - path = ../..; - sourceTree = ""; - }; 9EE718C2B4258ABBF342181D8219C31A /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -154,34 +190,11 @@ name = "Targets Support Files"; sourceTree = ""; }; - A8768A18374925F10290FA7486F6D8E2 /* Support Files */ = { - isa = PBXGroup; - children = ( - E9BC099A1C9D609455AC43569116B495 /* RadioColorPicker.modulemap */, - 82A0DE0E315EA59CD25C30E092426D49 /* RadioColorPicker-dummy.m */, - 5923281D99CD13C00D30FEAEF07AD8A9 /* RadioColorPicker-Info.plist */, - 2728A6E73F84CDF7FB4084C57C821140 /* RadioColorPicker-prefix.pch */, - A64C9C787761EBBED709E5B7BC4B8F5F /* RadioColorPicker-umbrella.h */, - 91B100B127D2C36F54F13A7D6279F6E8 /* RadioColorPicker.debug.xcconfig */, - 3CEBD47BA8F1ECA5F3E780FCB48791FB /* RadioColorPicker.release.xcconfig */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/RadioColorPicker"; - sourceTree = ""; - }; - B4135920D89364D68EEFBC8756F90586 /* Development Pods */ = { - isa = PBXGroup; - children = ( - 9598F3112AE222198AAE446E0DA976FB /* RadioColorPicker */, - ); - name = "Development Pods"; - sourceTree = ""; - }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - B4135920D89364D68EEFBC8756F90586 /* Development Pods */, + 7537BE26FB1DC0F428E5E022212A6FA0 /* Development Pods */, D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 6D3619066247B719DB4E757DA93E56A2 /* Products */, 9EE718C2B4258ABBF342181D8219C31A /* Targets Support Files */, @@ -196,16 +209,6 @@ name = Frameworks; sourceTree = ""; }; - D4E118B2984533C238458EADC8BCE135 /* Pod */ = { - isa = PBXGroup; - children = ( - FF3A4331701757182B908EAA57B88F0E /* LICENSE */, - E0213010D287417652642CE044091F77 /* RadioColorPicker.podspec */, - 5C466F0B852F56EF64A992562E6D7008 /* README.md */, - ); - name = Pod; - sourceTree = ""; - }; ECB2BAD40A5A654DD9B9BECAEED0578C /* Pods-RadioColorPicker_Example */ = { isa = PBXGroup; children = ( @@ -234,19 +237,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C0BE139733FAE078F7405D2678140A37 /* Headers */ = { + 86F950AA6BBB4D231EEB2BB74E137525 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1041C7F3805D3C719A3E46D73DDB0CC7 /* Pods-RadioColorPicker_Tests-umbrella.h in Headers */, + DB9BA25E72EB050964C59EBF7CFE86A8 /* RadioColorPicker-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - F64E96DD63D6F3CEC0DAD1D71EB791E7 /* Headers */ = { + C0BE139733FAE078F7405D2678140A37 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4C2D13983CA2E264777B5F0C8FFDA5DE /* RadioColorPicker-umbrella.h in Headers */, + 1041C7F3805D3C719A3E46D73DDB0CC7 /* Pods-RadioColorPicker_Tests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -265,7 +268,7 @@ buildRules = ( ); dependencies = ( - C6BBDF5D550819AEEE6C067D74A59A2C /* PBXTargetDependency */, + FE255FE915CCF00E760BE268F8BD6427 /* PBXTargetDependency */, ); name = "Pods-RadioColorPicker_Tests"; productName = Pods_RadioColorPicker_Tests; @@ -284,7 +287,7 @@ buildRules = ( ); dependencies = ( - 7C5A5DFB01D30F0C46D59864DFAA90E9 /* PBXTargetDependency */, + 8F347D613566D489F66D45A674E09694 /* PBXTargetDependency */, ); name = "Pods-RadioColorPicker_Example"; productName = Pods_RadioColorPicker_Example; @@ -293,12 +296,12 @@ }; F174D5934760972A2A5B7D6365813ADA /* RadioColorPicker */ = { isa = PBXNativeTarget; - buildConfigurationList = 29215C47095C4CC82337B9722F6DE6B1 /* Build configuration list for PBXNativeTarget "RadioColorPicker" */; + buildConfigurationList = 347172766B1683BD519C07AEDE542727 /* Build configuration list for PBXNativeTarget "RadioColorPicker" */; buildPhases = ( - F64E96DD63D6F3CEC0DAD1D71EB791E7 /* Headers */, - 9EEF562043C7A4AB3321F42C73464911 /* Sources */, - C871FE0AABE4ED2D57C3689D5E2CC11A /* Frameworks */, - 66D63E60EE1EECBEC8FAD54C1AB1DACB /* Resources */, + 86F950AA6BBB4D231EEB2BB74E137525 /* Headers */, + 0251F54C6ECE8A19B830564A60435BF8 /* Sources */, + B885107C03345D8DD9AFC67EF67A656F /* Frameworks */, + D5C508F5E94B9C32B1E55D037B067867 /* Resources */, ); buildRules = ( ); @@ -346,14 +349,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 66D63E60EE1EECBEC8FAD54C1AB1DACB /* Resources */ = { + 9EB9EFAAD1B22304D3FFE5D413A195A7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 9EB9EFAAD1B22304D3FFE5D413A195A7 /* Resources */ = { + D5C508F5E94B9C32B1E55D037B067867 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -363,20 +366,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 860761527E3881849B98049C7631F483 /* Sources */ = { + 0251F54C6ECE8A19B830564A60435BF8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ABD7EBAA4950CD246BB7E28E801A4CD9 /* Pods-RadioColorPicker_Example-dummy.m in Sources */, + EFB0C7004C3A12BCE95E647BDABB0B68 /* RadioColorPicker.swift in Sources */, + 4C6922F67F97261CEBBE3F517FAE6FEE /* RadioColorPicker-dummy.m in Sources */, + 9C132FC19A42C846563D97DE1DEFDBC8 /* RadioColorPickerCollectionViewCell.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9EEF562043C7A4AB3321F42C73464911 /* Sources */ = { + 860761527E3881849B98049C7631F483 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 514AC826AA860AE4217EFFCB0FEAD86C /* RadioColorPicker.swift in Sources */, - BE76BB064EFFDF51065386EA93432004 /* RadioColorPicker-dummy.m in Sources */, + ABD7EBAA4950CD246BB7E28E801A4CD9 /* Pods-RadioColorPicker_Example-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -391,25 +395,26 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 7C5A5DFB01D30F0C46D59864DFAA90E9 /* PBXTargetDependency */ = { + 8F347D613566D489F66D45A674E09694 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RadioColorPicker; target = F174D5934760972A2A5B7D6365813ADA /* RadioColorPicker */; - targetProxy = 505AE089563EABD81823650055E6FC12 /* PBXContainerItemProxy */; + targetProxy = 7B3DA003C82139EF453B99D18BDB5AF9 /* PBXContainerItemProxy */; }; - C6BBDF5D550819AEEE6C067D74A59A2C /* PBXTargetDependency */ = { + FE255FE915CCF00E760BE268F8BD6427 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-RadioColorPicker_Example"; target = ECB106A8C73E8432E31F7DDC4E30B664 /* Pods-RadioColorPicker_Example */; - targetProxy = C51A830C3FF1328FE3D0AC1F512C6013 /* PBXContainerItemProxy */; + targetProxy = B82DE9D675D3DBEC37B90E5254BCE3D4 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 1B9C69336BC5D88AD2CE3F1E98658BB9 /* Release */ = { + 0D5DA9FFF8B76D19563E91ED34889E57 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3CEBD47BA8F1ECA5F3E780FCB48791FB /* RadioColorPicker.release.xcconfig */; + baseConfigurationReference = DEB6F1CCB169725C3FE38F33AA1CE975 /* Pods-RadioColorPicker_Example.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -420,28 +425,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/RadioColorPicker/RadioColorPicker-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker.modulemap"; - PRODUCT_MODULE_NAME = RadioColorPicker; - PRODUCT_NAME = RadioColorPicker; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 3F729A5E4133A27987B3725FF3F5CF26 /* Debug */ = { + 20FD62AD573855C72D6019EC1D80C89F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9876B98180B2BFFF23FA385039F09B15 /* Pods-RadioColorPicker_Tests.debug.xcconfig */; + baseConfigurationReference = 5494A9E36D2295A4088059FD96870ADE /* Pods-RadioColorPicker_Example.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; @@ -454,12 +459,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Tests/Pods-RadioColorPicker_Tests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Tests/Pods-RadioColorPicker_Tests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -468,14 +473,15 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 8ECC878BD9D6E7C31DC5E77FA3EA579E /* Release */ = { + 2E3E016C68C208F8DDE054E2BA177A15 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5494A9E36D2295A4088059FD96870ADE /* Pods-RadioColorPicker_Example.release.xcconfig */; + baseConfigurationReference = 56068BD0E7AE3FEEA8CFF834AD0D78F1 /* Pods-RadioColorPicker_Tests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; @@ -488,12 +494,12 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Tests/Pods-RadioColorPicker_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Tests/Pods-RadioColorPicker_Tests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -508,7 +514,72 @@ }; name = Release; }; - 903A0004D3E6651EFD5D2E16214D101B /* Release */ = { + 6C530ACEA2EAC3E672C4258784E2E011 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CABF81BD62405563BF506A8FB0D0FFF5 /* RadioColorPicker.release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RadioColorPicker/RadioColorPicker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker.modulemap"; + PRODUCT_MODULE_NAME = RadioColorPicker; + PRODUCT_NAME = RadioColorPicker; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7F7B33B79C95998CD5BF92A520F24D8D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6200EE6401A37BA7A41E81FBE532ED1C /* RadioColorPicker.debug.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RadioColorPicker/RadioColorPicker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker.modulemap"; + PRODUCT_MODULE_NAME = RadioColorPicker; + PRODUCT_NAME = RadioColorPicker; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -543,13 +614,16 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -558,19 +632,20 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = NO; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; - name = Release; + name = Debug; }; - B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */ = { + 9E406C6AAF85E580207CD97B0044DEAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -605,16 +680,13 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -623,22 +695,21 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; - name = Debug; + name = Release; }; - B810E42E0B658AC1F6090D2CBC9E9655 /* Release */ = { + F8EBD7AD3FFA8B47A2043F8695F1F7DC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 56068BD0E7AE3FEEA8CFF834AD0D78F1 /* Pods-RadioColorPicker_Tests.release.xcconfig */; + baseConfigurationReference = 9876B98180B2BFFF23FA385039F09B15 /* Pods-RadioColorPicker_Tests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; @@ -653,7 +724,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Tests/Pods-RadioColorPicker_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Tests/Pods-RadioColorPicker_Tests.modulemap"; @@ -665,73 +736,6 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - BD2A10BF81C4AD90F3B7C46D40576020 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 91B100B127D2C36F54F13A7D6279F6E8 /* RadioColorPicker.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/RadioColorPicker/RadioColorPicker-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RadioColorPicker/RadioColorPicker.modulemap"; - PRODUCT_MODULE_NAME = RadioColorPicker; - PRODUCT_NAME = RadioColorPicker; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D4A5712EFDA50E36D117CC5208E24C9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DEB6F1CCB169725C3FE38F33AA1CE975 /* Pods-RadioColorPicker_Example.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-RadioColorPicker_Example/Pods-RadioColorPicker_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; @@ -740,11 +744,11 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 29215C47095C4CC82337B9722F6DE6B1 /* Build configuration list for PBXNativeTarget "RadioColorPicker" */ = { + 347172766B1683BD519C07AEDE542727 /* Build configuration list for PBXNativeTarget "RadioColorPicker" */ = { isa = XCConfigurationList; buildConfigurations = ( - BD2A10BF81C4AD90F3B7C46D40576020 /* Debug */, - 1B9C69336BC5D88AD2CE3F1E98658BB9 /* Release */, + 7F7B33B79C95998CD5BF92A520F24D8D /* Debug */, + 6C530ACEA2EAC3E672C4258784E2E011 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -752,8 +756,8 @@ 3A08B0EC9321C832F318962F955E7535 /* Build configuration list for PBXNativeTarget "Pods-RadioColorPicker_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3F729A5E4133A27987B3725FF3F5CF26 /* Debug */, - B810E42E0B658AC1F6090D2CBC9E9655 /* Release */, + F8EBD7AD3FFA8B47A2043F8695F1F7DC /* Debug */, + 2E3E016C68C208F8DDE054E2BA177A15 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -761,8 +765,8 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - B4EFE046ACF8F37157F6E322C7FCFC28 /* Debug */, - 903A0004D3E6651EFD5D2E16214D101B /* Release */, + 8DE5143C03248BB6CD542DE3963D6F3A /* Debug */, + 9E406C6AAF85E580207CD97B0044DEAB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -770,8 +774,8 @@ 9726E223E2355E68BBBD1C1419C43CEC /* Build configuration list for PBXNativeTarget "Pods-RadioColorPicker_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - D4A5712EFDA50E36D117CC5208E24C9A /* Debug */, - 8ECC878BD9D6E7C31DC5E77FA3EA579E /* Release */, + 0D5DA9FFF8B76D19563E91ED34889E57 /* Debug */, + 20FD62AD573855C72D6019EC1D80C89F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/RadioColorPicker.xcodeproj/project.pbxproj b/Example/RadioColorPicker.xcodeproj/project.pbxproj index c24ee01..3b1618e 100644 --- a/Example/RadioColorPicker.xcodeproj/project.pbxproj +++ b/Example/RadioColorPicker.xcodeproj/project.pbxproj @@ -212,10 +212,12 @@ TargetAttributes = { 607FACCF1AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = 497P4L97SV; LastSwiftMigration = 0900; }; 607FACE41AFB9204008FA782 = { CreatedOnToolsVersion = 6.3.1; + DevelopmentTeam = 497P4L97SV; LastSwiftMigration = 0900; TestTargetID = 607FACCF1AFB9204008FA782; }; @@ -419,7 +421,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -465,7 +467,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -478,8 +480,9 @@ baseConfigurationReference = 30C2B1A65D548FF6855C747B /* Pods-RadioColorPicker_Example.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = 497P4L97SV; INFOPLIST_FILE = RadioColorPicker/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; @@ -494,8 +497,9 @@ baseConfigurationReference = 62C4A58EA8E583A5A0204C99 /* Pods-RadioColorPicker_Example.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = 497P4L97SV; INFOPLIST_FILE = RadioColorPicker/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MODULE_NAME = ExampleApp; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; @@ -509,6 +513,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = D44D39B84912000AC86F4C67 /* Pods-RadioColorPicker_Tests.debug.xcconfig */; buildSettings = { + DEVELOPMENT_TEAM = 497P4L97SV; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", @@ -518,7 +523,7 @@ "$(inherited)", ); INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -532,12 +537,13 @@ isa = XCBuildConfiguration; baseConfigurationReference = EE5A333195A1813B95FA212E /* Pods-RadioColorPicker_Tests.release.xcconfig */; buildSettings = { + DEVELOPMENT_TEAM = 497P4L97SV; FRAMEWORK_SEARCH_PATHS = ( "$(PLATFORM_DIR)/Developer/Library/Frameworks", "$(inherited)", ); INFOPLIST_FILE = Tests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Example/RadioColorPicker/AppDelegate.swift b/Example/RadioColorPicker/AppDelegate.swift index da4db62..9e35f2a 100644 --- a/Example/RadioColorPicker/AppDelegate.swift +++ b/Example/RadioColorPicker/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // RadioColorPicker // -// Created by SunneyG on 12/19/2022. -// Copyright (c) 2022 SunneyG. All rights reserved. +// Created by Wallaby on 12/19/2022. +// Copyright (c) 2022 Wallaby. All rights reserved. // import UIKit diff --git a/Example/RadioColorPicker/Base.lproj/Main.storyboard b/Example/RadioColorPicker/Base.lproj/Main.storyboard index b8562d3..c8b68a1 100644 --- a/Example/RadioColorPicker/Base.lproj/Main.storyboard +++ b/Example/RadioColorPicker/Base.lproj/Main.storyboard @@ -1,11 +1,10 @@ - - - - + + - + + @@ -18,13 +17,245 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/Contents.json index 7006c9e..2049132 100644 --- a/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/Contents.json @@ -1,53 +1,14 @@ { "images" : [ { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ios-marketing", - "size" : "1024x1024", - "scale" : "1x" + "filename" : "RadioColorPickerIcon.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" } ], "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 } } diff --git a/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/RadioColorPickerIcon.png b/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/RadioColorPickerIcon.png new file mode 100644 index 0000000..47ef113 Binary files /dev/null and b/Example/RadioColorPicker/Images.xcassets/AppIcon.appiconset/RadioColorPickerIcon.png differ diff --git a/Example/RadioColorPicker/Info.plist b/Example/RadioColorPicker/Info.plist index eb18faa..7303520 100644 --- a/Example/RadioColorPicker/Info.plist +++ b/Example/RadioColorPicker/Info.plist @@ -2,6 +2,8 @@ + UIUserInterfaceStyle + Light CFBundleDevelopmentRegion en CFBundleExecutable @@ -33,7 +35,11 @@ UISupportedInterfaceOrientations UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationPortrait diff --git a/Example/RadioColorPicker/ViewController.swift b/Example/RadioColorPicker/ViewController.swift index e4c0cca..84463b8 100644 --- a/Example/RadioColorPicker/ViewController.swift +++ b/Example/RadioColorPicker/ViewController.swift @@ -11,8 +11,121 @@ import RadioColorPicker class ViewController: UIViewController { + // MARK: - UI + + @IBOutlet weak var controlContainerView: UIView! + @IBOutlet weak var radioColorPicker: RadioColorPicker! + @IBOutlet weak var addColorButton: UIButton! + @IBOutlet weak var removeColorButton: UIButton! + @IBOutlet weak var selectedColorIndicatorLabel: UILabel! + + + // MARK: - LifeCycle + override func viewDidLoad() { super.viewDidLoad() + setup() + } + + + // MARK: - Setups + + private func setup() { + setupView() + } + + private func setupView() { + setupControlContainerView() + setupAddColorButton() + setupRemoveColorButton() + setupRadioColorPicker() + } + + private func setupControlContainerView() { + controlContainerView.layer.cornerRadius = 24 + controlContainerView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] + controlContainerView.layer.shadowColor = UIColor.black.cgColor + controlContainerView.layer.shadowOpacity = 0.1 + controlContainerView.layer.shadowOffset = .zero + controlContainerView.layer.shadowRadius = 20 + } + + private func setupAddColorButton() { + addColorButton.layer.cornerRadius = 24 + } + + private func setupRemoveColorButton() { + removeColorButton.layer.cornerRadius = 24 + removeColorButton.layer.borderWidth = 1 + removeColorButton.layer.borderColor = UIColor.systemRed.cgColor + } + + private func setupRadioColorPicker() { + radioColorPicker.addColor(.systemRed) + radioColorPicker.addColor(.systemOrange) + radioColorPicker.addColor(.systemYellow) + radioColorPicker.addColor(.systemGreen) + radioColorPicker.addColor(.systemBlue) + radioColorPicker.addColor(.systemPurple) + radioColorPicker.contentInset = .init(top: 20, leading: 24, bottom: 20, trailing: 24) + radioColorPicker.delegate = self + } + + + // MARK: - Actions + + @IBAction func didTapAddColorButton(_ sender: Any) { + let colors: [UIColor] = [.systemRed, .systemOrange,. systemYellow, .systemGreen, .systemBlue, .systemPurple, .systemGray] + radioColorPicker.addColor(colors.randomElement()!) + } + + @IBAction func didTapRemoveColorButton(_ sender: Any) { + radioColorPicker.removeColor() + } + + @IBAction func didChangeScrollDirectionValue(_ sender: UISegmentedControl) { + if sender.selectedSegmentIndex == 0 { + radioColorPicker.scrollDirection = .horizontal + } else { + radioColorPicker.scrollDirection = .vertical + } + } + + @IBAction func didChangeMultipleSelectionValue(_ sender: UISwitch) { + if sender.isOn { + radioColorPicker.allowsMultipleSelection = true + } else { + radioColorPicker.allowsMultipleSelection = false + } + } + + @IBAction func didChangeHorizontalSpacingValue(_ sender: UISlider) { + let value = CGFloat(sender.value) + radioColorPicker.horizontalSpacing = value + } + + @IBAction func didChangeVerticalSpacingValue(_ sender: UISlider) { + let value = CGFloat(sender.value) + radioColorPicker.verticalSpacing = value + } + + @IBAction func didChangePickerBorderWidthValue(_ sender: UISlider) { + let value = CGFloat(sender.value) + radioColorPicker.borderWidth = value + } + + @IBAction func didChangePickerBorderSpacingValue(_ sender: UISlider) { + let value = CGFloat(sender.value) + radioColorPicker.borderSpacing = value } } +extension ViewController: RadioColorPickerDelegate { + func didItemSelected(index: Int, color: UIColor) { + selectedColorIndicatorLabel.text = "Selected Indices\n\(radioColorPicker.selectedIndices)" + } + + func didItemDeselected(index: Int, color: UIColor) { + selectedColorIndicatorLabel.text = "Selected Indices\n\(radioColorPicker.selectedIndices)" + } +} diff --git a/Example/Tests/Tests.swift b/Example/Tests/Tests.swift index 9379719..be758c2 100644 --- a/Example/Tests/Tests.swift +++ b/Example/Tests/Tests.swift @@ -1,5 +1,5 @@ import XCTest -import RadioColorPicker +//import RadioColorPicker class Tests: XCTestCase { diff --git a/Package.swift b/Package.swift index 5243144..2532d43 100644 --- a/Package.swift +++ b/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "RadioColorPicker", - platforms: [.iOS(.v11)], + platforms: [.iOS(.v13)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( diff --git a/README.md b/README.md index 5f30669..af431e4 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,32 @@ -# RadioColorPicker +
+ +

RadioColorPicker

+ + [![CI Status](https://img.shields.io/travis/SunneyG/RadioColorPicker.svg?style=flat)](https://travis-ci.org/SunneyG/RadioColorPicker) + [![Version](https://img.shields.io/cocoapods/v/RadioColorPicker.svg?style=flat)](https://cocoapods.org/pods/RadioColorPicker) + [![License](https://img.shields.io/cocoapods/l/RadioColorPicker.svg?style=flat)](https://cocoapods.org/pods/RadioColorPicker) + [![Platform](https://img.shields.io/cocoapods/p/RadioColorPicker.svg?style=flat)](https://cocoapods.org/pods/RadioColorPicker) + ![SwiftPM](https://img.shields.io/badge/SPM-supported-DE5C43.svg?style=flat) +
-[![CI Status](https://img.shields.io/travis/SunneyG/RadioColorPicker.svg?style=flat)](https://travis-ci.org/SunneyG/RadioColorPicker) -[![Version](https://img.shields.io/cocoapods/v/RadioColorPicker.svg?style=flat)](https://cocoapods.org/pods/RadioColorPicker) -[![License](https://img.shields.io/cocoapods/l/RadioColorPicker.svg?style=flat)](https://cocoapods.org/pods/RadioColorPicker) -[![Platform](https://img.shields.io/cocoapods/p/RadioColorPicker.svg?style=flat)](https://cocoapods.org/pods/RadioColorPicker) +
## Example + + + To run the example project, clone the repo, and run `pod install` from the Example directory first. +
+ ## Requirements -## Installation +iOS 13.0+ +
+ +## Installation RadioColorPicker is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: @@ -20,10 +34,70 @@ it, simply add the following line to your Podfile: pod 'RadioColorPicker' ``` +
+ +## Rx Extension +If you are using rxswift, you can use delegate as Observable with the code below. +```swift + +import UIKit +import RadioColorPicker + +import RxSwift +import RxCocoa + +class RxRadioColorPickerDelegateProxy: DelegateProxy, DelegateProxyType, RadioColorPickerDelegate { + static func registerKnownImplementations() { + self.register { radioColorPicker -> RxRadioColorPickerDelegateProxy in + RxRadioColorPickerDelegateProxy(parentObject: radioColorPicker, delegateProxy: self) + } + } + + static func currentDelegate(for object: RadioColorPicker) -> RadioColorPickerDelegate? { + return object.delegate + } + + static func setCurrentDelegate(_ delegate: RadioColorPickerDelegate?, to object: RadioColorPicker) { + object.delegate = delegate + } +} + +extension Reactive where Base: RadioColorPicker { + var delegate: RxRadioColorPickerDelegateProxy { + return RxRadioColorPickerDelegateProxy.proxy(for: self.base) + } + + var selectedIndex: Observable { + return delegate.sentMessage(#selector(RadioColorPickerDelegate.didItemSelected(index:color:))) + .map { value in + if let selectedIndex = value.first as? Int { + return selectedIndex + } + return nil + } + } + + var selectedColor: Observable { + return delegate.sentMessage(#selector(RadioColorPickerDelegate.didItemSelected(index:color:))) + .map { value in + if let selectedColor = value[1] as? UIColor { + return selectedColor + } + return nil + } + } +} + +``` + +
+ ## Author Wallaby, avocado34.131@gmail.com +
+ ## License RadioColorPicker is available under the MIT license. See the LICENSE file for more info. diff --git a/RadioColorPicker.podspec b/RadioColorPicker.podspec index e6af603..5f533e8 100644 --- a/RadioColorPicker.podspec +++ b/RadioColorPicker.podspec @@ -8,8 +8,9 @@ Pod::Spec.new do |s| s.name = 'RadioColorPicker' - s.version = '0.1.0' - s.summary = 'A short description of RadioColorPicker.' + s.version = '0.1.2' + s.summary = '사용하기 쉽고 알잘딱 할 줄 아는 ColorPicker' + s.swift_versions = '5.0' # This description is used to generate tags and improve search results. # * Think: What does it do? Why did you write it? What is the focus? @@ -28,7 +29,7 @@ TODO: Add long description of the pod here. s.source = { :git => 'https://github.com/WallabyStuff/RadioColorPicker.git', :tag => s.version.to_s } # s.social_media_url = 'https://twitter.com/' - s.ios.deployment_target = '11.0' + s.ios.deployment_target = '13.0' s.source_files = 'Sources/**/*' diff --git a/RadioColorPicker/Assets/.gitkeep b/RadioColorPicker/Assets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/RadioColorPicker/Classes/.gitkeep b/RadioColorPicker/Classes/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/RadioColorPicker/Classes/ReplaceMe.swift b/RadioColorPicker/Classes/ReplaceMe.swift deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/RadioColorPicker.swift b/Sources/RadioColorPicker.swift index 1997315..3f338b2 100644 --- a/Sources/RadioColorPicker.swift +++ b/Sources/RadioColorPicker.swift @@ -1,6 +1,311 @@ -public struct RadioColorPicker { - public private(set) var text = "Hello, World!" +// +// RadioColorPicker.swift +// RadioColorPicker +// +// Created by Wallaby on 12/19/2022. +// Copyright (c) 2022 Wallaby. All rights reserved. +// + +import UIKit + +public enum RadioColorPickerAlignment { + case leading + case center + case trailing +} + +public enum RadioColorPickerScrollDirection { + case vertical + case horizontal +} + +@objc public protocol RadioColorPickerDelegate { + @objc optional func didItemSelected(index: Int, color: UIColor) + @objc optional func didItemDeselected(index: Int, color: UIColor) +} + +@IBDesignable +open class RadioColorPicker: UIView { + + // MARK: - Constants + + struct Metric { + static let defaultPickerSize: CGFloat = 36 + static let defaultVerticalSpacing: CGFloat = 12 + static let defaultHorizontalSpacing: CGFloat = 8 + } + + + // MARK: - Properties + + open var delegate: RadioColorPickerDelegate? + open var colors = [UIColor]() + open var selectedColors: [UIColor] { + var selectedColors = [UIColor]() + for selectedIndexPath in collectionView.indexPathsForSelectedItems ?? [] { + selectedColors.append(colors[selectedIndexPath.row]) + } + return selectedColors + } + open var selectedIndices: [Int] { + var indices = [Int]() + for selectedIndexPath in collectionView.indexPathsForSelectedItems ?? [] { + indices.append(selectedIndexPath.row) + } + return indices + } + open var pickerSize = Metric.defaultPickerSize { + didSet { + if oldValue == pickerSize { return } + updateLayout() + } + } + open var verticalSpacing = Metric.defaultVerticalSpacing { + didSet { + if oldValue == verticalSpacing { return } + updateLayout() + } + } + open var horizontalSpacing = Metric.defaultHorizontalSpacing { + didSet { + if oldValue == horizontalSpacing { return } + updateLayout() + } + } + open var scrollDirection: RadioColorPickerScrollDirection = .horizontal { + didSet { + if oldValue == scrollDirection { return } + updateLayout() + } + } + open var alignment: RadioColorPickerAlignment = .leading { + didSet { + if oldValue == alignment { return } + updateLayout() + } + } + open var borderSpacing = RadioColorPickerCollectionViewCell.Metric.defaultBorderSpacing { + didSet { reloadDataSelected() } + } + open var borderWidth = RadioColorPickerCollectionViewCell.Metric.defaultBorderWidth { + didSet { reloadDataSelected() } + } + open var contentInset: NSDirectionalEdgeInsets = .init() { + didSet { + if oldValue == contentInset { return } + updateLayout() + } + } + open var allowsMultipleSelection: Bool = false { + didSet { + collectionView.allowsMultipleSelection = allowsMultipleSelection + } + } + open override var intrinsicContentSize: CGSize { + let width = CGFloat(colors.count) * pickerSize + contentInset.leading + contentInset.trailing + CGFloat(colors.count) * horizontalSpacing + let height = pickerSize + contentInset.top + contentInset.bottom + return .init(width: width, height: height) + } + + + // MARK: - UI + + private var collectionView = UICollectionView( + frame: .zero, + collectionViewLayout: collectionViewLayoutFactory()) + + + // MARK: - Initializers + + public override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + public convenience init(colors: [UIColor]) { + self.init(frame: .zero) + self.colors = colors + } + + public required init?(coder: NSCoder) { + super.init(coder: coder) + setup() + } + + private static func collectionViewLayoutFactory( + pickerSize: CGFloat = Metric.defaultPickerSize, + verticalSpacing: CGFloat = Metric.defaultVerticalSpacing, + horizontalSpacing: CGFloat = Metric.defaultHorizontalSpacing, + scrollDirection: RadioColorPickerScrollDirection = .horizontal, + alignment: RadioColorPickerAlignment = .leading, + contentInset: NSDirectionalEdgeInsets = .init() + ) -> UICollectionViewCompositionalLayout { + // Item + let itemSize = NSCollectionLayoutSize( + widthDimension: .absolute(pickerSize), + heightDimension: .absolute(pickerSize)) + let item = NSCollectionLayoutItem(layoutSize: itemSize) + + // Group + let widthDimension: NSCollectionLayoutDimension = scrollDirection == .vertical ? .fractionalWidth(1) : .absolute(pickerSize) + let groupSize = NSCollectionLayoutSize( + widthDimension: widthDimension, + heightDimension: .absolute(pickerSize)) + let group = NSCollectionLayoutGroup.horizontal( + layoutSize: groupSize, + subitems: [item]) + group.interItemSpacing = scrollDirection == .vertical ? .flexible(horizontalSpacing) : .fixed(horizontalSpacing) + group.edgeSpacing = scrollDirection == .vertical ? + .init( + leading: .flexible(horizontalSpacing / 2), + top: .fixed(0), + trailing: .flexible(horizontalSpacing / 2), + bottom: .fixed(0)) + : + .init( + leading: .fixed(horizontalSpacing / 2), + top: .fixed(0), + trailing: .fixed(horizontalSpacing / 2), + bottom: .fixed(0)) + + // Section + let section = NSCollectionLayoutSection(group: group) + section.interGroupSpacing = scrollDirection == .vertical ? verticalSpacing : .zero + section.contentInsets = contentInset + section.orthogonalScrollingBehavior = scrollDirection == .vertical ? .none : .continuous + + // Layout + let layout = UICollectionViewCompositionalLayout(section: section) + return layout + } + + + // MARK: - Setups + + private func setup() { + setupView() + invalidateIntrinsicContentSize() + } + + private func setupView() { + setupCollectionView() + } + + private func setupCollectionView() { + addSubview(collectionView) + collectionView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + collectionView.topAnchor.constraint(equalTo: topAnchor), + collectionView.leadingAnchor.constraint(equalTo: leadingAnchor), + collectionView.trailingAnchor.constraint(equalTo: trailingAnchor), + collectionView.bottomAnchor.constraint(equalTo: bottomAnchor) + ]) + + collectionView.register( + RadioColorPickerCollectionViewCell.self, + forCellWithReuseIdentifier: RadioColorPickerCollectionViewCell.identifier) + collectionView.dataSource = self + collectionView.delegate = self + collectionView.backgroundColor = .clear + collectionView.alwaysBounceHorizontal = false + collectionView.alwaysBounceVertical = false + collectionView.allowsMultipleSelection = allowsMultipleSelection + } + + + // MARK: - Methods + + open func addColor(_ color: UIColor) { + colors.append(color) + updateLayout() + } + + open func removeColor() { + if colors.isEmpty { return } + let indexPath = IndexPath(item: colors.count - 1, section: 0) + collectionView.deselectItem(at: indexPath, animated: false) + colors.removeLast() + updateLayout() + } + + open func removeColor(at index: Int) { + if colors.count <= index || index < 0 { return } + let indexPath = IndexPath(item: index, section: 0) + collectionView.deselectItem(at: indexPath, animated: false) + colors.remove(at: index) + updateLayout() + } + + open func setSelected(index: Int) { + let indexPath = IndexPath(item: index, section: 0) + switch scrollDirection { + case .vertical: + collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredVertically) + case .horizontal: + collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally) + } + } + + private func updateLayout() { + let newLayout = Self.collectionViewLayoutFactory( + pickerSize: pickerSize, + verticalSpacing: verticalSpacing, + horizontalSpacing: horizontalSpacing, + scrollDirection: scrollDirection, + alignment: alignment, + contentInset: contentInset) + collectionView.collectionViewLayout = newLayout + reloadDataSelected() + collectionView.collectionViewLayout.invalidateLayout() + invalidateIntrinsicContentSize() + } + + private func reloadDataSelected() { + let selectedIndexPaths = collectionView.indexPathsForSelectedItems ?? [] + collectionView.reloadData() + + for indexPath in selectedIndexPaths { + collectionView.selectItem(at: indexPath, animated: false, scrollPosition: []) + } + } +} + + +// MARK: - CollectionView Delegate, DataSources + +extension RadioColorPicker: UICollectionViewDataSource, UICollectionViewDelegate { + public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return colors.count + } + + public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: RadioColorPickerCollectionViewCell.identifier, + for: indexPath) as? RadioColorPickerCollectionViewCell else { + return UICollectionViewCell() + } + + // Preserve selection state + if let selectedIndexPaths = collectionView.indexPathsForSelectedItems { + if selectedIndexPaths.contains(indexPath) { + collectionView.selectItem(at: indexPath, animated: true, scrollPosition: []) + } + } + + cell.configure( + color: colors[indexPath.row], + borderSpacing: borderSpacing, + borderWidth: borderWidth) + return cell + } + + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let index = indexPath.row + delegate?.didItemSelected?(index: index, color: colors[index]) + } - public init() { + public func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { + let index = indexPath.row + delegate?.didItemDeselected?(index: index, color: colors[index]) } } diff --git a/Sources/RadioColorPickerCollectionViewCell.swift b/Sources/RadioColorPickerCollectionViewCell.swift new file mode 100644 index 0000000..72ae75d --- /dev/null +++ b/Sources/RadioColorPickerCollectionViewCell.swift @@ -0,0 +1,209 @@ +// +// RadioColorPickerCollectionViewCell.swift +// RadioColorPicker +// +// Created by Wallaby on 2022/12/23. +// Copyright (c) 2022 Wallaby. All rights reserved. +// + +import UIKit + +public class RadioColorPickerCollectionViewCell: UICollectionViewCell { + + // MARK: - Constants + + static let identifier = "RadioColorPickerCell" + struct Metric { + static let animationDuration: CGFloat = 0.4 + static let animationDelay: CGFloat = 0 + static let springDamping: CGFloat = 0.6 + static let initialSpringVelocity: CGFloat = 0.8 + static let defaultBorderSpacing: CGFloat = 2 + static let defaultBorderWidth: CGFloat = 1.5 + } + + + // MARK: - Properties + + private var oldFrame: CGRect = .zero + open override var isSelected: Bool { + willSet { + if isSelected == newValue { return } + newValue ? setSelected(animation: true) : setDeselected(animation: true) + } + } + private var animationDuration = Metric.animationDuration + private var animationDelay = Metric.animationDelay + private var springDamping = Metric.springDamping + private var initialSpringVelocity = Metric.initialSpringVelocity + private var borderSpacing = Metric.defaultBorderSpacing { + willSet { + updateView() + } + } + private var borderWidth = Metric.defaultBorderWidth { + willSet { + outerStrokeView.layer.borderWidth = newValue + updateView() + } + } + private var color: UIColor = .systemBlue { + willSet { + outerStrokeView.layer.borderColor = newValue.cgColor + innerCircleView.backgroundColor = newValue + } + } + private var totalSpacing: CGFloat { + return borderWidth + borderSpacing + } + + + // MARK: - UI + + private let innerCircleView = UIView() + private var innerCircleTopConstraint: NSLayoutConstraint! + private var innerCircleLeadingConstraint: NSLayoutConstraint! + private var innerCircleTrailingConstraint: NSLayoutConstraint! + private var innerCircleBottomConstraint: NSLayoutConstraint! + private var outerStrokeView = UIView() + + + // MARK: - Initializers + + public override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + public required init?(coder: NSCoder) { + super.init(coder: coder) + setup() + } + + public override func layoutSubviews() { + super.layoutSubviews() + if oldFrame != frame { + oldFrame = frame + updateView() + } + } + + + // MARK: - LifeCyle + + open override func prepareForReuse() { + super.prepareForReuse() + if isSelected { + setSelected(animation: false) + } else { + setDeselected(animation: false) + } + } + + + // MARK: - Setups + + private func setup() { + setupView() + } + + private func setupView() { + clipsToBounds = false + setupOuterStrokeView() + setupInnerCircleView() + } + + private func setupOuterStrokeView() { + addSubview(outerStrokeView) + outerStrokeView.translatesAutoresizingMaskIntoConstraints = false + outerStrokeView.layer.borderWidth = borderWidth + NSLayoutConstraint.activate([ + outerStrokeView.topAnchor.constraint(equalTo: self.topAnchor), + outerStrokeView.leadingAnchor.constraint(equalTo: self.leadingAnchor), + outerStrokeView.trailingAnchor.constraint(equalTo: self.trailingAnchor), + outerStrokeView.bottomAnchor.constraint(equalTo: self.bottomAnchor) + ]) + outerStrokeView.layer.borderWidth = borderWidth + outerStrokeView.layer.borderColor = color.cgColor + outerStrokeView.backgroundColor = .clear + outerStrokeView.isUserInteractionEnabled = false + DispatchQueue.main.async { + self.outerStrokeView.layer.cornerRadius = self.outerStrokeView.frame.width / 2 + } + } + + private func setupInnerCircleView() { + addSubview(innerCircleView) + innerCircleView.translatesAutoresizingMaskIntoConstraints = false + innerCircleTopConstraint = innerCircleView.topAnchor + .constraint(equalTo: topAnchor) + innerCircleLeadingConstraint = innerCircleView.leadingAnchor + .constraint(equalTo: leadingAnchor) + innerCircleTrailingConstraint = innerCircleView.trailingAnchor + .constraint(equalTo: trailingAnchor) + innerCircleBottomConstraint = innerCircleView.bottomAnchor + .constraint(equalTo: bottomAnchor) + NSLayoutConstraint.activate([ + innerCircleTopConstraint, + innerCircleLeadingConstraint, + innerCircleTrailingConstraint, + innerCircleBottomConstraint + ]) + innerCircleView.backgroundColor = color + innerCircleView.isUserInteractionEnabled = false + innerCircleView.layer.cornerRadius = self.innerCircleView.frame.width / 2 + } + + + // MARK: - Methods + + public func configure( + color: UIColor, + borderSpacing: CGFloat, + borderWidth: CGFloat) { + self.color = color + self.borderSpacing = borderSpacing + self.borderWidth = borderWidth + } + + private func setSelected(animation: Bool = true) { + let duration = animation ? animationDuration : 0 + setInnerCircleSpacing(common: totalSpacing) + UIView.animate( + withDuration: duration, + delay: animationDelay, + usingSpringWithDamping: springDamping, + initialSpringVelocity: initialSpringVelocity) { + self.outerStrokeView.layer.borderWidth = self.borderWidth + self.innerCircleView.layer.cornerRadius = (self.outerStrokeView.frame.width - self.totalSpacing * 2) / 2 + self.layoutIfNeeded() + } + } + + private func setDeselected(animation: Bool = true) { + let duration = animation ? animationDuration : 0 + setInnerCircleSpacing(common: 0) + UIView.animate( + withDuration: duration, + delay: animationDelay, + usingSpringWithDamping: springDamping, + initialSpringVelocity: initialSpringVelocity) { + self.outerStrokeView.layer.borderWidth = 0 + self.innerCircleView.layer.cornerRadius = self.outerStrokeView.frame.width / 2 + self.layoutIfNeeded() + } + } + + private func setInnerCircleSpacing(common: CGFloat) { + innerCircleTopConstraint.constant = common + innerCircleLeadingConstraint.constant = common + innerCircleTrailingConstraint.constant = -common + innerCircleBottomConstraint.constant = -common + } + + private func updateView() { + if isSelected { setInnerCircleSpacing(common: borderSpacing + borderWidth) } + outerStrokeView.layer.cornerRadius = outerStrokeView.frame.width / 2 + innerCircleView.layer.cornerRadius = innerCircleView.frame.width / 2 + } +}