7 Commits
1.8 ... main

Author SHA1 Message Date
neon443
c2f7356d3f ajklf;ldjks 2026-02-06 14:52:23 +00:00
Nihaal Sharma
747af5a654 Update README.md 2025-12-02 09:24:22 +00:00
neon443
811c336bb7 add badge 2025-12-02 09:23:28 +00:00
Nihaal Sharma
b1baef2135 Update README.md 2025-12-02 09:21:59 +00:00
Nihaal Sharma
e901724619 added appstore link 2025-12-02 09:10:16 +00:00
neon443
19c1cd4688 update SwiftTerm 2025-11-20 14:45:57 +00:00
neon443
c1e65b0826 fix appstore connect whining 2025-11-10 09:46:03 +00:00
10 changed files with 59 additions and 46 deletions

View File

@@ -5,8 +5,8 @@
// Created by neon443 on 06/06/2025. // Created by neon443 on 06/06/2025.
// //
VERSION = 1.10 VERSION = 1.10.2
BUILD = 186 BUILD = 202
// Configuration settings file format documentation can be found at: // Configuration settings file format documentation can be found at:
// https://developer.apple.com/documentation/xcode/adding-a-build-configuration-file-to-your-project // https://developer.apple.com/documentation/xcode/adding-a-build-configuration-file-to-your-project

View File

@@ -10,6 +10,11 @@
made by neon443 made by neon443
</a> </a>
</p> </p>
<p>
<a href="https://apps.apple.com/app/id6746970159">
<img src="https://github.com/neon443/ShhShell/blob/main/Resources/Download_on_the_App_Store_Badge_US-UK_blk_092917.png?raw=true" title="icon" alt="icon" width="100" />
</a>
</p>
<p> <p>
<a href="https://testflight.apple.com/join/uNKEAtSw"> <a href="https://testflight.apple.com/join/uNKEAtSw">
testflight testflight

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1092,10 +1092,8 @@
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
INFOPLIST_KEY_NSFaceIDUsageDescription = "ShhShell uses Face ID to verify your identity"; INFOPLIST_KEY_NSFaceIDUsageDescription = "ShhShell uses Face ID to verify your identity";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Needed to communicate with SSH Servers"; INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Needed to communicate with SSH Servers";
INFOPLIST_KEY_NSLocationAlwaysAndWhenInUseUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "Required to keep SSH connections alive, if enabled"; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_NSLocationUsageDescription = "Required to keep SSH connections alive, if enabled"; INFOPLIST_KEY_NSLocationUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
@@ -1136,10 +1134,8 @@
INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO;
INFOPLIST_KEY_NSFaceIDUsageDescription = "ShhShell uses Face ID to verify your identity"; INFOPLIST_KEY_NSFaceIDUsageDescription = "ShhShell uses Face ID to verify your identity";
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Needed to communicate with SSH Servers"; INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Needed to communicate with SSH Servers";
INFOPLIST_KEY_NSLocationAlwaysAndWhenInUseUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "Required to keep SSH connections alive, if enabled"; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_NSLocationUsageDescription = "Required to keep SSH connections alive, if enabled"; INFOPLIST_KEY_NSLocationUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "Required to keep SSH connections alive, if enabled";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;

View File

@@ -6,8 +6,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-argument-parser", "location" : "https://github.com/apple/swift-argument-parser",
"state" : { "state" : {
"revision" : "309a47b2b1d9b5e991f36961c983ecec72275be3", "revision" : "cdd0ef3755280949551dc26dee5de9ddeda89f54",
"version" : "1.6.1" "version" : "1.6.2"
} }
}, },
{ {
@@ -16,7 +16,7 @@
"location" : "https://github.com/swiftlang/swift-subprocess", "location" : "https://github.com/swiftlang/swift-subprocess",
"state" : { "state" : {
"branch" : "main", "branch" : "main",
"revision" : "680621bba49ca5c6b1df8d1693684dfd83351af4" "revision" : "ab2072d457d1464b17166cc02125fc9fc0791e1a"
} }
}, },
{ {
@@ -24,8 +24,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-system", "location" : "https://github.com/apple/swift-system",
"state" : { "state" : {
"revision" : "61e4ca4b81b9e09e2ec863b00c340eb13497dac6", "revision" : "395a77f0aa927f0ff73941d7ac35f2b46d47c9db",
"version" : "1.5.0" "version" : "1.6.3"
} }
} }
], ],

View File

@@ -23,8 +23,6 @@
<string>JetBrainsMonoNerdFontMono-BoldItalic.ttf</string> <string>JetBrainsMonoNerdFontMono-BoldItalic.ttf</string>
</array> </array>
<key>UIBackgroundModes</key> <key>UIBackgroundModes</key>
<array> <array/>
<string>location</string>
</array>
</dict> </dict>
</plist> </plist>

View File

@@ -102,4 +102,22 @@ enum AppIcon: Codable, CaseIterable, Equatable, CustomStringConvertible {
return "Blueprint" return "Blueprint"
} }
} }
var isiOS26: Bool {
switch self {
case .regular:
return true
case .beta, .betaBlueprint:
return false
}
}
var radius: CGFloat {
switch isiOS26 {
case true, false:
return 17.578125
// case false:
// return 16.5
}
}
} }

View File

