Xcode Command / usr / bin / codesign ล้มเหลวด้วยรหัสทางออก 1: errSecInternalComponent


106

ฉันกำลังพยายามเพิ่มโปรไฟล์การจัดเตรียมใหม่ใน Xcode ของฉันเพื่อทดสอบแอปบนอุปกรณ์ นี่คือขั้นตอนที่ฉันทำตาม:

  1. ลบใบรับรองและโปรไฟล์การจัดเตรียมทั้งหมด

  2. สร้าง / เพิ่มใบรับรอง IOS Dev

  3. เพิ่มอุปกรณ์ IOS ของฉันออนไลน์

  4. สร้างโปรไฟล์การจัดสรร iOS

  5. เพิ่มโปรไฟล์การจัดสรร iOS

  6. ทำความสะอาดแอป

  7. สร้างแล้วเรียกใช้แอป

  8. ตั้งค่า Codesigning nd Provisioning Profile ใน Build Settings

  9. Googling มากมาย> ที่ไม่ประสบความสำเร็จ

นี่คือข้อผิดพลาดที่ฉันได้รับ:

CSSM_SignData returned: 800108E6
/Users/alexpelletier/Library/Developer/Xcode/DerivedData/MyExpense-efnqzvoqwngzcmazaotyalepiice/Build/Products/Debug-iphoneos/MyExpense.app:     errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1

1
ข้อผิดพลาดมาจากความไม่ตรงกันในการตั้งค่าโปรไฟล์การเตรียมใช้งานและใบรับรองและรหัสบันเดิล ตรวจสอบให้แน่ใจว่า PP, รหัสบันเดิลและใบรับรองของคุณได้รับการตั้งค่าอย่างถูกต้องในและกำหนดอย่างถูกต้องใน itunes connect และในแอพ
Alex Pelletier

1
ฉันพบปัญหานี้จาก Xcode 11.2.1 ถึง 11.3 ระหว่างการเซ็นโค้ดของเฟรมเวิร์กที่ฉันสร้างขึ้น ไม่มีส่วนเกี่ยวข้องกับโปรไฟล์การจัดเตรียม คำตอบของ Mohit Manhas เคลียร์มัน
Daniel Zhang

สิ่งนี้จะเกิดขึ้นหากคุณใช้ SSH และไม่อนุญาตให้ใช้รหัสส่วนตัวในการเข้าถึงคีย์ส่วนตัวในพวงกุญแจ ในการตรวจสอบสิ่งนี้ให้ค้นหาคีย์ใน Keychain คลิกขวาแล้วเลือก "รับข้อมูล" เปลี่ยนเป็น "Access Control" และดูว่าแอป "codeign" อยู่ในรายการ "อนุญาตให้เข้าถึงเสมอ" หรือไม่ ดูความคิดเห็นนี้github.com/electron-userland/electron-builder/issues/…สิ่งที่ฉันทำคือเรียกใช้สคริปต์หนึ่งครั้งจาก GUI และคลิก "อนุญาตเสมอ" เพื่อเข้าถึงคีย์จากนั้นก็เริ่มทำงาน
ArticIceJuice

คำตอบ:


242

เปิดKeychain Accessแล้วในแฟ้มเมนูเลือกล็อคทั้งหมดพวงกุญแจ

จากนั้นกลับไปที่ Xcode และทำความสะอาดและสร้างใหม่ ระบบจะแจ้งให้คุณป้อนรหัสผ่านอีกครั้งเพื่อปลดล็อกพวงกุญแจ

หลังจากนี้สมมติว่าคุณไม่มีปัญหาในการรวบรวมอื่น ๆ ก็จะสำเร็จ!


7
ไม่น่าเชื่อว่าการล็อคและปลดล็อคโง่ ๆ นี้ช่วยได้! ขอบคุณ
Josip B.

8
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ มีเหตุผลมากกว่าการรีบูต!
yonix

