diff --git a/Example/Podfile.lock b/Example/Podfile.lock index d4979fc..212964d 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - ValidationTextField (0.1.0) + - ValidationTextField (0.1.1) DEPENDENCIES: - ValidationTextField (from `../`) @@ -9,7 +9,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - ValidationTextField: 0a6eff7608ad7f556fae64ebf97783fc10724c48 + ValidationTextField: ecef135e7130fb1e6fcfeff0ec0a7db3eeac4d24 PODFILE CHECKSUM: 705b7a81684f9ddfd899644e1236fc38520f34ad diff --git a/Example/Pods/Local Podspecs/ValidationTextField.podspec.json b/Example/Pods/Local Podspecs/ValidationTextField.podspec.json index dcaf8bc..be988c8 100644 --- a/Example/Pods/Local Podspecs/ValidationTextField.podspec.json +++ b/Example/Pods/Local Podspecs/ValidationTextField.podspec.json @@ -1,22 +1,24 @@ { "name": "ValidationTextField", - "version": "0.1.0", - "summary": "A short description of ValidationTextField.", - "description": "TODO: Add long description of the pod here.", - "homepage": "https://github.com/devikkim@gmail.com/ValidationTextField", + "version": "0.1.1", + "summary": "This TextField for Validation ( complete or error )", + "description": "'This TextField for Validation ( complete or error )'", + "homepage": "https://github.com/devikkim/ValidationTextField.git", "license": { - "type": "MIT", + "type": "Apache 2.0", "file": "LICENSE" }, "authors": { "devikkim@gmail.com": "devikkim@gmail.com" }, "source": { - "git": "https://github.com/devikkim@gmail.com/ValidationTextField.git", - "tag": "0.1.0" + "git": "https://github.com/devikkim/ValidationTextField.git", + "tag": "0.1.1" }, "platforms": { "ios": "8.0" }, - "source_files": "ValidationTextField/Classes/**/*" + "swift_version": "4.0", + "source_files": "ValidationTextField/Classes/**/*", + "resources": "ValidationTextField/Assets/*.png" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index d4979fc..212964d 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,5 +1,5 @@ PODS: - - ValidationTextField (0.1.0) + - ValidationTextField (0.1.1) DEPENDENCIES: - ValidationTextField (from `../`) @@ -9,7 +9,7 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - ValidationTextField: 0a6eff7608ad7f556fae64ebf97783fc10724c48 + ValidationTextField: ecef135e7130fb1e6fcfeff0ec0a7db3eeac4d24 PODFILE CHECKSUM: 705b7a81684f9ddfd899644e1236fc38520f34ad diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index f5df996..4d6988a 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -8,12 +8,14 @@ /* Begin PBXBuildFile section */ 0B04ED7431B6EDD02749D72ED36A31D7 /* Pods-ValidationTextField_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BC96540E7F4732096C4B016C482C5496 /* Pods-ValidationTextField_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12D68474A37AC0D00F7FFACE0E0CE634 /* ValidationTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121CC89A44DFFBA5B796A0A797AAB2A7 /* ValidationTextField.swift */; }; - 3E347EADCC5A5AC8BF3F6F3E8E956E6F /* ValidationTextField-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AF0BF6E46110A46A7A479094B903D475 /* ValidationTextField-dummy.m */; }; - 4CBD417C097533E8414AFEE6E6EB57B0 /* ValidationTextField-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DB9251DFBA56FCD8AB0D34C6255A24FB /* ValidationTextField-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12D68474A37AC0D00F7FFACE0E0CE634 /* ValidationTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF2CE532E5FCEFE2D82D34A02AEB4BC3 /* ValidationTextField.swift */; }; + 1C6DB809C0E0EEFAB122B82EF2B2AE06 /* success.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD14F99A467C39B391EEA084D5D415 /* success.png */; }; + 3E347EADCC5A5AC8BF3F6F3E8E956E6F /* ValidationTextField-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E5B949545CA1BBC15BA7DE642D173E5D /* ValidationTextField-dummy.m */; }; + 4CBD417C097533E8414AFEE6E6EB57B0 /* ValidationTextField-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B6FAC2E04FF9A4D7F2D3BA880B766D3 /* ValidationTextField-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 53B4B73EDB17321989200C850FB054A8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; 5632CE96296712504CCA5BF2ECEB600F /* Pods-ValidationTextField_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 046B56879D979323766A84419CF2C647 /* Pods-ValidationTextField_Example-dummy.m */; }; 641606713B018D165B8D2896FDFCF993 /* Pods-ValidationTextField_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B67B9DA4598C3FA308641E99615ECD12 /* Pods-ValidationTextField_Tests-dummy.m */; }; + B47DEFA46C08EC00F935FF76AB3B1A42 /* error.png in Resources */ = {isa = PBXBuildFile; fileRef = 7E5C709DB5B4EEC23BDE514D7BD5C57D /* error.png */; }; C2377E4F7BA4FECDC6E7EA535DB4E806 /* Pods-ValidationTextField_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B0039FBBAA3099D73375FC4A70FAF7BC /* Pods-ValidationTextField_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; C4CABB2BAA504241EF12D17BC1334777 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; D2E398B30F7BC3FE617772D65B895CF9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */; }; @@ -39,35 +41,37 @@ /* Begin PBXFileReference section */ 046B56879D979323766A84419CF2C647 /* Pods-ValidationTextField_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ValidationTextField_Example-dummy.m"; sourceTree = ""; }; 05F8D191091F7B89CD3AE3AB1E3E21DA /* Pods-ValidationTextField_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ValidationTextField_Example-acknowledgements.plist"; sourceTree = ""; }; - 0DA7E69CEB0D2B3397EE8CF2378F24D3 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 121CC89A44DFFBA5B796A0A797AAB2A7 /* ValidationTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValidationTextField.swift; path = ValidationTextField/Classes/ValidationTextField.swift; sourceTree = ""; }; 18479AD872173580C8A492EAC98446FF /* Pods_ValidationTextField_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ValidationTextField_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2A92EA0AD116AC89528E9F0C68E35C88 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 3313712AF13F960AC9968B1E0E040282 /* Pods-ValidationTextField_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ValidationTextField_Example.debug.xcconfig"; sourceTree = ""; }; 400BF197973118AC86B9D5EF934188B7 /* Pods-ValidationTextField_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ValidationTextField_Example.modulemap"; sourceTree = ""; }; + 439F576FB18A95B9267EC57B6AD1998D /* ValidationTextField.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ValidationTextField.modulemap; sourceTree = ""; }; 4D5769716FD9B61E9664A40CFB18B1DD /* Pods-ValidationTextField_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ValidationTextField_Tests-acknowledgements.plist"; sourceTree = ""; }; 4D6B7811E5DA0D98CC4A5F957757A0A9 /* ValidationTextField.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ValidationTextField.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4E8C2A18BCD4D75FAE3643EA8FD28E37 /* ValidationTextField-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ValidationTextField-Info.plist"; sourceTree = ""; }; 51A4B5FC8EBECEC1ABDBF3516412DD50 /* Pods-ValidationTextField_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ValidationTextField_Example-acknowledgements.markdown"; sourceTree = ""; }; - 5C11F57D7B631575234BFB31C6617594 /* ValidationTextField.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ValidationTextField.modulemap; sourceTree = ""; }; + 7E5C709DB5B4EEC23BDE514D7BD5C57D /* error.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = error.png; path = ValidationTextField/Assets/error.png; sourceTree = ""; }; 81413869B558F5C0F7731BFC14AC7DF6 /* Pods-ValidationTextField_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ValidationTextField_Tests-acknowledgements.markdown"; sourceTree = ""; }; + 82314D7FCDD0851E52C611B9D767F767 /* ValidationTextField.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = ValidationTextField.podspec; sourceTree = ""; tabWidth = 2; }; 8495CC61D80C053D4A245D8CB3E7F018 /* Pods-ValidationTextField_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ValidationTextField_Example.release.xcconfig"; sourceTree = ""; }; 8FD89C6E81F65A9D05634A9939E084E8 /* Pods-ValidationTextField_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ValidationTextField_Example-Info.plist"; sourceTree = ""; }; - 9542B0DDAEFF720700AE48896922FC82 /* ValidationTextField-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ValidationTextField-Info.plist"; sourceTree = ""; }; + 9B6FAC2E04FF9A4D7F2D3BA880B766D3 /* ValidationTextField-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ValidationTextField-umbrella.h"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9E54D9E6D2A4350A7A73E14843ACCCB7 /* Pods-ValidationTextField_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ValidationTextField_Tests-Info.plist"; sourceTree = ""; }; - 9F0F8F118E973912D4E1309A176EA8DB /* ValidationTextField.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ValidationTextField.xcconfig; sourceTree = ""; }; ABCB9C9B6DA53B0E45EEB8176106A1CC /* Pods-ValidationTextField_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ValidationTextField_Tests.modulemap"; sourceTree = ""; }; - AF0BF6E46110A46A7A479094B903D475 /* ValidationTextField-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ValidationTextField-dummy.m"; sourceTree = ""; }; B0039FBBAA3099D73375FC4A70FAF7BC /* Pods-ValidationTextField_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ValidationTextField_Example-umbrella.h"; sourceTree = ""; }; B67B9DA4598C3FA308641E99615ECD12 /* Pods-ValidationTextField_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ValidationTextField_Tests-dummy.m"; sourceTree = ""; }; + B9DCD6B591513A5FF553BF50CB87668C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; BC96540E7F4732096C4B016C482C5496 /* Pods-ValidationTextField_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ValidationTextField_Tests-umbrella.h"; sourceTree = ""; }; BDCC6A5F8B90712EB8CFCA58EC93EF61 /* Pods_ValidationTextField_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ValidationTextField_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BFA61208F755962A6E338895C383FAB9 /* ValidationTextField-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ValidationTextField-prefix.pch"; sourceTree = ""; }; - C91F2DA4B25B4CAFB7F5156172EA0768 /* ValidationTextField.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = ValidationTextField.podspec; sourceTree = ""; tabWidth = 2; }; + BF2CE532E5FCEFE2D82D34A02AEB4BC3 /* ValidationTextField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValidationTextField.swift; path = ValidationTextField/Classes/ValidationTextField.swift; sourceTree = ""; }; CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; D1EEAE99F88BEE938A8519799BF4E68C /* Pods-ValidationTextField_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ValidationTextField_Tests.release.xcconfig"; sourceTree = ""; }; D77826EFAB1DB9287FD93C017752DDAA /* Pods-ValidationTextField_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ValidationTextField_Tests.debug.xcconfig"; sourceTree = ""; }; - DB9251DFBA56FCD8AB0D34C6255A24FB /* ValidationTextField-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ValidationTextField-umbrella.h"; sourceTree = ""; }; - E4F474B5307AA99DCC494FFCFB7A0BF7 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + D79C7A5DA3B7CAA4E7DFC569136844CB /* ValidationTextField.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ValidationTextField.xcconfig; sourceTree = ""; }; + DABD14F99A467C39B391EEA084D5D415 /* success.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = success.png; path = ValidationTextField/Assets/success.png; sourceTree = ""; }; + E5B949545CA1BBC15BA7DE642D173E5D /* ValidationTextField-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ValidationTextField-dummy.m"; sourceTree = ""; }; + EFD2CECA789442FA7B44A90C71B8E0EE /* ValidationTextField-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ValidationTextField-prefix.pch"; sourceTree = ""; }; F481EE39A5A0E5916DE8DB7B99E49AE4 /* Pods-ValidationTextField_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ValidationTextField_Example-frameworks.sh"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -99,15 +103,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0229749F6418017ADF3217EED18A844D /* ValidationTextField */ = { + 0C3FBF95ACBAB6596F67F3CD88C0EBBF /* Pod */ = { isa = PBXGroup; children = ( - 121CC89A44DFFBA5B796A0A797AAB2A7 /* ValidationTextField.swift */, - 97C6D91F7B272EF041B805BB2914E8BC /* Pod */, - 42777D2C07F5E08222B93EB99755CBC6 /* Support Files */, + 2A92EA0AD116AC89528E9F0C68E35C88 /* LICENSE */, + B9DCD6B591513A5FF553BF50CB87668C /* README.md */, + 82314D7FCDD0851E52C611B9D767F767 /* ValidationTextField.podspec */, ); - name = ValidationTextField; - path = ../..; + name = Pod; sourceTree = ""; }; 0F7897D1E93C178D27AB5BB3E3052BC3 /* Products */ = { @@ -137,15 +140,15 @@ path = "Target Support Files/Pods-ValidationTextField_Example"; sourceTree = ""; }; - 42777D2C07F5E08222B93EB99755CBC6 /* Support Files */ = { + 1F5ED7DC0A8D2C7C9A96E3041C6B7D03 /* Support Files */ = { isa = PBXGroup; children = ( - 5C11F57D7B631575234BFB31C6617594 /* ValidationTextField.modulemap */, - 9F0F8F118E973912D4E1309A176EA8DB /* ValidationTextField.xcconfig */, - AF0BF6E46110A46A7A479094B903D475 /* ValidationTextField-dummy.m */, - 9542B0DDAEFF720700AE48896922FC82 /* ValidationTextField-Info.plist */, - BFA61208F755962A6E338895C383FAB9 /* ValidationTextField-prefix.pch */, - DB9251DFBA56FCD8AB0D34C6255A24FB /* ValidationTextField-umbrella.h */, + 439F576FB18A95B9267EC57B6AD1998D /* ValidationTextField.modulemap */, + D79C7A5DA3B7CAA4E7DFC569136844CB /* ValidationTextField.xcconfig */, + E5B949545CA1BBC15BA7DE642D173E5D /* ValidationTextField-dummy.m */, + 4E8C2A18BCD4D75FAE3643EA8FD28E37 /* ValidationTextField-Info.plist */, + EFD2CECA789442FA7B44A90C71B8E0EE /* ValidationTextField-prefix.pch */, + 9B6FAC2E04FF9A4D7F2D3BA880B766D3 /* ValidationTextField-umbrella.h */, ); name = "Support Files"; path = "Example/Pods/Target Support Files/ValidationTextField"; @@ -160,22 +163,24 @@ name = "Targets Support Files"; sourceTree = ""; }; - 97C6D91F7B272EF041B805BB2914E8BC /* Pod */ = { + 9B055D0CFEA43187E72B03DED11F5662 /* iOS */ = { isa = PBXGroup; children = ( - E4F474B5307AA99DCC494FFCFB7A0BF7 /* LICENSE */, - 0DA7E69CEB0D2B3397EE8CF2378F24D3 /* README.md */, - C91F2DA4B25B4CAFB7F5156172EA0768 /* ValidationTextField.podspec */, + CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */, ); - name = Pod; + name = iOS; sourceTree = ""; }; - 9B055D0CFEA43187E72B03DED11F5662 /* iOS */ = { + A74A3B28366484601FAC83C6E2F07E88 /* ValidationTextField */ = { isa = PBXGroup; children = ( - CB4607EFCA7C5F75397649E792E2AFCB /* Foundation.framework */, + BF2CE532E5FCEFE2D82D34A02AEB4BC3 /* ValidationTextField.swift */, + 0C3FBF95ACBAB6596F67F3CD88C0EBBF /* Pod */, + F141C3040220D5E935BB7AB87602E58A /* Resources */, + 1F5ED7DC0A8D2C7C9A96E3041C6B7D03 /* Support Files */, ); - name = iOS; + name = ValidationTextField; + path = ../..; sourceTree = ""; }; B1B7D77C3FEEBD4C6631F2FC822C31D5 /* Pods-ValidationTextField_Tests */ = { @@ -194,11 +199,19 @@ path = "Target Support Files/Pods-ValidationTextField_Tests"; sourceTree = ""; }; + C5AA0B9354B647574406FACB2C4337CF /* Development Pods */ = { + isa = PBXGroup; + children = ( + A74A3B28366484601FAC83C6E2F07E88 /* ValidationTextField */, + ); + name = "Development Pods"; + sourceTree = ""; + }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - F31ACDD991539A46F27C9227E31DDA0F /* Development Pods */, + C5AA0B9354B647574406FACB2C4337CF /* Development Pods */, D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 0F7897D1E93C178D27AB5BB3E3052BC3 /* Products */, 6310008B323F7511E77342F43D04D0DE /* Targets Support Files */, @@ -213,12 +226,13 @@ name = Frameworks; sourceTree = ""; }; - F31ACDD991539A46F27C9227E31DDA0F /* Development Pods */ = { + F141C3040220D5E935BB7AB87602E58A /* Resources */ = { isa = PBXGroup; children = ( - 0229749F6418017ADF3217EED18A844D /* ValidationTextField */, + 7E5C709DB5B4EEC23BDE514D7BD5C57D /* error.png */, + DABD14F99A467C39B391EEA084D5D415 /* success.png */, ); - name = "Development Pods"; + name = Resources; sourceTree = ""; }; /* End PBXGroup section */ @@ -296,7 +310,7 @@ 492D1DB0126E4365B58074680FB2744A /* Headers */, 1DDF2E1BCB93C60A2B723058766FFD64 /* Sources */, EC8E286CF205DB3389C1ADAE754BAAEC /* Frameworks */, - 50CF6A3692185D2298E1331BB2736223 /* Resources */, + C5CE503FFC19D1A931E8FBBCCC537F4D /* Resources */, ); buildRules = ( ); @@ -337,17 +351,19 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 50CF6A3692185D2298E1331BB2736223 /* Resources */ = { + 87F912EC20B04D197844C36FDCE4DF8F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 87F912EC20B04D197844C36FDCE4DF8F /* Resources */ = { + C5CE503FFC19D1A931E8FBBCCC537F4D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + B47DEFA46C08EC00F935FF76AB3B1A42 /* error.png in Resources */, + 1C6DB809C0E0EEFAB122B82EF2B2AE06 /* success.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -473,7 +489,7 @@ }; 0C7BBB48CFE7C114AB8D37DF1AAED67D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9F0F8F118E973912D4E1309A176EA8DB /* ValidationTextField.xcconfig */; + baseConfigurationReference = D79C7A5DA3B7CAA4E7DFC569136844CB /* ValidationTextField.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -635,7 +651,7 @@ }; B92AD3AEF01E9B46B47FD54C57CC39FD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9F0F8F118E973912D4E1309A176EA8DB /* ValidationTextField.xcconfig */; + baseConfigurationReference = D79C7A5DA3B7CAA4E7DFC569136844CB /* ValidationTextField.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; diff --git a/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.markdown index 1b408ac..59d76be 100644 --- a/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.markdown @@ -3,6 +3,209 @@ This application makes use of the following third party libraries: ## ValidationTextField + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Skyscanner Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Copyright (c) 2019 devikkim@gmail.com Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.plist index 0e4c753..68a83cf 100644 --- a/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-ValidationTextField_Example/Pods-ValidationTextField_Example-acknowledgements.plist @@ -14,7 +14,210 @@ FooterText - Copyright (c) 2019 devikkim@gmail.com <devikkim@gmail.com> + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Skyscanner Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +Copyright (c) 2019 devikkim@gmail.com <devikkim@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -35,7 +238,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License - MIT + Apache 2.0 Title ValidationTextField Type diff --git a/Example/Pods/Target Support Files/ValidationTextField/ValidationTextField-Info.plist b/Example/Pods/Target Support Files/ValidationTextField/ValidationTextField-Info.plist index 161a9d3..97eeeda 100644 --- a/Example/Pods/Target Support Files/ValidationTextField/ValidationTextField-Info.plist +++ b/Example/Pods/Target Support Files/ValidationTextField/ValidationTextField-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.1.0 + 0.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/Example/ValidationTextField.xcodeproj/project.pbxproj b/Example/ValidationTextField.xcodeproj/project.pbxproj index c7ecb19..c8d4acf 100644 --- a/Example/ValidationTextField.xcodeproj/project.pbxproj +++ b/Example/ValidationTextField.xcodeproj/project.pbxproj @@ -11,9 +11,9 @@ 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; + 739018152295220700BA1576 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; BBCDD65AEC42E4FAFDDCAA74 /* Pods_ValidationTextField_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D59D9395A7DA5FD93A80E33 /* Pods_ValidationTextField_Example.framework */; }; /* End PBXBuildFile section */ @@ -224,10 +224,9 @@ }; buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "ValidationTextField" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, en, Base, ); @@ -249,7 +248,7 @@ files = ( 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, - 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, + 739018152295220700BA1576 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Example/ValidationTextField.xcodeproj/xcshareddata/xcschemes/ValidationTextField-Example.xcscheme b/Example/ValidationTextField.xcodeproj/xcshareddata/xcschemes/ValidationTextField-Example.xcscheme index b63f720..02fd65c 100644 --- a/Example/ValidationTextField.xcodeproj/xcshareddata/xcschemes/ValidationTextField-Example.xcscheme +++ b/Example/ValidationTextField.xcodeproj/xcshareddata/xcschemes/ValidationTextField-Example.xcscheme @@ -40,7 +40,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" shouldUseLaunchSchemeArgsEnv = "YES"> - + + @@ -13,86 +14,117 @@ - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - + - + - - + + + + + + diff --git a/ValidationTextField.podspec b/ValidationTextField.podspec index a6d6839..09d532d 100644 --- a/ValidationTextField.podspec +++ b/ValidationTextField.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'ValidationTextField' - s.version = '0.1.1' + s.version = '1.0.0' s.summary = 'This TextField for Validation ( complete or error )' # This description is used to generate tags and improve search results. @@ -27,14 +27,11 @@ Pod::Spec.new do |s| s.author = { 'devikkim@gmail.com' => 'devikkim@gmail.com' } s.source = { :git => 'https://github.com/devikkim/ValidationTextField.git', :tag => s.version.to_s } - s.ios.deployment_target = '8.0' + s.ios.deployment_target = '9.0' s.swift_version = '4.0' s.source_files = 'ValidationTextField/Classes/**/*' + s.resources = "ValidationTextField/Assets/*.png" - # s.resource_bundles = { - # 'ValidationTextField' => ['ValidationTextField/Assets/*.png'] - # } - # s.public_header_files = 'Pod/Classes/**/*.h' # s.frameworks = 'UIKit', 'MapKit' # s.dependency 'AFNetworking', '~> 2.3' diff --git a/ValidationTextField/Assets/error.png b/ValidationTextField/Assets/error.png new file mode 100644 index 0000000..6d5e879 Binary files /dev/null and b/ValidationTextField/Assets/error.png differ diff --git a/ValidationTextField/Assets/success.png b/ValidationTextField/Assets/success.png new file mode 100644 index 0000000..3cc82df Binary files /dev/null and b/ValidationTextField/Assets/success.png differ diff --git a/ValidationTextField/Classes/ValidationTextField.swift b/ValidationTextField/Classes/ValidationTextField.swift index 279fbca..877a095 100644 --- a/ValidationTextField/Classes/ValidationTextField.swift +++ b/ValidationTextField/Classes/ValidationTextField.swift @@ -8,379 +8,439 @@ import UIKit +@available(iOS 9.0, *) +private enum ValidateType: String { + case success + case error + case ready + + var image: UIImage? { + let bundle = Bundle(for: ValidationTextField.self) + let image = UIImage(named: self.rawValue, in: bundle,compatibleWith: nil) + return image + } +} + +@available(iOS 9.0, *) @IBDesignable open class ValidationTextField: UITextField { - - // MARK: Heights - - private var lineHeight: CGFloat = 0 - private var selectedLineHeight: CGFloat = 0 - - // MARK: IBInspectable - - @IBInspectable - open var completedTitleText: String = "Completed!" { - didSet { - update() - } - } - - @IBInspectable - open var completedTitleFont: UIFont = .systemFont(ofSize: 17) { - didSet{ - update() - createTitleLabel() - } - } - - @IBInspectable - open var completedColor: UIColor = UIColor(red:0.07, green:0.56, blue:0.33, alpha:1.0) { - didSet{ - update() - } - } - - @IBInspectable - open var baseColor: UIColor = .darkGray { - didSet{ - update() - } - } - - @IBInspectable - open var baseFont: UIFont = .systemFont(ofSize: 17) { - didSet{ - update() - createTitleLabel() - } - } - - @IBInspectable - open var errorColor: UIColor = UIColor(red:0.99, green:0.16, blue:0.11, alpha:1.0) { - didSet{ - update() - } - } - - @IBInspectable - open var errorFont: UIFont = .systemFont(ofSize: 17) { - didSet{ - update() - createTitleLabel() - } - } - - @IBInspectable - open var errorMessage: String? { - didSet{ - update() - } - } - - @IBInspectable - open var disabledColor: UIColor = UIColor(white: 0.88, alpha: 1.0) { - didSet { - update() - updatePlaceholder() - } - } - + + // MARK: Heights + + private var lineHeight: CGFloat = 0 + private var selectedLineHeight: CGFloat = 0 + + // MARK: IBInspectable + + @IBInspectable + open var titleText: String = "TITLE" { + didSet { + update() + } + } + + @IBInspectable + open var titleFont: UIFont = .systemFont(ofSize: 14) { + didSet{ + update() + createTitleLabel() + } + } @IBInspectable - open override var placeholder: String? { - didSet { - setNeedsDisplay() - update() + open var titleColor: UIColor = UIColor(red:0.49, green:0.49, blue:0.49, alpha:1.0) { + didSet{ + update() + } + } + + @IBInspectable + open var errorColor: UIColor = UIColor(red:0.99, green:0.16, blue:0.11, alpha:1.0) { + didSet{ + update() + } + } + + @IBInspectable + open var errorFont: UIFont = .systemFont(ofSize: 12) { + didSet{ + update() + createTitleLabel() + } + } + + @IBInspectable + open var errorMessage: String? { + didSet{ + update() + } + } + + @IBInspectable + open var disabledColor: UIColor = UIColor(white: 0.88, alpha: 1.0) { + didSet { + update() + updatePlaceholder() + } + } + + @IBInspectable + open override var placeholder: String? { + didSet { + setNeedsDisplay() + update() + } + } + + @IBInspectable + open var placeholderColor: UIColor = UIColor(red:0.49, green:0.49, blue:0.49, alpha:1.0) { + didSet { + updatePlaceholder() + } + } + + + // MARK: Properties + + open var validCondition: ((String) -> Bool)? + + open var isValid = false + + open var successImage: UIImage? + + open var errorImage: UIImage? + + private lazy var titleLabel = UILabel() + + private lazy var errorLabel = UILabel() + + private lazy var lineView = UIView() + + private lazy var containerView = UIStackView() + + private lazy var statusImageView = UIImageView() + + private var validateStatus: ValidateType = .ready { + didSet { + switch validateStatus { + case .success: + guard let successImage = successImage else { + statusImageView.image = validateStatus.image + return } - } - - @IBInspectable - open var placeholderColor: UIColor = UIColor.lightGray { - didSet { - updatePlaceholder() - } - } - - - // MARK: Properties - - open var validCondition: ((String) -> Bool)? - - open var isValid = false - - private var titleLabel: UILabel! - - private var lineView: UIView! - - private var _errorMessage: String? - - private var titleFadeInDuration: TimeInterval = 0.2 - - private var titleFadeOutDuration: TimeInterval = 0.3 - - private var placeholderFont: UIFont? { - didSet { - updatePlaceholder() - } - } - - private var hasErrorMessage: Bool{ - return self._errorMessage != nil && self._errorMessage != "" - } - - private var isTitleVisible: Bool { - return hasText || hasErrorMessage - } - - private var editingOrSelected: Bool { - return super.isEditing || isSelected - } - - // MARK: Initialize - - override init(frame: CGRect) { - super.init(frame: frame) - self.initValidationTextField() - } - - required public init?(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - self.initValidationTextField() - } - - private func initValidationTextField() { - borderStyle = .none - self.createTitleLabel() - self.createLineView() - self.addEditingChangedObserver() - } - - private func addEditingChangedObserver(){ - self.addTarget(self, action: #selector(self.editingChanged), for: [.editingChanged]) - } - - @objc - private func editingChanged() { - if let isValid = validCondition?(self.text ?? ""), !isValid { - self.isValid = isValid - _errorMessage = errorMessage - } else { - self.isValid = true - _errorMessage = nil - } - - update() - - self.updateTitleVisibility(true) - } - - private func createTitleLabel() { - let titleLabel = UILabel() - - titleLabel.autoresizingMask = [.flexibleWidth,. flexibleHeight] - titleLabel.font = completedTitleFont - titleLabel.alpha = 0.0 - titleLabel.textColor = completedColor + statusImageView.image = successImage - addSubview(titleLabel) - self.titleLabel = titleLabel - } - - private func createLineView() { - if self.lineView == nil { - let lineView = UIView() - lineView.isUserInteractionEnabled = false - self.lineView = lineView - self.lineView.backgroundColor = baseColor - self.configureDefaultLineHeight() + case .error: + guard let errorImage = errorImage else { + statusImageView.image = validateStatus.image + return } + statusImageView.image = errorImage - lineView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] - addSubview(lineView) - } - - private func titleHeight() -> CGFloat { - if let titleLabel = titleLabel, - let font = titleLabel.font { - return font.lineHeight - } - return 15.0 - } - - private func configureDefaultLineHeight() { - let pixel: CGFloat = 1.0 / UIScreen.main.scale - self.lineHeight = 2.0 * pixel - self.selectedLineHeight = 2.0 * self.lineHeight - } - - private func titleLabelRectForBounds(_ bounds: CGRect, editing: Bool) -> CGRect { - if editing { - return CGRect( - x: 0, - y: 0, - width: bounds.size.width, - height: titleHeight() - ) - } else { - return CGRect( - x: 0, - y: titleHeight(), - width: bounds.size.width, - height: titleHeight() - ) - } - } - - private func lineViewRectForBounds(_ bounds: CGRect, editing: Bool) -> CGRect { - let height = editing ? selectedLineHeight : lineHeight - - return CGRect( - x: 0, - y: bounds.size.height - height, - width: bounds.size.width, - height: height - ) - } - - private func textHeight() -> CGFloat { - guard let font = self.font else { return 0.0 } - - return font.lineHeight + 7.0 - } - - private func updateTitleVisibility(_ animated: Bool = false) { - let alpha: CGFloat = self.isTitleVisible ? 1.0 : 0.0 - let frame = titleLabelRectForBounds(bounds, editing: isTitleVisible) - - let updateBlock = {() -> Void in - self.titleLabel.alpha = alpha - self.titleLabel.frame = frame - } - - if animated { - #if swift(>=4.2) - let animationOptions: UIView.AnimationOptions = .curveEaseOut - #else - let animationOptions: UIViewAnimationOptions = .curveEaseOut - #endif - - let duration = isTitleVisible ? titleFadeInDuration : titleFadeOutDuration - - UIView.animate(withDuration: duration, delay: 0, options: animationOptions, animations: { () -> Void in - updateBlock() - }, completion: nil) - } else { - - } - } - - private func update(){ - if hasErrorMessage{ - titleLabel.text = errorMessage - titleLabel.textColor = errorColor - titleLabel.font = errorFont - lineView.backgroundColor = errorColor - } else if editingOrSelected || self.text ?? "" != "" { - titleLabel.text = completedTitleText - titleLabel.textColor = completedColor - titleLabel.font = completedTitleFont - lineView.backgroundColor = completedColor - } else { - titleLabel.text = completedTitleText - titleLabel.textColor = completedColor - titleLabel.font = baseFont - lineView.backgroundColor = baseColor - } - - updateTitleVisibility(true) - } - - private func updatePlaceholder() { - guard let placeholder = placeholder, let font = placeholderFont ?? font else { - return - } - let color = isEnabled ? placeholderColor : disabledColor - #if swift(>=4.2) - attributedPlaceholder = NSAttributedString( - string: placeholder, - attributes: [ - NSAttributedString.Key.foregroundColor: color, NSAttributedString.Key.font: font - ] - ) - #elseif swift(>=4.0) - attributedPlaceholder = NSAttributedString( - string: placeholder, - attributes: [ - NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: font - ] - ) - #else - attributedPlaceholder = NSAttributedString( - string: placeholder, - attributes: [NSForegroundColorAttributeName: color, NSFontAttributeName: font] - ) - #endif - } - - override open func textRect(forBounds bounds: CGRect) -> CGRect { - let superRect = super.textRect(forBounds: bounds) - let titleHeight = self.titleHeight() - - return CGRect( - x: superRect.origin.x, - y: titleHeight, - width: superRect.size.width, - height: superRect.size.height - titleHeight - selectedLineHeight - ) - } - - override open func editingRect(forBounds bounds: CGRect) -> CGRect { - let superRect = super.editingRect(forBounds: bounds) - let titleHeight = self.titleHeight() - - return CGRect( - x: superRect.origin.x, - y: titleHeight, - width: superRect.size.width, - height: superRect.size.height - titleHeight - selectedLineHeight - ) - } - - override open func placeholderRect(forBounds bounds: CGRect) -> CGRect { - let rect = CGRect( - x: 0, - y: titleHeight(), - width: bounds.size.width, - height: bounds.size.height - titleHeight() - selectedLineHeight - ) - return rect - } - - override open func prepareForInterfaceBuilder() { - if #available(iOS 8.0, *) { - super.prepareForInterfaceBuilder() - } - - borderStyle = .none - - isSelected = true - invalidateIntrinsicContentSize() - } - - override open func layoutSubviews() { - super.layoutSubviews() - - titleLabel.frame = self.titleLabelRectForBounds( - bounds, - editing: self.isTitleVisible - ) - - lineView.frame = self.lineViewRectForBounds( - bounds, - editing: self.editingOrSelected - ) - } - - override open var intrinsicContentSize: CGSize { - return CGSize(width: bounds.size.width, height: titleHeight() + textHeight()) - } + case .ready: + statusImageView.image = errorImage + } + + } + } + + private var titleFadeInDuration: TimeInterval = 0.3 + + private var titleFadeOutDuration: TimeInterval = 0.5 + + private var placeholderFont: UIFont? { + didSet { + updatePlaceholder() + } + } + + private var isTitleVisible: Bool { + return hasText + } + + private var editingOrSelected: Bool { + return super.isEditing || isSelected + } + + // MARK: Initialize + + override init(frame: CGRect) { + super.init(frame: frame) + initValidationTextField() + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + initValidationTextField() + } + + private func initValidationTextField() { + borderStyle = .none + createTitleLabel() + createLineView() + createErrorLabel() + + addTarget(self, action: #selector(editingChanged), for: [.editingChanged]) + } + + @objc + private func editingChanged() { + if let isValid = validCondition?(self.text ?? ""), !isValid { + self.isValid = isValid + validateStatus = .error + } else { + isValid = true + validateStatus = .success + } + + update() + + updateTitleVisibility(true) + } + + private func createTitleLabel() { + titleLabel = UILabel() + + titleLabel.autoresizingMask = [.flexibleWidth,. flexibleHeight] + titleLabel.font = titleFont + titleLabel.textColor = titleColor + + statusImageView.translatesAutoresizingMaskIntoConstraints = false + statusImageView.contentMode = .scaleAspectFill + statusImageView.heightAnchor.constraint(equalToConstant: titleFont.lineHeight).isActive = true + statusImageView.widthAnchor.constraint(equalToConstant: titleFont.lineHeight).isActive = true + + containerView = UIStackView() + containerView.axis = .horizontal + containerView.spacing = 5 + + containerView.addArrangedSubview(titleLabel) + containerView.addArrangedSubview(statusImageView) + + containerView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] + containerView.translatesAutoresizingMaskIntoConstraints = false + addSubview(containerView) + } + + private func createLineView() { + lineView.isUserInteractionEnabled = false + lineView.backgroundColor = titleColor + configureDefaultLineHeight() + + lineView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] + addSubview(lineView) + } + + private func createErrorLabel() { + errorLabel.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] + addSubview(errorLabel) + } + + private func titleHeight() -> CGFloat { + return titleLabel.font.lineHeight + } + + private func errorHeight() -> CGFloat { + return errorLabel.font.lineHeight + } + + private func configureDefaultLineHeight() { + let pixel: CGFloat = 1.0 / UIScreen.main.scale + lineHeight = 2.0 * pixel + selectedLineHeight = 2.0 * lineHeight + } + + private func titleRectForBounds(_ bounds: CGRect, editing: Bool) -> CGRect { + if editing { + return CGRect( + x: 0, + y: 0, + width: bounds.size.width, + height: titleHeight() + ) + } else { + return CGRect( + x: 0, + y: titleHeight(), + width: bounds.size.width, + height: titleHeight() + ) + } + } + + private func lineViewRectForBounds(_ bounds: CGRect, editing: Bool) -> CGRect { + let height = editing ? selectedLineHeight : lineHeight + + return CGRect( + x: 0, + y: bounds.size.height - height, + width: bounds.size.width, + height: height + ) + } + + private func errorLabelRectForBounds(_ bounds: CGRect) -> CGRect { + if isValid { + return CGRect( + x: 0, + y: bounds.height + errorHeight(), + width: 0, + height: 0 + ) + } else { + return CGRect( + x: 0, + y: bounds.height, + width: bounds.size.width, + height: errorHeight() + ) + } + } + + private func textHeight() -> CGFloat { + guard let font = self.font else { return 0.0 } + + return font.lineHeight + 3.0 + } + + private func updateTitleVisibility(_ animated: Bool = false) { + let alpha: CGFloat = isTitleVisible ? 1.0 : 0.0 + let frame = titleRectForBounds(bounds, editing: isTitleVisible) + + let errorAlpha: CGFloat = isValid || text == "" ? 0.0 : 1.0 + let errorLabelFrame = errorLabelRectForBounds(bounds) + + let updateBlock = {() -> Void in + self.containerView.alpha = alpha + self.containerView.frame = frame + + self.errorLabel.alpha = errorAlpha + self.errorLabel.frame = errorLabelFrame + } + + if animated { + #if swift(>=4.2) + let animationOptions: UIView.AnimationOptions = .curveEaseOut + #else + let animationOptions: UIViewAnimationOptions = .curveEaseOut + #endif + + let duration = isTitleVisible ? titleFadeInDuration : titleFadeOutDuration + + UIView.animate( + withDuration: duration, + delay: 0, + options: animationOptions, + animations: { () -> Void in + updateBlock() + }, + completion: nil) + } + } + + private func update(){ + if !isValid && isEditing && text != "" { + errorLabel.text = errorMessage + errorLabel.textColor = errorColor + errorLabel.font = errorFont + lineView.backgroundColor = errorColor + } else { + lineView.backgroundColor = titleColor + } + + titleLabel.text = titleText + titleLabel.textColor = titleColor + titleLabel.font = titleFont + + updateTitleVisibility(true) + } + + private func updatePlaceholder() { + guard let placeholder = placeholder, let font = placeholderFont ?? font else { + return + } + let color = isEnabled ? placeholderColor : disabledColor + #if swift(>=4.2) + attributedPlaceholder = NSAttributedString( + string: placeholder, + attributes: [ + NSAttributedString.Key.foregroundColor: color, NSAttributedString.Key.font: font + ] + ) + #elseif swift(>=4.0) + attributedPlaceholder = NSAttributedString( + string: placeholder, + attributes: [ + NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: font + ] + ) + #else + attributedPlaceholder = NSAttributedString( + string: placeholder, + attributes: [NSForegroundColorAttributeName: color, NSFontAttributeName: font] + ) + #endif + } + + override open func textRect(forBounds bounds: CGRect) -> CGRect { + let superRect = super.textRect(forBounds: bounds) + let titleHeight = self.titleHeight() + + return CGRect( + x: superRect.origin.x, + y: titleHeight, + width: superRect.size.width, + height: superRect.size.height - titleHeight - selectedLineHeight + ) + } + + override open func editingRect(forBounds bounds: CGRect) -> CGRect { + let superRect = super.editingRect(forBounds: bounds) + let titleHeight = self.titleHeight() + + return CGRect( + x: superRect.origin.x, + y: titleHeight, + width: superRect.size.width, + height: superRect.size.height - titleHeight - selectedLineHeight + ) + } + + override open func placeholderRect(forBounds bounds: CGRect) -> CGRect { + let rect = CGRect( + x: 0, + y: titleHeight(), + width: bounds.size.width, + height: bounds.size.height - titleHeight() - selectedLineHeight + ) + return rect + } + + override open func prepareForInterfaceBuilder() { + super.prepareForInterfaceBuilder() + + borderStyle = .none + + isSelected = true + invalidateIntrinsicContentSize() + } + + override open func layoutSubviews() { + super.layoutSubviews() + + self.containerView.frame = titleRectForBounds( + bounds, + editing: isTitleVisible + ) + + self.lineView.frame = lineViewRectForBounds( + bounds, + editing: editingOrSelected + ) + + self.errorLabel.frame = errorLabelRectForBounds(bounds) + } + + override open var intrinsicContentSize: CGSize { + return CGSize(width: bounds.size.width, height: titleHeight() + textHeight() + 10) + } }