diff --git a/Dori-iOS/DesignSystem/Typography/DesignTokenDemoView.swift b/Dori-iOS/DesignSystem/Typography/DesignTokenDemoView.swift new file mode 100644 index 0000000..34fb460 --- /dev/null +++ b/Dori-iOS/DesignSystem/Typography/DesignTokenDemoView.swift @@ -0,0 +1,154 @@ +// +// DesignTokenDemoView.swift +// Dori-iOS +// +// Created by 강동영 on 2/6/26. +// + +import SwiftUI + +fileprivate struct DesignTokenDemoView: View { + @State private var isColorSection = false + + var body: some View { + ScrollView { + if isColorSection { colorSection } + else { typeSection } + } + } + + var colorSection: some View { + VStack { + ForEach(Self.brandColors, id: \.self) { color in + VStack { + Rectangle() + .frame(height: 50) + .foregroundStyle(color) + } + } + + ForEach(Self.greyColors, id: \.self) { color in + VStack { + Rectangle() + .frame(height: 50) + .foregroundStyle(color) + } + } + } + .padding() + } + + var typeSection: some View { + ScrollView { + Section { + ForEach(Self.typoHeadings, id: \.self) { heading in + ZStack { + Rectangle() + .frame(height: 50) + .foregroundStyle(.grey100) + Text("도리 화이팅") + .pretendard(.heading(heading)) + } + } + } header: { + Text("헤딩") + .padding() + .pretendard(.heading(.h15)) + .foregroundStyle(.white) + .frame(maxWidth: .infinity) + .background(.main200) + .padding() + } + + Section { + ForEach(Self.typoSubTitles, id: \.self) { subtitle in + ZStack { + Rectangle() + .frame(height: 50) + .foregroundStyle(.grey200) + Text("도리 화이팅") + .pretendard(.subtitle(subtitle)) + } + } + } header: { + Text("서브 타이틀") + .padding() + .pretendard(.heading(.h15)) + .foregroundStyle(.white) + .frame(maxWidth: .infinity) + .background(.main200) + .padding() + } + + Section { + ForEach(Self.typoBodys, id: \.self) { body in + ZStack { + Rectangle() + .frame(height: 50) + .foregroundStyle(.grey300) + Text("도리 화이팅") + .pretendard(.body(body)) + } + } + } header: { + Text("바디") + .padding() + .pretendard(.heading(.h15)) + .foregroundStyle(.white) + .frame(maxWidth: .infinity) + .background(.main200) + .padding() + } + + Section { + ForEach(Self.typoCaptions, id: \.self) { caption in + ZStack { + Rectangle() + .frame(height: 50) + .foregroundStyle(.grey400) + Text("도리 화이팅") + .pretendard(.caption(caption)) + } + } + } header: { + Text("캡션") + .padding() + .pretendard(.heading(.h15)) + .foregroundStyle(.white) + .frame(maxWidth: .infinity) + .background(.main200) + .padding() + } + } + } +} + +extension DesignTokenDemoView { + private static let brandColors: [Color] = [ + Color.main100, + Color.main200, + Color.main300 + ] + + private static let greyColors: [Color] = [ + Color.white, + Color.grey100, + Color.grey200, + Color.grey300, + Color.grey400, + Color.grey500, + Color.grey600, + Color.grey700, + Color.grey800, + Color.black + ] + + private static let typoHeadings: [TypoStyle.Heading] = TypoStyle.Heading.allCases + private static let typoSubTitles: [TypoStyle.SubTitle] = TypoStyle.SubTitle.allCases + private static let typoBodys: [TypoStyle.Body] = TypoStyle.Body.allCases + private static let typoCaptions: [TypoStyle.Caption] = TypoStyle.Caption.allCases +} + +#Preview { + DesignTokenDemoView() +} diff --git a/Dori-iOS/DesignSystem/Typography/FontManager.swift b/Dori-iOS/DesignSystem/Typography/FontManager.swift new file mode 100644 index 0000000..016d0ab --- /dev/null +++ b/Dori-iOS/DesignSystem/Typography/FontManager.swift @@ -0,0 +1,66 @@ +// +// FontManager.swift +// Dori-iOS +// +// Created by 강동영 on 2/6/26. +// + +import Foundation +import CoreGraphics +import CoreText + +@MainActor +public enum FontManager { + private static var registeredFonts: Set = [] + + /// 폰트가 필요할 때마다 자동으로 등록하는 함수 + public static func registerFontIfNeeded(_ fontName: String) { + // 이미 등록된 폰트는 스킵 + guard !registeredFonts.contains(fontName) else { return } + + // Bundle.module에서 폰트 파일 찾기 + guard let fontURL = findFontURL(for: fontName) else { + print("⚠️ Font file not found for: \(fontName)") + return + } + + var error: Unmanaged? + + // 폰트 등록 + if CTFontManagerRegisterFontsForURL(fontURL as CFURL, .process, &error) { + registeredFonts.insert(fontName) + print("✅ Font registered: \(fontName)") + } else if let error = error?.takeRetainedValue() { + print("⚠️ Font registration failed for \(fontName): \(error)") + } + } + + /// Bundle.module에서 폰트 파일 URL 찾기 + private static func findFontURL(for fontName: String) -> URL? { + let extensions = FontExtension.allCases + + for ext in extensions { + if let url = Bundle.main.url(forResource: fontName, withExtension: ext.rawValue) { + return url + } + } + + print("⚠️ Font file not found for: \(fontName)") + return nil + } + + /// 모든 Pretendard 폰트를 한번에 등록하는 함수 (옵션) + public static func registerAllFonts() { + let fontNames = [ + "Pretendard-Regular", + "Pretendard-Medium", + "Pretendard-SemiBold", + ] + fontNames.forEach { registerFontIfNeeded($0) } + } +} + +enum FontExtension: String, CaseIterable { + case ttf + case otf +} diff --git a/Dori-iOS/DesignSystem/Typography/FontProvider.swift b/Dori-iOS/DesignSystem/Typography/FontProvider.swift new file mode 100644 index 0000000..20e861c --- /dev/null +++ b/Dori-iOS/DesignSystem/Typography/FontProvider.swift @@ -0,0 +1,55 @@ +// +// FontProvider.swift +// Dori-iOS +// +// Created by 강동영 on 2/6/26. +// + +import Foundation + +// MARK: - Font Provider Protocol +public protocol FontProvider { + var regular: String { get } + var medium: String { get } + var semiBold: String { get } + var bold: String? { get } +} + +// MARK: - Pretendard Font Provider +public struct PretendardProvider: FontProvider { + public let regular: String = FontName.regular.name + public let medium: String = FontName.medium.name + public let semiBold: String = FontName.semiBold.name + public let bold: String? = FontName.bold.name + + public init() {} +} + +extension PretendardProvider { + enum FontName { + case regular, medium, semiBold, bold + + var name: String { + switch self { + case .regular: return "Pretendard-Regular" + case .medium: return "Pretendard-Medium" + case .semiBold: return "Pretendard-SemiBold" + case .bold: return "Pretendard-Bold" + } + } + } +} + +// MARK: - Font Weight Enum +public enum FontWeight { + case regular, medium, semiBold, bold + + public func getFontName(from provider: FontProvider) -> String { + switch self { + case .regular: return provider.regular + case .medium: return provider.medium + case .semiBold: return provider.semiBold + case .bold: return provider.bold ?? provider.semiBold + } + } +} diff --git a/Dori-iOS/DesignSystem/Typography/FontStyle.swift b/Dori-iOS/DesignSystem/Typography/FontStyle.swift new file mode 100644 index 0000000..a039303 --- /dev/null +++ b/Dori-iOS/DesignSystem/Typography/FontStyle.swift @@ -0,0 +1,41 @@ +// +// FontStyle.swift +// Dori-iOS +// +// Created by 강동영 on 2/6/26. +// + +import SwiftUI + +// MARK: - Font 타입 속성을 정의하는 구조체 +public enum FontType: Equatable { + case system(Font.Weight) + case custom(String) +} + +// MARK: - TypoStyle 혹은 직접 활용도 가능하끔 구조 작성 +@MainActor +public struct FontStyle { + public let font: Font + public let fontSize: CGFloat + public let lineHeight: CGFloat + + public init( + _ family: FontType = .system(.regular), + size: CGFloat = 16, + lineHeight: CGFloat = 1.5, + ) { + self.fontSize = size + + switch family { + case .system(let weight): + self.font = .system(size: size, weight: weight) + case .custom(let fontName): + // Bundle.module에서 폰트 등록 후 사용 + FontManager.registerFontIfNeeded(fontName) + self.font = .custom(fontName, size: size) + } + + self.lineHeight = size * lineHeight - size + } +} diff --git a/Dori-iOS/DesignSystem/Typography/TypoStyle.swift b/Dori-iOS/DesignSystem/Typography/TypoStyle.swift new file mode 100644 index 0000000..c9f8281 --- /dev/null +++ b/Dori-iOS/DesignSystem/Typography/TypoStyle.swift @@ -0,0 +1,66 @@ +// +// TypoStyle.swift +// Dori-iOS +// +// Created by 강동영 on 2/6/26. +// + +import Foundation + +@MainActor +public enum TypoStyle { + case heading(TypoStyle.Heading) + case subtitle(TypoStyle.SubTitle) + case body(TypoStyle.Body) + case caption(TypoStyle.Caption) + + // MARK: - 폰트에 의존하지 않는 스타일 정의 + private var styleSpec: (weight: FontWeight, size: CGFloat) { + switch self { + case .heading(let heading): + return (.bold, heading.size) + + case .subtitle(let subtitle): + return (.semiBold, subtitle.size) + + case .body(let body): + return (.medium, body.size) + + case .caption(let caption): + return (.regular, caption.size) + } + } + + // MARK: - FontProvider를 받아서 FontStyle 생성 + public func getFontStyle(with provider: FontProvider) -> FontStyle { + let spec = styleSpec + let fontName = spec.weight.getFontName(from: provider) + return FontStyle(.custom(fontName), size: spec.size) + } +} + +public extension TypoStyle { + enum Heading: Int, CaseIterable { + case h11 = 11, h13 = 13, h14 = 14, h15 = 15, h16 = 16, h20 = 20, h30 = 30 + + var size: CGFloat { CGFloat(rawValue) } + } + + enum SubTitle: Int, CaseIterable { + case t12 = 12, t14 = 14, t15 = 15, t16 = 16 + + var size: CGFloat { CGFloat(rawValue) } + } + + enum Body: Int, CaseIterable { + case b11 = 11, b12, b13, b14, b15, b16 + + var size: CGFloat { CGFloat(rawValue) } + } + + enum Caption: Int, CaseIterable { + case c11 = 11, c12, c13, c14, c15, c16, c20 = 20 + + var size: CGFloat { CGFloat(rawValue) } + } +} diff --git a/Dori-iOS/DesignSystem/Typography/View+.swift b/Dori-iOS/DesignSystem/Typography/View+.swift new file mode 100644 index 0000000..f111985 --- /dev/null +++ b/Dori-iOS/DesignSystem/Typography/View+.swift @@ -0,0 +1,19 @@ +// +// View+.swift +// Dori-iOS +// +// Created by 강동영 on 2/6/26. +// + +import SwiftUI + +public extension View { + // MARK: - font, linespacing 적용되어있음 (기본값: Pretendard) + func pretendard(_ style: TypoStyle) -> some View { + let pretendardProvider = PretendardProvider() + let fontStyle = style.getFontStyle(with: pretendardProvider) + return self + .font(fontStyle.font) + .lineSpacing(fontStyle.lineHeight) + } +} diff --git a/Dori-iOS/DoriApp.swift b/Dori-iOS/DoriApp.swift index b410475..dd72b15 100644 --- a/Dori-iOS/DoriApp.swift +++ b/Dori-iOS/DoriApp.swift @@ -9,6 +9,11 @@ import SwiftUI @main struct DoriApp: App { + + init() { + FontManager.registerAllFonts() + } + var body: some Scene { WindowGroup { ContentView() diff --git a/Dori-iOS/Assets.xcassets/AccentColor.colorset/Contents.json b/Dori-iOS/Resources/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from Dori-iOS/Assets.xcassets/AccentColor.colorset/Contents.json rename to Dori-iOS/Resources/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/Dori-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/Dori-iOS/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from Dori-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Dori-iOS/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/Dori-iOS/Assets.xcassets/Contents.json b/Dori-iOS/Resources/Assets.xcassets/Contents.json similarity index 100% rename from Dori-iOS/Assets.xcassets/Contents.json rename to Dori-iOS/Resources/Assets.xcassets/Contents.json diff --git a/Dori-iOS/Resources/Assets.xcassets/sample_dori.imageset/Contents.json b/Dori-iOS/Resources/Assets.xcassets/sample_dori.imageset/Contents.json new file mode 100644 index 0000000..ce3cf73 --- /dev/null +++ b/Dori-iOS/Resources/Assets.xcassets/sample_dori.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "unnamed.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Assets.xcassets/sample_dori.imageset/unnamed.png b/Dori-iOS/Resources/Assets.xcassets/sample_dori.imageset/unnamed.png new file mode 100644 index 0000000..b71f16e Binary files /dev/null and b/Dori-iOS/Resources/Assets.xcassets/sample_dori.imageset/unnamed.png differ diff --git a/Dori-iOS/Resources/Colors.xcassets/Brand/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Brand/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Brand/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Brand/Main_100.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Brand/Main_100.colorset/Contents.json new file mode 100644 index 0000000..2877207 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Brand/Main_100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xF1", + "red" : "0xE7" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Brand/Main_200.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Brand/Main_200.colorset/Contents.json new file mode 100644 index 0000000..06af736 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Brand/Main_200.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x85", + "green" : "0x48", + "red" : "0x32" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Brand/Main_300.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Brand/Main_300.colorset/Contents.json new file mode 100644 index 0000000..b0dd476 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Brand/Main_300.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x6F", + "green" : "0x34", + "red" : "0x20" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Black.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Black.colorset/Contents.json new file mode 100644 index 0000000..8ec08b9 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Black.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.000", + "green" : "0.000", + "red" : "0.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-100.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-100.colorset/Contents.json new file mode 100644 index 0000000..b9cb151 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF0", + "green" : "0xF0", + "red" : "0xF0" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-200.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-200.colorset/Contents.json new file mode 100644 index 0000000..cdbd517 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-200.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE8", + "green" : "0xE8", + "red" : "0xE8" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-300.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-300.colorset/Contents.json new file mode 100644 index 0000000..78408a9 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-300.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xD9", + "green" : "0xD9", + "red" : "0xD9" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-400.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-400.colorset/Contents.json new file mode 100644 index 0000000..a37482d --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-400.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xCE", + "green" : "0xCE", + "red" : "0xCE" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-500.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-500.colorset/Contents.json new file mode 100644 index 0000000..fb0c529 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-500.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xBB", + "green" : "0xBB", + "red" : "0xBB" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-600.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-600.colorset/Contents.json new file mode 100644 index 0000000..1a27b94 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-600.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x8D", + "green" : "0x8D", + "red" : "0x8D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-700.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-700.colorset/Contents.json new file mode 100644 index 0000000..328b855 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-700.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x82", + "green" : "0x82", + "red" : "0x82" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-800.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-800.colorset/Contents.json new file mode 100644 index 0000000..5320a82 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/Grey-800.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x64", + "green" : "0x64", + "red" : "0x64" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Colors.xcassets/Greyscale/White.colorset/Contents.json b/Dori-iOS/Resources/Colors.xcassets/Greyscale/White.colorset/Contents.json new file mode 100644 index 0000000..97650a1 --- /dev/null +++ b/Dori-iOS/Resources/Colors.xcassets/Greyscale/White.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Dori-iOS/Resources/Font/Pretendard-Bold.otf b/Dori-iOS/Resources/Font/Pretendard-Bold.otf new file mode 100644 index 0000000..8e5e30a Binary files /dev/null and b/Dori-iOS/Resources/Font/Pretendard-Bold.otf differ diff --git a/Dori-iOS/Resources/Font/Pretendard-Medium.otf b/Dori-iOS/Resources/Font/Pretendard-Medium.otf new file mode 100644 index 0000000..0575069 Binary files /dev/null and b/Dori-iOS/Resources/Font/Pretendard-Medium.otf differ diff --git a/Dori-iOS/Resources/Font/Pretendard-Regular.otf b/Dori-iOS/Resources/Font/Pretendard-Regular.otf new file mode 100644 index 0000000..08bf4cf Binary files /dev/null and b/Dori-iOS/Resources/Font/Pretendard-Regular.otf differ diff --git a/Dori-iOS/Resources/Font/Pretendard-SemiBold.otf b/Dori-iOS/Resources/Font/Pretendard-SemiBold.otf new file mode 100644 index 0000000..e7e36ab Binary files /dev/null and b/Dori-iOS/Resources/Font/Pretendard-SemiBold.otf differ