Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ class iBoxFactory: ProjectFactory {

private let appInfoPlist: [String: Plist.Value] = [
"ITSAppUsesNonExemptEncryption": false,
"CFBundleDisplayName": "iBox",
"CFBundleName": "iBox",
"CFBundleShortVersionString": "1.2.1",
"CFBundleShortVersionString": "1.2.2",
"CFBundleVersion": "1",
"UILaunchStoryboardName": "LaunchScreen",
"UIApplicationSceneManifest": [
Expand Down
8 changes: 8 additions & 0 deletions iBox/Sources/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
AppStateManager.shared.isVersionCheckCompleted = result
}

preloadFavoriteWeb()
versioningHandler.checkAppVersion()
return true
}

private func preloadFavoriteWeb() {
let favorite = UserDefaultsManager.favorite
let favoriteUrl = favorite.url
WebViewPreloader.shared.preloadFavoriteView(url: favoriteUrl)
}

// MARK: UISceneSession Lifecycle

Expand Down
1 change: 1 addition & 0 deletions iBox/Sources/Presenter/BoxList/BoxListCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class BoxListCell: UITableViewCell {

private func setupProperty() {
backgroundColor = .tableViewBackgroundColor
selectionStyle = .none
}

private func setupHierarchy() {
Expand Down
3 changes: 2 additions & 1 deletion iBox/Sources/Presenter/BoxList/BoxListViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ class BoxListViewController: BaseViewController<BoxListView>, BaseViewController
extension BoxListViewController: BoxListViewDelegate {

func didSelectWeb(at url: URL, withName name: String) {
let viewController = PreloadedWebViewController(selectedWebsite: url)
let viewController = WebViewController()
viewController.selectedWebsite = url
viewController.title = name
navigationController?.pushViewController(viewController, animated: true)
}
Expand Down
2 changes: 1 addition & 1 deletion iBox/Sources/Presenter/Favorite/FavoriteView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import WebKit

import SnapKit

class FavoriteView: PreloadedWebView {
class FavoriteView: UIView {

private lazy var webView = WebViewPreloader.shared.getFavoriteView()

Expand Down
46 changes: 0 additions & 46 deletions iBox/Sources/Presenter/Web/PreloadedWebView.swift

This file was deleted.

48 changes: 0 additions & 48 deletions iBox/Sources/Presenter/Web/PreloadedWebViewController.swift

This file was deleted.

34 changes: 27 additions & 7 deletions iBox/Sources/Presenter/Web/WebView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,16 @@ import WebKit
import SnapKit

class WebView: UIView {
var selectedWebsite: String? {
var selectedWebsite: URL? {
didSet {
loadWebsite()
}
}

private let webView = WKWebView()
// .then {
// $0.scrollView.contentInsetAdjustmentBehavior = .always
// }
private let webView = WKWebView().then {
$0.isOpaque = false
$0.scrollView.contentInsetAdjustmentBehavior = .always
}

override init(frame: CGRect) {
super.init(frame: frame)
Expand All @@ -33,6 +33,12 @@ class WebView: UIView {
fatalError("init(coder:) has not been implemented")
}

deinit {
webView.stopLoading()
webView.navigationDelegate = nil
webView.scrollView.delegate = nil
}

// MARK: - Setup Methods

private func setupProperty() {
Expand All @@ -51,13 +57,27 @@ class WebView: UIView {
}

private func loadWebsite() {
guard let website = selectedWebsite, let url = URL(string: website) else { return }
guard let url = selectedWebsite else { return }
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
}

}

extension WebView: WKNavigationDelegate {

// func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
// print("웹뷰 로딩 실패: \(error.localizedDescription)")
// }
//
// func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
// print("웹뷰 프로비저널 네비게이션 실패: \(error.localizedDescription)")
// }
//
// func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
// if let url = navigationAction.request.url {
// print("웹뷰가 리다이렉트 되는 URL: \(url.absoluteString)")
// }
//
// decisionHandler(.allow)
// }
}
2 changes: 1 addition & 1 deletion iBox/Sources/Presenter/Web/WebViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import UIKit

class WebViewController: BaseViewController<WebView>, BaseViewControllerProtocol {

var selectedWebsite: String?
var selectedWebsite: URL?

// MARK: - Life Cycle

Expand Down
21 changes: 3 additions & 18 deletions iBox/Sources/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {

insertDefaultDataIfNeeded()

// 나중에 userDefaults에 저장해두고 꺼내와서 preload하기
let urlsToPreload = [
URL(string: "https://profile.intra.42.fr/")!,
URL(string: "https://www.where42.kr/")!,
URL(string: "https://stat.42seoul.kr/")!,
URL(string: "https://42library.kr/")!,
URL(string: "https://cabi.42seoul.io/")!,
URL(string: "https://24hoursarenotenough.42seoul.kr/")!
]
WebViewPreloader.shared.preload(urls: urlsToPreload)

let favorite = UserDefaultsManager.favorite
let favoriteUrl = favorite.url
WebViewPreloader.shared.preloadFavoriteView(url: favoriteUrl)

window?.rootViewController = CustomLaunchScreenViewController()
window?.makeKeyAndVisible()
window?.rootViewController = MainTabBarController()
window?.makeKeyAndVisible() // 윈도우를 화면에 보여줌

if let urlContext = connectionOptions.urlContexts.first {
let url = urlContext.url
Expand All @@ -53,7 +38,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
private func insertDefaultDataIfNeeded() {
let isDefaultDataInserted = UserDefaultsManager.isDefaultDataInserted
if !isDefaultDataInserted {
var defaultData = [
let defaultData = [
Folder(id: UUID(), name: "42 폴더", color: .gray, bookmarks: [
Bookmark(id: UUID(), name: "42 Intra", url: URL(string: "https://profile.intra.42.fr/")!),
Bookmark(id: UUID(), name: "42Where", url: URL(string: "https://www.where42.kr/")! ),
Expand Down
23 changes: 11 additions & 12 deletions iBox/Sources/Utils/WebViewPreloader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,40 @@ import WebKit

class WebViewPreloader {
static let shared = WebViewPreloader()
private var webViews: [URL: WKWebView] = [:]
private var webView: WKWebView?
private var favoriteView: (url: URL, webView: WKWebView)?

private init() {}

func preload(urls: [URL]) {
for url in urls {
let webView = WKWebView()
webView.load(URLRequest(url: url))
webViews[url] = webView
}
func preload(url: URL) {
let webView = WKWebView()
webView.isOpaque = false
webView.load(URLRequest(url: url))
self.webView = webView
}

func preloadFavoriteView(url: URL) {
let webView = WKWebView()
webView.isOpaque = false
webView.load(URLRequest(url: url))
favoriteView = (url, webView)
}

func getWebView(for url: URL) -> WKWebView? {
return webViews[url]
func getWebView() -> WKWebView? {
return webView
}

func getFavoriteView() -> WKWebView? {
return favoriteView?.webView
}

func resetWebView(for url: URL) {
webViews[url]?.load(URLRequest(url: url))
func resetWebView() {
webView = nil
}

func resetFavoriteView() {
guard let favoriteView else { return }
favoriteView.webView.load(URLRequest(url: favoriteView.url))
}


}