3
ทำงานให้ฉันด้วย สร้าง apk สำหรับ Android 30 วินาทีสร้างแอปสำหรับ iOS .. 2 ชม.
Gabe

1
WTF อย่างจริงจัง! ขอบคุณ!
Peter N Lewis

1
@FredericP สำหรับฉันฉันเพิ่งเปลี่ยนรหัสผ่าน ดังนั้นจึงมีความสัมพันธ์กันระหว่างครั้งสุดท้ายที่พวงกุญแจถูกปลดล็อคโดย xcode และรหัสผ่านที่ใช้ในการทำเช่นนั้น
sherrellbc

77

ดูเหมือนว่ามีข้อผิดพลาดในกลไกการเซ็นชื่อรหัสการรีสตาร์ทเครื่อง Mac ของคุณควรแก้ปัญหาได้


กรณีที่แตกต่างกัน แต่ข้อความแสดงข้อผิดพลาดที่คล้ายกัน - การรีสตาร์ททำงาน
mikus

เกือบสี่ปีต่อมาและยังใช้งานได้! ฉันลืมกฎทอง - "หากมีข้อสงสัยให้รีบูต!"
Alan

2
หากคุณกำลังรอวิธีแก้ปัญหาที่ทำลายล้างน้อยกว่าโปรดดูคำตอบของ Mohit Manhas ด้านล่าง
yonix

ไม่ได้ช่วยฉัน
Anoop Vaidya

71

กรณีนี้เกิดขึ้นเมื่อล็อกพวงกุญแจล็อกอิน ในการปลดล็อกพวงกุญแจการเข้าสู่ระบบให้เรียกใช้:

security unlock-keychain login.keychain

หากพวงกุญแจของคุณได้รับการป้องกันด้วยรหัสผ่านให้ระบุรหัสผ่านโดยใช้-pตัวเลือก

จากนั้นลองใช้การสร้างหรือการเซ็นชื่อรหัสอีกครั้ง รหัสข้อผิดพลาดที่เป็นปัญหาอธิบายไว้ในเอกสารของ Appleว่าเป็นข้อผิดพลาดภายในดังนั้นจึงเป็นไปได้ทั้งหมดที่อาจเกิดขึ้นในกรณีอื่น ๆ ด้วย


1
น่าเสียดายที่โซลูชันนี้ดูเหมือนเป็นวงกลมทั้งหมด: การรันคำสั่งด้านบนทำให้คุณต้องป้อนรหัสผ่านซึ่งเห็นได้ชัดว่าไม่ต้องไปในเซสชันที่ไม่โต้ตอบ (เช่นเมื่อดำเนินการผ่านตัวแทน CI เช่น Jenkins)
Konrad Rudolph

นั่นเป็นจุดที่ดีอย่างที่คุณพูดนี่ไม่เหมาะสำหรับเซสชันที่ไม่โต้ตอบเช่นบอท CI มีประโยชน์เมื่อรันรีโมตบิลด์ในเซสชันบรรทัดคำสั่ง (เช่นผ่าน ssh)
cbracken

3
เรามีปัญหาที่คล้ายกันกับ Jenkins และนอกเหนือจากสิ่งที่กล่าวถึงในคำสั่งข้างต้นแล้วเราต้องส่งรหัสผ่านเป็นอาร์กิวเมนต์ของคำสั่งดังนั้นเราจึงทำ "security unlock-keychain -p $ KeychainPassword <login-keychain>" ซึ่งคุณสามารถจัดเก็บ KeychainPaasword บน Jenkins ได้อย่างปลอดภัย
Mohit Tater

1
ฉันไม่สามารถขอบคุณมากพอสำหรับโพสต์นี้ ฉันใช้เวลาสองสามวันในการพยายามหาสาเหตุว่าทำไมถึงcodesignล้มเหลวและนี่คือคำสั่งวิเศษที่ช่วยฉันไว้ !!!
Dimu4

32

