|
| 1 | +# Gerenciador de Pacotes Swift |
| 2 | + |
| 3 | +O [Gerenciador de Pacotes Swift](https://swift.org/package-manager/) (SPM) é usado para construir o código-fonte do seu projeto e suas dependências. Como o Vapor depende muito do SPM, é uma boa ideia entender os conceitos básicos de como ele funciona. |
| 4 | + |
| 5 | +O SPM é semelhante ao Cocoapods, Ruby gems e NPM. Você pode usar o SPM a partir da linha de comando com comandos como `swift build` e `swift test` ou com IDEs compatíveis. No entanto, ao contrário de alguns outros gerenciadores de pacotes, não há um índice central de pacotes para o SPM. O SPM, em vez disso, utiliza URLs para repositórios Git e gerencia versões de dependências usando [tags do Git](https://git-scm.com/book/en/v2/Git-Basics-Tagging). |
| 6 | + |
| 7 | +## Manifesto do Pacote |
| 8 | + |
| 9 | +O primeiro lugar que o SPM verifica em seu projeto é o manifesto do pacote. Isso sempre deve estar localizado no diretório raiz do seu projeto e nomeado `Package.swift`. |
| 10 | + |
| 11 | +Veja este exemplo de manifesto do pacote. |
| 12 | + |
| 13 | +```swift |
| 14 | +// swift-tools-version:5.8 |
| 15 | +import PackageDescription |
| 16 | + |
| 17 | +let package = Package( |
| 18 | + name: "MyApp", |
| 19 | + platforms: [ |
| 20 | + .macOS(.v12) |
| 21 | + ], |
| 22 | + dependencies: [ |
| 23 | + .package(url: "https://github.com/vapor/vapor.git", from: "4.76.0"), |
| 24 | + ], |
| 25 | + targets: [ |
| 26 | + .executableTarget( |
| 27 | + name: "App", |
| 28 | + dependencies: [ |
| 29 | + .product(name: "Vapor", package: "vapor") |
| 30 | + ] |
| 31 | + ), |
| 32 | + .testTarget(name: "AppTests", dependencies: [ |
| 33 | + .target(name: "App"), |
| 34 | + .product(name: "XCTVapor", package: "vapor"), |
| 35 | + ]) |
| 36 | + ] |
| 37 | +) |
| 38 | +``` |
| 39 | + |
| 40 | +Cada parte do manifesto é explicada nas seções seguintes. |
| 41 | + |
| 42 | +### Versão das Ferramentas |
| 43 | + |
| 44 | +A primeira linha de um manifesto de pacote indica a versão das ferramentas Swift necessárias. Isso especifica a versão mínima do Swift que o pacote suporta. A API de descrição do Pacote também pode mudar entre versões do Swift, então esta linha garante que o Swift saberá como analisar seu manifesto. |
| 45 | + |
| 46 | +### Nome do Pacote |
| 47 | + |
| 48 | +O primeiro argumento para `Package` é o nome do pacote. Se o pacote for público, você deve usar o último segmento da URL do repositório Git como o nome. |
| 49 | + |
| 50 | +### Plataformas |
| 51 | + |
| 52 | +O array `platforms` especifica quais plataformas este pacote suporta. Ao especificar `.macOS(.v12)`, este pacote requer macOS 12 ou posterior. Quando o Xcode carrega este projeto, ele automaticamente define a versão mínima de implantação para macOS 12, para que você possa usar todas as APIs disponíveis. |
| 53 | + |
| 54 | +### Dependências |
| 55 | + |
| 56 | +Dependências são outros pacotes SPM nos quais seu pacote depende. Todas as aplicações Vapor dependem do pacote Vapor, mas você pode adicionar quantas outras dependências desejar. |
| 57 | + |
| 58 | +No exemplo acima, você pode ver [vapor/vapor](https://github.com/vapor/vapor) versão 4.76.0 ou posterior como uma dependência deste pacote. Quando você adiciona uma dependência ao seu pacote, você deve indicar quais [targets](#targets) dependem dos módulos recém-disponíveis. |
| 59 | + |
| 60 | +### Targets |
| 61 | + |
| 62 | +Targets são todos os módulos, executáveis e testes que seu pacote contém. A maioria dos aplicativos Vapor terá dois targets, embora você possa adicionar quantos quiser para organizar seu código. Cada target declara de quais módulos depende. Você deve adicionar nomes de módulos aqui para poder importá-los em seu código. Um target pode depender de outros targets em seu projeto ou de quaisquer módulos expostos por pacotes que você adicionou ao array de [dependências principais](#dependencies). |
| 63 | + |
| 64 | +## Estrutura de Pastas |
| 65 | + |
| 66 | +Abaixo está a estrutura de pastas típica para um pacote SPM. |
| 67 | + |
| 68 | +``` |
| 69 | +. |
| 70 | +├── Sources |
| 71 | +│ └── App |
| 72 | +│ └── (Source code) |
| 73 | +├── Tests |
| 74 | +│ └── AppTests |
| 75 | +└── Package.swift |
| 76 | +``` |
| 77 | + |
| 78 | +Cada `.target` ou `.executableTarget` corresponde a uma pasta na pasta `Sources`. |
| 79 | +Cada `.testTarget` corresponde a uma pasta na pasta `Tests`. |
| 80 | + |
| 81 | +## Package.resolved |
| 82 | + |
| 83 | +A primeira vez que você construir seu projeto, o SPM criará um arquivo `Package.resolved` que armazena a versão de cada dependência. Na próxima vez que você construir seu projeto, essas mesmas versões serão usadas, mesmo que haja versões mais recentes disponíveis. |
| 84 | + |
| 85 | +Para atualizar suas dependências, execute `swift package update`. |
| 86 | + |
| 87 | +## Xcode |
| 88 | + |
| 89 | +Se você estiver usando o Xcode 11 ou superior, as alterações em dependências, targets, produtos, etc., ocorrerão automaticamente sempre que o arquivo `Package.swift` for modificado. |
| 90 | + |
| 91 | +Se você quiser atualizar para as últimas versões das dependências, use Arquivo → Pacotes Swift → Atualizar Para as Últimas Versões de Pacote Swift. |
| 92 | + |
| 93 | +Você também pode querer adicionar o arquivo `.swiftpm` ao seu `.gitignore`. É aqui que o Xcode armazenará sua configuração do projeto Xcode. |
0 commit comments