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.

ModuloResponsabilidadeDependencias
IdentityKitCoreModels, protocols, configuration, error typesNenhuma (leaf module)
IdentityKitCaptureAVFoundation camera, frame processing, Vision analysisCore
IdentityKitUIViewControllers, coordinator, UI componentsCore, Capture
IdentityKitNetworkAPI client, retry logic, multipart uploadCore
IdentityKitStorageKeychain wrapper, secure file storage, cachingCore

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 modulo
  • private / fileprivate β€” encapsulamento fino

Vantagens do SPM sobre CocoaPods/Carthage

AspectoSPMCocoaPods
Integrado no XcodeSim, nativoNao, requer gem Ruby
Build systemSwift Build (nativo)Modifica xcworkspace
Distribuicao binariaXCFramework via binaryTargetVendored frameworks
PluginsBuild tool plugins, command pluginsPre/post install hooks (Ruby)