diff --git a/Gemini-iOS/ActivityView.swift b/Gemini-iOS/ActivityView.swift deleted file mode 100644 index 8248d60..0000000 --- a/Gemini-iOS/ActivityView.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// ActivityView.swift -// Gemini-iOS -// -// Created by Shadowfacts on 9/30/20. -// - -import SwiftUI - -struct ActivityView: UIViewControllerRepresentable { - typealias UIViewControllerType = UIActivityViewController - - let items: [Any] - let activities: [UIActivity]? - - func makeUIViewController(context: Context) -> UIActivityViewController { - return UIActivityViewController(activityItems: items, applicationActivities: activities) - } - - func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) { - } - - -} diff --git a/Gemini-iOS/BrowserViewController.swift b/Gemini-iOS/BrowserViewController.swift deleted file mode 100644 index 6b4ce4a..0000000 --- a/Gemini-iOS/BrowserViewController.swift +++ /dev/null @@ -1,164 +0,0 @@ -// -// BrowserViewController.swift -// Gemini-iOS -// -// Created by Shadowfacts on 9/28/20. -// - -import UIKit -import SwiftUI -import BrowserCore -import Combine - -class BrowserViewController: UIViewController, UIScrollViewDelegate { - - let navigator: NavigationManager - - private var scrollView: UIScrollView! - - private var browserHost: UIHostingController! - private var navBarHost: UIHostingController! - private var toolBarHost: UIHostingController! - - private var prevScrollViewContentOffset: CGPoint? - - private var barAnimator: UIViewPropertyAnimator? - - private var cancellables = [AnyCancellable]() - - init(navigator: NavigationManager) { - self.navigator = navigator - - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - view.backgroundColor = .systemBackground - - scrollView = UIScrollView() - scrollView.translatesAutoresizingMaskIntoConstraints = false - scrollView.keyboardDismissMode = .interactive - view.addSubview(scrollView) - scrollView.delegate = self - NSLayoutConstraint.activate([ - scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor), - scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor), - scrollView.topAnchor.constraint(equalTo: view.topAnchor), - scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor), - ]) - - browserHost = UIHostingController(rootView: BrowserView(navigator: navigator, scrollingEnabled: false)) - browserHost.view.translatesAutoresizingMaskIntoConstraints = false - scrollView.addSubview(browserHost.view) - addChild(browserHost) - browserHost.didMove(toParent: self) - NSLayoutConstraint.activate([ - scrollView.contentLayoutGuide.leadingAnchor.constraint(equalTo: browserHost.view.leadingAnchor), - scrollView.contentLayoutGuide.trailingAnchor.constraint(equalTo: browserHost.view.trailingAnchor), - scrollView.contentLayoutGuide.topAnchor.constraint(equalTo: browserHost.view.topAnchor), - scrollView.contentLayoutGuide.bottomAnchor.constraint(equalTo: browserHost.view.bottomAnchor), - browserHost.view.widthAnchor.constraint(equalTo: view.widthAnchor), - - // make sure the browser host view is at least the screen height so the loading indicator appears centered - browserHost.view.heightAnchor.constraint(greaterThanOrEqualTo: view.heightAnchor), - ]) - - navBarHost = UIHostingController(rootView: NavigationBar(navigator: navigator)) - navBarHost.view.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(navBarHost.view) - addChild(navBarHost) - navBarHost.didMove(toParent: self) - - NSLayoutConstraint.activate([ - navBarHost.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), - navBarHost.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), - navBarHost.view.topAnchor.constraint(equalTo: view.topAnchor), - ]) - - toolBarHost = UIHostingController(rootView: ToolBar(navigator: navigator)) - toolBarHost.view.translatesAutoresizingMaskIntoConstraints = false - view.addSubview(toolBarHost.view) - addChild(toolBarHost) - toolBarHost.didMove(toParent: self) - NSLayoutConstraint.activate([ - toolBarHost.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), - toolBarHost.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), - toolBarHost.view.bottomAnchor.constraint(equalTo: view.bottomAnchor), - ]) - - navigator.$currentURL - .sink { (_) in - self.scrollView.contentOffset = .zero - self.navBarHost.view.transform = .identity - self.toolBarHost.view.transform = .identity - } - .store(in: &cancellables) - } - - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - - let insets = UIEdgeInsets( - top: navBarHost.view.bounds.height - view.safeAreaInsets.top, - left: 0, - bottom: toolBarHost.view.bounds.height - view.safeAreaInsets.bottom, - right: 0 - ) - scrollView.contentInset = insets - scrollView.scrollIndicatorInsets = insets - } - - // MARK: - UIScrollViewDelegate - - func scrollViewDidScroll(_ scrollView: UIScrollView) { - var scrollViewDelta: CGFloat = 0 - if let prev = prevScrollViewContentOffset { - scrollViewDelta = scrollView.contentOffset.y - prev.y - } - prevScrollViewContentOffset = scrollView.contentOffset - - // When certain state changes happen, the scroll view seems to "scroll" by top the safe area inset. - // It's not actually user scrolling, and this screws up our animation, so we ignore it. - guard abs(scrollViewDelta) != view.safeAreaInsets.top, - scrollViewDelta != 0, - scrollView.contentOffset.y > 0 else { return } - - let barAnimator: UIViewPropertyAnimator - if let animator = self.barAnimator { - barAnimator = animator - } else { - navBarHost.view.transform = .identity - toolBarHost.view.transform = .identity - barAnimator = UIViewPropertyAnimator(duration: 0.2, curve: .linear) { - self.navBarHost.view.transform = CGAffineTransform(translationX: 0, y: -self.navBarHost.view.frame.height) - self.toolBarHost.view.transform = CGAffineTransform(translationX: 0, y: self.toolBarHost.view.frame.height) - } - if scrollViewDelta < 0 { - barAnimator.fractionComplete = 1 - } - barAnimator.addCompletion { (_) in - self.barAnimator = nil - } - self.barAnimator = barAnimator - } - - let progressDelta = scrollViewDelta / navBarHost.view.bounds.height - barAnimator.fractionComplete = max(0, min(1, barAnimator.fractionComplete + progressDelta)) - } - - func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { - if let barAnimator = barAnimator { - if barAnimator.fractionComplete < 0.5 { - barAnimator.isReversed = true - } - barAnimator.startAnimation() - } - } - -} diff --git a/Gemini-iOS/ContentView.swift b/Gemini-iOS/ContentView.swift deleted file mode 100644 index 5f01ab4..0000000 --- a/Gemini-iOS/ContentView.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// ContentView.swift -// Gemini-iOS -// -// Created by Shadowfacts on 7/15/20. -// - -import SwiftUI -import BrowserCore - -struct ContentView: View { - @ObservedObject private var navigator: NavigationManager - @State private var urlFieldContents: String - @State private var prevScrollOffset: CGFloat = 0 - @State private var scrollOffset: CGFloat = 0 { - didSet { - prevScrollOffset = oldValue - } - } - @State private var barOffset: CGFloat = 0 - @State private var navBarHeight: CGFloat = 0 - @State private var toolBarHeight: CGFloat = 0 - @State private var showShareSheet = false - - init(navigator: NavigationManager) { - self.navigator = navigator - self._urlFieldContents = State(initialValue: navigator.currentURL.absoluteString) - } - - var body: some View { - ZStack { - GeometryReader { (outer: GeometryProxy) in - ScrollView(.vertical) { - Color.clear.frame(height: navBarHeight) - - BrowserView(navigator: navigator, scrollingEnabled: false) - .background(GeometryReader { (inner: GeometryProxy) in - Color.clear.preference(key: ScrollOffsetPrefKey.self, value: -inner.frame(in: .global).minY + outer.frame(in: .global).minY) - }) - - Color.clear.frame(height: toolBarHeight) - } - .onPreferenceChange(ScrollOffsetPrefKey.self) { - scrollOffset = $0 - let delta = scrollOffset - prevScrollOffset - - // When certain state changes happen, the scroll view seems to "scroll" by the top safe area inset. - // It's not actually user scrolling, and this screws up our animation, so we ignore it. - guard abs(delta) != outer.safeAreaInsets.top else { return } - - if scrollOffset < 0 { - barOffset = 0 - } else { - if delta != 0 { - barOffset += delta - } - - print(barOffset) - barOffset = max(0, min(navBarHeight + outer.safeAreaInsets.top, barOffset)) - } - } - } - - VStack(spacing: 0) { - NavigationBar(navigator: navigator) - .background(GeometryReader { (geom: GeometryProxy) in - Color.clear.preference(key: NavBarHeightPrefKey.self, value: geom.frame(in: .global).height) - }) - .offset(y: -barOffset) - - Spacer() - - ToolBar(navigator: navigator, showShareSheet: $showShareSheet) - .background(GeometryReader { (geom: GeometryProxy) in - Color.clear.preference(key: ToolBarHeightPrefKey.self, value: geom.frame(in: .global).height) - }) - .offset(y: barOffset) - } - .onPreferenceChange(NavBarHeightPrefKey.self) { - navBarHeight = $0 - print("nav bar height: \($0)") - } - .onPreferenceChange(ToolBarHeightPrefKey.self) { - toolBarHeight = $0 - print("tool bar height: \($0)") - } - } - .onAppear(perform: tweakAppearance) - .onReceive(navigator.$currentURL, perform: { (new) in - urlFieldContents = new.absoluteString - }) - .sheet(isPresented: $showShareSheet) { - ActivityView(items: [navigator.currentURL], activities: nil) - } - } - - private func tweakAppearance() { - UIScrollView.appearance().keyboardDismissMode = .interactive - } - - private func commitURL() { - guard let url = URL(string: urlFieldContents) else { return } - navigator.changeURL(url) - } -} - -fileprivate struct ScrollOffsetPrefKey: PreferenceKey { - typealias Value = CGFloat - static var defaultValue: CGFloat = 0 - static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { - value += nextValue() - } -} - -fileprivate struct NavBarHeightPrefKey: PreferenceKey { - typealias Value = CGFloat - static var defaultValue: CGFloat = 0 - static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { - value += nextValue() - } -} - -fileprivate struct ToolBarHeightPrefKey: PreferenceKey { - typealias Value = CGFloat - static var defaultValue: CGFloat = 0 - static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { - value += nextValue() - } -} - -fileprivate enum ScrollDirection { - case up, down, none -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView(navigator: NavigationManager(url: URL(string: "gemini://localhost/overview.gmi")!)) - } -} diff --git a/Gemini-iOS/NavigationBar.swift b/Gemini-iOS/NavigationBar.swift deleted file mode 100644 index 1d66637..0000000 --- a/Gemini-iOS/NavigationBar.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// NavigationBar.swift -// Gemini-iOS -// -// Created by Shadowfacts on 9/28/20. -// - -import SwiftUI -import BrowserCore - -struct NavigationBar: View { - @ObservedObject var navigator: NavigationManager - @State private var urlFieldContents: String - - @Environment(\.colorScheme) var colorScheme: ColorScheme - - init(navigator: NavigationManager) { - self.navigator = navigator - self._urlFieldContents = State(initialValue: navigator.displayURL) - } - - var body: some View { - VStack(spacing: 0) { - TextField("URL", text: $urlFieldContents, onCommit: commitURL) - .keyboardType(.URL) - .autocapitalization(.none) - .disableAutocorrection(true) - .textFieldStyle(RoundedBorderTextFieldStyle()) - .padding([.leading, .trailing, .bottom]) - - Rectangle() - .frame(height: 1) - .foregroundColor(Color(white: colorScheme == .dark ? 0.25 : 0.75)) - } - .background(Color(UIColor.systemBackground).edgesIgnoringSafeArea(.top)) - .onReceive(navigator.$currentURL) { (_) in - urlFieldContents = navigator.displayURL - } - } - - private func commitURL() { - guard let url = URL(string: urlFieldContents) else { return } - navigator.changeURL(url) - } -} - -struct NavigationBar_Previews: PreviewProvider { - static var previews: some View { - NavigationBar(navigator: NavigationManager(url: URL(string: "gemini://localhost/overview.gmi")!)) - } -} diff --git a/Gemini-iOS/ToolBar.swift b/Gemini-iOS/ToolBar.swift deleted file mode 100644 index 9ccb8f7..0000000 --- a/Gemini-iOS/ToolBar.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// ToolBar.swift -// Gemini-iOS -// -// Created by Shadowfacts on 9/28/20. -// - -import SwiftUI -import BrowserCore - -struct ToolBar: View { - @ObservedObject var navigator: NavigationManager - @Binding var showShareSheet: Bool - @State private var showPreferencesSheet = false - - @Environment(\.colorScheme) var colorScheme: ColorScheme - - var body: some View { - VStack(spacing: 4) { - Rectangle() - .frame(height: 1) - .foregroundColor(Color(white: colorScheme == .dark ? 0.25 : 0.75)) - - HStack { - // use a group because this exceeds the 10 view limit :/ - Group { - Spacer() - - Button(action: navigator.goBack) { - Image(systemName: "arrow.left") - .font(.system(size: 24)) - } - .accessibility(label: Text("Back")) - .hoverEffect(.highlight) - .contextMenu { - ForEach(Array(navigator.backStack.suffix(5).enumerated()), id: \.1) { (index, url) in - Button { - navigator.back(count: min(5, navigator.backStack.count) - index) - } label: { - Text(verbatim: urlForDisplay(url)) - } - } - } - .disabled(navigator.backStack.isEmpty) - - Spacer() - - Button(action: navigator.goForward) { - Image(systemName: "arrow.right") - .font(.system(size: 24)) - } - .accessibility(label: Text("Forward")) - .hoverEffect(.highlight) - .contextMenu { - ForEach(navigator.forwardStack.prefix(5).enumerated().reversed(), id: \.1) { (index, url) in - Button { - navigator.forward(count: index + 1) - } label: { - Text(verbatim: urlForDisplay(url)) - } - } - } - .disabled(navigator.forwardStack.isEmpty) - - Spacer() - - Button(action: navigator.reload) { - Image(systemName: "arrow.clockwise") - .font(.system(size: 24)) - } - .accessibility(label: Text("Reload")) - .hoverEffect(.highlight) - - Spacer() - - Button { - showShareSheet = true - } label: { - Image(systemName: "square.and.arrow.up") - .font(.system(size: 24)) - } - .accessibility(label: Text("Share")) - .hoverEffect(.highlight) - - Spacer() - - Button(action: { - showPreferencesSheet = true - }, label: { - Image(systemName: "gear") - .font(.system(size: 24)) - }) - .accessibility(label: Text("Preferences")) - .hoverEffect(.highlight) - } - - Spacer() - } - - } - .padding(.bottom, 4) - .background(Color(UIColor.systemBackground).edgesIgnoringSafeArea(.bottom)) - .sheet(isPresented: $showPreferencesSheet, content: { - PreferencesView() - }) - } - - private func urlForDisplay(_ url: URL) -> String { - var str = url.host! - if let port = url.port, - url.scheme != "gemini" || port != 1965 { - str += ":\(port)" - } - str += url.path - return str - } -} - -struct ToolBar_Previews: PreviewProvider { - @State private static var showShareSheet = false - - static var previews: some View { - ToolBar(navigator: NavigationManager(url: URL(string: "gemini://localhost/overview.gmi")!), showShareSheet: $showShareSheet) - } -} diff --git a/Gemini.xcodeproj/project.pbxproj b/Gemini.xcodeproj/project.pbxproj index 6b25a85..e574870 100644 --- a/Gemini.xcodeproj/project.pbxproj +++ b/Gemini.xcodeproj/project.pbxproj @@ -36,7 +36,6 @@ D62664EE24BC0BCE00DF9B88 /* MaybeLazyVStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = D62664ED24BC0BCE00DF9B88 /* MaybeLazyVStack.swift */; }; D62664F024BC0D7700DF9B88 /* GeminiFormat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D62664A824BBF26A00DF9B88 /* GeminiFormat.framework */; }; D62664FA24BC12BC00DF9B88 /* DocumentTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D62664F924BC12BC00DF9B88 /* DocumentTests.swift */; }; - D62BCEE2252553620031D894 /* ActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D62BCEE1252553620031D894 /* ActivityView.swift */; }; D664673624BD07F700B0B741 /* RenderingBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D664673524BD07F700B0B741 /* RenderingBlock.swift */; }; D664673824BD086F00B0B741 /* RenderingBlockView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D664673724BD086F00B0B741 /* RenderingBlockView.swift */; }; D664673A24BD0B8E00B0B741 /* Fonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D664673924BD0B8E00B0B741 /* Fonts.swift */; }; @@ -50,8 +49,6 @@ D688F663258C2479003A0A73 /* UIViewController+Children.swift in Sources */ = {isa = PBXBuildFile; fileRef = D688F662258C2479003A0A73 /* UIViewController+Children.swift */; }; D691A64E25217C6F00348C4B /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = D691A64D25217C6F00348C4B /* Preferences.swift */; }; D691A66725217FD800348C4B /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D691A66625217FD800348C4B /* PreferencesView.swift */; }; - D691A68725223A4700348C4B /* NavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D691A68625223A4600348C4B /* NavigationBar.swift */; }; - D691A6A0252242FC00348C4B /* ToolBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D691A69F252242FC00348C4B /* ToolBar.swift */; }; D69F00AC24BE9DD300E37622 /* GeminiDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D69F00AB24BE9DD300E37622 /* GeminiDataTask.swift */; }; D69F00AE24BEA29100E37622 /* GeminiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D69F00AD24BEA29100E37622 /* GeminiResponse.swift */; }; D6BC9AB3258E8E13008652BC /* ToolbarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6BC9AB2258E8E13008652BC /* ToolbarView.swift */; }; @@ -65,7 +62,6 @@ D6E1529B24BFAEC700FDF9D3 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = D6E1529A24BFAEC700FDF9D3 /* MainMenu.xib */; }; D6E152A524BFFDF500FDF9D3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E152A424BFFDF500FDF9D3 /* AppDelegate.swift */; }; D6E152A724BFFDF500FDF9D3 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E152A624BFFDF500FDF9D3 /* SceneDelegate.swift */; }; - D6E152A924BFFDF500FDF9D3 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E152A824BFFDF500FDF9D3 /* ContentView.swift */; }; D6E152AB24BFFDF600FDF9D3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D6E152AA24BFFDF600FDF9D3 /* Assets.xcassets */; }; D6E152AE24BFFDF600FDF9D3 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D6E152AD24BFFDF600FDF9D3 /* Preview Assets.xcassets */; }; D6E152B124BFFDF600FDF9D3 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6E152AF24BFFDF600FDF9D3 /* LaunchScreen.storyboard */; }; @@ -307,7 +303,6 @@ D62664EB24BC0B4D00DF9B88 /* DocumentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentView.swift; sourceTree = ""; }; D62664ED24BC0BCE00DF9B88 /* MaybeLazyVStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MaybeLazyVStack.swift; sourceTree = ""; }; D62664F924BC12BC00DF9B88 /* DocumentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentTests.swift; sourceTree = ""; }; - D62BCEE1252553620031D894 /* ActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityView.swift; sourceTree = ""; }; D664673524BD07F700B0B741 /* RenderingBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenderingBlock.swift; sourceTree = ""; }; D664673724BD086F00B0B741 /* RenderingBlockView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenderingBlockView.swift; sourceTree = ""; }; D664673924BD0B8E00B0B741 /* Fonts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fonts.swift; sourceTree = ""; }; @@ -320,9 +315,6 @@ D688F662258C2479003A0A73 /* UIViewController+Children.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Children.swift"; sourceTree = ""; }; D691A64D25217C6F00348C4B /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = ""; }; D691A66625217FD800348C4B /* PreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = ""; }; - D691A6762522382E00348C4B /* BrowserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserViewController.swift; sourceTree = ""; }; - D691A68625223A4600348C4B /* NavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBar.swift; sourceTree = ""; }; - D691A69F252242FC00348C4B /* ToolBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolBar.swift; sourceTree = ""; }; D69F00AB24BE9DD300E37622 /* GeminiDataTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeminiDataTask.swift; sourceTree = ""; }; D69F00AD24BEA29100E37622 /* GeminiResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeminiResponse.swift; sourceTree = ""; }; D69F00AF24BEA84D00E37622 /* NavigationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationManager.swift; sourceTree = ""; }; @@ -338,7 +330,6 @@ D6E152A224BFFDF500FDF9D3 /* Gemini-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Gemini-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; D6E152A424BFFDF500FDF9D3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; D6E152A624BFFDF500FDF9D3 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - D6E152A824BFFDF500FDF9D3 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; D6E152AA24BFFDF600FDF9D3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; D6E152AD24BFFDF600FDF9D3 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; D6E152B024BFFDF600FDF9D3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; @@ -600,13 +591,8 @@ D6BC9AB2258E8E13008652BC /* ToolbarView.swift */, D6BC9ABB258E9862008652BC /* NavigationBarView.swift */, D6BC9AD6258FC8B3008652BC /* TableOfContentsView.swift */, - D691A6762522382E00348C4B /* BrowserViewController.swift */, - D6E152A824BFFDF500FDF9D3 /* ContentView.swift */, - D691A68625223A4600348C4B /* NavigationBar.swift */, - D691A69F252242FC00348C4B /* ToolBar.swift */, D691A64D25217C6F00348C4B /* Preferences.swift */, D691A66625217FD800348C4B /* PreferencesView.swift */, - D62BCEE1252553620031D894 /* ActivityView.swift */, D688F618258AD231003A0A73 /* Resources */, D6E152AA24BFFDF600FDF9D3 /* Assets.xcassets */, D6E152AF24BFFDF600FDF9D3 /* LaunchScreen.storyboard */, @@ -1124,17 +1110,13 @@ D688F599258ACAAE003A0A73 /* BrowserWebViewController.swift in Sources */, D688F633258B09BB003A0A73 /* TrackpadScrollGestureRecognizer.swift in Sources */, D6E152A524BFFDF500FDF9D3 /* AppDelegate.swift in Sources */, - D691A6A0252242FC00348C4B /* ToolBar.swift in Sources */, D6E152A724BFFDF500FDF9D3 /* SceneDelegate.swift in Sources */, D6BC9AB3258E8E13008652BC /* ToolbarView.swift in Sources */, D688F64A258C17F3003A0A73 /* SymbolCache.swift in Sources */, - D62BCEE2252553620031D894 /* ActivityView.swift in Sources */, D688F65A258C2256003A0A73 /* BrowserNavigationController.swift in Sources */, D6BC9AD7258FC8B3008652BC /* TableOfContentsView.swift in Sources */, - D691A68725223A4700348C4B /* NavigationBar.swift in Sources */, D688F663258C2479003A0A73 /* UIViewController+Children.swift in Sources */, D691A64E25217C6F00348C4B /* Preferences.swift in Sources */, - D6E152A924BFFDF500FDF9D3 /* ContentView.swift in Sources */, D6BC9ABC258E9862008652BC /* NavigationBarView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0;