Então, o pano de fundo é o seguinte: eu tenho um projeto Xcode que depende de um pacote rápido que está em um repositório privado no github. Obviamente, isso requer uma chave para acessar. Até o momento, eu consegui configurar o IC para que eu possa ssh na instância e git clone
no repositório necessário para o pacote swift. Infelizmente, ao executá-lo xcbuild
como o CI, ele não funciona e recebo esta mensagem:
static:ios distiller$ xcodebuild -showBuildSettings -workspace ./Project.xcworkspace \
-scheme App\ Prod
Resolve Package Graph
Fetching git@github.com:company-uk/ProjectDependency.git
xcodebuild: error: Could not resolve package dependencies:
Authentication failed because the credentials were rejected
Por outro lado, git clone
buscará com prazer esse repositório, como visto aqui:
static:ios distiller$ git clone git@github.com:company-uk/ProjectDependency.git
Cloning into 'ProjectDependency'...
Warning: Permanently added the RSA host key for IP address '11.22.33.44' to the list of known hosts.
remote: Enumerating objects: 263, done.
remote: Counting objects: 100% (263/263), done.
remote: Compressing objects: 100% (171/171), done.
remote: Total 1335 (delta 165), reused 174 (delta 86), pack-reused 1072
Receiving objects: 100% (1335/1335), 1.11 MiB | 5.67 MiB/s, done.
Resolving deltas: 100% (681/681), done.
Para um pouco mais de contexto, isso está sendo executado no CircleCI, configurado com uma chave Deploy no GitHub, que foi adicionada ao Job on CI.
Qualquer sugestão sobre o que pode ser diferente entre a maneira como o Xcode tenta buscar dependências e a maneira como o vanilla git o faz seria ótimo. Obrigado.
Respostas:
Isso parece ser um bug no Xcode 11 com SSH. A mudança para HTTPS para resolver os pacotes Swift corrige o problema:
Então a partir disso:
para:
fonte
Para pipelines de CI em que você não pode entrar no GitHub ou em outros hosts de repositório, esta é a solução que descobri que ignora as restrições / bugs do Xcode nos pacotes Swift privados.
Use URLs https para as dependências particulares, porque a configuração do ssh atualmente é ignorada pelo xcodebuild, mesmo que a documentação diga o contrário.
Depois de criar localmente com https, vá para o host do repositório e crie um PAT (token de acesso pessoal). Para instruções do GitHub, consulte aqui .
Com seu sistema de IC, adicione esse PAT como uma variável de ambiente secreta. No script abaixo, é referido como
GITHUB_PAT
.Em seguida, no pipeline do IC antes de executar,
xcodebuild
certifique-se de executar uma versão modificada adequadamente deste script bash:Este script encontrará todas as referências https e injeta o PAT nele, para que possa ser usado sem uma senha.
Não esqueça:
[org_name]
pelo nome da sua organização.${GITHUB_PAT}
pelo nome do seu segredo de IC, se você o nomeou de maneira diferente.grep
comando para ignorar os caminhos que você não deseja modificar pelo script.fonte