Evitando conflitos no Xcode
はじめに
O objetivo desse texto é mostrar como resolvi alguns problemas no meu time utilizando o Tuist para gerar projetos e workspaces do Xcode e que com isso nós evitamos conflitos na hora do merge, resolvemos problem as para gerenciardependências e também podemos padronizar configurações dos projetos e abrir individualmente o projeto que vai ser alterado (modo foco).
インストール
インストールは簡単で、端末の実行コマンドはありません:
curl -Ls https://install.tuist.io | bash
Criando um projeto novo
Se for um novo projeto a utilização do Tuist é super simples.
Basta criar uma Pasta e executar o
tuist init
mkdir MyApp
cd MyApp
tuist init --platform ios
O コマンドは、arquivos base,
Info.plist
, AppDelegate.swift
, arquivos de teste o Project.swift
que contém as configurações do projeto.Migrando um projeto existente
A migração no meu caso foi quietra porque o projeto é simples e tenho um Workspace com vários projetos quedependem do Core e uma unicadependência externcia em um Target de teste.
コアに移行し、プロジェクトの依存関係を定義し、ワークスペースの構成に依存するように解決します.
Na pasta de cada projeto criei o arquivo
Project.swift
, no diretório raíz o Workspace.swift
e a pasta Tuist
com o arquivo Dependencies.swift
Configurações do projeto
O Project.swift contém a configuração do projeto.定義された名前、組織、ターゲット、スキーマ、すべての要素が含まれています.
フレームワークをインポートするには
ProjectDescription
を参照してください Project
を参照してください.Um project precisa obrigatoriamente dos parametros:
project
e name
que é um array do typeo Target.特定のターゲット、プラットフォーム、製品の種類、コードのバンドルはありません.
let target = Target(name: "App",
platform: .iOS,
product: .app,
bundleId: "com.rafa.example",
infoPlist: "Info.plist",
sources: "Sources/**",
dependencies: [])
let project = Project(
name: "MyProject",
targets: [target]
)
外部依存
A integração com dependências externas ainda está em alpha, como é avisado na documentação
No momento que estou escrevendo esse texto a integração com Cocoapods ainda não é suportada.
Cada projeto pode ter suasdependências configuradas individualmente, basta criar a Pasta
targets
com o arquivo Tuist
dentro dela.No meu caso, fiz isso na Pasta raiz do projeto porque tenho uma únicadependência externa.
import ProjectDescription
let dependencies = Dependencies(
carthage: [
.github(path: "Alamofire/Alamofire", requirement: .exact("5.0.4")),
],
swiftPackageManager: [
.remote(url: "https://github.com/Alamofire/Alamofire", requirement: .upToNextMajor(from: "5.0.0")),
],
platforms: [.iOS]
)
Feito isso baixe asdependências rodando
Dependencies.swift
.ウマ パスタ チャマダDe volta ao
tuist dependencies fetch
é necessário registrar no 依存するバイシャダをターゲットにします.let target = Target(name: "App",
platform: .iOS,
product: .app,
bundleId: "com.rafa.example",
infoPlist: "Info.plist",
sources: "Sources/**",
dependencies: [
.external(name: "Alamofire"),
])
ワークスペースの構成
Por padrão
Project.swift
cria um Workspace com o mesmo nome do projeto e já inclui as dedependents.モノレポでプロジェクトを作成する必要はありません.ワークスペースやプロジェクト プロジェクトを追加するための事前設定は必要ありません.
import ProjectDescription
let workspace = Workspace(
name: "ProjectWorkspace",
projects: [
"Project1",
"Project2",
"Project3"
],
schemes: []
)
Por padrão os schemas são gerados automaticamente, mas podem ser personalizados para configurar as ações de cada um.
ゲランド・オス・アルキボス
A configuração é essa,dependendo do tamanho do projeto pode serum pouco cansativa mas os ganhos são compensatórios.
Depois de tudo configurado, é so rodar o
tuist generate
para baixar asdependências e depois tuist dependencies fetch
para gerar os projetos projetos/workspaces.テストは、Swift と Yaml を使用して、多くの解決策を作成し、モジュールのキャッシュを作成する可能性があります.
xcdiff evitando que o
tuist generate
fosse alterado manualmente の実装を完了します.E é isso! :)
リンク集
Tuist.io
Tuist docs
xcdiff
Reference
この問題について(Evitando conflitos no Xcode), 我々は、より多くの情報をここで見つけました https://dev.to/raafas/evitando-conflitos-no-xcode-3bdaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol