Apple SDK

SynThera SDK for iOS and macOS

SynThera iOS & macOS SDK

The SynThera Apple SDK brings advanced clinical AI capabilities to iOS and macOS applications. Built with Swift and designed for seamless integration with Apple's health frameworks, enabling powerful healthcare apps with on-device processing and cloud-based clinical intelligence.

Swift Package Manager

.package(url: "https://github.com/synthera/synthera-ios-sdk", from: "1.0.0")

Native Swift SDK with full HealthKit integration and comprehensive clinical AI features.

Installation & Setup

Swift Package Manager

Package.swift
dependencies: [
    .package(
        url: "https://github.com/synthera/synthera-ios-sdk",
        from: "1.0.0"
    )
]
Xcode Integration

Add package dependency in Xcode:

File → Add Package Dependencies → https://github.com/synthera/synthera-ios-sdk

CocoaPods

Podfile
pod 'SynTheraSDK', '~> 1.0'
Install
pod install

Quick Start Example

import SynTheraSDK
import HealthKit

class ClinicalAnalysisManager {
    private let syntheraClient: SynTheraClient
    private let healthStore = HKHealthStore()
    
    init() {
        // Initialize SynThera client
        syntheraClient = SynTheraClient(
            apiKey: "your-api-key-here",
            environment: .production,
            region: .usEast1
        )
    }
    
    func analyzePatientData() async throws -> ClinicalAnalysis {
        // Create patient data from HealthKit
        let patientData = PatientData(
            demographics: Demographics(
                age: 45,
                biologicalSex: .female,
                bloodType: .aPositive
            ),
            vitals: try await getVitalsFromHealthKit(),
            symptoms: ["chest pain", "shortness of breath"],
            medicalHistory: ["hypertension", "diabetes"]
        )
        
        // Perform clinical analysis
        let analysis = try await syntheraClient.clinical.analyze(patientData)
        
        print("Risk Score: (analysis.riskScore)")
        print("Primary Diagnosis: (analysis.primaryDiagnosis)")
        print("Recommendations: (analysis.recommendations)")
        
        return analysis
    }
    
    private func getVitalsFromHealthKit() async throws -> Vitals {
        // Request HealthKit authorization
        let typesToRead: Set = [
            HKObjectType.quantityType(forIdentifier: .heartRate)!,
            HKObjectType.quantityType(forIdentifier: .bloodPressureSystolic)!,
            HKObjectType.quantityType(forIdentifier: .bloodPressureDiastolic)!,
            HKObjectType.quantityType(forIdentifier: .bodyTemperature)!
        ]
        
        try await healthStore.requestAuthorization(toShare: [], read: typesToRead)
        
        // Fetch latest vitals
        let heartRate = try await getLatestQuantity(for: .heartRate)
        let systolic = try await getLatestQuantity(for: .bloodPressureSystolic)
        let diastolic = try await getLatestQuantity(for: .bloodPressureDiastolic)
        let temperature = try await getLatestQuantity(for: .bodyTemperature)
        
        return Vitals(
            heartRate: heartRate?.doubleValue(for: .count().unitDivided(by: .minute())),
            bloodPressure: BloodPressure(
                systolic: systolic?.doubleValue(for: .millimeterOfMercury()),
                diastolic: diastolic?.doubleValue(for: .millimeterOfMercury())
            ),
            temperature: temperature?.doubleValue(for: .degreeFahrenheit())
        )
    }
}

This example demonstrates integration with HealthKit and basic clinical analysis. The SDK provides native Swift async/await support.

HealthKit Integration

// Seamless HealthKit data analysis let healthKitManager = SynTheraHealthKit() // Analyze health trends let analysis = try await healthKitManager .analyzeHealthTrends( startDate: Date().addingTimeInterval(-30*24*3600), endDate: Date() ) // Get risk assessment let riskScore = analysis.cardiovascularRisk let recommendations = analysis.recommendations

Voice Processing

