SwiftUI iOS component for Step Indications.

Last update: Aug 9, 2022

StepperView

SwiftUI iOS component for Step Indications

CI Status License Platform Version Swift Package Manager compatible Carthage compatible documentation Twitter


StepperView


StepperViewLineLifeCycle

Table of Contents

Features

  • Support for Vertical and Horizontal Alignments.
  • iOS and WatchOS capabilities
  • Support for Circle, Image, Custom View, Animated Step Indicators
  • Customizable line,spacing & animation options.
  • Pitstop feature to add intermediate stages between Step Indicators
  • Support for updating the life cycle status for each of the steps

Documentation

StepperView Reference

Installation

To run the example project, clone the repo, and run pod install from the Example directory first.

CocoaPods

StepperView is available through CocoaPods. To install it, simply add the following line to your Podfile.

pod 'StepperView','~> 1.6.7'

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate StepperView into your Xcode project using Carthage, specify it in your Cartfile:

github "badrinathvm/stepperView" == 1.6.7

Swift Package Manager

StepperView is available through Swift Package Manager. To install it, simply add it to the dependencies of your Package.swift

dependencies: [
      .package(url: "https://github.com/badrinathvm/StepperView.git", from: "1.6.7")
]

Requirements

  • iOS 13.0+
  • Xcode 11.2+
  • Swift 5.0+
  • CocoaPods 1.6.1+

Usecase

example1 example2 example2 example2
lifecycle1 lifecycle2 lifecycle3 lifecycle3

iPhone

StepperView StepperViewWithPitStops StepperViewWithMultipleOptions

Apple Watch Support

Watch_StepperView_Vertical Watch_StepperView_Icon Watch_StepperView_Horizontal Watch_StepperView_Pitstop

View Modifiers

.addSteps(_ steps: [View]) : 
          1. list of views to be closer to indicator

.alignments(_ alignments: [StepperAlignment])
          1. optional modifier 
          2. defaults to .center, available with custom options either .top, .center, .bottom
          
.indicatorTypes(_ indicators:[StepperIndicationType]): 
          1. modifier to customize the step indications
          2. provides enum with cases .circle(color, width), .image(Image, width), .custom(AnyView), .animation(AnyView)
          
.lineOptions(_ options: StepperLineOptions): 
          1. line customization `color` , `width` , `corner radius`
          2. Has option of `defaults`, `custom` , `rounded`
          
.spacing(_ value: CGFloat): 
          1. spacing between each of the step views either vertically horizontally
          
.autoSpacing(_ value: Bool):
          1. if set to `true` - Dynamically calculates the spacing between each of the steps.
          
.stepIndicatorMode(_ mode: StepperMode): 
          1. Step Indicator display modes either vertical, horizontal
          
.loadingAnimationTime(_ time: Double):
          1. controls the speed of the animation for step Indicator

.stepLifeCycles(_ lifecycle: [StepLifeCycle]):
          1. Can set the life cycle status for each of the step as `completed`, `pending`
              
.addPitStops(_ steps: [View]):
          1. optional modifier
          2. list of views which will be displayed below the step text

.pitStopLineOptions(_ options: [StepperLineOptions])
          1. line customization `color` , `width` , `corner radius`
          
.stepperEdgeInsets(_ value: EdgeInsets)
         1. Provides custiom `leading`, `trailing`, `top` & `bottom` spacing.  

Usage

Vertical Stepper View

import StepperView

let steps = [ Text("Cart").font(.caption),
              Text("Delivery Address").font(.caption),
              Text("Order Summary").font(.caption),
              Text("Payment Method").font(.caption),
              Text("Track").font(.caption)]

let indicationTypes = [StepperIndicationType.custom(NumberedCircleView(text: "1")),
                        .custom(NumberedCircleView(text: "2")),
                        .custom(NumberedCircleView(text: "3")),
                        .custom(NumberedCircleView(text: "4")),
                        .custom(NumberedCircleView(text: "5"))]
                        
var body: some View {
    StepperView()
        .addSteps(steps)
        .indicators(indicationTypes)
        .stepIndicatorMode(StepperMode.vertical)
        .spacing(30)
        .lineOptions(StepperLineOptions.custom(1, Colors.blue(.teal).rawValue))
}

