From 854dbd78493d2f92a162d3fa7cf48a7e24a56932 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Jul 2026 13:15:32 +0000 Subject: [PATCH 1/3] Modernize CapsuleView for Swift 5 / current Xcode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tier 1 — compile on modern toolchains + repo hygiene: - Replace deprecated APIs: UIViewAutoresizing -> UIView.AutoresizingMask, UIApplicationLaunchOptionsKey -> UIApplication.LaunchOptionsKey, @UIApplicationMain -> @main, bringSubview(toFront:) -> bringSubviewToFront(_:) - Remove needless force-unwraps and guard the borderColor/shadowColor getters against a nil CGColor (previously could crash) - Bump SWIFT_VERSION to 5.0 and deployment target to iOS 13 - Add .gitignore, untrack committed xcuserdata, update README Tier 2 — internal refactors (public API unchanged): - Collapse duplicate FontType/FontType2 into a single FontSize enum - De-duplicate the custom init by delegating to setupViewDynamic - Table-drive setAllignment via the existing TextAllignment enum - Make IBInspectable didSet observers nil-safe during storyboard decode CI: - Add shared CapsuleView scheme and a GitHub Actions macOS workflow that builds the project for the iOS Simulator Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_0144VuLgTxYEpwYmGWwaCSPV --- .github/workflows/ci.yml | 31 +++ .gitignore | 45 ++++ CapsuleView.xcodeproj/project.pbxproj | 12 +- .../UserInterfaceState.xcuserstate | Bin 102872 -> 0 bytes .../UserInterfaceState.xcuserstate | Bin 48019 -> 0 bytes .../xcschemes/CapsuleView.xcscheme | 76 +++++++ .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 - .../xcschemes/xcschememanagement.plist | 14 -- .../xcdebugger/Breakpoints_v2.xcbkptlist | 71 ------ .../xcschemes/xcschememanagement.plist | 14 -- CapsuleView/AppDelegate.swift | 4 +- .../CapsuleView Files/CapsuleView.swift | 212 ++++++------------ CapsuleView/ViewController.swift | 2 +- README.md | 4 +- 14 files changed, 237 insertions(+), 253 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore delete mode 100644 CapsuleView.xcodeproj/project.xcworkspace/xcuserdata/umarfarooque.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 CapsuleView.xcodeproj/project.xcworkspace/xcuserdata/vinaykharab.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme delete mode 100644 CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist delete mode 100644 CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..18cf3a5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,31 @@ +name: CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + workflow_dispatch: + +jobs: + build: + name: Build + runs-on: macos-14 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Show Xcode version + run: xcodebuild -version + + - name: Build + run: | + set -o pipefail + xcodebuild \ + -project CapsuleView.xcodeproj \ + -scheme CapsuleView \ + -destination 'platform=iOS Simulator,name=iPhone 15,OS=latest' \ + -configuration Debug \ + clean build \ + CODE_SIGNING_ALLOWED=NO diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..507d256 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## User settings +xcuserdata/ + +## Build generated +build/ +DerivedData/ + +## Various settings +*.moved-aside +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 + +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +## Playgrounds +timeline.xctimeline +playground.xcworkspace + +# Swift Package Manager +.build/ +Packages/ +Package.resolved + +# CocoaPods +Pods/ + +# Carthage +Carthage/Build/ + +# macOS +.DS_Store diff --git a/CapsuleView.xcodeproj/project.pbxproj b/CapsuleView.xcodeproj/project.pbxproj index 3057943..ccff563 100644 --- a/CapsuleView.xcodeproj/project.pbxproj +++ b/CapsuleView.xcodeproj/project.pbxproj @@ -117,8 +117,8 @@ 6140E07A201877A90098AC18 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0900; - LastUpgradeCheck = 0900; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; ORGANIZATIONNAME = umarF; TargetAttributes = { 6140E081201877A90098AC18 = { @@ -240,7 +240,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -291,7 +291,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -308,7 +308,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.umarf.capsuleview; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -322,7 +322,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.umarf.capsuleview; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/CapsuleView.xcodeproj/project.xcworkspace/xcuserdata/umarfarooque.xcuserdatad/UserInterfaceState.xcuserstate b/CapsuleView.xcodeproj/project.xcworkspace/xcuserdata/umarfarooque.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 3943f085422d5adb05cc3421b084db9bb9129fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102872 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 W>iPfCfB(~>;{X2p|NoARX#78olf;t% diff --git a/CapsuleView.xcodeproj/project.xcworkspace/xcuserdata/vinaykharab.xcuserdatad/UserInterfaceState.xcuserstate b/CapsuleView.xcodeproj/project.xcworkspace/xcuserdata/vinaykharab.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 758ad995105ace1fc90ea0867cb91f9a747a3900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48019 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 XYpU01{+IR)8}`3D;s3QhYjpnyEl8Zg diff --git a/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme b/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme new file mode 100644 index 0000000..4903be7 --- /dev/null +++ b/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index fe2b454..0000000 --- a/CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcschemes/xcschememanagement.plist b/CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 7b8221d..0000000 --- a/CapsuleView.xcodeproj/xcuserdata/umarfarooque.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - CapsuleView.xcscheme - - orderHint - 0 - - - - diff --git a/CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 41c71a8..0000000 --- a/CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcschemes/xcschememanagement.plist b/CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 7b8221d..0000000 --- a/CapsuleView.xcodeproj/xcuserdata/vinaykharab.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,14 +0,0 @@ - - - - - SchemeUserState - - CapsuleView.xcscheme - - orderHint - 0 - - - - diff --git a/CapsuleView/AppDelegate.swift b/CapsuleView/AppDelegate.swift index e111764..f7ce007 100644 --- a/CapsuleView/AppDelegate.swift +++ b/CapsuleView/AppDelegate.swift @@ -8,13 +8,13 @@ import UIKit -@UIApplicationMain +@main class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } diff --git a/CapsuleView/CapsuleView Files/CapsuleView.swift b/CapsuleView/CapsuleView Files/CapsuleView.swift index 649df26..2fb0efc 100644 --- a/CapsuleView/CapsuleView Files/CapsuleView.swift +++ b/CapsuleView/CapsuleView Files/CapsuleView.swift @@ -12,28 +12,28 @@ import UIKit class CapsuleView: UIView { //MARK:IBOutlets - @IBInspectable var holderTextSize:Int = 0 - @IBInspectable var contentTextSize:Int = 0 + @IBInspectable var holderTextSize: Int = 0 + @IBInspectable var contentTextSize: Int = 0 @IBOutlet weak var placeholderLabel: UILabel! @IBOutlet weak var mainContent: UILabel! @IBOutlet weak var closeButton: UIButton! @IBOutlet weak var capsuleViewBG: UIView! - + //MARK: Other variables var placeholderAllignment = 0 var contentAllignment = 0 var placeHolderNOL = 0 var contentNOL = 0 - let nibName :String? = "CapsuleView" - var contentView : UIView? - + let nibName: String? = "CapsuleView" + var contentView: UIView? + //MARK:Show cross button @IBInspectable var showCross: Bool = true { didSet { - self.closeButton.isHidden = !showCross + closeButton?.isHidden = !showCross } } - + //MARK:Placeholder Text Allignment @IBInspectable var placeTextAllign: Int = 0 { didSet { @@ -46,28 +46,28 @@ class CapsuleView: UIView { self.contentAllignment = contentTextAllign } } - + //MARK:Placeholder Text @IBInspectable var placeHoldText: String = "" { didSet { - self.placeholderLabel.text! = placeHoldText + placeholderLabel?.text = placeHoldText } } - + //MARK:Content Text - @IBInspectable var contentText: String = "" { + @IBInspectable var contentText: String = "" { didSet { - self.mainContent.text! = contentText + mainContent?.text = contentText } } - + //MARK:Background Color @IBInspectable var bgColor: UIColor? = UIColor.clear { didSet { - self.backgroundColor = bgColor! + self.backgroundColor = bgColor } } - + //MARK:TextAllignment Enum enum TextAllignment: Int { case left @@ -80,46 +80,29 @@ class CapsuleView: UIView { super.init(frame: frame) xibSetup() } - + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) xibSetup() } - - + + //MARK: Custom init method - init(placeholderText:String, contentText: String, cardColor:UIColor, textColor: UIColor, shadowColor: UIColor, shadowOpacity: Float, shadowRadius: Double, cardRadius: Double,shadowOffset: CGSize,textAllignment:Int,showCross: Bool,viewFrame: CGRect,placeHolderSize:Int,titleSize: Int) { + init(placeholderText: String, contentText: String, cardColor: UIColor, textColor: UIColor, shadowColor: UIColor, shadowOpacity: Float, shadowRadius: Double, cardRadius: Double, shadowOffset: CGSize, textAllignment: Int, showCross: Bool, viewFrame: CGRect, placeHolderSize: Int, titleSize: Int) { super.init(frame: viewFrame) xibSetup() - self.backgroundColor = cardColor - self.mainContent.textColor = textColor - self.placeholderLabel.textColor = textColor - self.contentText = contentText - self.placeHoldText = placeholderText - self.shadowColor = shadowColor - self.shadowRadius = shadowRadius - self.shadowOffset = shadowOffset - self.cornerRadius = cardRadius - self.shadowOpacity = shadowOpacity - self.contentAllignment = textAllignment - self.placeholderAllignment = textAllignment - self.closeButton.isHidden = !showCross - self.holderTextSize = placeHolderSize - self.contentTextSize = titleSize - setAllignment() - self.setupView() - + setupViewDynamic(placeholderText: placeholderText, contentText: contentText, cardColor: cardColor, textColor: textColor, shadowColor: shadowColor, shadowOpacity: shadowOpacity, shadowRadius: shadowRadius, cardRadius: cardRadius, shadowOffset: shadowOffset, textAllignment: textAllignment, showCross: showCross, placeHolderSize: placeHolderSize, titleSize: titleSize) } - - + + func xibSetup() { contentView = loadViewFromNib() contentView!.frame = self.bounds - contentView!.autoresizingMask = [UIViewAutoresizing.flexibleWidth, UIViewAutoresizing.flexibleHeight] + contentView!.autoresizingMask = [UIView.AutoresizingMask.flexibleWidth, UIView.AutoresizingMask.flexibleHeight] self.setupView() self.addSubview(contentView!) } - + func loadViewFromNib() -> UIView? { guard let nibName = nibName else { return nil } let bundle = Bundle(for: type(of: self)) @@ -131,31 +114,28 @@ class CapsuleView: UIView { //MARK: Helper Function to update view in storyboard override func prepareForInterfaceBuilder() { - placeholderLabel.font = FontType.getFont(rawValue: holderTextSize) - mainContent.font = FontType2.getFont(rawValue: contentTextSize) + placeholderLabel.font = FontSize.placeholderFont(forRawValue: holderTextSize) + mainContent.font = FontSize.contentFont(forRawValue: contentTextSize) self.placeholderLabel.text = placeHoldText self.mainContent.text = contentText self.setupView() } - + //MARK: Helper Function to setup view - func setupView(){ + func setupView() { self.placeholderLabel.text = placeHoldText self.mainContent.text = contentText self.placeholderLabel.numberOfLines = placeHolderNOL self.mainContent.numberOfLines = contentNOL - placeholderLabel.font = FontType.getFont(rawValue: holderTextSize) - mainContent.font = FontType2.getFont(rawValue: contentTextSize) - self.placeholderLabel.text = placeHoldText - self.mainContent.text = contentText + placeholderLabel.font = FontSize.placeholderFont(forRawValue: holderTextSize) + mainContent.font = FontSize.contentFont(forRawValue: contentTextSize) setAllignment() self.updateConstraints() self.layoutIfNeeded() - } //MARK: Helper Function to set dynamic view - func setupViewDynamic(placeholderText:String, contentText: String, cardColor:UIColor, textColor: UIColor, shadowColor: UIColor, shadowOpacity: Float, shadowRadius: Double, cardRadius: Double,shadowOffset: CGSize,textAllignment:Int,showCross: Bool,placeHolderSize:Int,titleSize: Int){ + func setupViewDynamic(placeholderText: String, contentText: String, cardColor: UIColor, textColor: UIColor, shadowColor: UIColor, shadowOpacity: Float, shadowRadius: Double, cardRadius: Double, shadowOffset: CGSize, textAllignment: Int, showCross: Bool, placeHolderSize: Int, titleSize: Int) { self.backgroundColor = cardColor self.mainContent.textColor = textColor self.placeholderLabel.textColor = textColor @@ -163,7 +143,7 @@ class CapsuleView: UIView { self.placeHoldText = placeholderText self.shadowColor = shadowColor self.shadowRadius = shadowRadius - self.shadowOffset = shadowOffset + self.shadowOffset = shadowOffset self.cornerRadius = cardRadius self.shadowOpacity = shadowOpacity self.contentAllignment = textAllignment @@ -174,33 +154,26 @@ class CapsuleView: UIView { self.setupView() } //MARK: Function to set text allignment - func setAllignment(){ - switch contentAllignment { - case 0: - mainContent.textAlignment = .left - case 1: - mainContent.textAlignment = .right - case 2: - mainContent.textAlignment = .center - default: - mainContent.textAlignment = .left - } - switch placeholderAllignment { - case 0: - placeholderLabel.textAlignment = .left - case 1: - placeholderLabel.textAlignment = .right - case 2: - placeholderLabel.textAlignment = .center - default: - placeholderLabel.textAlignment = .left + func setAllignment() { + mainContent.textAlignment = textAlignment(for: contentAllignment) + placeholderLabel.textAlignment = textAlignment(for: placeholderAllignment) + } + + private func textAlignment(for rawValue: Int) -> NSTextAlignment { + switch TextAllignment(rawValue: rawValue) { + case .right: + return .right + case .center: + return .center + case .left, .none: + return .left } } - + } extension CapsuleView { - + //MARK: Layer's corner radius @IBInspectable var cornerRadius: Double { get { @@ -222,7 +195,8 @@ extension CapsuleView { //MARK: The color of the layer's border. Defaults to opaque black. Colors created from tiled patterns are supported. Animatable. @IBInspectable var borderColor: UIColor? { get { - return UIColor(cgColor: self.layer.borderColor!) + guard let borderColor = self.layer.borderColor else { return nil } + return UIColor(cgColor: borderColor) } set { self.layer.borderColor = newValue?.cgColor @@ -231,13 +205,14 @@ extension CapsuleView { //MARK: The color of the shadow. Defaults to opaque black. Colors created from patterns are currently NOT supported. Animatable. @IBInspectable var shadowColor: UIColor? { get { - return UIColor(cgColor: self.layer.shadowColor!) + guard let shadowColor = self.layer.shadowColor else { return nil } + return UIColor(cgColor: shadowColor) } set { self.layer.shadowColor = newValue?.cgColor } } - + //MARK: The opacity of the shadow. Defaults to 0. Specifying a value outside the [0,1] range will give undefined results. Animatable. @IBInspectable var shadowOpacity: Float { get { @@ -247,7 +222,7 @@ extension CapsuleView { self.layer.shadowOpacity = newValue } } - + //MARK: The shadow offset. Defaults to (0, -3). Animatable. @IBInspectable var shadowOffset: CGSize { get { @@ -257,7 +232,7 @@ extension CapsuleView { self.layer.shadowOffset = newValue } } - + //MARK: The blur radius used to create the shadow. Defaults to 3. Animatable. @IBInspectable var shadowRadius: Double { get { @@ -267,68 +242,29 @@ extension CapsuleView { self.layer.shadowRadius = CGFloat(newValue) } } - - //MARK:Content Font size - enum FontType2: Int { + + //MARK: Font sizes for the placeholder and content labels + enum FontSize: Int { case mini = 0, small, medium, def, large, huge - - var contentHolderFont: UIFont { - switch self { - case .mini: - return UIFont.systemFont(ofSize: 18, weight: .heavy) - case .small: - return UIFont.systemFont(ofSize: 25, weight: .heavy) - case .medium: - return UIFont.systemFont(ofSize: 30, weight: .heavy) - case .def: - return UIFont.systemFont(ofSize: 35, weight: .heavy) - case .large: - return UIFont.systemFont(ofSize: 40, weight: .heavy) - case .huge: - return UIFont.systemFont(ofSize: 45, weight: .heavy) - } + + private static let placeholderPointSizes: [CGFloat] = [8, 11, 15, 20, 25, 30] + private static let contentPointSizes: [CGFloat] = [18, 25, 30, 35, 40, 45] + + var placeholderFont: UIFont { + return UIFont.systemFont(ofSize: FontSize.placeholderPointSizes[rawValue], weight: .heavy) } - - - static func getFont(rawValue: Int) -> UIFont { - if let fontType2 = FontType2(rawValue: rawValue) { - return fontType2.contentHolderFont - } - return FontType2.mini.contentHolderFont + + var contentFont: UIFont { + return UIFont.systemFont(ofSize: FontSize.contentPointSizes[rawValue], weight: .heavy) } - } - - //MARK:Placeholder Font size - enum FontType: Int { - case mini = 0, small, medium, def, large, huge - - var placeHolderFont: UIFont { - switch self { - case .mini: - return UIFont.systemFont(ofSize: 8, weight: .heavy) - case .small: - return UIFont.systemFont(ofSize: 11, weight: .heavy) - case .medium: - return UIFont.systemFont(ofSize: 15, weight: .heavy) - case .def: - return UIFont.systemFont(ofSize: 20, weight: .heavy) - case .large: - return UIFont.systemFont(ofSize: 25, weight: .heavy) - case .huge: - return UIFont.systemFont(ofSize: 30, weight: .heavy) - } + + static func placeholderFont(forRawValue rawValue: Int) -> UIFont { + return (FontSize(rawValue: rawValue) ?? .mini).placeholderFont } - - - static func getFont(rawValue: Int) -> UIFont { - if let fontType = FontType(rawValue: rawValue) { - return fontType.placeHolderFont - } - return FontType.mini.placeHolderFont + + static func contentFont(forRawValue rawValue: Int) -> UIFont { + return (FontSize(rawValue: rawValue) ?? .mini).contentFont } } - - -} - +} diff --git a/CapsuleView/ViewController.swift b/CapsuleView/ViewController.swift index 8ed8623..f9ab687 100644 --- a/CapsuleView/ViewController.swift +++ b/CapsuleView/ViewController.swift @@ -36,7 +36,7 @@ class ViewController: UIViewController { let capsuleViewFrame = CGRect(x: 50, y: 200, width: 300, height: 300) let capsuleView = CapsuleView(placeholderText: "Address", contentText: "31st street,\nPark Avenue,\n 46/6,\n New York,\n USA", cardColor: UIColor(red: 0.075, green: 0.561, blue: 0.325, alpha: 1.00), textColor: UIColor.white, shadowColor: UIColor.darkGray, shadowOpacity: 9, shadowRadius: 9, cardRadius: 9, shadowOffset: CGSize(width: 0, height: 0), textAllignment: 1, showCross: false, viewFrame: capsuleViewFrame,placeHolderSize:4,titleSize: 3) self.view.addSubview(capsuleView) - self.view.bringSubview(toFront: capsuleView) + self.view.bringSubviewToFront(capsuleView) */ } diff --git a/README.md b/README.md index 9df7840..4ae7b86 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ An easy to use drop-in view to create a beautiful card style effect with a title - Supports IBDesignable - Full controls available in storyboard - Can be used programatically - - Swift 3.0 + support + - Swift 5 support ![Gif]( @@ -65,7 +65,7 @@ https://github.com/umarF/capsuleview/blob/master/screenshots/Screen%20Shot%20201 let capsuleViewFrame = CGRect(x: 50, y: 200, width: 300, height: 300) let capsuleView = CapsuleView(placeholderText: "Address", contentText: "31st street,\nPark Avenue,\n 46/6,\n New York,\n USA", cardColor: UIColor(red: 0.075, green: 0.561, blue: 0.325, alpha: 1.00), textColor: UIColor.white, shadowColor: UIColor.darkGray, shadowOpacity: 9, shadowRadius: 9, cardRadius: 9, shadowOffset: CGSize(width: 0, height: 0), textAllignment: 1, showCross: false, viewFrame: capsuleViewFrame,placeHolderSize:4,titleSize: 3) self.view.addSubview(capsuleView) - self.view.bringSubview(toFront: capsuleView) + self.view.bringSubviewToFront(capsuleView) ``` From 8dfe6f4da61f4066dfcb34ba90190b40599f6cfc Mon Sep 17 00:00:00 2001 From: Umar Farooque <6275920+umarF@users.noreply.github.com> Date: Wed, 29 Jul 2026 11:21:55 +0200 Subject: [PATCH 2/3] Working updated changes --- CapsuleView.xcodeproj/SceneDelegate.swift | 27 +++++++++++++++++++++++ CapsuleView/SceneDelegate.swift | 23 +++++++++++++++++++ SceneDelegate.swift | 23 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 CapsuleView.xcodeproj/SceneDelegate.swift create mode 100644 CapsuleView/SceneDelegate.swift create mode 100644 SceneDelegate.swift diff --git a/CapsuleView.xcodeproj/SceneDelegate.swift b/CapsuleView.xcodeproj/SceneDelegate.swift new file mode 100644 index 0000000..293c97d --- /dev/null +++ b/CapsuleView.xcodeproj/SceneDelegate.swift @@ -0,0 +1,27 @@ +// SceneDelegate.swift +// CapsuleView +// +// Created for UIScene lifecycle adoption. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard let windowScene = scene as? UIWindowScene else { return } + let window = UIWindow(windowScene: windowScene) + // Set the root view controller to your main controller, e.g. ViewController + window.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() + self.window = window + window.makeKeyAndVisible() + } + + func sceneDidDisconnect(_ scene: UIScene) {} + func sceneDidBecomeActive(_ scene: UIScene) {} + func sceneWillResignActive(_ scene: UIScene) {} + func sceneWillEnterForeground(_ scene: UIScene) {} + func sceneDidEnterBackground(_ scene: UIScene) {} +} diff --git a/CapsuleView/SceneDelegate.swift b/CapsuleView/SceneDelegate.swift new file mode 100644 index 0000000..869bc98 --- /dev/null +++ b/CapsuleView/SceneDelegate.swift @@ -0,0 +1,23 @@ +// SceneDelegate.swift +// CapsuleView +// +// Created for UIScene lifecycle adoption. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard scene is UIWindowScene else { return } + // Window and root view controller are automatically set from the storyboard. + } + + func sceneDidDisconnect(_ scene: UIScene) {} + func sceneDidBecomeActive(_ scene: UIScene) {} + func sceneWillResignActive(_ scene: UIScene) {} + func sceneWillEnterForeground(_ scene: UIScene) {} + func sceneDidEnterBackground(_ scene: UIScene) {} +} diff --git a/SceneDelegate.swift b/SceneDelegate.swift new file mode 100644 index 0000000..869bc98 --- /dev/null +++ b/SceneDelegate.swift @@ -0,0 +1,23 @@ +// SceneDelegate.swift +// CapsuleView +// +// Created for UIScene lifecycle adoption. +// + +import UIKit + +class SceneDelegate: UIResponder, UIWindowSceneDelegate { + + var window: UIWindow? + + func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + guard scene is UIWindowScene else { return } + // Window and root view controller are automatically set from the storyboard. + } + + func sceneDidDisconnect(_ scene: UIScene) {} + func sceneDidBecomeActive(_ scene: UIScene) {} + func sceneWillResignActive(_ scene: UIScene) {} + func sceneWillEnterForeground(_ scene: UIScene) {} + func sceneDidEnterBackground(_ scene: UIScene) {} +} From 2abf0d91462290751ff4e8c1a64c07bd80d83376 Mon Sep 17 00:00:00 2001 From: Umar Farooque <6275920+umarF@users.noreply.github.com> Date: Wed, 29 Jul 2026 11:25:59 +0200 Subject: [PATCH 3/3] additional working changes --- CapsuleView.xcodeproj/SceneDelegate.swift | 27 ---------------- CapsuleView.xcodeproj/project.pbxproj | 32 ++++++++++++++++--- .../contents.xcworkspacedata | 2 +- .../xcschemes/CapsuleView.xcscheme | 6 ++-- CapsuleView/AppDelegate.swift | 7 +--- CapsuleView/Info.plist | 19 +++++++++++ SceneDelegate.swift | 23 ------------- 7 files changed, 52 insertions(+), 64 deletions(-) delete mode 100644 CapsuleView.xcodeproj/SceneDelegate.swift delete mode 100644 SceneDelegate.swift diff --git a/CapsuleView.xcodeproj/SceneDelegate.swift b/CapsuleView.xcodeproj/SceneDelegate.swift deleted file mode 100644 index 293c97d..0000000 --- a/CapsuleView.xcodeproj/SceneDelegate.swift +++ /dev/null @@ -1,27 +0,0 @@ -// SceneDelegate.swift -// CapsuleView -// -// Created for UIScene lifecycle adoption. -// - -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - guard let windowScene = scene as? UIWindowScene else { return } - let window = UIWindow(windowScene: windowScene) - // Set the root view controller to your main controller, e.g. ViewController - window.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() - self.window = window - window.makeKeyAndVisible() - } - - func sceneDidDisconnect(_ scene: UIScene) {} - func sceneDidBecomeActive(_ scene: UIScene) {} - func sceneWillResignActive(_ scene: UIScene) {} - func sceneWillEnterForeground(_ scene: UIScene) {} - func sceneDidEnterBackground(_ scene: UIScene) {} -} diff --git a/CapsuleView.xcodeproj/project.pbxproj b/CapsuleView.xcodeproj/project.pbxproj index ccff563..d769d09 100644 --- a/CapsuleView.xcodeproj/project.pbxproj +++ b/CapsuleView.xcodeproj/project.pbxproj @@ -3,10 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ + 272592DD3019FCFC004C6C46 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 272592DC3019FCFC004C6C46 /* SceneDelegate.swift */; }; 6140E086201877A90098AC18 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6140E085201877A90098AC18 /* AppDelegate.swift */; }; 6140E088201877A90098AC18 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6140E087201877A90098AC18 /* ViewController.swift */; }; 6140E08B201877A90098AC18 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6140E089201877A90098AC18 /* Main.storyboard */; }; @@ -17,6 +18,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 272592DC3019FCFC004C6C46 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 6140E082201877A90098AC18 /* CapsuleView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CapsuleView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6140E085201877A90098AC18 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 6140E087201877A90098AC18 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -78,6 +80,7 @@ 6140E08C201877A90098AC18 /* Assets.xcassets */, 6140E08E201877A90098AC18 /* LaunchScreen.storyboard */, 6140E091201877A90098AC18 /* Info.plist */, + 272592DC3019FCFC004C6C46 /* SceneDelegate.swift */, ); path = CapsuleView; sourceTree = ""; @@ -117,8 +120,9 @@ 6140E07A201877A90098AC18 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1500; - LastUpgradeCheck = 1500; + LastUpgradeCheck = 2660; ORGANIZATIONNAME = umarF; TargetAttributes = { 6140E081201877A90098AC18 = { @@ -167,6 +171,7 @@ 6140E0AA20187C9D0098AC18 /* CapsuleView.swift in Sources */, 6140E088201877A90098AC18 /* ViewController.swift in Sources */, 6140E086201877A90098AC18 /* AppDelegate.swift in Sources */, + 272592DD3019FCFC004C6C46 /* SceneDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -206,6 +211,7 @@ 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; @@ -213,8 +219,10 @@ 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -226,6 +234,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -244,6 +253,7 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -263,6 +273,7 @@ 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; @@ -270,8 +281,10 @@ 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -283,6 +296,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -294,7 +308,9 @@ IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; @@ -305,7 +321,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = CapsuleView/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.umarf.capsuleview; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -319,7 +338,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = CapsuleView/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); PRODUCT_BUNDLE_IDENTIFIER = com.umarf.capsuleview; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; diff --git a/CapsuleView.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/CapsuleView.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 10d7b70..919434a 100644 --- a/CapsuleView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/CapsuleView.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme b/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme index 4903be7..ac60d31 100644 --- a/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme +++ b/CapsuleView.xcodeproj/xcshareddata/xcschemes/CapsuleView.xcscheme @@ -1,7 +1,7 @@ + LastUpgradeVersion = "2660" + version = "1.3"> @@ -27,6 +27,8 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + Bool { // Override point for customization after application launch. @@ -43,4 +39,3 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } - diff --git a/CapsuleView/Info.plist b/CapsuleView/Info.plist index 16be3b6..080e1ab 100644 --- a/CapsuleView/Info.plist +++ b/CapsuleView/Info.plist @@ -41,5 +41,24 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + $(PRODUCT_MODULE_NAME).SceneDelegate + UISceneStoryboardFile + Main + + + + diff --git a/SceneDelegate.swift b/SceneDelegate.swift deleted file mode 100644 index 869bc98..0000000 --- a/SceneDelegate.swift +++ /dev/null @@ -1,23 +0,0 @@ -// SceneDelegate.swift -// CapsuleView -// -// Created for UIScene lifecycle adoption. -// - -import UIKit - -class SceneDelegate: UIResponder, UIWindowSceneDelegate { - - var window: UIWindow? - - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { - guard scene is UIWindowScene else { return } - // Window and root view controller are automatically set from the storyboard. - } - - func sceneDidDisconnect(_ scene: UIScene) {} - func sceneDidBecomeActive(_ scene: UIScene) {} - func sceneWillResignActive(_ scene: UIScene) {} - func sceneWillEnterForeground(_ scene: UIScene) {} - func sceneDidEnterBackground(_ scene: UIScene) {} -}