// Real-time medical transcription let voiceProcessor = syntheraClient.voice // Start streaming transcription let stream = try await voiceProcessor .startStreaming( language: .english, specialty: .cardiology ) stream.onTranscription { transcription in print("Transcribed: (transcription.text)") // Extract medical entities let entities = transcription.medicalEntities print("Entities: (entities)") }

SwiftUI Integration

import SwiftUI
import SynTheraSDK

struct ClinicalAnalysisView: View {
    @StateObject private var analysisManager = ClinicalAnalysisManager()
    @State private var analysis: ClinicalAnalysis?
    @State private var isAnalyzing = false
    @State private var errorMessage: String?
    
    var body: some View {
        NavigationView {
            VStack(spacing: 20) {
                // Patient Data Input
                PatientDataForm(patientData: $analysisManager.patientData)
                
                // Analysis Button
                Button(action: performAnalysis) {
                    HStack {
                        if isAnalyzing {
                            ProgressView()
                                .progressViewStyle(CircularProgressViewStyle())
                                .scaleEffect(0.8)
                        }
                        Text(isAnalyzing ? "Analyzing..." : "Analyze Patient")
                    }
                }
                .disabled(isAnalyzing)
                .buttonStyle(PrimaryButtonStyle())
                
                // Analysis Results
                if let analysis = analysis {
                    AnalysisResultsView(analysis: analysis)
                }
                
                // Error Display
                if let errorMessage = errorMessage {
                    Text(errorMessage)
                        .foregroundColor(.red)
                        .padding()
                }
                
                Spacer()
            }
            .padding()
            .navigationTitle("Clinical Analysis")
        }
    }
    
    private func performAnalysis() {
        isAnalyzing = true
        errorMessage = nil
        
        Task {
            do {
                let result = try await analysisManager.analyzePatient()
                await MainActor.run {
                    self.analysis = result
                    self.isAnalyzing = false
                }
            } catch {
                await MainActor.run {
                    self.errorMessage = error.localizedDescription
                    self.isAnalyzing = false
                }
            }
        }
    }
}

struct AnalysisResultsView: View {
    let analysis: ClinicalAnalysis
    
    var body: some View {
        VStack(alignment: .leading, spacing: 16) {
            Text("Analysis Results")
                .font(.headline)
            
            // Risk Score
            HStack {
                Text("Risk Score:")
                    .fontWeight(.medium)
                Spacer()
                Text("(analysis.riskScore, specifier: "%.1f")")
                    .foregroundColor(riskColor(for: analysis.riskScore))
                    .fontWeight(.bold)
            }
            
            // Primary Diagnosis
            VStack(alignment: .leading, spacing: 8) {
                Text("Primary Diagnosis:")
                    .fontWeight(.medium)
                Text(analysis.primaryDiagnosis)
                    .padding()
                    .background(Color.blue.opacity(0.1))
                    .cornerRadius(8)
            }
            
            // Recommendations
            VStack(alignment: .leading, spacing: 8) {
                Text("Recommendations:")
                    .fontWeight(.medium)
                ForEach(analysis.recommendations, id: .self) { recommendation in
                    HStack {
                        Image(systemName: "checkmark.circle.fill")
                            .foregroundColor(.green)
                        Text(recommendation)
                    }
                    .padding(.vertical, 2)
                }
            }
        }
        .padding()
        .background(Color(.systemGray6))
        .cornerRadius(12)
    }
    
    private func riskColor(for score: Double) -> Color {
        switch score {
        case 0..<3: return .green
        case 3..<7: return .orange
        default: return .red
        }
    }
}

UIKit Integration

import UIKit
import SynTheraSDK

class ClinicalAnalysisViewController: UIViewController {
    private let syntheraClient = SynTheraClient(
        apiKey: "your-api-key",
        environment: .production
    )
    