Horizontal Stepper View

import StepperView

let steps = [
    TextView(text: "Card details", font: Font.system(size: 12, weight: Font.Weight.regular)),
    TextView(text: "Application review", font: Font.system(size: 12, weight: Font.Weight.regular)),
    TextView(text: "Authenticate OTP", font: Font.system(size: 12, weight: Font.Weight.regular)),
    TextView(text: "Create password", font: Font.system(size: 12, weight: Font.Weight.regular))
]

let indicators = [
    StepperIndicationType.custom(Image(systemName:"1.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"2.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"3.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"4.circle.fill").font(.largeTitle).eraseToAnyView())
]

var body: some View {
    StepperView()
        .addSteps(steps)
        .indicators(indicators)
        .stepIndicatorMode(StepperMode.horizontal)
        .lineOptions(StepperLineOptions.rounded(4, 8, Color.black)) 
        .stepLifeCycles([StepLifeCycle.completed, .completed, .completed, .pending])
        .spacing(50)
}

Pitstop Stepper View

let steps = [TextView(text:"Manage Tasks", font: .system(size: 14, weight: .semibold)),
             TextView(text:"Branch", font: .system(size: 14, weight: .semibold)),
             TextView(text:"Commit", font: .system(size: 14, weight: .semibold)),
             TextView(text:"Code review", font: .system(size: 14, weight: .semibold)),
             TextView(text:"Merge and release", font: .system(size: 14, weight: .semibold))]

let indicators = [
    StepperIndicationType.custom(Image(systemName:"1.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"2.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"3.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"4.circle.fill").font(.largeTitle).eraseToAnyView()),
    StepperIndicationType.custom(Image(systemName:"5.circle.fill").font(.largeTitle).eraseToAnyView())
]

let pitStopLineOptions = [
    StepperLineOptions.custom(1, Color.black),
    StepperLineOptions.custom(1, Color.black),
    StepperLineOptions.custom(1, Color.black),
    StepperLineOptions.custom(1, Color.black),
    StepperLineOptions.custom(1, Color.black)
]

let pitStops = [
    TextView(text:GithubPitstops.p1).eraseToAnyView(),
    TextView(text:GithubPitstops.p2).eraseToAnyView(),
    TextView(text:GithubPitstops.p3).eraseToAnyView(),
    TextView(text:GithubPitstops.p4).eraseToAnyView(),
    TextView(text:GithubPitstops.p5).eraseToAnyView()
]

var body: some View {
    StepperView()
        .addSteps(steps)
        .indicators(indicators)
        .addPitStops(pitStops)
        .pitStopLineOptions(pitStopLineOptions)
        .spacing(80) // auto calculates spacing between steps based on the content.
        .padding()
}

struct GithubPitstops {
    static var p1 = "Triage Notifications\nBrowse Repos\nCreate an issue"
    static var p2 = "Fork or Clone repo\ngit checkout -b branch\ngit stash"
    static var p3 = "git add -p\ngit diff .\ngit commit -m\ngit push origin branch"
    static var p4 = "Open pull request\ngit checkout pr-branch\nReview and comment"
    static var p5 = "View checks\ngit rebase\ngit merge\ngit tag"
}

Custom Step Indicators

NumberedCircleView

This view places the number or any text inside the circle.

NumberedCircleView(text: "1", width: 40)

CircledIconView

This view embeds a icon or image inside the circle.

CircledIconView(image: Image("flag"), width: 40, strokeColor: Color.red)

More Examples

iOS Usecases
watchOS Usecases

StepperView_pistops StepperView_github_workflow StepperView_github_workflow

Mentions

SwiftUI Weekly #5
iOS Goodies #333
MBLT DEV DIGEST #302
Awesome iOS Newsletter #201
About-SwiftUI Articles
Better Programming - 6 Amazing SwiftUI Libraries
10 SwiftUI Libraries in 2021

Apps Using StepperView

WatchTo5K

Author

Badarinath Venkatnarayansetty.Follow and contact me on Twitter or LinkedIn

Buy Me A Coffee

Contribution

Feature requests, bug reports, and pull requests are all welcome. Refer Contributing Guidelines for more details.

License

StepperView is available under the MIT license. See the LICENSE file for more info.

GitHub

https://github.com/badrinathvm/StepperView
Comments
  • 1. Core Data and StepperView

    I am having a hard time getting StepperView to work with Core Data objects. Is there a tutorial or is it possible to be pointed in the right direction?

    Reviewed by rainald at 2021-05-03 08:40
  • 2. How to use with horizontal scrollview

    I need to use stepperview with 9 steps. So i need a scrollview because width of stepperview more than device width i try to add scrollview but the result show blank view. How to do this case?

    Thanks

    Reviewed by wong-kene at 2021-01-31 14:55
  • 3. WatchOS Segments not aligned in centre

    Describe the bug The segments are no longer centred on the line.

    To Reproduce Run sample app with latest Xcode 12.2 on a WatchOS 7.1 S5/S6 simulator

    Expected behavior The line to be aligned in the centre of the segments

    Screenshots

    Screenshot of the sample app Simulator Screen Shot - Apple Watch Series 5 - 40mm - 2020-11-22 at 21 06 38

    Simulator Screen Shot - Apple Watch Series 5 - 40mm - 2020-11-22 at 21 02 48

    Info (please complete the following information):

    • Device: Both simulator and device
    • OS: WatchOS 7.1 S5/S6 (40 or 44mm)
    • Pod Version: 1.5.2
    • Xcode Version 12.2

    Additional context It looks like it may be caused by some default padding in the latest version of SwiftUI? I have not looked into the source code yet to try and identify the problem.

    Reviewed by bencallis at 2020-11-22 21:09
  • 4. [PR Request] - Removes default .black rendering for CircledIconView

    The default was setting rending to template and color to .black.

    Description

    Please include a summary of the change and which issue is fixed.

    Type of change

    • [X] Bug fix
    • [ ] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    Please let us know if you have tested your PR and if we need to reproduce the issues. Also, please let us know if we need any relevant information for running the tests.

    NOT TESTED

    Test Configuration

    N/A

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [X] My code follows the style guidelines of this project
    • [X] I have performed a self-review of my own code
    • [X] Add comments to code particularly in hard-to-understand areas
    • [X] My changes generate no new warnings
    • [X] I have added tests that prove my fix is effective or that my feature works
    • [X] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by acegreen at 2022-07-31 23:39
  • 5. Different UI elements for steps not working

    Describe the bug Using different UI elements for different steps does not seem to work.

    To Reproduce

        static let stepLineColor = Color(red: 229 / 255, green: 229 / 255, blue: 229 / 255)
        static let stepCircleColor = Color(red: 17 / 255, green: 16 / 255, blue: 56 / 255)
    
        let indicationTypes: [StepperIndicationType<NumberedCircleView>] = [
            .custom(NumberedCircleView(text: "1", color: stepCircleColor, triggerAnimation: true)),
            .custom(NumberedCircleView(text: "2", color: stepCircleColor, triggerAnimation: true)),
            .custom(NumberedCircleView(text: "3", color: stepCircleColor, triggerAnimation: true)),
            .custom(NumberedCircleView(text: "4", color: stepCircleColor, triggerAnimation: true)),
            .custom(NumberedCircleView(text: "5", color: stepCircleColor, triggerAnimation: true)),
            .custom(NumberedCircleView(text: "6", color: stepCircleColor, triggerAnimation: true))
        ]
    
    
        var body: some View {
            StepperView()
                    .addSteps([
                        VStack {
                            Text("")
                            DatePicker("", selection: $date, in: Date()..., displayedComponents: [.date])
                        },
                        Text("")
                    ])
                    .indicators(indicationTypes)
                    .stepIndicatorMode(StepperMode.vertical)
                    .spacing(30)
                    .lineOptions(StepperLineOptions.custom(2, TestView.stepLineColor))
        }
    

    This yields in Failed to produce diagnostic for expression; please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project

    Expected behavior The code compiles, the first step displays a VStack and the second step displays Text.

    Screenshots If applicable, add screenshots to help explain your problem.

    Info (please complete the following information):

    • Device: Simulator
    • OS: 14.5
    • SPM library version: 1.6.2
    • Xcode Version: 12.5
    Reviewed by CollinAlpert at 2021-04-28 20:02
  • 6. Fixed #62

    Description

    The main VStack in StepIndicatorVerticalView was missing aligment: .leading due to which all steps were centre aligned

    Type of change

    • [x] Bug fix
    • [ ] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    I have tested my PR and now all the steps are aligned perfectly with the vertical line.

    Test Configuration

    • Xcode version: 12.3
    • Simulator
    • iOS version: iOS 14.3

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [ ] NA - Add comments to code particularly in hard-to-understand areas
    • [x] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by NotAnmol at 2021-01-11 16:27
  • 7. First and last steps do not appear on line when displayed vertically

    Describe the bug Display issue with the first and last steps when displayed vertically where the indicator and text is indented to the right from the line.

    To Reproduce Use the code from the readme and change .horizontal to .vertical:

    struct MyMain: View {
        let steps = [ Text("Cart").font(.caption),
                      Text("Delivery Address").font(.caption),
                      Text("Order Summary").font(.caption),
                      Text("Payment Method").font(.caption),
                      Text("Track").font(.caption)]
    
        let indicationTypes = [StepperIndicationType.custom(NumberedCircleView(text: "1")),
                                .custom(NumberedCircleView(text: "2")),
                                .custom(NumberedCircleView(text: "3")),
                                .custom(NumberedCircleView(text: "4")),
                                .custom(NumberedCircleView(text: "5"))]
        
        var body: some View {
            StepperView()
                .addSteps(steps)
                .indicators(indicationTypes)
                .stepIndicatorMode(StepperMode.vertical)
                .spacing(50)
                .lineOptions(StepperLineOptions.custom(1, Colors.blue(.teal).rawValue))
        }
    }
    

    Expected behavior Indicators should line up.

    Screenshots Stepper Issue

    Info (please complete the following information):

    • Device: Simulator (not tried on actual device)
    • OS: iOS 14.2
    • Xcode Version 12.2 (12B45b)

    Additional context N/A

    Reviewed by jeffgrann at 2020-12-04 16:15
  • 8. [PR-Request] follow up to #92: removes unneccessary extension + minor corrections

    Description

    Follow up to #92

    Type of change

    • [X] Bug fix
    • [ ] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    Please let us know if you have tested your PR and if we need to reproduce the issues. Also, please let us know if we need any relevant information for running the tests.

    • Unit Testing
    • UI Testing

    Test Configuration

    • Xcode version:
    • Device/Simulator
    • iOS version
    • MacOSX version

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [X] My code follows the style guidelines of this project
    • [X] I have performed a self-review of my own code
    • [X] Add comments to code particularly in hard-to-understand areas
    • [X] My changes generate no new warnings
    • [X] I have added tests that prove my fix is effective or that my feature works
    • [X] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by acegreen at 2022-08-01 02:59
  • 9. Center rounded line alignment for StepIndicatorVerticalView

    Description

    This small change corrects the center-alignment of rounded lines in StepIndicatorVerticalView. Other vertical line types and all horizontal line types have not been tested and may also need a similar fix if they are also subtracting the full width of the line rather than half. | Before | After | |--------|------| | Screen Shot 2021-05-19 at 2 57 45 PM | Screen Shot 2021-05-19 at 2 58 52 PM |

    Type of change

    • [x] Bug fix
    • [ ] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    This has been manually tested for the vertical rounded line type. The code in question is only used for that type of line, so it should not break any other types.

    Test Configuration

    • Xcode version: 12.4
    • Device/Simulator 11 Pro simulator
    • iOS version 14.4
    • MacOSX version 11.2.1

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [x] My code follows the style guidelines of this project
    • [x] I have performed a self-review of my own code
    • [x] Add comments to code particularly in hard-to-understand areas
    • [x] My changes generate no new warnings
    • NA I have added tests that prove my fix is effective or that my feature works
    • [x] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by rcole34 at 2021-05-19 22:26
  • 10. Test deploy tag

    Description

    Testing build without deploy tag

    Type of change

    • [ ] Bug fix
    • [ ] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    Please let us know if you have tested your PR and if we need to reproduce the issues. Also, please let us know if we need any relevant information for running the tests.

    • Unit Testing
    • UI Testing

    Test Configuration

    • Xcode version: 11.3
    • Device/Simulator: iPhone 11
    • iOS version: 13.3
    • MacOSX version: 10.14

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [ ] My code follows the style guidelines of this project
    • [ ] I have performed a self-review of my own code
    • [ ] Add comments to code particularly in hard-to-understand areas
    • [ ] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by badrinathvm at 2020-06-10 03:36
  • 11. Welcome messages for new comers to this repo

    Description

    Welcome message for new comers to this project.

    Type of change

    • [ ] Bug fix
    • [ ] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    Please let us know if you have tested your PR and if we need to reproduce the issues. Also, please let us know if we need any relevant information for running the tests.

    • Unit Testing
    • UI Testing

    Test Configuration

    • Xcode version: 11.5
    • Device/Simulator: iPhone 11
    • iOS version: 13.5
    • MacOSX version: 10.14

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [ ] My code follows the style guidelines of this project
    • [ ] I have performed a self-review of my own code
    • [ ] Add comments to code particularly in hard-to-understand areas
    • [ ] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by badrinathvm at 2020-06-02 19:53
  • 12. Horizontal Stepperview frame incorrect due to overlayPreferenceValue

    Describe the bug It seems the frame isn't calculated correctly and this results in weird UI behaviour and having to compensate by adding uneven padding

    To Reproduce Steps to reproduce the behavior: See screenshot

    Expected behavior Frame to take the full bounds of the StepperView

    Screenshots

    Even padding:

    Screen Shot 2022-07-31 at 8 39 09 PM

    IMG_0997

    Uneven padding:

    Screen Shot 2022-07-31 at 8 38 51 PM

    IMG_0996

    Screen Shot 2022-07-31 at 8 30 15 PM

    Info (please complete the following information):

    • Device: [e.g. Simulator / Real Device]
    • OS: [e.g. iOS 13]
    • Pod Version [e.g. 2.16]
    • Xcode Version [e.g. 11] if applicable

    Additional context Add any other context about the problem here.

    Reviewed by acegreen at 2022-08-01 00:32
  • 13. How to set step indicator based on step life cycle

    Hi! Is there a way to set the step indicators to change based on the life cycle of the step? I see that if I set StepLineOptions as custom it will change the line color, is there a similar thing for the step indicators?

    Reviewed by laisbastosbg at 2022-07-01 01:49
  • 14. Simple Numeric Step Indicator Without Texts

    I wanted a simple step indicator with just the number view. I'm able to achieve it by simply initialising the steps with an array of empty Texts, but not sure if it is the right way to do so. Please let me know if there is any other way to achieve the same.

    Reviewed by ganaraj-savant at 2022-06-25 07:56
  • 15. StepperEdgeInsets: trailing padding

    Describe the bug Unfortunately, the trailing padding is still there (I added a Spacer() between the image and text in ImageTextRowView example so it should fill the screen).

    Screenshots 131030051-cb0cc1ae-1732-46ae-b839-4a9dfb266c0f

    Info (please complete the following information):

    • Device: Real Device - iPhone 11 Pro
    • OS: 14.7.1

    Thank you for your work! :)

    Reviewed by sandorbogyo at 2021-08-28 11:04
  • 16. Add macOS support implement #46

    Description

    Added macOS support by adding macOS specifier to package.swift file. No other change is made to the codebase.

    Note: Adding macOS support will break some examples usage that uses class such as UIColor and UIScreen, @badrinathvm you might want to update those examples.

    Type of change

    • [ ] Bug fix
    • [x] New feature
    • [ ] Breaking change
    • [ ] This change requires a documentation update

    How Has This Been Tested

    No additional unit test added.

    Test Configuration

    • Xcode version: 12.5
    • Device/Simulator: Simulator iPhone iOS 15
    • iOS version: 15.0
    • MacOSX version: 11.5 Beta

    Checklist:

    For checklist items not applicable, mention NA in front of it with some comment if applicable.

    • [ ] My code follows the style guidelines of this project
    • [ ] I have performed a self-review of my own code
    • [ ] Add comments to code particularly in hard-to-understand areas
    • [ ] My changes generate no new warnings
    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] New and existing unit tests pass locally with my changes before pushing the pull request
    Reviewed by jevonmao at 2021-06-19 18:57
  • 17. Trailing connecting line after the last step when .top aligned

    Describe the bug There will be a trailing line after the last step, when alignment is .top and last step has multiple lines of text

    To Reproduce

        let steps = [ Text("Cart").font(.caption),
                      Text("Delivery Address").font(.caption),
                      Text("Order Summary").font(.caption),
                      Text("Payment Method").font(.caption),
                      Text("Track\nTracking\nTracking").font(.caption)]
    
        let indicationTypes = [StepperIndicationType.custom(NumberedCircleView(text: "1")),
                                .custom(NumberedCircleView(text: "2")),
                                .custom(NumberedCircleView(text: "3")),
                                .custom(NumberedCircleView(text: "4")),
                                .custom(NumberedCircleView(text: "5"))]
    
        var body: some View {
            StepperView()
                .addSteps(steps)
                .indicators(indicationTypes)
                .stepIndicatorMode(StepperMode.vertical)
                .spacing(30)
                .alignments([StepperAlignment.top, .top, .top, .top, .top])
                .lineOptions(StepperLineOptions.custom(1, Colors.blue(.teal).rawValue))
        }
    

    Expected behavior Hide the trailing line

    Screenshots https://tinypng.com/web/output/08ageudqwq54yxpuu02az1vmt7gze0mt/Screen%20Shot%202021-05-24%20at%2010.06.46%20am.png

    Info (please complete the following information):

    • Device: iPhone 12 simulator
    • OS: iOS 13
    • Pod Version (What is this?)
    • Xcode Version 12.5 (12E262)

    Additional context None. Thanks for helping.

    Reviewed by paul4156 at 2021-05-24 00:09
MockChat TDD MVVM SwiftUI - Mockable, Test driven Development, clear Architecture example using SwiftUI
MockChat TDD MVVM SwiftUI - Mockable, Test driven Development, clear Architecture example using SwiftUI

MockChat_TDD_MVVM_SwiftUI Mockable, Test driven Development, clear Architecture

Feb 5, 2022
Aplikasi iOS Berita Internasional dengan SwiftUI, API dari newsapi.org, MVVM Design Pattern, dan Paw
Aplikasi iOS Berita Internasional dengan SwiftUI, API dari newsapi.org, MVVM Design Pattern, dan Paw

iNews iNews adalah aplikasi iOS Berita Internasional yang datanya didapatkan dari News API. Dibuat menggunakan SwiftUI, MVVM Design Pattern, dan Paw.

Aug 1, 2022
Exemplify a LazyVGrid in SwiftUI in a MVVM pattern with Mock Data and images in assets.
Exemplify a LazyVGrid in SwiftUI in a MVVM pattern with Mock Data and images in assets.

SwiftUI-LazyVGrid Exemplify a LazyVGrid in SwiftUI in a MVVM pattern with Mock Data and images in assets. Screenshots Samples IP & Credits All those b

Apr 25, 2022
SwiftUI module library for adding seasons theme animations to your app
SwiftUI module library for adding seasons theme animations to your app

HolidayThemes SwiftUI module library for adding seasons theme animations to your app. Requirements iOS 13.0+ Xcode 12.0+ Installation Swift Package Ma

Mar 7, 2022
A demo demonstrates how to use combine and MVVM in the SwiftUI app
A demo demonstrates how to use combine and MVVM in the SwiftUI app

SwiftUI-MVVM-Combine A demo demonstrates how to use combine and MVVM in the Swif

Jul 5, 2022
SFSymbols SwiftUI Enum
SFSymbols SwiftUI Enum

SF SFSymbols SwiftUI Enum Example: All lines are equivalent. Image(systemName: "square.fill.and.line.vertical.square.fill") Image(systemName:

Apr 27, 2021
A sample project exploring MVVM pattern with SwiftUI/Combine, using Unsplash API (via Picsum.photos API)
A sample project exploring MVVM pattern with SwiftUI/Combine, using Unsplash API (via Picsum.photos API)

CombineUnsplash A sample project exploring MVVM pattern with SwiftUI/Combine, using Unsplash API (via Picsum.photos API) with detail example. Resource

May 4, 2022
ProductListSwiftUI - SwiftUI Project to fetch product list using the fakestoreapi and the MVVM architectural pattern
ProductListSwiftUI - SwiftUI Project to fetch product list using the fakestoreapi and the MVVM architectural pattern

ProductListSwiftUI SwiftUI Project to fetch product list using the fakestoreapi

Feb 18, 2022
An app to demo networking with SwiftUI/MVVM
An app to demo networking with SwiftUI/MVVM

Network Demo An app to demonstrate how network calls can be implemented in a SwiftUI/MVVM app. Motivations Apple's introductory tutorial is a great st

Jul 11, 2022
⚛️ A Reactive Data-Binding and Dependency Injection Library for SwiftUI x Concurrency.
⚛️ A Reactive Data-Binding and Dependency Injection Library for SwiftUI x Concurrency.

SwiftUI Atom Properties A Reactive Data-Binding and Dependency Injection Library for SwiftUI x Concurrency ?? API Reference Introduction Examples Gett

Aug 3, 2022
This is an iOS Safari Extension Sample that adds a "Develop menu" to Safari on iOS to allow you to analyze websites.

Develop Menu for Mobile Safari This is an iOS Safari Extension that adds a "Develop menu" to Safari on iOS to allow you to analyze websites. This is a

Jun 16, 2022
List of awesome iOS & Swift stuff!!
List of awesome iOS & Swift stuff!!

Awesome iOS Developer Feel free to fork this repository and pull requests!! ?? Content Coding Convention Swift Lint Design Pattern Adaptor Delegation

Jul 31, 2022
An assignment for ios Dev intern position
An assignment for ios Dev intern position

iOS Assignment An assignment for ios Dev intern position Design Process A UI design for the project is made in FIGMA. Link here Figma Sneek Peek Descr

Apr 28, 2022
This is a course project for CodePath Professional iOS Development class.

Parstagram - Part I This is an Instagram clone with a custom Parse backend that allows a user to post photos and view a global photos feed. Time spent

Oct 13, 2021
Mini-application iOS native avec Xcode et Swift exploitant l'architecture MVVM et le framework Combine d'Apple pour la mise en place de la programmation réactive fonctionnelle, le tout avec UIKit.
Mini-application iOS native avec Xcode et Swift exploitant l'architecture MVVM et le framework Combine d'Apple pour la mise en place de la programmation réactive fonctionnelle, le tout avec UIKit.

iOS (Swift 5): Test MVVM avec Combine et UIKit L'architecture MVVM et la programmation réactive fonctionnelle sont très utlisées dans le développement

Nov 28, 2021
iOS native app demo with Xcode and Swift using MVVM architecture and Apple's Combine framework for functional reactive programming, all with UIKit
iOS native app demo with Xcode and Swift using MVVM architecture and Apple's Combine framework for functional reactive programming, all with UIKit

iOS (Swift 5): MVVM test with Combine and UIKit MVVM and functional reactive programming (FRP) are very used in iOS development inside companies. Here

Dec 31, 2021
USC's ITP342 iOS Development Swift Final Project

READMEBlogs USC's ITP342 iOS Development Swift Final Project NOTE: You'll need to attach your own Firebase to the app LINK TO APP ZIP FILE: https://dr

Dec 8, 2021
USC's ITP342 iOS Development Swift Final Project

READMEBlogs USC's ITP342 iOS Development Swift Final Project NOTE: You'll need to attach your own Firebase to the app LINK TO APP ZIP FILE: https://dr

Dec 8, 2021
Create a simple MVVM-C iOS architecture with Swift for starters

iOS-Architecture-MVVM MVVM+Coordinators IOS Architecture Tutorial By Bobby Pehtr

Dec 30, 2021