diff --git a/Example/Podfile.lock b/Example/Podfile.lock index dffcc92..6220771 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -13,4 +13,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 761653fe0a6001fe4076ba25b04e279672ecc970 -COCOAPODS: 1.0.1 +COCOAPODS: 1.1.0.rc.2 diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index dffcc92..6220771 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -13,4 +13,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 761653fe0a6001fe4076ba25b04e279672ecc970 -COCOAPODS: 1.0.1 +COCOAPODS: 1.1.0.rc.2 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 4a7938f..9f5f73f 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -399,14 +399,6 @@ attributes = { LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 0700; - TargetAttributes = { - 1773C65AAC9F8837BB8142660D7320E0 = { - LastSwiftMigration = 0800; - }; - D69CC732EFB91EE42BE73E5030BD387C = { - LastSwiftMigration = 0800; - }; - }; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -504,7 +496,7 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 47BEF9D903506B003EA5C2B249729489 /* Debug */ = { + 015A368F878AC3E2CEAE21DDE8026304 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -522,6 +514,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -541,100 +534,13 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; ONLY_ACTIVE_ARCH = YES; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; - 6A88DE4855BF46A99DED1138AC50611B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 37602088D7DDBEBF54BCE7CAF18CB105 /* Pods-Segmentio_Example.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Segmentio_Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Segmentio_Example; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 847944553F66C9C9C8CF5EA5A12838E5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 808E8A2F66FEF9BFA423C8B51FEB3FD3 /* Pods-Segmentio_Example.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Segmentio_Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Segmentio_Example; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A6D8F8AC9425BACBC3621CFD7597790C /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AAF3441A43AA58E58A7340FA1E66271B /* Segmentio.xcconfig */; - buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Segmentio"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Segmentio/ResourceBundle-Segmentio-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = Segmentio; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - AAF678CED40D3499169D10F63CA0719E /* Release */ = { + 44CDBB6D11DE06DB64D6268622BDC47E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -652,6 +558,7 @@ CLANG_WARN_OBJC_ROOT_CLASS = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -666,34 +573,20 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; SYMROOT = "${SRCROOT}/../build"; VALIDATE_PRODUCT = YES; }; name = Release; }; - B39C8A659F54F5D7007A70CE400454EA /* Release */ = { + 6939D89BCF3CB71D8A0CB554AEAC1779 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AAF3441A43AA58E58A7340FA1E66271B /* Segmentio.xcconfig */; buildSettings = { - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Segmentio"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Segmentio/ResourceBundle-Segmentio-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - PRODUCT_NAME = Segmentio; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - B54261FEDDC960542CA187AA5E14BC7D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AAF3441A43AA58E58A7340FA1E66271B /* Segmentio.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; @@ -720,11 +613,118 @@ }; name = Debug; }; - F03A1D5CC9DD916A3B05610779B9C8F0 /* Release */ = { + 69F41B3AE04E5DCE90065CD8E029712C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 808E8A2F66FEF9BFA423C8B51FEB3FD3 /* Pods-Segmentio_Example.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Segmentio_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Segmentio_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + A6D8F8AC9425BACBC3621CFD7597790C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = AAF3441A43AA58E58A7340FA1E66271B /* Segmentio.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Segmentio"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Segmentio/ResourceBundle-Segmentio-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = Segmentio; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + B39C8A659F54F5D7007A70CE400454EA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AAF3441A43AA58E58A7340FA1E66271B /* Segmentio.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Segmentio"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Segmentio/ResourceBundle-Segmentio-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + PRODUCT_NAME = Segmentio; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + BF58FEE71132386297AFD4D409190547 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 37602088D7DDBEBF54BCE7CAF18CB105 /* Pods-Segmentio_Example.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Segmentio_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Segmentio_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E8435E0DCC8F7A80386C452616DACB34 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AAF3441A43AA58E58A7340FA1E66271B /* Segmentio.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; @@ -756,8 +756,8 @@ 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 47BEF9D903506B003EA5C2B249729489 /* Debug */, - AAF678CED40D3499169D10F63CA0719E /* Release */, + 015A368F878AC3E2CEAE21DDE8026304 /* Debug */, + 44CDBB6D11DE06DB64D6268622BDC47E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -765,8 +765,8 @@ 785D3215E776BE829EB1D98F89F1A8C1 /* Build configuration list for PBXNativeTarget "Segmentio" */ = { isa = XCConfigurationList; buildConfigurations = ( - B54261FEDDC960542CA187AA5E14BC7D /* Debug */, - F03A1D5CC9DD916A3B05610779B9C8F0 /* Release */, + 6939D89BCF3CB71D8A0CB554AEAC1779 /* Debug */, + E8435E0DCC8F7A80386C452616DACB34 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -783,8 +783,8 @@ CC37EAE0F58FC2B11F123B84FE6B0FAC /* Build configuration list for PBXNativeTarget "Pods-Segmentio_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6A88DE4855BF46A99DED1138AC50611B /* Debug */, - 847944553F66C9C9C8CF5EA5A12838E5 /* Release */, + BF58FEE71132386297AFD4D409190547 /* Debug */, + 69F41B3AE04E5DCE90065CD8E029712C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example-acknowledgements.plist index 2051b42..c42df72 100644 --- a/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example-acknowledgements.plist @@ -35,6 +35,8 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT Title Segmentio Type diff --git a/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.debug.xcconfig index 88a9323..3eb0eef 100644 --- a/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.debug.xcconfig @@ -1,3 +1,4 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Segmentio" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 diff --git a/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.release.xcconfig index 88a9323..3eb0eef 100644 --- a/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-Segmentio_Example/Pods-Segmentio_Example.release.xcconfig @@ -1,3 +1,4 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Segmentio" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 diff --git a/Example/Segmentio.xcodeproj/project.pbxproj b/Example/Segmentio.xcodeproj/project.pbxproj index 0b4e7ec..d0948dd 100644 --- a/Example/Segmentio.xcodeproj/project.pbxproj +++ b/Example/Segmentio.xcodeproj/project.pbxproj @@ -322,7 +322,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; + shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -389,7 +389,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -427,7 +427,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; diff --git a/Example/Segmentio/Extensions/String+Convenience.swift b/Example/Segmentio/Extensions/String+Convenience.swift index ca60593..e69cc53 100644 --- a/Example/Segmentio/Extensions/String+Convenience.swift +++ b/Example/Segmentio/Extensions/String+Convenience.swift @@ -18,7 +18,6 @@ extension String { options: .regularExpression, range: nil ) - string.replaceSubrange(startIndex...startIndex, with: String(self[startIndex])) return String(string.characters.prefix(1)).capitalized + String(string.lowercased().characters.dropFirst()) diff --git a/Example/Segmentio/Extensions/UIFont+ExampleFonts.swift b/Example/Segmentio/Extensions/UIFont+ExampleFonts.swift index d1b57cb..eea2aca 100644 --- a/Example/Segmentio/Extensions/UIFont+ExampleFonts.swift +++ b/Example/Segmentio/Extensions/UIFont+ExampleFonts.swift @@ -10,11 +10,11 @@ import UIKit extension UIFont { - class func exampleAvenirMediumWithSize(_ size: CGFloat) -> UIFont { + class func exampleAvenirMedium(ofSize size: CGFloat) -> UIFont { return UIFont(name: "Avenir-Book", size: size) ?? UIFont.systemFont(ofSize: size) } - class func exampleAvenirLightWithSize(_ size: CGFloat) -> UIFont { + class func exampleAvenirLight(ofSize size: CGFloat) -> UIFont { return UIFont(name: "Avenir-Light", size: size) ?? UIFont.systemFont(ofSize: size) } diff --git a/Example/Segmentio/Helpers/AppearanceConfigurator.swift b/Example/Segmentio/Helpers/AppearanceConfigurator.swift index b8c6ce1..84d4892 100644 --- a/Example/Segmentio/Helpers/AppearanceConfigurator.swift +++ b/Example/Segmentio/Helpers/AppearanceConfigurator.swift @@ -11,14 +11,14 @@ import UIKit class AppearanceConfigurator { class func configureNavigationBar() { - UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent + UIApplication.shared.statusBarStyle = .lightContent - UINavigationBar.appearance().barTintColor = ColorPalette.WhiteColor + UINavigationBar.appearance().barTintColor = ColorPalette.white UINavigationBar.appearance().isTranslucent = false - UINavigationBar.appearance().tintColor = ColorPalette.BlackColor + UINavigationBar.appearance().tintColor = ColorPalette.black let attributes = [ - NSFontAttributeName : UIFont.exampleAvenirMediumWithSize(17), - NSForegroundColorAttributeName : ColorPalette.BlackColor + NSFontAttributeName : UIFont.exampleAvenirMedium(ofSize: 17), + NSForegroundColorAttributeName : ColorPalette.black ] UINavigationBar.appearance().titleTextAttributes = attributes } diff --git a/Example/Segmentio/Resorces/ColorPalette.swift b/Example/Segmentio/Resorces/ColorPalette.swift index ba47a93..0350651 100644 --- a/Example/Segmentio/Resorces/ColorPalette.swift +++ b/Example/Segmentio/Resorces/ColorPalette.swift @@ -9,9 +9,11 @@ import UIKit struct ColorPalette { - static let WhiteColor = UIColor(red: 255, green: 255, blue: 255) - static let BlackColor = UIColor(red: 3, green: 3, blue: 3) - static let CoralColor = UIColor(red: 244, green: 111, blue: 96) - static let WhiteSmokeColor = UIColor(red: 245, green: 245, blue: 245) - static let GrayChateauColor = UIColor(red: 163, green: 164, blue: 168) -} \ No newline at end of file + + static let white = UIColor(red: 255, green: 255, blue: 255) + static let black = UIColor(red: 3, green: 3, blue: 3) + static let coral = UIColor(red: 244, green: 111, blue: 96) + static let whiteSmoke = UIColor(red: 245, green: 245, blue: 245) + static let grayChateau = UIColor(red: 163, green: 164, blue: 168) + +} diff --git a/Example/Segmentio/Resorces/Hints.swift b/Example/Segmentio/Resorces/Hints.swift index 2d5b33a..1441487 100644 --- a/Example/Segmentio/Resorces/Hints.swift +++ b/Example/Segmentio/Resorces/Hints.swift @@ -7,35 +7,35 @@ // struct Hints { - static let Tornado = [ + static let tornado = [ "1. Move immediately to the special underground shelter whenever possible.", "2. If unable to go underground, stay in a windowless, interior room on the lowest possible floor.", "3. Remain in your shelter until the danger of tornadoes has passed.", "4. Exit your shelter carefully, and exercise caution moving around in a tornado stricken area." ] - static let Earthquakes = [ + static let earthquakes = [ "1. Make sure you have a fire extinguisher, first aid kit, a battery-powered radio, a flashlight, and extra batteries at home.", "2. Learn how to turn off the gas, water, and electricity.", "3. Make up a plan of where to meet your family after an earthquake. Don't leave heavy objects on shelves.", "4. Don’t panic." ] - static let ExtremeHeat = [ + static let extremeHeat = [ "1. Know the Terms: Heat Wave, Heat Index, Heat Cramps, Heat Exhaustion, Heat Stroke, Sun Stroke.", "2. Install window air conditioners snugly; insulate if necessary.", "3. Check air-conditioning ducts for proper insulation.", "4. Install temporary window reflectors (for use between windows and drapes), such as aluminum foil-covered cardboard, to reflect heat back outside." ] - static let Eruption = [ + static let eruption = [ "1. Know your community's warning system.", "2. Get familiar with the evacuation procedures.", "3. Develop a household evacuation plan. Figure out what you'll need to do if you hear the sirens go off.", "4. Stock up on necessities. Store at least a three-day supply of food and portable water at your home." ] - static let Floods = [ + static let floods = [ "1. Be aware of your area's flood risk before the expected rain is going to hit.", "2. Check to see if you have insurance that covers flooding.", "3. Keep insurance policies, documents, and other valuables in a safe-deposit box, that is located up high and out of harm's way.", @@ -43,11 +43,11 @@ struct Hints { "5. Identify where you could go if told to evacuate." ] - static let Wildfires = [ + static let wildfires = [ "1. Make a disaster supply kit and have a family plan.", "2. Design and landscape your home with wildfire safety in mind: select materials and plants that can help contain fire rather than fuel it.", "3. Teach each family member how to use a fire extinguisher (ABC type) and show them where it's kept.", "4. Don’t panic." ] -} \ No newline at end of file +} diff --git a/Example/Segmentio/ViewControllers/ContentViewController.swift b/Example/Segmentio/ViewControllers/ContentViewController.swift index 62326ef..65b4fc0 100644 --- a/Example/Segmentio/ViewControllers/ContentViewController.swift +++ b/Example/Segmentio/ViewControllers/ContentViewController.swift @@ -66,7 +66,7 @@ extension ContentViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ExampleTableViewCell - cell.hintLabel?.text = hints?[(indexPath as NSIndexPath).row] + cell.hintLabel?.text = hints?[indexPath.row] return cell } diff --git a/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift b/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift index 9d3b43f..a8ee308 100644 --- a/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift +++ b/Example/Segmentio/ViewControllers/EmbedContainerViewController.swift @@ -13,7 +13,7 @@ private let animateDuration: TimeInterval = 0.6 class EmbedContainerViewController: UIViewController { - var style = SegmentioStyle.OnlyImage + var style = SegmentioStyle.onlyImage fileprivate var currentViewController: UIViewController? diff --git a/Example/Segmentio/ViewControllers/ExampleViewController.swift b/Example/Segmentio/ViewControllers/ExampleViewController.swift index 99085f3..b302559 100644 --- a/Example/Segmentio/ViewControllers/ExampleViewController.swift +++ b/Example/Segmentio/ViewControllers/ExampleViewController.swift @@ -11,7 +11,7 @@ import Segmentio class ExampleViewController: UIViewController { - var segmentioStyle = SegmentioStyle.ImageOverLabel + var segmentioStyle = SegmentioStyle.imageOverLabel @IBOutlet fileprivate weak var segmentViewHeightConstraint: NSLayoutConstraint! @IBOutlet fileprivate weak var segmentioView: Segmentio! @@ -35,9 +35,9 @@ class ExampleViewController: UIViewController { super.viewDidLoad() switch segmentioStyle { - case .OnlyLabel, .ImageBeforeLabel, .ImageAfterLabel: + case .onlyLabel, .imageBeforeLabel, .imageAfterLabel: segmentViewHeightConstraint.constant = 50 - case .OnlyImage: + case .onlyImage: segmentViewHeightConstraint.constant = 100 default: break @@ -63,20 +63,13 @@ class ExampleViewController: UIViewController { segmentioView.valueDidChange = { [weak self] _, segmentIndex in if let scrollViewWidth = self?.scrollView.frame.width { let contentOffsetX = scrollViewWidth * CGFloat(segmentIndex) - self?.scrollView.setContentOffset( - CGPoint(x: contentOffsetX, y: 0), - animated: true - ) + self?.scrollView.setContentOffset(CGPoint(x: contentOffsetX, y: 0), animated: true) } } } fileprivate func setupBadgeCountForIndex(_ index: Int) { - segmentioView.setupBadgeAtIndex( - index, - count: 10, - color: ColorPalette.CoralColor - ) + segmentioView.addBadge(at: index, count: 10, color: ColorPalette.coral) } fileprivate func segmentioContent() -> [SegmentioItem] { @@ -93,14 +86,14 @@ class ExampleViewController: UIViewController { fileprivate func segmentioOptions() -> SegmentioOptions { var imageContentMode = UIViewContentMode.center switch segmentioStyle { - case .ImageBeforeLabel, .ImageAfterLabel: + case .imageBeforeLabel, .imageAfterLabel: imageContentMode = .scaleAspectFit default: break } return SegmentioOptions( - backgroundColor: ColorPalette.WhiteColor, + backgroundColor: ColorPalette.white, maxVisibleItems: 3, scrollEnabled: true, indicatorOptions: segmentioIndicatorOptions(), @@ -113,22 +106,22 @@ class ExampleViewController: UIViewController { } fileprivate func segmentioStates() -> SegmentioStates { - let font = UIFont.exampleAvenirMediumWithSize(13) + let font = UIFont.exampleAvenirMedium(ofSize: 13) return SegmentioStates( defaultState: segmentioState( - backgroundColor: UIColor.clear, + backgroundColor: .clear, titleFont: font, - titleTextColor: ColorPalette.GrayChateauColor + titleTextColor: ColorPalette.grayChateau ), selectedState: segmentioState( - backgroundColor: UIColor.clear, + backgroundColor: .clear, titleFont: font, - titleTextColor: ColorPalette.BlackColor + titleTextColor: ColorPalette.black ), highlightedState: segmentioState( - backgroundColor: ColorPalette.WhiteSmokeColor, + backgroundColor: ColorPalette.whiteSmoke, titleFont: font, - titleTextColor: ColorPalette.GrayChateauColor + titleTextColor: ColorPalette.grayChateau ) ) } @@ -138,49 +131,37 @@ class ExampleViewController: UIViewController { } fileprivate func segmentioIndicatorOptions() -> SegmentioIndicatorOptions { - return SegmentioIndicatorOptions( - type: .bottom, - ratio: 1, - height: 5, - color: ColorPalette.CoralColor - ) + return SegmentioIndicatorOptions(type: .bottom, ratio: 1, height: 5, color: ColorPalette.coral) } fileprivate func segmentioHorizontalSeparatorOptions() -> SegmentioHorizontalSeparatorOptions { - return SegmentioHorizontalSeparatorOptions( - type: .topAndBottom, - height: 1, - color: ColorPalette.WhiteSmokeColor - ) + return SegmentioHorizontalSeparatorOptions(type: .topAndBottom, height: 1, color: ColorPalette.whiteSmoke) } fileprivate func segmentioVerticalSeparatorOptions() -> SegmentioVerticalSeparatorOptions { - return SegmentioVerticalSeparatorOptions( - ratio: 1, - color: ColorPalette.WhiteSmokeColor - ) + return SegmentioVerticalSeparatorOptions(ratio: 1, color: ColorPalette.whiteSmoke) } // Example viewControllers fileprivate func preparedViewControllers() -> [ContentViewController] { let tornadoController = ContentViewController.create() - tornadoController.disaster = Disaster(cardName: "Before tornado", hints: Hints.Tornado) + tornadoController.disaster = Disaster(cardName: "Before tornado", hints: Hints.tornado) let earthquakesController = ContentViewController.create() - earthquakesController.disaster = Disaster(cardName: "Before earthquakes", hints: Hints.Earthquakes) + earthquakesController.disaster = Disaster(cardName: "Before earthquakes", hints: Hints.earthquakes) let extremeHeatController = ContentViewController.create() - extremeHeatController.disaster = Disaster(cardName: "Before extreme heat", hints: Hints.ExtremeHeat) + extremeHeatController.disaster = Disaster(cardName: "Before extreme heat", hints: Hints.extremeHeat) let eruptionController = ContentViewController.create() - eruptionController.disaster = Disaster(cardName: "Before eruption", hints: Hints.Eruption) + eruptionController.disaster = Disaster(cardName: "Before eruption", hints: Hints.eruption) let floodsController = ContentViewController.create() - floodsController.disaster = Disaster(cardName: "Before floods", hints: Hints.Floods) + floodsController.disaster = Disaster(cardName: "Before floods", hints: Hints.floods) let wildfiresController = ContentViewController.create() - wildfiresController.disaster = Disaster(cardName: "Before wildfires", hints: Hints.Wildfires) + wildfiresController.disaster = Disaster(cardName: "Before wildfires", hints: Hints.wildfires) return [ tornadoController, @@ -195,7 +176,6 @@ class ExampleViewController: UIViewController { fileprivate func selectedSegmentioIndex() -> Int { return 0 } - // MARK: - Setup container view @@ -213,7 +193,7 @@ class ExampleViewController: UIViewController { height: scrollView.frame.height ) addChildViewController(viewController) - scrollView.addSubview(viewController.view, options: .UseAutoresize) // module's extension + scrollView.addSubview(viewController.view, options: .useAutoresize) // module's extension viewController.didMove(toParentViewController: self) } } @@ -223,7 +203,7 @@ class ExampleViewController: UIViewController { fileprivate func goToControllerAtIndex(_ index: Int) { segmentioView.selectedSegmentioIndex = index } - + } extension ExampleViewController: UIScrollViewDelegate { diff --git a/Example/Segmentio/ViewControllers/HomeViewController.swift b/Example/Segmentio/ViewControllers/HomeViewController.swift index 4a24dec..0682232 100644 --- a/Example/Segmentio/ViewControllers/HomeViewController.swift +++ b/Example/Segmentio/ViewControllers/HomeViewController.swift @@ -11,7 +11,7 @@ import Segmentio class HomeViewController: UIViewController { - fileprivate var currentStyle = SegmentioStyle.OnlyImage + fileprivate var currentStyle = SegmentioStyle.onlyImage fileprivate var containerViewController: EmbedContainerViewController? // MARK: - Lifecycle diff --git a/Example/Segmentio/ViewControllers/SideMenuViewController.swift b/Example/Segmentio/ViewControllers/SideMenuViewController.swift index 2078aa2..7d4cb8f 100644 --- a/Example/Segmentio/ViewControllers/SideMenuViewController.swift +++ b/Example/Segmentio/ViewControllers/SideMenuViewController.swift @@ -24,12 +24,13 @@ class SideMenuViewController: UIViewController { @IBOutlet fileprivate weak var menuTableViewWidthConstraint: NSLayoutConstraint! fileprivate var menuItems = SegmentioStyle.allStyles - fileprivate var currentStyle = SegmentioStyle.OnlyImage + fileprivate var currentStyle = SegmentioStyle.onlyImage // MARK: - Lifecycle override func viewDidLoad() { super.viewDidLoad() + menuTableView.isHidden = true view.isHidden = true menuTableViewWidthConstraint.constant = UIScreen.main.bounds.width * 0.7 @@ -46,8 +47,9 @@ class SideMenuViewController: UIViewController { func showSideMenu(viewController: UIViewController, currentStyle: SegmentioStyle, sideMenuDidHide: SideMenuHandler?) { self.currentStyle = currentStyle self.sideMenuDidHide = sideMenuDidHide - self.modalPresentationStyle = .overCurrentContext + modalPresentationStyle = .overCurrentContext let size = view.frame.size + viewController.present(self, animated: false) { [weak self] in self?.view.isHidden = false self?.menuTableView.frame.origin = CGPoint(x: -size.width, y: 0) @@ -55,7 +57,7 @@ class SideMenuViewController: UIViewController { withDuration: animationDuration, animations: { self?.view.backgroundColor = UIColor.black.withAlphaComponent(0.63) - self?.slideAnimationToPoint(CGPoint.zero) + self?.slideAnimationToPoint(.zero) self?.menuTableView.isHidden = false } ) @@ -65,37 +67,31 @@ class SideMenuViewController: UIViewController { // MARK: - Private functions fileprivate func setupGestureRecognizers() { - let dissmisSideMenuSelector = #selector(SideMenuViewController.dissmisSideMenu) + let dissmisSideMenuSelector = #selector(SideMenuViewController.dismissSideMenu) - let tapRecognizer = UITapGestureRecognizer( - target: self, - action: dissmisSideMenuSelector - ) + let tapRecognizer = UITapGestureRecognizer(target: self, action: dissmisSideMenuSelector) tapRecognizer.delegate = self shadowView.addGestureRecognizer(tapRecognizer) - let swipeRecognizer = UISwipeGestureRecognizer( - target: self, - action: dissmisSideMenuSelector - ) + let swipeRecognizer = UISwipeGestureRecognizer(target: self, action: dissmisSideMenuSelector) swipeRecognizer.direction = .left swipeRecognizer.delegate = self view.addGestureRecognizer(swipeRecognizer) } - fileprivate func didSelectItemAtIndexPath(_ indexPath: IndexPath) { - currentStyle = SegmentioStyle.allStyles[(indexPath as NSIndexPath).row] - dissmisSideMenu() + fileprivate func didSelectItem(at indexPath: IndexPath) { + currentStyle = SegmentioStyle.allStyles[indexPath.row] + dismissSideMenu() } - @objc fileprivate func dissmisSideMenu() { + @objc fileprivate func dismissSideMenu() { let size = view.frame.size UIView.animate( withDuration: animationDuration, animations: { self.slideAnimationToPoint(CGPoint(x: -size.width, y: 0)) - self.view.backgroundColor = UIColor.clear + self.view.backgroundColor = .clear }, completion: { _ in self.view.isHidden = true @@ -106,9 +102,9 @@ class SideMenuViewController: UIViewController { } fileprivate func slideAnimationToPoint(_ point: CGPoint) { - UIView.animate(withDuration: animationDuration, animations: { + UIView.animate(withDuration: animationDuration) { self.menuTableView.frame.origin = point - }) + } } fileprivate func uncheckCurrentStyle() { @@ -116,10 +112,7 @@ class SideMenuViewController: UIViewController { return } - let activeIndexPath = IndexPath( - row: currentStyleIndex, - section: menuTableView.numberOfSections - 1 - ) + let activeIndexPath = IndexPath(row: currentStyleIndex, section: menuTableView.numberOfSections - 1) let activeCell = menuTableView.cellForRow(at: activeIndexPath) activeCell?.imageView?.image = defaultCheckboxImage @@ -130,19 +123,17 @@ class SideMenuViewController: UIViewController { extension SideMenuViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return menuItems.count ?? 0 + return menuItems.count } - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let reuseIdentifier = "Cell" - let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) - let isCurrentStyle = currentStyle == menuItems[(indexPath as NSIndexPath).row] + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! + let isCurrentStyle = currentStyle == menuItems[indexPath.row] - cell!.textLabel?.text = menuItems[(indexPath as NSIndexPath).row].rawValue.stringFromCamelCase() - cell!.imageView?.image = isCurrentStyle ? selectedCheckboxImage : defaultCheckboxImage + cell.textLabel?.text = menuItems[indexPath.row].rawValue.stringFromCamelCase() + cell.imageView?.image = isCurrentStyle ? selectedCheckboxImage : defaultCheckboxImage - return cell! + return cell } } @@ -152,11 +143,11 @@ extension SideMenuViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) - if currentStyle != menuItems[(indexPath as NSIndexPath).row] { + if currentStyle != menuItems[indexPath.row] { uncheckCurrentStyle() cell?.imageView?.image = selectedCheckboxImage } - didSelectItemAtIndexPath(indexPath) + didSelectItem(at: indexPath) } func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { @@ -166,6 +157,7 @@ extension SideMenuViewController: UITableViewDelegate { } extension SideMenuViewController: UIGestureRecognizerDelegate { + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } diff --git a/Segmentio/Source/Badge/BadgeViewPresenter.swift b/Segmentio/Source/Badge/BadgeViewPresenter.swift index 78001fd..57018c2 100644 --- a/Segmentio/Source/Badge/BadgeViewPresenter.swift +++ b/Segmentio/Source/Badge/BadgeViewPresenter.swift @@ -10,12 +10,7 @@ import UIKit class BadgeViewPresenter { - func addBadgeForContainerView( - _ containerView: UIView, - counterValue: Int, - backgroundColor: UIColor = .red, - badgeSize: CounterBadgeSize = .standard - ) { + func addBadgeForContainerView(_ containerView: UIView, counterValue: Int, backgroundColor: UIColor = .red, badgeSize: BadgeSize = .standard) { var badgeView: BadgeWithCounterView! for view in containerView.subviews { if view is BadgeWithCounterView { @@ -25,11 +20,7 @@ class BadgeViewPresenter { } } if badgeView == nil { - badgeView = badgeViewForCounterValue( - counterValue, - backgroundColor: backgroundColor, - size: badgeSize - ) + badgeView = badgeViewForCounterValue(counterValue, backgroundColor: backgroundColor, size: badgeSize) badgeView.translatesAutoresizingMaskIntoConstraints = false containerView.addSubview(badgeView) containerView.bringSubview(toFront: badgeView) @@ -77,15 +68,25 @@ class BadgeViewPresenter { } +enum Separator { + + case top + case bottom + case topAndBottom +} + + + // MARK: Badges views creation extension BadgeViewPresenter { - fileprivate func badgeViewForCounterValue(_ counter: Int, backgroundColor: UIColor, size: CounterBadgeSize) -> BadgeWithCounterView { + fileprivate func badgeViewForCounterValue(_ counter: Int, backgroundColor: UIColor, size: BadgeSize) -> BadgeWithCounterView { let view = BadgeWithCounterView.instanceFromNib(size: size) view.setBadgeBackgroundColor(backgroundColor) view.setBadgeCounterValue(counter) return view + } } diff --git a/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift b/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift index 3f3de4d..0c6bb11 100644 --- a/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift +++ b/Segmentio/Source/Badge/Views/BadgeWithCounterView.swift @@ -5,9 +5,11 @@ private let BadgeCounterOverMaxValueText = "99+" private let standardSizedNibName = "BadgeWithCounterViewStandardSized" private let bigSizedNibName = "BadgeWithCounterViewBigSized" -enum CounterBadgeSize { +enum BadgeSize { + case standard case big + } class BadgeWithCounterView: UIView { @@ -15,14 +17,14 @@ class BadgeWithCounterView: UIView { @IBOutlet fileprivate weak var counterValueLabel: UILabel! @IBOutlet fileprivate weak var backgroundImageView: UIImageView! - class func instanceFromNib(size: CounterBadgeSize) -> BadgeWithCounterView { + class func instanceFromNib(size: BadgeSize) -> BadgeWithCounterView { let nibName = nibNameForSize(size) let podBundle = Bundle(for: self.classForCoder()) if let bundleURL = podBundle.url(forResource: "Segmentio", withExtension: "bundle"), let bundle = Bundle(url: bundleURL) { return UINib(nibName: nibName, bundle: bundle).instantiate(withOwner: nil, options: nil)[0] as! BadgeWithCounterView } - return BadgeWithCounterView(frame: CGRect.zero) + return BadgeWithCounterView(frame: .zero) } func setBadgeCounterValue(_ counterValue: Int) { @@ -39,8 +41,7 @@ class BadgeWithCounterView: UIView { backgroundImageView.backgroundColor = color } - fileprivate class func nibNameForSize(_ size: CounterBadgeSize) -> String { - return (size == .standard) ? standardSizedNibName : bigSizedNibName + fileprivate class func nibNameForSize(_ size: BadgeSize) -> String { + return size == .standard ? standardSizedNibName : bigSizedNibName } - } diff --git a/Segmentio/Source/Cells/SegmentioCell.swift b/Segmentio/Source/Cells/SegmentioCell.swift index b108226..de9ef89 100644 --- a/Segmentio/Source/Cells/SegmentioCell.swift +++ b/Segmentio/Source/Cells/SegmentioCell.swift @@ -24,7 +24,7 @@ class SegmentioCell: UICollectionViewCell { var cellSelected = false fileprivate var options = SegmentioOptions() - fileprivate var style = SegmentioStyle.ImageOverLabel + fileprivate var style = SegmentioStyle.imageOverLabel fileprivate let verticalSeparatorLayer = CAShapeLayer() fileprivate let badgePresenter = BadgeViewPresenter() @@ -99,10 +99,10 @@ class SegmentioCell: UICollectionViewCell { super.prepareForReuse() switch style { - case .OnlyLabel: + case .onlyLabel: badgePresenter.removeBadgeFromContainerView(containerView!) segmentTitleLabel?.text = nil - case .OnlyImage: + case .onlyImage: badgePresenter.removeBadgeFromContainerView(imageContainerView!) segmentImageView?.image = nil default: @@ -147,7 +147,7 @@ class SegmentioCell: UICollectionViewCell { return } - if style == .OnlyImage { + if style == .onlyImage { badgePresenter.addBadgeForContainerView( imageContainerView!, counterValue: badgeCount, diff --git a/Segmentio/Source/Extensions/UIView+Appearance.swift b/Segmentio/Source/Extensions/UIView+Appearance.swift index c160ce2..18373d9 100644 --- a/Segmentio/Source/Extensions/UIView+Appearance.swift +++ b/Segmentio/Source/Extensions/UIView+Appearance.swift @@ -11,18 +11,24 @@ import UIKit private typealias SubviewTreeModifier = ((Void) -> UIView) public struct AppearanceOptions: OptionSet { + + public static let overlay = AppearanceOptions(rawValue: 1 << 0) + public static let useAutoresize = AppearanceOptions(rawValue: 1 << 1) + public let rawValue: UInt - public init(rawValue: UInt) { self.rawValue = rawValue } - public static let Overlay = AppearanceOptions(rawValue: 1 << 0) - public static let UseAutoresize = AppearanceOptions(rawValue: 1 << 1) + + public init(rawValue: UInt) { + self.rawValue = rawValue + } + } extension UIView { fileprivate func addSubviewUsingOptions(_ options: AppearanceOptions, modifier: SubviewTreeModifier) { let subview = modifier() - if options.union(.Overlay) == .Overlay { - if options.union(.UseAutoresize) != .UseAutoresize { + if options.union(.overlay) == .overlay { + if options.union(.useAutoresize) != .useAutoresize { subview.translatesAutoresizingMaskIntoConstraints = false let views = dictionaryOfNames([subview]) @@ -49,7 +55,7 @@ extension UIView { } } - fileprivate func dictionaryOfNames(_ views:[UIView]) -> [String: UIView] { + fileprivate func dictionaryOfNames(_ views: [UIView]) -> [String: UIView] { var container = [String: UIView]() for (_, value) in views.enumerated() { container["subview"] = value diff --git a/Segmentio/Source/Segmentio.swift b/Segmentio/Source/Segmentio.swift index 4cdc681..c3c3522 100644 --- a/Segmentio/Source/Segmentio.swift +++ b/Segmentio/Source/Segmentio.swift @@ -49,7 +49,7 @@ open class Segmentio: UIView { fileprivate var segmentioCollectionView: UICollectionView? fileprivate var segmentioItems = [SegmentioItem]() fileprivate var segmentioOptions = SegmentioOptions() - fileprivate var segmentioStyle = SegmentioStyle.ImageOverLabel + fileprivate var segmentioStyle = SegmentioStyle.imageOverLabel fileprivate var isPerformingScrollAnimation = false fileprivate var topSeparatorView: UIView? @@ -110,12 +110,12 @@ open class Segmentio: UIView { collectionView.showsVerticalScrollIndicator = false collectionView.bounces = true collectionView.isScrollEnabled = segmentioOptions.scrollEnabled - collectionView.backgroundColor = UIColor.clear + collectionView.backgroundColor = .clear segmentioCollectionView = collectionView if let segmentioCollectionView = segmentioCollectionView { - addSubview(segmentioCollectionView, options: .Overlay) + addSubview(segmentioCollectionView, options: .overlay) } } @@ -168,7 +168,7 @@ open class Segmentio: UIView { backgroundColor = options.backgroundColor } - if segmentioOptions.states.selectedState.backgroundColor != UIColor.clear { + if segmentioOptions.states.selectedState.backgroundColor != .clear { selectedLayer = CAShapeLayer() if let selectedLayer = selectedLayer, let sublayer = segmentioCollectionView?.layer { setupShapeLayer( @@ -203,12 +203,12 @@ open class Segmentio: UIView { setupHorizontalSeparatorIfPossible() } - open func setupBadgeAtIndex(_ index: Int, count: Int, color: UIColor) { - segmentioItems[index].setupBadgeWithCount(count, color: color) + open func addBadge(at index: Int, count: Int, color: UIColor = .red) { + segmentioItems[index].addBadge(count, color: color) segmentioCollectionView?.reloadData() } - open func removeBadgeAtIndex(_ index: Int) { + open func removeBadge(at index: Int) { segmentioItems[index].removeBadge() segmentioCollectionView?.reloadData() } @@ -218,17 +218,17 @@ open class Segmentio: UIView { fileprivate func setupCellWithStyle(_ style: SegmentioStyle) { var cellClass: SegmentioCell.Type { switch style { - case .OnlyLabel: + case .onlyLabel: return SegmentioCellWithLabel.self - case .OnlyImage: + case .onlyImage: return SegmentioCellWithImage.self - case .ImageOverLabel: + case .imageOverLabel: return SegmentioCellWithImageOverLabel.self - case .ImageUnderLabel: + case .imageUnderLabel: return SegmentioCellWithImageUnderLabel.self - case .ImageBeforeLabel: + case .imageBeforeLabel: return SegmentioCellWithImageBeforeLabel.self - case .ImageAfterLabel: + case .imageAfterLabel: return SegmentioCellWithImageAfterLabel.self } } @@ -547,7 +547,7 @@ open class Segmentio: UIView { extension Segmentio: UICollectionViewDataSource { public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return segmentioItems.count ?? 0 + return segmentioItems.count } public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { @@ -556,13 +556,13 @@ extension Segmentio: UICollectionViewDataSource { for: indexPath) as! SegmentioCell cell.configure( - content: segmentioItems[(indexPath as NSIndexPath).row], + content: segmentioItems[indexPath.row], style: segmentioStyle, options: segmentioOptions, - isLastCell: (indexPath as NSIndexPath).row == segmentioItems.count - 1 + isLastCell: indexPath.row == segmentioItems.count - 1 ) - cell.configure(selected: ((indexPath as NSIndexPath).row == selectedSegmentioIndex)) + cell.configure(selected: (indexPath.row == selectedSegmentioIndex)) return cell } @@ -578,7 +578,7 @@ extension Segmentio: UICollectionViewDelegate { } public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - selectedSegmentioIndex = (indexPath as NSIndexPath).row + selectedSegmentioIndex = indexPath.row } } @@ -589,10 +589,7 @@ extension Segmentio: UICollectionViewDelegateFlowLayout { public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let maxVisibleItems = segmentioOptions.maxVisibleItems > segmentioItems.count ? CGFloat(segmentioItems.count) : CGFloat(segmentioOptions.maxVisibleItems) - return CGSize( - width: floor(collectionView.frame.width / maxVisibleItems), - height: collectionView.frame.height - ) + return CGSize( width: floor(collectionView.frame.width / maxVisibleItems), height: collectionView.frame.height) } } @@ -602,7 +599,7 @@ extension Segmentio: UICollectionViewDelegateFlowLayout { extension Segmentio: UIScrollViewDelegate { public func scrollViewDidScroll(_ scrollView: UIScrollView) { - if isPerformingScrollAnimation == true { + if isPerformingScrollAnimation { return } diff --git a/Segmentio/Source/SegmentioOptions.swift b/Segmentio/Source/SegmentioOptions.swift index ebf4ffb..57ddb0a 100644 --- a/Segmentio/Source/SegmentioOptions.swift +++ b/Segmentio/Source/SegmentioOptions.swift @@ -11,6 +11,7 @@ import UIKit // MARK: - Item public struct SegmentioItem { + var title: String? var image: UIImage? var badgeCount: Int? @@ -21,7 +22,7 @@ public struct SegmentioItem { self.image = image } - public mutating func setupBadgeWithCount(_ count: Int, color: UIColor = .red) { + public mutating func addBadge(_ count: Int, color: UIColor) { self.badgeCount = count self.badgeColor = color } @@ -36,14 +37,15 @@ public struct SegmentioItem { // MARK: - Content view public struct SegmentioState { + var backgroundColor: UIColor var titleFont: UIFont var titleTextColor: UIColor public init( - backgroundColor: UIColor = UIColor.clear, + backgroundColor: UIColor = .clear, titleFont: UIFont = UIFont.systemFont(ofSize: UIFont.smallSystemFontSize), - titleTextColor: UIColor = UIColor.black) { + titleTextColor: UIColor = .black) { self.backgroundColor = backgroundColor self.titleFont = titleFont self.titleTextColor = titleTextColor @@ -54,18 +56,20 @@ public struct SegmentioState { // MARK: - Horizontal separator public enum SegmentioHorizontalSeparatorType { - case top, bottom, topAndBottom + + case top + case bottom + case topAndBottom + } public struct SegmentioHorizontalSeparatorOptions { + var type: SegmentioHorizontalSeparatorType var height: CGFloat var color: UIColor - public init( - type: SegmentioHorizontalSeparatorType = .topAndBottom, - height: CGFloat = 1.0, - color: UIColor = UIColor.darkGray) { + public init(type: SegmentioHorizontalSeparatorType = .topAndBottom, height: CGFloat = 1.0, color: UIColor = .darkGray) { self.type = type self.height = height self.color = color @@ -76,10 +80,11 @@ public struct SegmentioHorizontalSeparatorOptions { // MARK: - Vertical separator public struct SegmentioVerticalSeparatorOptions { + var ratio: CGFloat var color: UIColor - public init(ratio: CGFloat = 1.0, color: UIColor = UIColor.darkGray) { + public init(ratio: CGFloat = 1.0, color: UIColor = .darkGray) { self.ratio = ratio self.color = color } @@ -89,20 +94,20 @@ public struct SegmentioVerticalSeparatorOptions { // MARK: - Indicator public enum SegmentioIndicatorType { - case top, bottom + + case top + case bottom + } public struct SegmentioIndicatorOptions { + var type: SegmentioIndicatorType var ratio: CGFloat var height: CGFloat var color: UIColor - public init( - type: SegmentioIndicatorType = .bottom, - ratio: CGFloat = 1.0, - height: CGFloat = 2.0, - color: UIColor = UIColor.orange) { + public init(type: SegmentioIndicatorType = .bottom, ratio: CGFloat = 1.0, height: CGFloat = 2.0, color: UIColor = .orange) { self.type = type self.ratio = ratio self.height = height @@ -114,20 +119,21 @@ public struct SegmentioIndicatorOptions { // MARK: - Control options public enum SegmentioStyle: String { - case OnlyLabel, OnlyImage, ImageOverLabel, ImageUnderLabel, ImageBeforeLabel, ImageAfterLabel + + case onlyLabel, onlyImage, imageOverLabel, imageUnderLabel, imageBeforeLabel, imageAfterLabel public static let allStyles = [ - OnlyLabel, - OnlyImage, - ImageOverLabel, - ImageUnderLabel, - ImageBeforeLabel, - ImageAfterLabel + onlyLabel, + onlyImage, + imageOverLabel, + imageUnderLabel, + imageBeforeLabel, + imageAfterLabel ] public func isWithText() -> Bool { switch self { - case .OnlyLabel, .ImageOverLabel, .ImageUnderLabel, .ImageBeforeLabel, .ImageAfterLabel: + case .onlyLabel, .imageOverLabel, .imageUnderLabel, .imageBeforeLabel, .imageAfterLabel: return true default: return false @@ -136,7 +142,7 @@ public enum SegmentioStyle: String { public func isWithImage() -> Bool { switch self { - case .ImageOverLabel, .ImageUnderLabel, .ImageBeforeLabel, .ImageAfterLabel, .OnlyImage: + case .imageOverLabel, .imageUnderLabel, .imageBeforeLabel, .imageAfterLabel, .onlyImage: return true default: return false @@ -147,6 +153,7 @@ public enum SegmentioStyle: String { public typealias SegmentioStates = (defaultState: SegmentioState, selectedState: SegmentioState, highlightedState: SegmentioState) public struct SegmentioOptions { + var backgroundColor: UIColor var maxVisibleItems: Int var scrollEnabled: Bool @@ -158,7 +165,7 @@ public struct SegmentioOptions { var states: SegmentioStates public init() { - self.backgroundColor = UIColor.lightGray + self.backgroundColor = .lightGray self.maxVisibleItems = 4 self.scrollEnabled = true