Hızlı paketleri çözmek için Xcode ve git arasındaki fark


10

Yani arka plan bu: Github özel bir depoda olan hızlı bir pakete bağlı bir Xcode projem var. Tabii ki, bu erişim için bir anahtar gerektirir. Şimdiye kadar, örneğe ve git clonehızlı paket için gerekli veri havuzuna ssh yapabileceğim şekilde CI yapılandırmayı başardım . Ne yazık ki xcbuildCI gibi çalıştırırken , çalışmıyor ve bu mesajı alıyorum:

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

Buna karşılık, git cloneburada gösterildiği gibi mutlu bir şekilde bu repo getirecek:

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.

Biraz daha bağlam için bu, GitHub'da CI'deki İşe eklenen bir Deploy anahtarıyla ayarlanan CircleCI üzerinde çalışıyor.

Xcode'un bağımlılıkları getirmeye çalışması ile vanilla git'in yaptığı yöntem arasında neyin farklı olabileceğine dair herhangi bir öneri harika olurdu. Teşekkürler.


Şu anda GitHub Eylemler ile CI
bscothern

Bir cevap değil, ama bazen geçmişte (özellikle Xcode 10), git kimlik doğrulama detaylarının hiçbir sebepten dolayı kaybolma eğilimi vardı (başlangıçta tamam, sonra kaka). Xcode 11 bunu çözer.
Alex

Yanıtlar:


6

Bu SSH ile Xcode 11'de bir hata gibi görünüyor. Swift Paketlerini çözmek için HTTPS'ye geçmek sorunu çözer:

Yani bundan:

E29801192303068A00018344 /* XCRemoteSwiftPackageReference "ProjectDependency" */ = {
        isa = XCRemoteSwiftPackageReference;
        repositoryURL = "git@github.com:company-uk/ProjectDependency.git";
        requirement = {
                branch = "debug";
                kind = branch;
        };
};

için:

E29801192303068A00018344 /* XCRemoteSwiftPackageReference "ProjectDependency" */ = {
        isa = XCRemoteSwiftPackageReference;
        repositoryURL = "https://github.com/company-uk/ProjectDependency.git";
        requirement = {
                branch = "debug";
                kind = branch;
        };
};

Bu, yerel kodlar için çalışır, ancak Xcode'u hiçbir şeye imzalayamayacağınız CI makineleri için geçerli değildir. Bu, Xcode: xcodebuild: error: Paket bağımlılıkları çözülemedi: Kimlik bilgisi verilmediğinden kimlik doğrulama başarısız oldu. Deneyimim, ssh anahtarınız ~ / .ssh ve GitHub'da doğru yapılandırılmışsa SSH sürümünün çalışmasıdır. Xcode'da GitHub'da oturum açtığınız sürece.
bscothern

Bu benim için CI üzerinde çalışıyor; Pazartesi gününe kadar ofiste değilim, bu yüzden nasıl olduğunu araştıramıyorum, ama kesinlikle işi yapıyor.
ratbum

4

GitHub veya diğer havuz ana bilgisayarlarında oturum açamayacağınız CI boru hatları için bu, özel Swift paketleri etrafındaki Xcode kısıtlamalarını / hatalarını atladığını bulduğum çözüm.

Özel bağımlılıklar için https url'lerini kullanın, çünkü belgeler aksini söylemese de ssh config şu anda xcodebuild tarafından yok sayılır.

Https ile yerel olarak oluşturabildiğinizde, depo ana bilgisayarınıza gidin ve kişisel bir erişim belirteci (PAT) oluşturun. GitHub için talimatlar burada bulunur .

CI sisteminizle bu PAT'ı gizli bir ortam değişkeni olarak ekleyin. Aşağıdaki kodda buna denir GITHUB_PAT.

Ardından, çalıştırmadan önce CI kanalınızda xcodebuildbu bash betiğinin uygun şekilde değiştirilmiş bir sürümünü çalıştırdığınızdan emin olun:

for FILE in $(grep -Ril "https://github.com/[org_name]" .); do
    sed -i '' "s/https:\/\/github.com\/[org_name]/https:\/\/${GITHUB_PAT}@github.com\/[org_name]/g" ${FILE}
done

Bu komut dosyası tüm https referanslarını bulur ve PAT'ı parola olmadan kullanılabilmesi için enjekte eder.

Unutmayın:

  • [org_name]Kuruluş adınızla değiştirin .
  • ${GITHUB_PAT}Farklı bir ad verdiyseniz, CI Secret'ınızın adıyla değiştirin .
  • grepKomut dosyasını, komut dosyası tarafından değiştirilmesini istemediğiniz yolları yok sayacak şekilde yapılandırın .

1
Evet evet evet! Hiçbir şey yapmadığında bu benim için işe yarıyor! 2 gün bu sorunla mücadele! Belki Xcode SSH ile çalışana kadar zaman meselesi olacaktır, ancak şimdilik bu geçici çözümün yapılması gerekiyor.
Nuno Gonçalves
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.