SPM & Module Design
Swift Package Manager, modulos e XCFramework
Modularizacao via SPM permite compilacao incremental, isolamento de dependencias e distribuicao binaria via XCFramework. No IdentityKit, cada modulo tem responsabilidade unica e dependencias explicitas no grafo do package.
Arquitetura de Modulos do IdentityKit
O SDK e dividido em modulos independentes, cada um como um target SPM. Isso permite que integradores importem apenas o que precisam e reduz o tamanho do binario final.
| Modulo | Responsabilidade | Dependencias |
|---|---|---|
| IdentityKitCore | Models, protocols, configuration, error types | Nenhuma (leaf module) |
| IdentityKitCapture | AVFoundation camera, frame processing, Vision analysis | Core |
| IdentityKitUI | ViewControllers, coordinator, UI components | Core, Capture |
| IdentityKitNetwork | API client, retry logic, multipart upload | Core |
| IdentityKitStorage | Keychain wrapper, secure file storage, caching | Core |
Principios de Design Modular
Dependency Rule
- Dependencias apontam para dentro (Core no centro)
- Modulos externos nunca dependem de modulos internos
- Core nao importa UIKit, AVFoundation nem URLSession
- Protocols definidos em Core, implementacoes nos modulos
Access Control
publicβ API publica do SDK (o integrador ve)packageβ visivel entre modulos do mesmo package (Swift 5.9+)internalβ padrao, visivel apenas dentro do moduloprivate/fileprivateβ encapsulamento fino
Vantagens do SPM sobre CocoaPods/Carthage
| Aspecto | SPM | CocoaPods |
|---|---|---|
| Integrado no Xcode | Sim, nativo | Nao, requer gem Ruby |
| Build system | Swift Build (nativo) | Modifica xcworkspace |
| Distribuicao binaria | XCFramework via binaryTarget | Vendored frameworks |
| Plugins | Build tool plugins, command plugins | Pre/post install hooks (Ruby) |