มีปัญหาเดียวกันในHigh Sierra/ Xcode 9.4.1ความพยายามทั้งหมดในการลงชื่อเข้าใช้สิ้นสุดลงerrSecInternalComponent

    • ไปที่การเข้าถึงพวงกุญแจ
    • ไปที่พวงกุญแจล็อกอิน
    • เลือกหมวดหมู่ "ใบรับรองของฉัน"
    • ค้นหาใบรับรองที่คุณกำลังเซ็นชื่อและขยายเพื่อดูคีย์
    • ดับเบิลคลิกที่คีย์
    • ไปที่แท็บ "การควบคุมการเข้าถึง"
    • อัปเดตการควบคุมการเข้าถึงคีย์เป็น "อนุญาตให้แอปพลิเคชันทั้งหมดเข้าถึงรายการนี้"

อีกทางหนึ่ง:

รันคำสั่ง codeign บน mac terminal และ "Always allow" / usr / bin / codeign access to key

  1. หากพยายามลงชื่อจาก ssh / CI คุณต้องเรียกใช้ด้วย

    security unlock-keychain login.keychain

    ก่อนที่จะพยายามลงนาม App Bundle


คุณสามารถอธิบายรายละเอียดเกี่ยวกับ "อัปเดตการควบคุมการเข้าถึงคีย์เป็น" อนุญาตให้แอปพลิเคชันทั้งหมดเข้าถึงรายการนี้ "ได้หรือไม่ฉันไม่รู้ว่ามันหมายถึงอะไร
Jon McClung

2
@JonMcClung เปิดการเข้าถึงพวงกุญแจไปที่พวงกุญแจเข้าสู่ระบบ - ใบรับรองของฉัน ค้นหาใบรับรองที่คุณลงชื่อด้วยขยายเพื่อดูคีย์ ดับเบิลคลิกที่คีย์แล้วคุณจะเห็นแท็บ "Access control" เปลี่ยนเป็นอนุญาตอยู่ที่นั่น
ดุลยภาพ

5
@KonradRudolph security unlock-keychain -p <password> login.keychainจาก CI.
ดุลยภาพ

1
@KonradRudolph ไม่จำเป็นต้องระบุรหัสผ่านสำหรับพวงกุญแจปลดล็อกความปลอดภัยหากคุณอนุญาตให้ใช้รหัสเพื่อเข้าถึงคีย์ส่วนตัว การเว้นสตริงว่างไว้เป็นรหัสผ่านก็เพียงพอแล้ว
Kamil Szostakowski

1
@KonradRudolph ยังคงไม่เหมาะ แต่คุณสามารถย้ายคำสั่งปลดล็อก~/.bash_profileนั้นเพื่อให้พวงกุญแจปลดล็อกเมื่อเริ่มต้นไคลเอนต์ SSH แต่คุณไม่จำเป็นต้องอ้างอิงจากสคริปต์ CI ของคุณ
sschilli

17

ฉันพบปัญหาเดียวกันฉันรีสตาร์ท macOS และใช้งานได้

ในประเทศจีนเรามีคำพูดระหว่างนักพัฒนา:

ปัญหาเล็กน้อยแค่รีสตาร์ทปัญหาใหญ่ควรติดตั้งใหม่

บางครั้งคำพูดข้างต้นจะช่วยคุณได้มาก!


7
เราได้พูดในอเมริกา - 'อย่ารีบูตฮาร์ดแวร์เก่า'
Brant

@ แบรนทำไมคุณถึงพูดแบบนี้? มันน่าสนใจ.
ifeegoo

แค่ล้อเล่น - แต่เรามีปัญหาที่คล้ายกันและในที่สุดก็ใช้วิธีรีบูตเซิร์ฟเวอร์เก่า
Brant

