You can convert SVG to SwiftUI code in 3 steps

Andrii
4 min readFeb 21, 2023

--

iPhone 14 Pro simylator

As you know, you can import SVG into Xcode assets just like other images. And now I want to show how easy it is to convert SVG to SwiftUI code. You will see how easy it’s to do in a couple of minutes. Let's do it!

Step One

You need to take some SVG file. I’ll take my image from Figma. Open my Figma file, select the vector image, click Copy/Paste as and select Copy as SVG.

Screenshot from Figma

Step Two

Now you need to open some online converter, I prefer service: svg-to-swiftui.quassum.com, but you can find another service in a Google search. In the left field, I need to insert our SVG image. And click the Convert button.

Screenshot from SVG to SwiftUi website
Screenshot from svg-to-swiftui.quassum.com

And now you can see that the converter generates our SwiftUI code. Click the Copy result button.

Screenshot from SVG to SwiftUi website
Screenshot from svg-to-swiftui.quassum.com

Step Three

And now you should open the Xcode project and paste the copied code. Add MyCustomShape( ) to the body and make a couple of modifications.

import SwiftUI

struct ContentView: View {
var body: some View {
MyCustomShape()
.frame(width: 300, height: 355)
.scaledToFit()
.foregroundStyle(.linearGradient(colors: [.green, .green, .yellow, .red, .blue], startPoint: .top, endPoint: .bottom))
}
}
struct MyCustomShape: Shape {
func path(in rect: CGRect) -> Path {
var path = Path()
let width = rect.size.width
let height = rect.size.height
path.move(to: CGPoint(x: 0.70146*width, y: 0.00605*height))
path.addCurve(to: CGPoint(x: 0.51473*width, y: 0.14457*height), control1: CGPoint(x: 0.6176*width, y: 0.02524*height), control2: CGPoint(x: 0.54933*width, y: 0.07571*height))
path.addCurve(to: CGPoint(x: 0.49758*width, y: 0.23419*height), control1: CGPoint(x: 0.50101*width, y: 0.1719*height), control2: CGPoint(x: 0.49229*width, y: 0.21737*height))
path.addCurve(to: CGPoint(x: 0.51473*width, y: 0.24024*height), control1: CGPoint(x: 0.49946*width, y: 0.23945*height), control2: CGPoint(x: 0.50163*width, y: 0.24024*height))
path.addCurve(to: CGPoint(x: 0.66405*width, y: 0.18005*height), control1: CGPoint(x: 0.56679*width, y: 0.24024*height), control2: CGPoint(x: 0.61729*width, y: 0.22*height))
path.addCurve(to: CGPoint(x: 0.73731*width, y: 0.08648*height), control1: CGPoint(x: 0.70395*width, y: 0.14641*height), control2: CGPoint(x: 0.72328*width, y: 0.12144*height))
path.addCurve(to: CGPoint(x: 0.74915*width, y: 0.00448*height), control1: CGPoint(x: 0.74697*width, y: 0.06204*height), control2: CGPoint(x: 0.75383*width, y: 0.01473*height))
path.addCurve(to: CGPoint(x: 0.70146*width, y: 0.00605*height), control1: CGPoint(x: 0.74697*width, y: -0.00025*height), control2: CGPoint(x: 0.72577*width, y: 0.00053*height))
path.closeSubpath()
path.move(to: CGPoint(x: 0.69366*width, y: 0.23656*height))
path.addCurve(to: CGPoint(x: 0.58892*width, y: 0.261*height), control1: CGPoint(x: 0.66935*width, y: 0.23945*height), control2: CGPoint(x: 0.62664*width, y: 0.24944*height))
path.addCurve(to: CGPoint(x: 0.52657*width, y: 0.27809*height), control1: CGPoint(x: 0.56585*width, y: 0.26784*height), control2: CGPoint(x: 0.5378*width, y: 0.27572*height))
path.addCurve(to: CGPoint(x: 0.48168*width, y: 0.2773*height), control1: CGPoint(x: 0.50662*width, y: 0.28282*height), control2: CGPoint(x: 0.50569*width, y: 0.28282*height))
path.addCurve(to: CGPoint(x: 0.429*width, y: 0.26284*height), control1: CGPoint(x: 0.46828*width, y: 0.27414*height), control2: CGPoint(x: 0.44459*width, y: 0.26757*height))
path.addCurve(to: CGPoint(x: 0.23947*width, y: 0.24523*height), control1: CGPoint(x: 0.34452*width, y: 0.2363*height), control2: CGPoint(x: 0.29932*width, y: 0.23209*height))
path.addCurve(to: CGPoint(x: 0.10106*width, y: 0.31225*height), control1: CGPoint(x: 0.18492*width, y: 0.25706*height), control2: CGPoint(x: 0.14283*width, y: 0.27756*height))
path.addCurve(to: CGPoint(x: 0.02219*width, y: 0.42081*height), control1: CGPoint(x: 0.06427*width, y: 0.34301*height), control2: CGPoint(x: 0.04027*width, y: 0.37586*height))
path.addCurve(to: CGPoint(x: 0.07363*width, y: 0.79088*height), control1: CGPoint(x: -0.01896*width, y: 0.52305*height), control2: CGPoint(x: 0.00037*width, y: 0.66077*height))
path.addCurve(to: CGPoint(x: 0.24414*width, y: 0.97696*height), control1: CGPoint(x: 0.11509*width, y: 0.86473*height), control2: CGPoint(x: 0.19115*width, y: 0.94753*height))
path.addCurve(to: CGPoint(x: 0.3944*width, y: 0.98406*height), control1: CGPoint(x: 0.28841*width, y: 1.00167*height), control2: CGPoint(x: 0.32956*width, y: 1.00351*height))
path.addCurve(to: CGPoint(x: 0.61417*width, y: 0.97407*height), control1: CGPoint(x: 0.50008*width, y: 0.95252*height), control2: CGPoint(x: 0.53686*width, y: 0.95094*height))
path.addCurve(to: CGPoint(x: 0.79092*width, y: 0.98222*height), control1: CGPoint(x: 0.70676*width, y: 1.00193*height), control2: CGPoint(x: 0.74105*width, y: 1.00351*height))
path.addCurve(to: CGPoint(x: 0.98514*width, y: 0.76065*height), control1: CGPoint(x: 0.85202*width, y: 0.95594*height), control2: CGPoint(x: 0.94056*width, y: 0.85527*height))
path.addCurve(to: CGPoint(x: 0.9976*width, y: 0.73174*height), control1: CGPoint(x: 0.99199*width, y: 0.7462*height), control2: CGPoint(x: 0.9976*width, y: 0.73305*height))
path.addCurve(to: CGPoint(x: 0.9814*width, y: 0.72228*height), control1: CGPoint(x: 0.9976*width, y: 0.73043*height), control2: CGPoint(x: 0.99012*width, y: 0.72596*height))
path.addCurve(to: CGPoint(x: 0.84485*width, y: 0.58718*height), control1: CGPoint(x: 0.91499*width, y: 0.69389*height), control2: CGPoint(x: 0.86387*width, y: 0.64343*height))
path.addCurve(to: CGPoint(x: 0.84018*width, y: 0.48047*height), control1: CGPoint(x: 0.83519*width, y: 0.55827*height), control2: CGPoint(x: 0.83301*width, y: 0.5078*height))
path.addCurve(to: CGPoint(x: 0.95334*width, y: 0.34537*height), control1: CGPoint(x: 0.85514*width, y: 0.42291*height), control2: CGPoint(x: 0.88663*width, y: 0.38559*height))
path.addCurve(to: CGPoint(x: 0.963*width, y: 0.33144*height), control1: CGPoint(x: 0.96518*width, y: 0.33801*height), control2: CGPoint(x: 0.96612*width, y: 0.3367*height))
path.addCurve(to: CGPoint(x: 0.93245*width, y: 0.30332*height), control1: CGPoint(x: 0.96113*width, y: 0.32829*height), control2: CGPoint(x: 0.9471*width, y: 0.31567*height))
path.addCurve(to: CGPoint(x: 0.79653*width, y: 0.2426*height), control1: CGPoint(x: 0.89442*width, y: 0.27178*height), control2: CGPoint(x: 0.85576*width, y: 0.25469*height))
path.addCurve(to: CGPoint(x: 0.69366*width, y: 0.23656*height), control1: CGPoint(x: 0.77222*width, y: 0.23787*height), control2: CGPoint(x: 0.71268*width, y: 0.23419*height))
path.closeSubpath()
return path
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

Done! Thanks for reading.

--

--

Andrii
Andrii

Written by Andrii

Debunker ❌ | iOS developer 👨🏻‍💻| Apple fun 🍏

Responses (2)