Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
03471de
[Feat] Main -> Setting μ»€μŠ€ν…€ μŠ¬λΌμ΄λ“œ μ• λ‹ˆλ©”μ΄μ…˜ μΆ”κ°€
ornwoo96 Dec 11, 2025
48a614b
[Design] TextButton κ΅¬ν˜„, SignUpVIewController onboardingButton κ΅¬ν˜„
ornwoo96 Dec 12, 2025
9df4b26
[refactor] SignUpViewController TransitionStyle μΆ”κ°€
ornwoo96 Dec 12, 2025
90a8bb8
[Refactor] UserDefaultManager isOnboarding μΆ”κ°€ 및 UIViewController+Exte…
ornwoo96 Dec 13, 2025
a3d8e75
[Feat] OnboardingAPI 및 MainViewController 졜근 μž„μž₯ 뢈러였기 κ΅¬ν˜„
ornwoo96 Dec 13, 2025
4d23d4c
[feat] νšŒμ›κ°€μž…μœ λ„ λ°”ν…€μ‹œνŠΈ κ΅¬ν˜„
ornwoo96 Dec 13, 2025
beff4d6
[refactor] μ„€μ •λ·° μ˜¨λ³΄λ”© λΆ„κΈ° UI 및 κΈ°λŠ₯ κ΅¬ν˜„
ornwoo96 Dec 13, 2025
58cb375
[feat] μƒˆλ…ΈνŠΈ 생성 μ˜¨λ³΄λ”© λΆ„κΈ°μ²˜λ¦¬ μΆ”κ°€
ornwoo96 Dec 13, 2025
237cbc5
[Chore] μ˜¨λ³΄λ”© κ΄€λ ¨ λΆ„κΈ°μ²˜λ¦¬ 주석 μΆ”κ°€
ornwoo96 Dec 13, 2025
25a0823
[refactor] mainVC getProfileInfo μ˜¨λ³΄λ”© λΆ„κΈ°μ²˜λ¦¬ μΆ”κ°€
ornwoo96 Dec 14, 2025
63b6742
[Fix] 둜그인 μ‹œλ„ν›„ μ‹€νŒ¨ μ‹œ λ‹‰λ„€μž„ λ³€κ²½ 이슈 ν•΄κ²°
ornwoo96 Dec 14, 2025
171fc5a
[feat] λ‚˜μ˜ μž„μž₯ λ…ΈνŠΈ λ·° μ˜¨λ³΄λ”© λΆ„κΈ°μ²˜λ¦¬ μΆ”κ°€
ornwoo96 Dec 14, 2025
57c6412
[feat] λ‚˜μ˜ μž„μž₯ λ…ΈνŠΈ 검색 μ˜¨λ³΄λ”© λΆ„κΈ°μ²˜λ¦¬ μΆ”κ°€
ornwoo96 Dec 14, 2025
0ced800
[feat] λ‚˜μ˜ μž„μž₯λ…ΈνŠΈ μ˜¨λ³΄λ”© GET λ…ΈνŠΈ κ΅¬ν˜„
ornwoo96 Dec 14, 2025
1eefadc
[chore] μž„μž₯ 리슀트 λ·° dependency μΆ”κ°€
ornwoo96 Dec 14, 2025
9dbac1d
[refactor] μž„μž₯ 상세 pushViewController μ‹œ μ˜¨λ³΄λ”© λΆ„κΈ° μΆ”κ°€
ornwoo96 Dec 14, 2025
4b76835
[feat] SignUpToastView κ΅¬ν˜„ , μž„μž₯ 상세 μ˜¨λ³΄λ”© λΆ„κΈ°μ²˜λ¦¬ μΆ”κ°€
ornwoo96 Dec 14, 2025
75cd6d2
[Feat] λ‚˜μ˜ μž„μž₯λ…ΈνŠΈ μ˜¨λ³΄λ”© 체크리슀트 API 연동
ornwoo96 Dec 14, 2025
1836db8
[refactor] μž„μž₯이미지뷰컨 이미지 λ”ν•˜κΈ°, μ‚­μ œν•˜κΈ° μ˜¨λ³΄λ”© 둜직 μΆ”κ°€
ornwoo96 Dec 14, 2025
487784a
[refactor] λ‚˜μ˜ μž„μž₯ 상세 λ””ν…ŒμΌ, 곡유쑰건 데이터, λ©”λͺ¨μž₯, λ…ΉμŒ μ˜¨λ³΄λ”© λΆ„κΈ°μ²˜λ¦¬
ornwoo96 Dec 14, 2025
f347a52
[feat] μž„μž₯ 상세 λ ˆμ½”λ”© λ£Έ μ˜¨λ³΄λ”© API μ—°κ²°
ornwoo96 Dec 14, 2025
759d5bf
[feat] 리포트 μ˜¨λ³΄λ”© API 연동
ornwoo96 Dec 14, 2025
cd58ae7
[refactor] mynotes path μˆ˜μ •
ornwoo96 Dec 17, 2025
486f3ba
[refactor] onboardingAPI recentnotes 넀이밍 λ³€κ²½
ornwoo96 Dec 18, 2025
12c2526
[fix] 메인뷰 λ°”ν…€ λ‘œλ”©λ·° λ¬΄ν•œ λ‘œλ”© ν•΄κ²°
ornwoo96 Dec 18, 2025
ad921d9
[fix] λ§ˆμ΄λ…ΈνŠΈ 상세 곡유 쑰건 λ·° μ•ˆλ³΄μ΄λŠ” ν˜„μƒ μˆ˜μ •
ornwoo96 Dec 18, 2025
77f89cd
[fix] tripleImageView 둜직 μˆ˜μ •
ornwoo96 Dec 18, 2025
5ed43c7
[Fix] ImjangImage 이미지 μ•ˆλ³΄μ΄λŠ” ν˜„μƒ μˆ˜μ •
ornwoo96 Dec 18, 2025
a709320
[fix] 곡유 ν•˜κΈ° λ²„νŠΌ 닀쀑 클릭 μˆ˜μ •
ornwoo96 Dec 18, 2025
e323b33
[fix] scrapCell 이미지간 μ—¬λ°± μˆ˜μ •
ornwoo96 Dec 18, 2025
b50a525
[fix] λ°”ν…€ μ‹œνŠΈ μ—¬λ°± μˆ˜μ •
ornwoo96 Dec 18, 2025
32b115c
[refactor] λ§ˆμ΄λ…ΈνŠΈ 검색 μ˜¨λ³΄λ”© λ§ˆμ΄λ…ΈνŠΈ API둜 κ΅¬ν˜„
ornwoo96 Dec 19, 2025
1cb618b
[fix] pencil μ΄μš©μ•½κ΄€ API μ˜¨λ³΄λ”© μ‹œ μš”μ²­ X
ornwoo96 Dec 19, 2025
32e6739
[fix] settingViewController getProfileInfo μ˜¨λ³΄λ”© 둜직 μΆ”κ°€
ornwoo96 Dec 19, 2025
3d19ebc
[fix] 전체보기 ν΄λ¦­μ‹œ λ°”ν…€μ‹œνŠΈ
ornwoo96 Dec 19, 2025
ec21a6a
[fix] κ³΅μœ ν•˜κΈ° ν΄λ¦­μ‹œ API 호좜 X
ornwoo96 Dec 19, 2025
2b65a99
[fix] 리포트 μ˜¨λ³΄λ”© λͺ¨λ“œ μ‹œ API 콜 X
ornwoo96 Dec 19, 2025
f356d0a
[fix] 체크리슀트 text answer background μ•ˆλ³΄μž„ μˆ˜μ •
ornwoo96 Dec 19, 2025
eadab54
[chore] appVersion μˆ˜μ •
ornwoo96 Dec 20, 2025
a7764d0
[refactor] OnboardingAPI μ½”λ“œ 리팩
ornwoo96 Dec 22, 2025
ab8ec16
[chore] delete Untitled 2.swift
ornwoo96 Dec 22, 2025
4264f8a
[Chore] delete Untitled.swift
ornwoo96 Dec 22, 2025
71c8f61
[fix] μž„μž₯ 상세 도움말 νŒμ—… μ•ˆλœ¨λŠ” ν˜„μƒ μˆ˜μ •
ornwoo96 Dec 22, 2025
70bc5a5
Merge branch 'Refactor/signup' of https://github.com/Juinjang/Juinjan…
ornwoo96 Dec 22, 2025
d68f302
feat: λΉŒλ“œλ„˜λ²„ μ—…λ°μ΄νŠΈ
yuzzin0121 Dec 22, 2025
64dda2f
[fix] 둜그인이 λ˜μ–΄ μžˆλŠ” 경우 isOnboading false
ornwoo96 Dec 26, 2025
2014714
Merge branch 'Refactor/signup' of https://github.com/Juinjang/Juinjan…
ornwoo96 Dec 26, 2025
9e37d7a
[Chore] dev λΉŒλ“œ 버전 λ³€κ²½
ornwoo96 Dec 26, 2025
fd3d827
[fix] 버전 λ³€κ²½
ornwoo96 Dec 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,4 @@ xcuserdata/
**/Derived/
juinjang/Tuist/.build
**/build
juinjang/Projects/App/Sources/Network/APIKey.swift
8 changes: 4 additions & 4 deletions juinjang/Projects/App/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,16 @@ let project = Project(
.makeAppTarget(
appType: .prod,
appDependencies: appDependencies,
appVersion: "2.0.6",
build: "2025.11.03.1"
appVersion: "2.0.7",
build: "2025.12.27.1"
),

// MARK: - DEV
.makeAppTarget(
appType: .dev,
appDependencies: appDependencies,
appVersion: "2.0.6",
build: "2025.11.03.1"
appVersion: "2.0.7",
build: "2025.12.26.1"
)
],
additionalFiles: [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "key1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "key2.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "key3.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// if (AuthApi.isKakaoTalkLoginUrl(url)) {
// return AuthController.handleOpenUrl(url: url)
Expand Down
6 changes: 4 additions & 2 deletions juinjang/Projects/App/Sources/Application/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
private var scene: UIScene?
private var isShowingErrorView = false

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
func scene(_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)

let mainViewController = SplashViewController()
mainViewController.reactor = SplashViewReactor(dependency: SplashViewReactor.Dependency(appVersionRepository: AppVersionRepository()))
mainViewController.navigationController?.navigationBar.isHidden = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extension UIViewController {
let window = sceneDelegate.window else { return }

let mainViewController = MainViewController()
let nav = UINavigationController(rootViewController: mainViewController)
let nav = TransitionNavigationController(rootViewController: mainViewController)
window.rootViewController = nav
UIView.transition(with: window, duration: 0.3, options: [.transitionCrossDissolve], animations: nil, completion: nil)

Expand All @@ -36,9 +36,14 @@ extension UIViewController {
let sceneDelegate = windowScene.delegate as? SceneDelegate,
let window = sceneDelegate.window else { return }

let imjangListViewController = ImjangListViewController(dependency: ImjangListViewController.Dependency(noteRepository: NoteRepository()))
let imjangListViewController = ImjangListViewController(
dependency: ImjangListViewController.Dependency(
noteRepository: NoteRepository(),
onboardingRepository: OnboardingRepository()
)
)
let mainViewController = MainViewController()
let nav = UINavigationController(rootViewController: mainViewController)
let nav = TransitionNavigationController(rootViewController: mainViewController)
window.rootViewController = nav
DispatchQueue.main.async {
nav.pushViewController(imjangListViewController, animated: false)
Expand All @@ -55,7 +60,7 @@ extension UIViewController {

let lookAroundViewController = LookAroundViewController(reactor: .init(dependency: .init(sharedNoteRepository: SharedNoteRepository())))
let mainViewController = MainViewController()
let nav = UINavigationController(rootViewController: mainViewController)
let nav = TransitionNavigationController(rootViewController: mainViewController)
window.rootViewController = nav
DispatchQueue.main.async {
nav.pushViewController(lookAroundViewController, animated: false)
Expand All @@ -71,7 +76,8 @@ extension UIViewController {
let window = sceneDelegate.window else { return }

let mainVC = MainViewController()

let mainNavigationVC = TransitionNavigationController(rootViewController: mainVC)

let lookAroundVC = LookAroundViewController(reactor: .init(dependency: .init(sharedNoteRepository: SharedNoteRepository())))

let imjangDetailVC = ImjangDetailViewController(
Expand All @@ -87,7 +93,7 @@ extension UIViewController {
)

let nav = UINavigationController()
nav.setViewControllers([mainVC, lookAroundVC], animated: false)
nav.setViewControllers([mainNavigationVC, lookAroundVC], animated: false)
window.rootViewController = nav
DispatchQueue.main.async {
nav.pushViewController(imjangDetailVC, animated: true)
Expand All @@ -103,8 +109,8 @@ extension UIViewController {
let sceneDelegate = windowScene.delegate as? SceneDelegate,
let window = sceneDelegate.window else { return }

let mainViewController = SignUpViewController()
let nav = UINavigationController(rootViewController: mainViewController)
let mainViewController = SignUpViewController(.push)
let nav = TransitionNavigationController(rootViewController: mainViewController)
window.rootViewController = nav
UIView.transition(with: window, duration: 0.3, options: [.transitionCrossDissolve], animations: nil, completion: nil)

Expand All @@ -117,7 +123,7 @@ extension UIViewController {
let window = sceneDelegate.window else { return }

let mainViewController = OnboardingContainerViewController(reactor: OnboardingContainerReactor())
let nav = UINavigationController(rootViewController: mainViewController)
let nav = TransitionNavigationController(rootViewController: mainViewController)
window.rootViewController = nav
UIView.transition(with: window, duration: 0.2, options: [.transitionCrossDissolve], animations: nil, completion: nil)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ final class ScrapCollectionViewCell: UICollectionViewCell {
var totalStackView = UIStackView().then {
$0.axis = .horizontal
$0.alignment = .fill
$0.distribution = .equalSpacing
$0.distribution = .fill
$0.spacing = 4
$0.backgroundColor = .stroke2
}
Expand Down Expand Up @@ -166,7 +166,7 @@ extension ScrapCollectionViewCell {
let imageVStackView = UIStackView().then {
$0.axis = .vertical
$0.alignment = .fill
$0.distribution = .equalSpacing
$0.distribution = .fill
$0.spacing = 5
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
//
// SignUpBottomSheetView.swift
// App
//
// Created by KimDongWoo on 12/13/25.
//

import UIKit
import Then
import SnapKit

final class SignUpBottomSheetView: UIViewController {
private let containerView = UIView().then {
$0.backgroundColor = .mainWhite
$0.roundCorners(cornerRadius: 24, corner: .top)
}

private let mainIconView = UIImageView().then {
$0.image = .keyIcon
}

private let titleLabel = DSLabel(.h4).then {
$0.fontColor = .gray600
$0.text = "μ—¬κΈ°μ„œλΆ€ν„°λŠ” νšŒμ›κ°€μž…μ΄ ν•„μš”ν•΄μš”"
$0.fontAlignment = .center
}

private let contentLabel = DSLabel(.body).then {
$0.fontColor = .gray400
$0.text = "νšŒμ›κ°€μž…μ„ ν•˜λ©΄ μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•  수 μžˆμ–΄μš”.\nνšŒμ›κ°€μž… ν•˜λŸ¬ κ°ˆκΉŒμš”?"
$0.numberOfLines = 2
$0.fontAlignment = .center
}

private lazy var cancelButton = UIButton().then {
$0.backgroundColor = .gray3
$0.roundCorners(cornerRadius: 10, corner: .all)
$0.setTitle("λ‹«κΈ°", for: .normal)
$0.setTitleColor(.gray500, for: .normal)
$0.titleLabel?.font = .pretendard(size: 16, weight: .semiBold)
$0.addTarget(self, action: #selector(cancelButtonTapped(_:)), for: .touchUpInside)
}

private lazy var acceptButton = UIButton().then {
$0.backgroundColor = .gray500
$0.roundCorners(cornerRadius: 10, corner: .all)
$0.setTitle("예", for: .normal)
$0.titleLabel?.font = .pretendard(size: 16, weight: .semiBold)
$0.setTitleColor(.mainWhite, for: .normal)
$0.addTarget(self, action: #selector(acceptButtonTapped(_:)), for: .touchUpInside)
}

init() {
super.init(nibName: nil, bundle: nil)
modalPresentationStyle = .overFullScreen
modalTransitionStyle = .crossDissolve
view.backgroundColor = .black.withAlphaComponent(0.5)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

override func viewDidLoad() {
super.viewDidLoad()
configureHierarchy()
configureLayout()
}

private func configureHierarchy() {
view.addSubview(
containerView.with(
mainIconView,
titleLabel,
contentLabel,
cancelButton,
acceptButton
)
)
}

private func configureLayout() {
containerView.snp.makeConstraints {
$0.height.equalTo(373)
$0.horizontalEdges.equalToSuperview()
$0.bottom.equalToSuperview()
}

mainIconView.snp.makeConstraints {
$0.top.equalToSuperview().offset(56)
$0.size.equalTo(80)
$0.centerX.equalToSuperview()
}

titleLabel.snp.makeConstraints {
$0.top.equalTo(mainIconView.snp.bottom).offset(24)
$0.centerX.equalToSuperview()
}

contentLabel.snp.makeConstraints {
$0.top.equalTo(titleLabel.snp.bottom).offset(12)
$0.centerX.equalToSuperview()
}

cancelButton.snp.makeConstraints {
$0.left.equalToSuperview().offset(24)
$0.right.equalTo(containerView.snp.centerX).offset(-4)
$0.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
$0.height.equalTo(52)
}

acceptButton.snp.makeConstraints {
$0.right.equalToSuperview().inset(24)
$0.left.equalTo(containerView.snp.centerX).offset(4)
$0.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
$0.height.equalTo(52)
}
}

@objc private func cancelButtonTapped(_ sender: UIButton) {
dismiss(animated: true)
}

@objc private func acceptButtonTapped(_ sender: UIButton) {
present(SignUpViewController(.present), animated: true)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//
// TextButton.swift
// App
//
// Created by KimDongWoo on 12/12/25.
//

import UIKit

final class TextButton: UIButton {

init(text: String,
color: UIColor = .main,
font: UIFont = .pretendard(size: 14, weight: .medium),
underline: Bool = false) {
super.init(frame: .zero)
commonInit(font)
setText(text, color: color, underline: underline)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

private func commonInit(_ font: UIFont) {
titleLabel?.font = font
backgroundColor = .clear
}

func setText(_ text: String,
color: UIColor = .main,
font: UIFont = .pretendard(size: 14, weight: .medium),
underline: Bool = false) {
titleLabel?.font = font
var attributes: [NSAttributedString.Key: Any] = [
.foregroundColor: color
]

if underline {
attributes[.underlineStyle] = NSUnderlineStyle.single.rawValue
attributes[.underlineColor] = color
}

let attributedTitle = NSAttributedString(
string: text,
attributes: attributes
)

setAttributedTitle(attributedTitle, for: .normal)
}
}
Loading