1
@ifeegoo เซิร์ฟเวอร์เก่าอาจมีปัญหาในการบูตสำรอง (ระบบปฏิบัติการอาจอัปเดตตัวเองหรือไม่อาจมีใครบางคนละเมิดสคริปต์การบูต?) หรือต้องการขั้นตอนการเริ่มต้นด้วยตนเองที่ไม่มีใครรู้ คุณไม่สามารถรู้ได้ก่อนที่จะลอง บางทีรอม bios ก็เสียไป เป็นเพียงหนึ่งในสิ่งเหล่านั้นที่ไม่ควรเป็นปัญหาในสภาพแวดล้อมที่ได้รับการดูแลอย่างเหมาะสม แต่คุณไม่รู้จริงก่อนที่จะลองและคุณไม่อยากลอง
Lassi Kinnunen

1
@LassiKinnunen คุณพูดถูกเราเป็นนักพัฒนามือถือสำหรับ Android และ iOS ดังนั้นสถานการณ์แบบนี้จึงไม่สนใจเซิร์ฟเวอร์เซิร์ฟเวอร์นั้นอันตรายจริงๆมันไม่น่าอยู่
ifeegoo

8

ในกรณีที่ช่วยคนอื่นฉันพบerrSecInternalComponentข้อผิดพลาดcodesignเนื่องจากฉันใช้งานผ่านเซสชัน ssh ไปยังเครื่อง macOS ของฉัน การรันคำสั่งเดียวกันจากหน้าต่างเทอร์มินัลบนเครื่อง macOS นั้นใช้งานได้

สันนิษฐานว่าเป็นเพราะcodesignต้องการเข้าถึงคีย์ส่วนตัวจากพวงกุญแจเข้าสู่ระบบ

การเรียกใช้security unlock-keychain login.keychain(ตามที่อธิบายโดยคำตอบของ cbracken ) จากเซสชันเดียวกันก็ควรใช้งานได้เช่นกัน


นี่เป็นเรื่องแปลกมากแม้กระทั่งการเรียกใช้คำสั่งปลดล็อคพวงกุญแจก็ดูเหมือนจะล้มเหลวอย่างเงียบ ๆ เนื่องจากการออกแบบโค้ดยังไม่ทำงาน แต่การเรียกใช้คำสั่งเดียวกันโดยใช้เดสก์ท็อประยะไกล (แทน SSH) ทำงานได้ดี
สูงสุด

2

หากพยายามลงชื่อจากคำสั่ง ssh run:

security unlock-keychain login.keychain

ก่อนที่จะพยายามลงนาม App Bundle

หรือจาก UI

อัปเดตการควบคุมการเข้าถึงคีย์เป็น "อนุญาตให้แอปพลิเคชันทั้งหมดเข้าถึงรายการนี้"

ขอบคุณ @Equilibrium และ @Jon McClung


2

ฉันมีปัญหาเดียวกันพบว่าปัญหาคือการลงนามรหัสแอป

Opened the developer account and accepted the updated agreement and it worked.  

ป้อนคำอธิบายภาพที่นี่


2

ฉันวิ่งsecurity unlock-keychain login.keychainและรหัสผ่านเข้าสู่ระบบของฉันใช้ไม่ได้ ดังนั้นฉันจึงรีบูตจากนั้นเรียกใช้ Xcode อีกครั้งและใช้งานได้ การรันคำสั่งก็ใช้ได้เช่นกัน ปัญหาแปลก ๆ


2

ตามที่ @Equilibrium ชี้ให้เห็นในหนึ่งในความคิดเห็นหากคุณอยู่ในบรรทัดคำสั่ง env เช่นเดียวกับเจนกินส์ (กรณีของฉัน) คุณอาจต้องส่งรหัสผ่านไปยังคำสั่งปลดล็อกความปลอดภัยที่กล่าวถึงในโซลูชัน

ดังนั้นแทนที่จะใช้

security unlock-keychain login.keychain

ใช้:

security unlock-keychain -p <login-keychain-password> <path-to-login-keychain>