    @IBOutlet weak var patientDataTextView: UITextView!
    @IBOutlet weak var analyzeButton: UIButton!
    @IBOutlet weak var resultsLabel: UILabel!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }
    
    private func setupUI() {
        title = "Clinical Analysis"
        analyzeButton.layer.cornerRadius = 8
        resultsLabel.numberOfLines = 0
    }
    
    @IBAction func analyzeButtonTapped(_ sender: UIButton) {
        performAnalysis()
    }
    
    private func performAnalysis() {
        setLoadingState(true)
        
        // Parse patient data from text view
        guard let patientDataText = patientDataTextView.text,
              !patientDataText.isEmpty else {
            showError("Please enter patient data")
            setLoadingState(false)
            return
        }
        
        Task {
            do {
                // Create patient data object
                let patientData = try parsePatientData(from: patientDataText)
                
                // Perform analysis
                let analysis = try await syntheraClient.clinical.analyze(patientData)
                
                await MainActor.run {
                    displayResults(analysis)
                    setLoadingState(false)
                }
            } catch {
                await MainActor.run {
                    showError(error.localizedDescription)
                    setLoadingState(false)
                }
            }
        }
    }
    
    private func displayResults(_ analysis: ClinicalAnalysis) {
        let resultsText = """
        Risk Score: (analysis.riskScore)
        
        Primary Diagnosis:
        (analysis.primaryDiagnosis)
        
        Recommendations:
        (analysis.recommendations.joined(separator: "
• "))
        
        Confidence: (analysis.confidenceScore)%
        """
        
        resultsLabel.text = resultsText
    }
    
    private func setLoadingState(_ isLoading: Bool) {
        analyzeButton.isEnabled = !isLoading
        
        if isLoading {
            activityIndicator.startAnimating()
            analyzeButton.setTitle("Analyzing...", for: .normal)
        } else {
            activityIndicator.stopAnimating()
            analyzeButton.setTitle("Analyze Patient", for: .normal)
        }
    }
    
    private func showError(_ message: String) {
        let alert = UIAlertController(
            title: "Error",
            message: message,
            preferredStyle: .alert
        )
        alert.addAction(UIAlertAction(title: "OK", style: .default))
        present(alert, animated: true)
    }
    
    private func parsePatientData(from text: String) throws -> PatientData {
        // Implementation for parsing patient data from text
        // This could be JSON parsing or custom format
        // For demo purposes, creating sample data
        return PatientData(
            demographics: Demographics(age: 45, biologicalSex: .female),
            vitals: Vitals(
                heartRate: 88,
                bloodPressure: BloodPressure(systolic: 140, diastolic: 90),
                temperature: 98.6
            ),
            symptoms: ["chest pain", "shortness of breath"],
            medicalHistory: ["hypertension"]
        )
    }
}

API Reference

Clinical Module

clinical.analyze(_:)
clinical.riskScore(_:)
clinical.drugInteractions(_:)
clinical.guidelines(for:)

Voice Module

voice.transcribe(_:)
voice.startStreaming(_:)
voice.generateSOAP(_:)
voice.extractEntities(_:)

Imaging Module

imaging.analyze(_:)
imaging.detectAnomalies(_:)
imaging.measure(_:)
imaging.compare(_:with:)

HealthKit Module

healthKit.requestAuthorization()
healthKit.fetchVitals()
healthKit.analyzeHealthTrends()
healthKit.syncWithSynThera()

FHIR Module

fhir.patient(_:)
fhir.observation(_:)
fhir.condition(_:)
fhir.medication(_:)

Utilities

utils.validateData(_:)
utils.anonymize(_:)
utils.exportReport(_:)
utils.healthCheck()

Privacy & Security

Data Protection

  • End-to-end encryption for all data
  • On-device processing when possible
  • Secure Enclave integration
  • Certificate pinning

Compliance

  • HIPAA compliant
  • GDPR compliant
  • Apple App Store guidelines
  • FDA 510(k) pathway ready

Additional Resources

API Documentation

Complete API reference

GitHub Repository

Source code and examples

Sample Apps

Complete iOS app examples

Community Support

Get help from other developers