Saltar al contenido

SwiftUI · iOS 16+

AppNorth para iOS con SwiftUI

Un paquete Swift con una vista SwiftUI lista para usar —tableros, ideas, votos, comentarios y feedback privado— y un cliente async/await para construir tu propia interfaz.

  1. 1. Añade el paquete

    En Xcode, File → Add Package Dependencies… y pega https://github.com/victorgxn/appnorth-ios, o decláralo en Package.swift.

    Package.swift
    // Package.swift
    dependencies: [
        .package(url: "https://github.com/victorgxn/appnorth-ios", from: "0.2.0")
    ],
    targets: [
        .target(name: "MyApp", dependencies: [
            .product(name: "AppNorth", package: "appnorth-ios")
        ])
    ]
    Fuente: apps/web/src/lib/sdk-install.ts
  2. 2. Configura el cliente

    Inicializa el cliente con tu App ID público y muestra la comunidad con AppNorthView.

    FeedbackScreen.swift
    import AppNorth
    
    let configuration = try AppNorthConfiguration(
        apiURL: URL(string: "https://feedback.example.com")!,
        appId: "your_public_app_id",
        origin: URL(string: "https://app.example.com")!
    )
    let client = AppNorthClient(configuration: configuration)
    
    struct FeedbackScreen: View {
        var body: some View { AppNorthView(client: client) }
    }
    Fuente: packages/ios/README.md
  3. 3. Identidad verificada

    Para tableros que exigen identidad, pide a tu backend una credencial de vida corta. El secreto nunca entra en la app.

    Session.swift
    // Valores devueltos por el backend autenticado de tu app:
    let credential = try AppNorthIdentityCredential(
        email: response.email,
        expiresAt: response.expiresAt, // segundos Unix
        signature: response.signature
    )
    
    client.setIdentityCredential(credential)
    
    // Al cerrar sesión:
    client.clearIdentityCredential()
    Fuente: packages/ios/README.md
  4. 4. O usa el cliente directamente

    Todas las altas añaden una clave de idempotencia; los errores llegan como AppNorthError.

    CustomBoard.swift
    let boards = try await client.boards()
    let page = try await client.ideas(board: boards.first?.slug, sort: .top)
    let created = try await client.createIdea(
        board: boards[0].slug,
        title: "Add dark mode",
        description: "Follow the system appearance"
    )
    try await client.setVote(on: created.value.id, voted: true)
    Fuente: packages/ios/README.md