@@ -38,7 +38,7 @@ struct SettingsView: View {
hostsManager.selectedTheme.background.suiColor.opacity(0.7) hostsManager.selectedTheme.background.suiColor.opacity(0.7)
.ignoresSafeArea(.all) .ignoresSafeArea(.all)
List { List {
Section("Terminal") { Section("Display") {
VStack(alignment: .leading) { VStack(alignment: .leading) {
HStack { HStack {
Label("Scrollback", systemImage: "scroll") Label("Scrollback", systemImage: "scroll")
@@ -52,7 +52,21 @@ struct SettingsView: View {
step: 250 step: 250
) )
} }
Toggle("Keep Display Awake", systemImage: "cup.and.saucer.fill", isOn: $hostsManager.settings.caffeinate)
if #unavailable(iOS 17), hostsManager.settings.filter == .crt {
Label("iOS 17 Required", systemImage: "exclamationmark.triangle.fill")
.foregroundStyle(.yellow)
.transition(.opacity)
}
Picker("", selection: $hostsManager.settings.filter) {
ForEach(TerminalFilter.allCases, id: \.self) { filter in
Text(filter.description).tag(filter)
}
}
.pickerStyle(.inline)
.labelsHidden()
} }
.animation(.spring, value: hostsManager.settings.filter)
Section("Cursor") { Section("Cursor") {
HStack(spacing: 20) { HStack(spacing: 20) {
@@ -154,51 +168,34 @@ struct SettingsView: View {
} }
} }
Section("Keepalive") { // Section("Keepalive") {
Toggle("Location Persistence", systemImage: "location.fill", isOn: $hostsManager.settings.locationPersist) // Toggle("Location Persistence", systemImage: "location.fill", isOn: $hostsManager.settings.locationPersist)
.onChange(of: hostsManager.settings.locationPersist) { _ in // .onChange(of: hostsManager.settings.locationPersist) { _ in
if hostsManager.settings.locationPersist && !Backgrounder.shared.checkPermsStatus() { // if hostsManager.settings.locationPersist && !Backgrounder.shared.checkPermsStatus() {
Backgrounder.shared.requestPerms() // Backgrounder.shared.requestPerms()
} // }
} // }
Toggle("Keep Display Awake", systemImage: "cup.and.saucer.fill", isOn: $hostsManager.settings.caffeinate) // }
}
Section("Bell Feedback") { Section("Bell Feedback") {
Toggle("Sound", systemImage: "bell.and.waves.left.and.right", isOn: $hostsManager.settings.bellSound) Toggle("Sound", systemImage: "bell.and.waves.left.and.right", isOn: $hostsManager.settings.bellSound)
Toggle("Haptic",systemImage: "iphone.radiowaves.left.and.right", isOn: $hostsManager.settings.bellHaptic) Toggle("Haptic",systemImage: "iphone.radiowaves.left.and.right", isOn: $hostsManager.settings.bellHaptic)
} }
Section("Terminal Filter") {
if #unavailable(iOS 17), hostsManager.settings.filter == .crt {
Label("iOS 17 Required", systemImage: "exclamationmark.triangle.fill")
.foregroundStyle(.yellow)
.transition(.opacity)
}
Picker("", selection: $hostsManager.settings.filter) {
ForEach(TerminalFilter.allCases, id: \.self) { filter in
Text(filter.description).tag(filter)
}
}
.pickerStyle(.inline)
.labelsHidden()
}
.animation(.spring, value: hostsManager.settings.filter)
Section("App Icon") { Section("App Icon") {
ScrollView(.horizontal) { ScrollView(.horizontal) {
HStack { HStack {
ForEach(AppIcon.allCases, id: \.self) { icon in ForEach(AppIcon.allCases, id: \.self) { icon in
let isSelected = hostsManager.settings.appIcon == icon let isSelected = hostsManager.settings.appIcon == icon
ZStack(alignment: .top) { ZStack(alignment: .top) {
RoundedRectangle(cornerRadius: 21.5) RoundedRectangle(cornerRadius: icon.radius + 5)
.foregroundStyle(.gray.opacity(0.5)) .foregroundStyle(.gray.opacity(0.5))
.opacity(isSelected ? 1 : 0) .opacity(isSelected ? 1 : 0)
VStack(spacing: 0) { VStack(spacing: 0) {
icon.image icon.image
.resizable().scaledToFit() .resizable().scaledToFit()
.clipShape(RoundedRectangle(cornerRadius: 16.5)) .frame(width: 85, height: 85)
.clipShape(RoundedRectangle(cornerRadius: icon.radius))
.padding(5) .padding(5)
Text(icon.description).tag(icon) Text(icon.description).tag(icon)
.font(.caption) .font(.caption)
@@ -207,7 +204,6 @@ struct SettingsView: View {
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
} }
} }
.frame(maxWidth: 85, maxHeight: 110)
.onTapGesture { .onTapGesture {
withAnimation { withAnimation {
hostsManager.settings.appIcon = icon hostsManager.settings.appIcon = icon

View File

@@ -34,7 +34,7 @@ struct AddSnippetView: View {
TextEditor(text: $content) TextEditor(text: $content)
.autocorrectionDisabled() .autocorrectionDisabled()
.textInputAutocapitalization(.never) .textInputAutocapitalization(.never)
.background(.black) // .background(.black)
.clipShape(RoundedRectangle(cornerRadius: 5)) .clipShape(RoundedRectangle(cornerRadius: 5))
.padding(.bottom) .padding(.bottom)
.frame(minHeight: 50) .frame(minHeight: 50)