How to change font in Xcode Swift Playgrounds(.swiftpm) project?

698 views Asked by At

How can I implement a custom font in the new Xcode Swift Playgrounds project? In the simple Xcode App project we do it importing the font and adding it in the info plist (fonts provided by application), but in this type of project there isn't the info plist, what should I do?

1

There are 1 answers

1
Fabez On BEST ANSWER

I found the solution by myself with the help of a friend, I had to create a public struct MyFont with a fileprivate static func, and then add an init inside the main file, before var body.

This is the code:

MyFont

import SwiftUI

public struct MyFont {
    public static func registerFonts() {
        registerFont(bundle: Bundle.main , fontName: "YOUR-FONT-HERE", fontExtension: ".ttf") //change according to your ext.
    }
    fileprivate static func registerFont(bundle: Bundle, fontName: String, fontExtension: String) {
        
        guard let fontURL = bundle.url(forResource: fontName, withExtension: fontExtension),
              let fontDataProvider = CGDataProvider(url: fontURL as CFURL),
              let font = CGFont(fontDataProvider) else {
            fatalError("Couldn't create font from data")
        }
        
        var error: Unmanaged<CFError>?
        
        CTFontManagerRegisterGraphicsFont(font, &error)
    }
}

MyApp

@main
struct MyApp: App {

    //add the init before var body
    init() {
        MyFont.registerFonts()
    }
    
    var body: some Scene {
        //
    }
}