ความแตกต่างระหว่าง Xcode และ git สำหรับการแก้ไขแพ็คเกจที่รวดเร็ว


9

ดังนั้นพื้นหลังคือ: ฉันมีโครงการ Xcode ที่ขึ้นอยู่กับแพคเกจที่รวดเร็วซึ่งอยู่ในพื้นที่เก็บข้อมูลส่วนตัวบน GitHub แน่นอนว่าต้องใช้กุญแจในการเข้าถึง จนถึงตอนนี้ฉันได้จัดการกำหนดค่า CI เพื่อให้ฉันสามารถ ssh ลงในอินสแตนซ์และgit cloneพื้นที่เก็บข้อมูลที่จำเป็นสำหรับแพ็คเกจ swift น่าเสียดายที่เมื่อใช้งานด้วยxcbuildCI ไม่ทำงานและฉันได้รับข้อความนี้:

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

ในทางกลับกันgit cloneจะดึงเอา repo นี้อย่างมีความสุขตามที่เห็นที่นี่:

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.

สำหรับบริบทเพิ่มเติมอีกเล็กน้อยสิ่งนี้กำลังทำงานบน CircleCI ตั้งค่าด้วยคีย์ปรับใช้บน GitHub ซึ่งถูกเพิ่มไปยังงานบน CI

ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่อาจแตกต่างกันระหว่างวิธีที่ Xcode พยายามที่จะดึงเอาการอ้างอิงและวิธีที่วานิลลาคอมไพล์ทำได้ดี ขอบคุณ


ฉันกำลังมีปัญหาเดียวกันกับการกระทำ GitHub เป็น CI ของฉัน
bscothern

ไม่ใช่คำตอบ แต่บางครั้งในอดีต (โดยเฉพาะอย่างยิ่ง Xcode 10) รายละเอียดการรับรองความถูกต้องของ git มีแนวโน้มที่จะหายไปโดยไม่มีเหตุผล Xcode 11 แก้ปัญหานั้น
Alex

คำตอบ:


5

นี่น่าจะเป็นจุดบกพร่องใน Xcode 11 ที่มี SSH การสลับไปใช้ HTTPS เพื่อแก้ไข Swift Packages ช่วยแก้ไขปัญหา:

ดังนั้นจากนี้

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

ถึง:

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

สิ่งนี้ใช้ได้กับบิลด์ในเครื่อง แต่ไม่ใช่เครื่อง CI ที่คุณไม่สามารถลงชื่อ Xcode ลงในอะไรก็ได้ ซึ่งส่งผลให้เกิดข้อผิดพลาดนี้เสมอจาก Xcode: xcodebuild: ข้อผิดพลาด: ไม่สามารถแก้ไขการอ้างอิงแพคเกจ: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากไม่มีการระบุข้อมูลรับรอง ประสบการณ์ของฉันคือว่ารุ่น SSH ใช้งานได้ถ้าคีย์ ssh ของคุณได้รับการกำหนดค่าอย่างถูกต้องใน ~ / .ssh และ GitHub ตราบใดที่คุณยังลงชื่อเข้าใช้ GitHub ใน Xcode
bscothern

สิ่งนี้ใช้ได้กับฉันใน CI; ฉันไม่ได้อยู่ในออฟฟิศจนถึงวันจันทร์ดังนั้นจึงไม่สามารถตรวจสอบได้ แต่มันทำงานอย่างแน่นอน
ratbum

3

สำหรับ CI ไปป์ไลน์ที่คุณไม่สามารถลงชื่อเข้าใช้ GitHub หรือโฮสต์ที่เก็บอื่น ๆ นี่เป็นวิธีแก้ปัญหาที่ฉันพบว่าข้ามข้อ จำกัด / ข้อบกพร่องของ Xcode รอบ ๆ แพคเกจ Swift ส่วนตัว

ใช้ URL url สำหรับการขึ้นต่อกันแบบส่วนตัวเนื่องจาก xcodebuild ถูกละเว้นโดย ssh config แม้ว่าเอกสารจะระบุเป็นอย่างอื่น

เมื่อคุณสามารถสร้างภายในเครื่องด้วย https ให้ไปที่โฮสต์ที่เก็บของคุณและสร้างโทเค็นการเข้าถึงส่วนบุคคล (PAT) สำหรับคำแนะนำ GitHub จะพบที่นี่

ด้วยระบบ CI ของคุณเพิ่ม PAT นี้เป็นตัวแปรสภาพแวดล้อมที่เป็นความลับ GITHUB_PATในสคริปต์ด้านล่างนี้ค่ะจะเรียกว่าเป็น

จากนั้นในขั้นตอนการ CI ของคุณก่อนที่คุณจะรันxcodebuildตรวจสอบให้แน่ใจว่าคุณได้รันสคริปต์ทุบตีเวอร์ชั่นที่ถูกดัดแปลงอย่างเหมาะสม:

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

สคริปต์นี้จะค้นหาการอ้างอิง https ทั้งหมดและแทรก PAT เข้าไปเพื่อให้สามารถใช้งานได้โดยไม่ต้องใช้รหัสผ่าน

อย่าลืม:

  • แทนที่[org_name]ด้วยชื่อองค์กรของคุณ
  • แทนที่${GITHUB_PAT}ด้วยชื่อของ CI Secret ของคุณหากคุณตั้งชื่อมันแตกต่างกัน
  • กำหนดค่าgrepคำสั่งให้ละเว้นเส้นทางที่คุณไม่ต้องการให้สคริปต์แก้ไข
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.