feat(ios): add native app foundation and unsigned ipa build

This commit is contained in:
chick
2026-09-09 00:05:51 +08:00
parent fda3e11f1e
commit 54eb8dcb86
29 changed files with 1680 additions and 0 deletions
@@ -0,0 +1,59 @@
import SwiftUI
public struct AIButtonStyle: ButtonStyle {
public enum Kind: Hashable {
case primary
case secondary
case danger
var foregroundColor: Color {
switch self {
case .primary, .danger: return .white
case .secondary: return AITheme.ink
}
}
var backgroundColor: Color {
switch self {
case .primary: return AITheme.primary
case .secondary: return AITheme.surface
case .danger: return AITheme.danger
}
}
}
public enum Size: Hashable {
case compact
case regular
case large
}
private let kind: Kind
private let size: Size
public init(kind: Kind = .secondary, size: Size = .regular) {
self.kind = kind
self.size = size
}
public func makeBody(configuration: Configuration) -> some View {
let height: CGFloat = switch size {
case .compact: AITheme.compactButtonHeight
case .large: AITheme.largeButtonHeight
case .regular: AITheme.buttonHeight
}
configuration.label
.font(.system(size: 15, weight: .semibold))
.foregroundStyle(kind.foregroundColor)
.frame(minWidth: 44, minHeight: height)
.padding(.horizontal, 14)
.background(kind.backgroundColor)
.clipShape(RoundedRectangle(cornerRadius: AITheme.buttonRadius))
.overlay {
RoundedRectangle(cornerRadius: AITheme.buttonRadius)
.strokeBorder(kind == .secondary ? AITheme.line : .clear)
}
.opacity(configuration.isPressed ? 0.78 : 1)
}
}
@@ -0,0 +1,57 @@
import SwiftUI
public struct AICard<Content: View>: View {
private let content: Content
public init(@ViewBuilder content: () -> Content) {
self.content = content()
}
public var body: some View {
content
.padding(16)
.background(AITheme.surface)
.clipShape(RoundedRectangle(cornerRadius: AITheme.cardRadius))
.overlay {
RoundedRectangle(cornerRadius: AITheme.cardRadius)
.strokeBorder(AITheme.line)
}
}
}
public struct AITag: View {
private let text: String
private let tint: Color
public init(_ text: String, tint: Color = AITheme.primary) {
self.text = text
self.tint = tint
}
public var body: some View {
Text(text)
.font(.system(size: 12, weight: .semibold))
.foregroundStyle(tint)
.padding(.horizontal, 9)
.frame(minHeight: 26)
.background(tint.opacity(0.10))
.clipShape(Capsule())
}
}
public struct AIBrandBar: View {
public init() {}
public var body: some View {
HStack(spacing: 10) {
Image(systemName: "antenna.radiowaves.left.and.right")
Text(AppMetadata.name)
.font(.headline)
Spacer()
}
.foregroundStyle(.white)
.padding(.horizontal, 16)
.padding(.vertical, 12)
.background(Color(red: 0.075, green: 0.118, blue: 0.188))
}
}
@@ -0,0 +1,21 @@
import SwiftUI
public enum AITheme {
public static let canvas = Color(red: 0.953, green: 0.961, blue: 0.973)
public static let surface = Color.white
public static let ink = Color(red: 0.110, green: 0.153, blue: 0.220)
public static let muted = Color(red: 0.435, green: 0.486, blue: 0.561)
public static let line = Color(red: 0.878, green: 0.898, blue: 0.922)
public static let primary = Color(red: 0.067, green: 0.467, blue: 0.431)
public static let danger = Color(red: 0.714, green: 0.302, blue: 0.282)
public static let warning = Color(red: 0.722, green: 0.471, blue: 0.067)
public static let success = Color(red: 0.082, green: 0.584, blue: 0.439)
public static let buttonHeight: CGFloat = 38
public static let compactButtonHeight: CGFloat = 34
public static let largeButtonHeight: CGFloat = 42
public static let iconButtonSize: CGFloat = 40
public static let buttonRadius: CGFloat = 10
public static let cardRadius: CGFloat = 14
}