diff --git a/CoachMarksKit.podspec b/CoachMarksKit.podspec index c6d6d58..662ebda 100644 --- a/CoachMarksKit.podspec +++ b/CoachMarksKit.podspec @@ -16,7 +16,7 @@ Pod::Spec.new do |s| # s.name = "CoachMarksKit" - s.version = "1.0.2" + s.version = "1.0.3" s.summary = "Quick and easy coach marks built in Swift." # This description is used to generate tags and improve search results. @@ -136,6 +136,6 @@ Pod::Spec.new do |s| # s.dependency "JSONKit", "~> 1.4" - s.pod_target_xcconfig = { "SWIFT_VERSION" => "3.2" } + s.pod_target_xcconfig = { "SWIFT_VERSION" => "4.2" } end diff --git a/Source/CoachMarks.xcodeproj/project.pbxproj b/Source/CoachMarks.xcodeproj/project.pbxproj index 1f5aac9..454fc51 100644 --- a/Source/CoachMarks.xcodeproj/project.pbxproj +++ b/Source/CoachMarks.xcodeproj/project.pbxproj @@ -152,18 +152,17 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0810; - LastUpgradeCheck = 0810; + LastUpgradeCheck = 1010; ORGANIZATIONNAME = "Darin Doria"; TargetAttributes = { 93674F5E1EF0D996000C8E45 = { CreatedOnToolsVersion = 8.1; - DevelopmentTeam = E666Y9RBZF; - LastSwiftMigration = 0810; + LastSwiftMigration = 1010; ProvisioningStyle = Automatic; }; 93674F671EF0D996000C8E45 = { CreatedOnToolsVersion = 8.1; - DevelopmentTeam = E666Y9RBZF; + LastSwiftMigration = 1010; ProvisioningStyle = Automatic; }; }; @@ -242,15 +241,24 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -295,15 +303,24 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; @@ -338,7 +355,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = E666Y9RBZF; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -349,7 +366,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0.1; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Debug; }; @@ -359,7 +377,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = E666Y9RBZF; + DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -369,7 +387,8 @@ PRODUCT_BUNDLE_IDENTIFIER = com.ddoria921.CoachMarks; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0.1; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Release; }; @@ -377,12 +396,13 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - DEVELOPMENT_TEAM = E666Y9RBZF; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = CoachMarksTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ddoria921.CoachMarksTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Debug; }; @@ -390,12 +410,13 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - DEVELOPMENT_TEAM = E666Y9RBZF; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = CoachMarksTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.ddoria921.CoachMarksTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = Default; + SWIFT_VERSION = 4.2; }; name = Release; }; diff --git a/Source/CoachMarks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Source/CoachMarks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Source/CoachMarks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Source/CoachMarks/BubbleView.swift b/Source/CoachMarks/BubbleView.swift index a52c3a1..a4a546f 100644 --- a/Source/CoachMarks/BubbleView.swift +++ b/Source/CoachMarks/BubbleView.swift @@ -123,7 +123,7 @@ class BubbleView: UIView { } let boundingSize = CGSize(width: frame.size.width - widthDelta - textPadding * 3.0, height: CGFloat.greatestFiniteMagnitude) - let result = NSString(string: text!).boundingRect(with: boundingSize, options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName : font], context: nil).size + let result = NSString(string: text!).boundingRect(with: boundingSize, options: .usesLineFragmentOrigin, attributes: convertToOptionalNSAttributedStringKeyDictionary([convertFromNSAttributedStringKey(NSAttributedString.Key.font) : font]), context: nil).size return CGSize(width: result.width + textPadding * 3.0, height: result.height + textPadding * 2.5) } @@ -284,3 +284,14 @@ class BubbleView: UIView { frame = CGRect(x: x, y: y, width: width, height: height) } } + +// Helper function inserted by Swift 4.2 migrator. +fileprivate func convertToOptionalNSAttributedStringKeyDictionary(_ input: [String: Any]?) -> [NSAttributedString.Key: Any]? { + guard let input = input else { return nil } + return Dictionary(uniqueKeysWithValues: input.map { key, value in (NSAttributedString.Key(rawValue: key), value)}) +} + +// Helper function inserted by Swift 4.2 migrator. +fileprivate func convertFromNSAttributedStringKey(_ input: NSAttributedString.Key) -> String { + return input.rawValue +} diff --git a/Source/CoachMarks/CoachMarksView.swift b/Source/CoachMarks/CoachMarksView.swift index 9d64f3b..758821d 100644 --- a/Source/CoachMarks/CoachMarksView.swift +++ b/Source/CoachMarks/CoachMarksView.swift @@ -61,7 +61,7 @@ public class CoachMarksView: UIView { /// Configures overlay and touch gesture recognizers func setup() { // Overlay config - overlay.fillRule = kCAFillRuleEvenOdd + overlay.fillRule = CAShapeLayerFillRule.evenOdd overlay.fillColor = UIColor(white: 0.0, alpha: 0.8).cgColor layer.addSublayer(overlay) @@ -140,10 +140,10 @@ public class CoachMarksView: UIView { // Animate it let anim = CABasicAnimation(keyPath: "path") anim.delegate = self - anim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) + anim.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut) anim.duration = CFTimeInterval(animationDuration) anim.isRemovedOnCompletion = false - anim.fillMode = kCAFillModeForwards + anim.fillMode = CAMediaTimingFillMode.forwards anim.fromValue = overlay.path anim.toValue = maskPath.cgPath overlay.add(anim, forKey: "path") @@ -257,7 +257,7 @@ public class CoachMarksView: UIView { // MARK:- Gestures - func userDidTap(_ recognizer: UIGestureRecognizer) { + @objc func userDidTap(_ recognizer: UIGestureRecognizer) { delegate?.didTap(at: markIndex) // Go to the next coach mark diff --git a/Source/CoachMarks/FocusView.swift b/Source/CoachMarks/FocusView.swift index 193a16d..7c77fa5 100644 --- a/Source/CoachMarks/FocusView.swift +++ b/Source/CoachMarks/FocusView.swift @@ -58,7 +58,7 @@ class FocusView: UIView { animateSwipe() } - func animateSwipe() { + @objc func animateSwipe() { guard !animationShouldStop else { return }