Finish add support for tvOS
@@ -0,0 +1,15 @@
|
|||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
func NavigationDestinationCompat(isPresented: Binding<Bool>, @ViewBuilder destination: () -> some View) -> some View {
|
||||||
|
if #unavailable(iOS 16.0, macOS 13.0, tvOS 16.0, watchOS 9.0) {
|
||||||
|
return NavigationLink(
|
||||||
|
destination: destination(),
|
||||||
|
isActive: isPresented,
|
||||||
|
label: {
|
||||||
|
EmptyView()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
return EmptyView().navigationDestination(isPresented: isPresented, destination: destination)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
public func NavigationStackCompat(@ViewBuilder content: () -> some View) -> some View {
|
||||||
|
viewBuilder {
|
||||||
|
if #available(iOS 16.0, macOS 13.0, tvOS 16.0, *) {
|
||||||
|
NavigationStack(root: content)
|
||||||
|
} else {
|
||||||
|
NavigationView(content: content)
|
||||||
|
#if !os(macOS)
|
||||||
|
.navigationViewStyle(.stack)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
public extension View {
|
||||||
|
func onChangeCompat(of value: some Equatable, _ action: @escaping () -> Void) -> some View {
|
||||||
|
if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) {
|
||||||
|
return onChange(of: value, action)
|
||||||
|
} else {
|
||||||
|
return onChange(of: value) { _ in
|
||||||
|
action()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func onChangeCompat<V>(of value: V, _ action: @escaping (_ newValue: V) -> Void) -> some View where V: Equatable {
|
||||||
|
if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) {
|
||||||
|
return onChange(of: value) { _, newValue in
|
||||||
|
action(newValue)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return onChange(of: value, perform: action)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -68,7 +68,7 @@ public struct ActiveDashboardView: View {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
.onChange(of: selectedProfileID) { _ in
|
.onChangeCompat(of: selectedProfileID) {
|
||||||
reasserting = true
|
reasserting = true
|
||||||
Task.detached {
|
Task.detached {
|
||||||
await switchProfile(selectedProfileID!)
|
await switchProfile(selectedProfileID!)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public struct ExtensionStatusView: View {
|
|||||||
Rectangle()
|
Rectangle()
|
||||||
.fill(.clear)
|
.fill(.clear)
|
||||||
.frame(height: 1)
|
.frame(height: 1)
|
||||||
.onChange(of: geometry.size.width) { newValue in
|
.onChangeCompat(of: geometry.size.width) { newValue in
|
||||||
updateColumnCount(newValue)
|
updateColumnCount(newValue)
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public struct GroupView: View {
|
|||||||
Rectangle()
|
Rectangle()
|
||||||
.fill(.clear)
|
.fill(.clear)
|
||||||
.frame(height: 1)
|
.frame(height: 1)
|
||||||
.onChange(of: geometry.size.width) { newValue in
|
.onChangeCompat(of: geometry.size.width) { newValue in
|
||||||
geometryWidth = newValue
|
geometryWidth = newValue
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public struct LogView: View {
|
|||||||
Spacer(minLength: 5)
|
Spacer(minLength: 5)
|
||||||
}
|
}
|
||||||
|
|
||||||
.onChange(of: logClient.logList.count) { newCount in
|
.onChangeCompat(of: logClient.logList.count) { newCount in
|
||||||
withAnimation {
|
withAnimation {
|
||||||
reader.scrollTo(newCount - 1)
|
reader.scrollTo(newCount - 1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public extension NavigationPage {
|
|||||||
switch self {
|
switch self {
|
||||||
case .dashboard:
|
case .dashboard:
|
||||||
DashboardView()
|
DashboardView()
|
||||||
|
|
||||||
case .groups:
|
case .groups:
|
||||||
GroupListView()
|
GroupListView()
|
||||||
case .logs:
|
case .logs:
|
||||||
@@ -78,8 +79,9 @@ public extension NavigationPage {
|
|||||||
#if os(tvOS)
|
#if os(tvOS)
|
||||||
// TODO: fix groups ui
|
// TODO: fix groups ui
|
||||||
return false
|
return false
|
||||||
#endif
|
#else
|
||||||
return profile?.status.isConnectedStrict == true
|
return profile?.status.isConnectedStrict == true
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,17 +43,13 @@ public struct ProfileView: View {
|
|||||||
#if os(iOS) || os(tvOS)
|
#if os(iOS) || os(tvOS)
|
||||||
ZStack {
|
ZStack {
|
||||||
if let importRemoteProfileRequest {
|
if let importRemoteProfileRequest {
|
||||||
NavigationLink(
|
NavigationDestinationCompat(isPresented: $importRemoteProfilePresented) {
|
||||||
destination: NewProfileView(importRemoteProfileRequest) {
|
NewProfileView(importRemoteProfileRequest) {
|
||||||
Task.detached {
|
Task.detached {
|
||||||
doReload()
|
doReload()
|
||||||
}
|
}
|
||||||
},
|
|
||||||
isActive: $importRemoteProfilePresented,
|
|
||||||
label: {
|
|
||||||
EmptyView()
|
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
FormView {
|
FormView {
|
||||||
#if os(iOS) || os(tvOS)
|
#if os(iOS) || os(tvOS)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public struct SettingView: View {
|
|||||||
#endif
|
#endif
|
||||||
Section("Packet Tunnel") {
|
Section("Packet Tunnel") {
|
||||||
Toggle("Disable Memory Limit", isOn: $disableMemoryLimit)
|
Toggle("Disable Memory Limit", isOn: $disableMemoryLimit)
|
||||||
.onChange(of: disableMemoryLimit) { newValue in
|
.onChangeCompat(of: disableMemoryLimit) { newValue in
|
||||||
Task.detached {
|
Task.detached {
|
||||||
SharedPreferences.disableMemoryLimit = newValue
|
SharedPreferences.disableMemoryLimit = newValue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,10 +25,9 @@ struct ContentView: View {
|
|||||||
ForEach(NavigationPage.allCases.filter { it in
|
ForEach(NavigationPage.allCases.filter { it in
|
||||||
it.visible(extensionProfile)
|
it.visible(extensionProfile)
|
||||||
}, id: \.self) { page in
|
}, id: \.self) { page in
|
||||||
NavigationView {
|
NavigationStackCompat {
|
||||||
page.contentView
|
page.contentView
|
||||||
}
|
}
|
||||||
.navigationViewStyle(.stack)
|
|
||||||
.tag(page)
|
.tag(page)
|
||||||
.tabItem { page.label }
|
.tabItem { page.label }
|
||||||
}
|
}
|
||||||
@@ -48,10 +47,9 @@ struct ContentView: View {
|
|||||||
ForEach(NavigationPage.allCases.filter { it in
|
ForEach(NavigationPage.allCases.filter { it in
|
||||||
it.visible(nil)
|
it.visible(nil)
|
||||||
}, id: \.self) { page in
|
}, id: \.self) { page in
|
||||||
NavigationView {
|
NavigationStackCompat {
|
||||||
page.contentView
|
page.contentView
|
||||||
}
|
}
|
||||||
.navigationViewStyle(.stack)
|
|
||||||
.tag(page)
|
.tag(page)
|
||||||
.tabItem { page.label }
|
.tabItem { page.label }
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 54 KiB |
@@ -6,6 +6,7 @@
|
|||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "tv - App Icon Small - Back - 400 x 240 pt@2x.png",
|
||||||
"idiom" : "tv",
|
"idiom" : "tv",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
}
|
}
|
||||||
|
|||||||
|
After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 8.1 KiB |
@@ -6,6 +6,7 @@
|
|||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "tv - App Icon Small - Front - 400 x 240 pt@2x.png",
|
||||||
"idiom" : "tv",
|
"idiom" : "tv",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
}
|
}
|
||||||
|
|||||||
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 17 KiB |
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
|
"filename" : "tv - Top Shelf - Wide - 2320 x 720 pt.png",
|
||||||
"idiom" : "tv",
|
"idiom" : "tv",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "tv - Top Shelf - Wide - 2320 x 720 pt@2x.png",
|
||||||
"idiom" : "tv",
|
"idiom" : "tv",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
}
|
}
|
||||||
|
|||||||
|
After Width: | Height: | Size: 885 KiB |
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 725 KiB |
|
After Width: | Height: | Size: 2.7 MiB |
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
|
"filename" : "1920 x 720 pt.png",
|
||||||
"idiom" : "tv",
|
"idiom" : "tv",
|
||||||
"scale" : "1x"
|
"scale" : "1x"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "1920 x 720 pt@2x.png",
|
||||||
"idiom" : "tv",
|
"idiom" : "tv",
|
||||||
"scale" : "2x"
|
"scale" : "2x"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,11 +25,10 @@ struct ContentView: View {
|
|||||||
ForEach(NavigationPage.allCases.filter { it in
|
ForEach(NavigationPage.allCases.filter { it in
|
||||||
it.visible(extensionProfile)
|
it.visible(extensionProfile)
|
||||||
}, id: \.self) { page in
|
}, id: \.self) { page in
|
||||||
NavigationView {
|
NavigationStackCompat {
|
||||||
page.contentView
|
page.contentView
|
||||||
.focusSection()
|
.focusSection()
|
||||||
}
|
}
|
||||||
.navigationViewStyle(.stack)
|
|
||||||
.tag(page)
|
.tag(page)
|
||||||
.tabItem { page.label }
|
.tabItem { page.label }
|
||||||
}
|
}
|
||||||
@@ -49,11 +48,10 @@ struct ContentView: View {
|
|||||||
ForEach(NavigationPage.allCases.filter { it in
|
ForEach(NavigationPage.allCases.filter { it in
|
||||||
it.visible(nil)
|
it.visible(nil)
|
||||||
}, id: \.self) { page in
|
}, id: \.self) { page in
|
||||||
NavigationView {
|
NavigationStackCompat {
|
||||||
page.contentView
|
page.contentView
|
||||||
.focusSection()
|
.focusSection()
|
||||||
}
|
}
|
||||||
.navigationViewStyle(.stack)
|
|
||||||
.tag(page)
|
.tag(page)
|
||||||
.tabItem { page.label }
|
.tabItem { page.label }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,9 @@
|
|||||||
3A9144D92A46AE370036E9AD /* ShadredPreferences+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9144D82A46AE370036E9AD /* ShadredPreferences+Database.swift */; };
|
3A9144D92A46AE370036E9AD /* ShadredPreferences+Database.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A9144D82A46AE370036E9AD /* ShadredPreferences+Database.swift */; };
|
||||||
3A9759202A4EB69C00E4404B /* Library.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3AEC211D2A459B4700A63465 /* Library.framework */; };
|
3A9759202A4EB69C00E4404B /* Library.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3AEC211D2A459B4700A63465 /* Library.framework */; };
|
||||||
3A9759212A4EB69C00E4404B /* Library.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3AEC211D2A459B4700A63465 /* Library.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
3A9759212A4EB69C00E4404B /* Library.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3AEC211D2A459B4700A63465 /* Library.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
3A99B42A2A7526990010D4B0 /* NavigationStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A99B4292A7526990010D4B0 /* NavigationStackCompat.swift */; };
|
||||||
|
3A99B42C2A75288C0010D4B0 /* ViewCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A99B42B2A75288C0010D4B0 /* ViewCompat.swift */; };
|
||||||
|
3A99B42E2A752ABB0010D4B0 /* NavigationDestinationCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A99B42D2A752ABB0010D4B0 /* NavigationDestinationCompat.swift */; };
|
||||||
3AB1220B2A70FD500087CD55 /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB1220A2A70FD500087CD55 /* Alert.swift */; };
|
3AB1220B2A70FD500087CD55 /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB1220A2A70FD500087CD55 /* Alert.swift */; };
|
||||||
3AC03B992A72BF3300B7946F /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC03B982A72BF3300B7946F /* Application.swift */; };
|
3AC03B992A72BF3300B7946F /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC03B982A72BF3300B7946F /* Application.swift */; };
|
||||||
3AC03B9B2A72BF3300B7946F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC03B9A2A72BF3300B7946F /* ContentView.swift */; };
|
3AC03B9B2A72BF3300B7946F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC03B9A2A72BF3300B7946F /* ContentView.swift */; };
|
||||||
@@ -447,6 +450,9 @@
|
|||||||
3A7E90342A46756300D53052 /* SharedPreferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedPreferences.swift; sourceTree = "<group>"; };
|
3A7E90342A46756300D53052 /* SharedPreferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedPreferences.swift; sourceTree = "<group>"; };
|
||||||
3A9108E32A511AE70088B196 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
3A9108E32A511AE70088B196 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||||
3A9144D82A46AE370036E9AD /* ShadredPreferences+Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ShadredPreferences+Database.swift"; sourceTree = "<group>"; };
|
3A9144D82A46AE370036E9AD /* ShadredPreferences+Database.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ShadredPreferences+Database.swift"; sourceTree = "<group>"; };
|
||||||
|
3A99B4292A7526990010D4B0 /* NavigationStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationStackCompat.swift; sourceTree = "<group>"; };
|
||||||
|
3A99B42B2A75288C0010D4B0 /* ViewCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewCompat.swift; sourceTree = "<group>"; };
|
||||||
|
3A99B42D2A752ABB0010D4B0 /* NavigationDestinationCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationDestinationCompat.swift; sourceTree = "<group>"; };
|
||||||
3AA1ABB92A4C4054000FD4BA /* LogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogView.swift; sourceTree = "<group>"; };
|
3AA1ABB92A4C4054000FD4BA /* LogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogView.swift; sourceTree = "<group>"; };
|
||||||
3AA1ABBB2A4C4107000FD4BA /* LogClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogClient.swift; sourceTree = "<group>"; };
|
3AA1ABBB2A4C4107000FD4BA /* LogClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogClient.swift; sourceTree = "<group>"; };
|
||||||
3AAB5E712A4BF6F6009757F1 /* SettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingView.swift; sourceTree = "<group>"; };
|
3AAB5E712A4BF6F6009757F1 /* SettingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingView.swift; sourceTree = "<group>"; };
|
||||||
@@ -926,6 +932,9 @@
|
|||||||
3ADF8E022A4B118700900CC8 /* Binding+Unwrap.swift */,
|
3ADF8E022A4B118700900CC8 /* Binding+Unwrap.swift */,
|
||||||
3AC5EC072A6417470077AF34 /* DeviceCensorship.swift */,
|
3AC5EC072A6417470077AF34 /* DeviceCensorship.swift */,
|
||||||
3AB1220A2A70FD500087CD55 /* Alert.swift */,
|
3AB1220A2A70FD500087CD55 /* Alert.swift */,
|
||||||
|
3A99B4292A7526990010D4B0 /* NavigationStackCompat.swift */,
|
||||||
|
3A99B42B2A75288C0010D4B0 /* ViewCompat.swift */,
|
||||||
|
3A99B42D2A752ABB0010D4B0 /* NavigationDestinationCompat.swift */,
|
||||||
);
|
);
|
||||||
path = Abstract;
|
path = Abstract;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -1338,6 +1347,7 @@
|
|||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
3A99B42A2A7526990010D4B0 /* NavigationStackCompat.swift in Sources */,
|
||||||
3A4EAD2E2A4FEB77005435B3 /* EditProfileView.swift in Sources */,
|
3A4EAD2E2A4FEB77005435B3 /* EditProfileView.swift in Sources */,
|
||||||
3A4EAD2A2A4FEB6D005435B3 /* Binding+Unwrap.swift in Sources */,
|
3A4EAD2A2A4FEB6D005435B3 /* Binding+Unwrap.swift in Sources */,
|
||||||
3A4EAD2D2A4FEB77005435B3 /* ProfileView.swift in Sources */,
|
3A4EAD2D2A4FEB77005435B3 /* ProfileView.swift in Sources */,
|
||||||
@@ -1357,6 +1367,7 @@
|
|||||||
3A4EAD2F2A4FEB77005435B3 /* EditProfileContentView.swift in Sources */,
|
3A4EAD2F2A4FEB77005435B3 /* EditProfileContentView.swift in Sources */,
|
||||||
3A4EAD272A4FEB65005435B3 /* DashboardView.swift in Sources */,
|
3A4EAD272A4FEB65005435B3 /* DashboardView.swift in Sources */,
|
||||||
3A4EAD342A4FEB7F005435B3 /* LogView.swift in Sources */,
|
3A4EAD342A4FEB7F005435B3 /* LogView.swift in Sources */,
|
||||||
|
3A99B42C2A75288C0010D4B0 /* ViewCompat.swift in Sources */,
|
||||||
3AB1220B2A70FD500087CD55 /* Alert.swift in Sources */,
|
3AB1220B2A70FD500087CD55 /* Alert.swift in Sources */,
|
||||||
3A4EAD362A4FEB9C005435B3 /* ProfileUpdateTask.swift in Sources */,
|
3A4EAD362A4FEB9C005435B3 /* ProfileUpdateTask.swift in Sources */,
|
||||||
3A1CF2F62A50EE9C000A8289 /* GroupView.swift in Sources */,
|
3A1CF2F62A50EE9C000A8289 /* GroupView.swift in Sources */,
|
||||||
@@ -1364,6 +1375,7 @@
|
|||||||
3A1CF2F22A50E613000A8289 /* OutboundGroup.swift in Sources */,
|
3A1CF2F22A50E613000A8289 /* OutboundGroup.swift in Sources */,
|
||||||
3A4EAD2C2A4FEB77005435B3 /* EditProfileWindowView.swift in Sources */,
|
3A4EAD2C2A4FEB77005435B3 /* EditProfileWindowView.swift in Sources */,
|
||||||
3A1CF2FA2A50F0BD000A8289 /* OutboundGroupItem.swift in Sources */,
|
3A1CF2FA2A50F0BD000A8289 /* OutboundGroupItem.swift in Sources */,
|
||||||
|
3A99B42E2A752ABB0010D4B0 /* NavigationDestinationCompat.swift in Sources */,
|
||||||
3A4EAD332A4FEB7F005435B3 /* LogClient.swift in Sources */,
|
3A4EAD332A4FEB7F005435B3 /* LogClient.swift in Sources */,
|
||||||
3A4EAD262A4FEB65005435B3 /* ExtensionStatusView.swift in Sources */,
|
3A4EAD262A4FEB65005435B3 /* ExtensionStatusView.swift in Sources */,
|
||||||
3A4EAD252A4FEB65005435B3 /* StartStopButton.swift in Sources */,
|
3A4EAD252A4FEB65005435B3 /* StartStopButton.swift in Sources */,
|
||||||
@@ -1607,6 +1619,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
OTHER_CODE_SIGN_FLAGS = "";
|
OTHER_CODE_SIGN_FLAGS = "";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.extension;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.extension;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -1646,6 +1659,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
OTHER_CODE_SIGN_FLAGS = "";
|
OTHER_CODE_SIGN_FLAGS = "";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.extension;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.extension;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -1769,6 +1783,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
OTHER_CODE_SIGN_FLAGS = "";
|
OTHER_CODE_SIGN_FLAGS = "";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.intents;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.intents;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -1808,6 +1823,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
OTHER_CODE_SIGN_FLAGS = "";
|
OTHER_CODE_SIGN_FLAGS = "";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.intents;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.intents;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2052,6 +2068,7 @@
|
|||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.3.5;
|
MARKETING_VERSION = 1.3.5;
|
||||||
OTHER_CODE_SIGN_FLAGS = "--deep";
|
OTHER_CODE_SIGN_FLAGS = "--deep";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
||||||
PRODUCT_NAME = "sing-box";
|
PRODUCT_NAME = "sing-box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2092,6 +2109,7 @@
|
|||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.3.5;
|
MARKETING_VERSION = 1.3.5;
|
||||||
OTHER_CODE_SIGN_FLAGS = "--deep";
|
OTHER_CODE_SIGN_FLAGS = "--deep";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
||||||
PRODUCT_NAME = "sing-box";
|
PRODUCT_NAME = "sing-box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2131,6 +2149,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.3.5;
|
MARKETING_VERSION = 1.3.5;
|
||||||
OTHER_CODE_SIGN_FLAGS = "";
|
OTHER_CODE_SIGN_FLAGS = "";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
||||||
PRODUCT_NAME = "sing-box";
|
PRODUCT_NAME = "sing-box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2169,6 +2188,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.3.5;
|
MARKETING_VERSION = 1.3.5;
|
||||||
OTHER_CODE_SIGN_FLAGS = "";
|
OTHER_CODE_SIGN_FLAGS = "";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa;
|
||||||
PRODUCT_NAME = "sing-box";
|
PRODUCT_NAME = "sing-box";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2216,6 +2236,7 @@
|
|||||||
MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
|
MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
|
||||||
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
|
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
|
||||||
OTHER_CODE_SIGN_FLAGS = "--deep";
|
OTHER_CODE_SIGN_FLAGS = "--deep";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.library;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.library;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2270,6 +2291,7 @@
|
|||||||
MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
|
MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
|
||||||
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
|
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
|
||||||
OTHER_CODE_SIGN_FLAGS = "--deep";
|
OTHER_CODE_SIGN_FLAGS = "--deep";
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.library;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.library;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2309,6 +2331,7 @@
|
|||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.3.4;
|
MARKETING_VERSION = 1.3.4;
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.system;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.system;
|
||||||
PRODUCT_NAME = "$(inherited)";
|
PRODUCT_NAME = "$(inherited)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2344,6 +2367,7 @@
|
|||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.3.4;
|
MARKETING_VERSION = 1.3.4;
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.system;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.system;
|
||||||
PRODUCT_NAME = "$(inherited)";
|
PRODUCT_NAME = "$(inherited)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2384,6 +2408,7 @@
|
|||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.3.5;
|
MARKETING_VERSION = 1.3.5;
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.independent;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.independent;
|
||||||
PRODUCT_NAME = SFM;
|
PRODUCT_NAME = SFM;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@@ -2423,6 +2448,7 @@
|
|||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.3.5;
|
MARKETING_VERSION = 1.3.5;
|
||||||
|
OTHER_LDFLAGS = "-ld_classic";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.independent;
|
PRODUCT_BUNDLE_IDENTIFIER = io.nekohasekai.sfa.independent;
|
||||||
PRODUCT_NAME = SFM;
|
PRODUCT_NAME = SFM;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<key>ApplicationLibrary.xcscheme_^#shared#^_</key>
|
<key>ApplicationLibrary.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>5</integer>
|
<integer>6</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Associations (Playground) 1.xcscheme</key>
|
<key>Associations (Playground) 1.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
<key>MacLibrary.xcscheme_^#shared#^_</key>
|
<key>MacLibrary.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>6</integer>
|
<integer>4</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>MessageExtension.xcscheme_^#shared#^_</key>
|
<key>MessageExtension.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
<key>SFM.System.xcscheme_^#shared#^_</key>
|
<key>SFM.System.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>3</integer>
|
<integer>5</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SFM.xcscheme</key>
|
<key>SFM.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
@@ -141,12 +141,12 @@
|
|||||||
<key>SFT.xcscheme_^#shared#^_</key>
|
<key>SFT.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>4</integer>
|
<integer>2</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SystemExtension.xcscheme_^#shared#^_</key>
|
<key>SystemExtension.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>2</integer>
|
<integer>3</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Test.xcscheme_^#shared#^_</key>
|
<key>Test.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
|||||||