โดยที่พวงกุญแจ path-to-login สามารถเป็น$ HOME / Library / Keychains / login.keychain (my case) หรือเพียงแค่login.keychain


คำตอบของคุณขึ้นอยู่กับคำตอบของ @equilibrium แต่ฉันจะตั้งครรภ์ ในBamboo CIฉันช่วยสั่ง security unlock-keychain -p {account-password} login.keychain
A.Kant

2

สำหรับใครก็ตามที่พบปัญหานี้จาก jenkins และ ssh:

มีความเป็นไปได้สูงที่คุณไม่ได้ให้สิทธิ์การเข้าถึงคีย์ส่วนตัวในพวงกุญแจฉันลองแล้ว แต่ไม่แน่ใจว่าทำไมสิ่งเหล่านี้จึงไม่ทำงาน:

  1. นำเข้าความปลอดภัยไฟล์. p12 พร้อม -A หรือ -T / usr / bin / codeign
  2. ความปลอดภัย set-key-partition-list -S apple-tool:, apple:, codesign: -s -k # {password} # {keychainPath}
  3. เปลี่ยนโปรไฟล์การจัดเตรียมทั้งหมดเป็น [UUID] .mobileprovision และคัดลอกไปที่ '~ / Library / MobileDevice / Provisioning \ Profiles' บนเซิร์ฟเวอร์เจนกินส์
  4. ล้างข้อมูลที่ได้รับและรีบูตเซิร์ฟเวอร์เจนกินส์
  5. ตรวจสอบให้แน่ใจว่าพวงกุญแจเริ่มต้นคือพวงกุญแจล็อกอินและปลดล็อกแล้ว

สุดท้ายแก้ไขโดย:

1.ssh [ผู้ใช้] @ [jenkinsServerIP] -L 5900: localhost: 5900 เข้าสู่เซิร์ฟเวอร์เจนกินส์

2. เปิด 'vnc: // localhost'

สิ่งนี้จะเปิดหน้าจอระยะไกลหากเซิร์ฟเวอร์เจนกินส์ของคุณอนุญาต ...

จากนั้นเปิด keychain.app เพื่อให้สิทธิ์การเข้าถึง / usr / bin / codeign กับคีย์ส่วนตัว

โชคดี


1

ลองใช้ครั้งเดียวโดยใช้เทอร์มินัล mac แต่ไม่ใช่จากเซสชัน ssh

security unlock-keychain login.keychain

และเลือกอนุญาตเสมอในกล่องโต้ตอบที่พร้อมท์ จากนั้นคุณสามารถ xcodebuild ในเซสชันระยะไกล


1

คลิกขวาที่คีย์ส่วนตัวที่เชื่อมโยงกับรหัสการลงชื่อรับรองในพวงกุญแจจากนั้นคลิกที่ 'อนุญาตแอปพลิเคชันทั้งหมด' แทนที่จะใช้พรอมต์ที่แก้ไขให้ฉันเนื่องจากการสร้างเกิดขึ้นผ่าน ssh


0

ฉันต้อง:

1) ลบใบรับรองที่เกี่ยวข้องกับโครงการ

2) กลับไปที่ Xcode และเพิกถอนใบรับรองแอป

3) Xcode ต้องการใบรับรองใหม่

4) ล็อค KeyChain ทั้งหมด

5) ทำความสะอาดโครงการ

6) สร้างใหม่

แค่นั้นแหละ. หวังว่าจะช่วยให้ทุกคน


0

วิธีการข้างต้นไม่มีประโยชน์สำหรับฉัน

ฉันทำให้มันเย็นลงโดย:

  1. เปิดการเข้าถึงพวงกุญแจ
  2. คลิกเมนูเข้าสู่ระบบ
  3. ลบใบรับรองส่วนบุคคลทั้งหมด
  4. ทำความสะอาดโครงการ
  5. สร้างใหม่

แค่นั้นแหละ. หวังว่าจะช่วยให้ทุกคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.