Lệnh Xcode / usr / bin / Codeign không thành công với mã thoát 1: errSecInternalComponent


104

Tôi đang cố gắng thêm cấu hình cấp phép mới vào Xcode của mình để thử nghiệm một ứng dụng trên thiết bị. Đây là các bước tôi đã làm theo:

  1. Đã xóa tất cả chứng chỉ và hồ sơ cấp phép

  2. Tạo / Thêm chứng chỉ nhà phát triển iOS

  3. Thêm thiết bị iOS của tôi trực tuyến

  4. Tạo hồ sơ cấp phép iOS

  5. Thêm hồ sơ cấp phép iOS

  6. Ứng dụng sạch

  7. Xây dựng rồi chạy ứng dụng

  8. Đặt cấu hình cấp phép thứ nhất của thiết kế mã trong cài đặt bản dựng

  9. Rất nhiều Google> không thành công

Đây là lỗi tôi nhận được:

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
Lỗi xuất phát từ sự không khớp trong thiết lập hồ sơ cấp phép cũng như chứng chỉ và id gói. Đảm bảo rằng PP, id gói và chứng chỉ của bạn được thiết lập chính xác trong và được chỉ định chính xác trong itunes connect và trong ứng dụng.
Alex Pelletier,

1
Tôi gặp phải sự cố này từ Xcode 11.2.1 đến 11.3 trong quá trình ký mã của các khung do tôi xây dựng. Không có hồ sơ cấp phép nào được tham gia. Câu trả lời của Mohit Manhas đã làm sáng tỏ điều đó.
Daniel Zhang

Điều này xảy ra nếu bạn đang sử dụng SSH và thiết kế mã không được phép truy cập vào khóa cá nhân trong Chuỗi khóa. Để kiểm tra điều này, hãy tìm khóa trong Chuỗi khóa, nhấp chuột phải và chọn "Nhận thông tin", chuyển sang "Kiểm soát truy cập" và xem ứng dụng 'thiết kế mã' có nằm trong danh sách "luôn cho phép truy cập" hay không. Xem nhận xét này github.com/electron-userland/electron-builder/issues/… Những gì tôi đã làm là chạy các tập lệnh một lần từ GUI và nhấp vào "Luôn cho phép" để truy cập khóa, sau đó nó bắt đầu hoạt động.
ArticIceJuice

Câu trả lời:


239

Mở Keychain Access , sau đó trong menu File, chọn Lock All Keychains .

Sau đó quay lại Xcode và dọn dẹp và xây dựng lại. Nó sẽ nhắc bạn nhập lại mật khẩu để mở khóa chuỗi khóa.

Sau đó, giả sử bạn không có vấn đề biên dịch nào khác, nó sẽ thành công!


7
Không thể tin được rằng khóa và mở khóa ngớ ngẩn này giúp ích! Cảm ơn
Josip B.

8
Đây phải là câu trả lời được chấp nhận. Lành mạnh hơn nhiều so với khởi động lại!
yonix

3
Làm việc cho tôi quá. Xây dựng apk cho Android 30 giây, xây dựng ứng dụng cho iOS .. 2hs.
Gabe

1
Nghiêm túc đấy WTF ?! Cảm ơn!
Peter N Lewis

1
@FredericP Đối với tôi, gần đây tôi đã thay đổi mật khẩu của mình. Vì vậy, đã có một số tác động giữa lần cuối cùng chuỗi khóa được mở khóa bằng xcode và mật khẩu được sử dụng để làm như vậy.
sherrellbc

77

Có vẻ như một lỗi trong cơ chế ký mã, khởi động lại máy mac của bạn sẽ giải quyết được vấn đề


trường hợp khác nhau, nhưng thông báo lỗi tương tự - khởi động lại hoạt động.
mikus

Gần bốn năm sau, và nó vẫn hoạt động! Tôi quên Quy tắc vàng - "Nếu nghi ngờ, hãy khởi động lại!"
Alan

2
Nếu bạn đang chờ đợi một giải pháp ít phá hủy hơn, hãy xem câu trả lời của Mohit Manhas bên dưới
yonix 28/10/18

đã không giúp tôi
Anoop Vaidya

70

Điều này xảy ra khi chuỗi khóa đăng nhập bị khóa. Để mở khóa chuỗi khóa đăng nhập, hãy chạy:

security unlock-keychain login.keychain

Nếu chuỗi khóa của bạn được bảo vệ bằng mật khẩu, hãy chỉ định mật khẩu bằng -ptùy chọn.

Sau đó, hãy thử lại thao tác xây dựng hoặc ký mã. Mã lỗi được đề cập trong tài liệu của Apple được mô tả là một lỗi nội bộ, vì vậy điều này hoàn toàn có thể xảy ra trong các trường hợp khác.


1
Thật không may, giải pháp này có vẻ hoàn toàn tròn trịa: chạy lệnh trên yêu cầu bạn nhập mật khẩu, điều này rõ ràng là không được phép trong một phiên không tương tác (như khi thực hiện điều này thông qua một tác nhân CI chẳng hạn như Jenkins).
Konrad Rudolph

Đó là một điểm tốt - như bạn nói, điều này không thích hợp cho một phiên không tương tác như bot CI. Nó hữu ích khi chạy các bản dựng từ xa trong một phiên dòng lệnh (ví dụ: qua ssh).
cbracken

3
Chúng tôi đã gặp sự cố tương tự trên Jenkins và ngoài những gì được đề cập trong lệnh trên, chúng tôi phải chuyển mật khẩu làm đối số cho lệnh, vì vậy chúng tôi đã thực hiện "security unlock-keychain -p $ KeychainPassword <login-keychain>", nơi bạn có thể dễ dàng lưu trữ KeychainPaasword trên Jenkins một cách an toàn.
Mohit Tater

1
Tôi không thể cảm ơn bạn đủ cho bài đăng này. Tôi đã dành vài ngày để cố gắng tìm ra lý do tại sao codesignlại thất bại và đây là lệnh ma thuật đã cứu tôi !!!
Dimu4

32

Gặp sự cố tương tự trên High Sierra/ Xcode 9.4.1, tất cả nỗ lực đăng nhập đã kết thúc bằngerrSecInternalComponent

    • Đi tới Truy cập chuỗi khóa
    • Đi tới chuỗi khóa đăng nhập
    • Chọn danh mục "Chứng chỉ của tôi"
    • Tìm chứng chỉ bạn đang ký và mở rộng nó để xem khóa.
    • Nhấp đúp vào phím
    • Chuyển đến tab "Kiểm soát truy cập".
    • Cập nhật điều khiển truy cập khóa thành "Cho phép tất cả các ứng dụng truy cập vào mục này"

Ngoài ra:

chạy lệnh ký mã trên thiết bị đầu cuối mac và "Luôn cho phép" / usr / bin / quyền truy cập ký mã vào khóa

  1. Nếu cố gắng đăng nhập từ ssh / CI, bạn cũng cần chạy

    security unlock-keychain login.keychain

    trước khi cố gắng ký gói ứng dụng


Bạn có thể giải thích thêm về "cập nhật kiểm soát truy cập khóa thành" Cho phép tất cả các ứng dụng truy cập vào mục này "không? Tôi thậm chí không biết điều đó có nghĩa là gì.
Jon McClung

2
@JonMcClung Mở quyền truy cập chuỗi khóa, chuyển đến đăng nhập chuỗi khóa - chứng chỉ của tôi. Tìm chứng chỉ mà bạn đang ký, mở rộng nó để xem khóa. Nhấp đúp vào phím và bạn sẽ thấy tab "Kiểm soát truy cập". Chuyển sang cho phép là ở đó
Cân bằng

5
@KonradRudolph security unlock-keychain -p <password> login.keychaintừ CI.
Cân bằng

1
@KonradRudolph không cần thiết phải cung cấp mật khẩu cho chuỗi khóa bảo mật mở khóa nếu bạn cho phép thiết kế mã truy cập vào khóa cá nhân. Chỉ cần để lại một chuỗi trống làm mật khẩu là đủ.
Kamil Szostakowski

1
@KonradRudolph vẫn có thể không lý tưởng nhưng bạn có thể di chuyển mà lệnh mở khóa để ~/.bash_profilesao cho mở khóa keychain trên SSH client khởi động nhưng bạn không cần tham chiếu đến nó từ kịch bản CI của bạn
sschilli

17

Tôi đã gặp vấn đề tương tự, tôi khởi động lại macOS của mình và nó hoạt động.

Ở Trung Quốc, chúng tôi có một câu nói giữa các nhà phát triển:

Vấn đề nhỏ, chỉ cần khởi động lại. Các vấn đề lớn, nên cài đặt lại.

Đôi khi, câu nói trên sẽ giúp ích cho bạn rất nhiều!


7
Chúng tôi có câu nói ở Mỹ - 'Không bao giờ khởi động lại phần cứng cũ'
Brant

@Brant Tại sao bạn có câu nói này? Thật thú vị.
ifeegoo

Chỉ nói đùa thôi - nhưng chúng tôi đã gặp sự cố tương tự và cuối cùng chỉ cần khởi động lại một máy chủ cũ.
Brant

1
@ifeegoo Các máy chủ cũ có thể gặp sự cố khi khởi động sao lưu (có thể hệ điều hành tự cập nhật? có thể ai đó đã phá vỡ các tập lệnh khởi động?) hoặc cần một số quy trình khởi động thủ công mà không ai có mặt biết về. Bạn không thể biết trước khi bạn thử nó. Có thể rom bios đã bị hỏng. Đó chỉ là một trong những điều không nên là vấn đề trong một môi trường được duy trì thích hợp nhưng bạn thực sự không biết trước khi thử và bạn không muốn thử.
Lassi Kinnunen,

1
@LassiKinnunen Bạn nói đúng, chúng tôi là nhà phát triển di động cho Android và iOS, vì vậy tình huống này không quan tâm đến máy chủ. Máy chủ thực sự nguy hiểm, nó không có giá trị.
ifeegoo 20/09/18

8

Trong trường hợp nó giúp người khác, tôi đã gặp errSecInternalComponentlỗi codesignvì tôi đang chạy nó qua một phiên ssh cho máy macOS của mình. Chạy lệnh tương tự từ cửa sổ dòng lệnh trên máy macOS đã hoạt động.

Có lẽ điều này là do codesigncần truy cập vào khóa cá nhân từ chuỗi khóa đăng nhập.

Chạy security unlock-keychain login.keychain(như được giải thích bởi câu trả lời của cbracken ) từ cùng một phiên cũng nên hoạt động.


Điều này rất kỳ lạ, ngay cả việc chạy lệnh mở khóa chuỗi khóa dường như âm thầm thất bại vì thiết kế mã vẫn không hoạt động. Nhưng chạy các lệnh tương tự bằng cách sử dụng máy tính từ xa (thay vì SSH) hoạt động tốt.
Tối đa

2

Nếu cố gắng đăng nhập từ lệnh chạy ssh:

security unlock-keychain login.keychain

trước khi cố gắng ký gói ứng dụng

hoặc từ giao diện người dùng

Cập nhật điều khiển truy cập khóa thành "Cho phép tất cả các ứng dụng truy cập vào mục này"

Thx thành @Equilbalance và @Jon McClung


2

Tôi đã gặp vấn đề tương tự. Phát hiện ra vấn đề là với mã ký ứng dụng.

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

nhập mô tả hình ảnh ở đây


2

Tôi đã chạy security unlock-keychain login.keychainvà mật khẩu đăng nhập của tôi không hoạt động. Vì vậy, tôi khởi động lại và sau đó chỉ cần chạy lại Xcode và nó đã hoạt động. Chạy lệnh cũng hoạt động. Vấn đề lạ.


2

Như đã chỉ ra bởi @Equilbalance trong một trong các nhận xét, nếu bạn đang ở trong dòng lệnh env. giống như Jenkins (trường hợp của tôi), bạn có thể cần chuyển mật khẩu cho lệnh mở khóa bảo mật được đề cập trong các giải pháp.

Vì vậy, thay vì sử dụng,

security unlock-keychain login.keychain

sử dụng:

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

trong đó chuỗi khóa đường dẫn đến đăng nhập có thể là $ HOME / Library / Keychains / login.keychain (trường hợp của tôi) hoặc chỉ cần đăng nhập.keychain


Câu trả lời của bạn dựa trên câu trả lời @equil Balance, nhưng tôi sẽ quan niệm nó. Trên Bamboo CI, tôi đã giúp ra lệnh bảo mật unlock-keychain -p {account-password} login.keychain
A.Kant

2

cho bất kỳ ai gặp phải sự cố này từ jenkins và ssh:

khả năng cao là bạn chưa cấp quyền truy cập vào khóa cá nhân trong chuỗi khóa, tôi đã thử nhưng không chắc tại sao tất cả các khóa này đều không hoạt động:

  1. nhập bảo mật tệp .p12 với -A hoặc -T / usr / bin / ký hiệu mã
  2. security set-key-partition-list -S apple-tool:, apple:, Codeign: -s -k # {password} # {keychainPath}
  3. thay đổi tất cả hồ sơ cấp phép thành [UUID] .mobileprovision và sao chép chúng vào '~ / Library / MobileDevice / Provisinstall \ Profiles' trên máy chủ jenkins
  4. làm sạch dữ liệu có nguồn gốc và khởi động lại máy chủ jenkins
  5. đảm bảo rằng chuỗi khóa mặc định là chuỗi khóa đăng nhập và đã mở khóa nó.

cuối cùng được giải quyết bằng:

1.ssh [người dùng] @ [jenkinsServerIP] -L 5900: localhost: 5900, đăng nhập vào máy chủ jenkins

2. mở 'vnc: // localhost'

điều này sẽ khởi chạy một màn hình từ xa, nếu máy chủ jenkins của bạn cho phép điều này ...

sau đó mở keychain.app để cấp quyền truy cập / usr / bin / Codeign vào khóa cá nhân

chúc may mắn


1

Chỉ cần thử một lần bằng cách sử dụng thiết bị đầu cuối mac nhưng không phải từ phiên ssh

security unlock-keychain login.keychain

Và chọn luôn cho phép trong hộp thoại được nhắc. Và sau đó bạn có thể xcodebuild trong phiên từ xa.


1

Nhấp chuột phải vào khóa cá nhân được liên kết với chứng chỉ ký mã trong chuỗi khóa, sau đó nhấp vào 'cho phép tất cả ứng dụng' thay vì dựa vào lời nhắc đã sửa lỗi cho tôi, vì quá trình xây dựng đang diễn ra qua ssh.


0

Tôi phải:

1) xóa chứng chỉ liên quan đến dự án

2) Quay lại Xcode và thu hồi chứng chỉ ứng dụng

3) Xcode yêu cầu một chứng chỉ mới

4) Khóa tất cả KeyChain

5) Làm sạch dự án

6) Xây dựng lại

Đó là nó. Hy vọng nó sẽ giúp ích cho bất cứ ai.


0

Các phương pháp trên là vô ích đối với tôi.

Tôi đã giải quyết nó bằng cách:

  1. Mở quyền truy cập chuỗi khóa.
  2. Nhấp vào Menu Đăng nhập.
  3. Xóa tất cả các chứng chỉ cá nhân.
  4. Làm sạch dự án.
  5. Xây dựng lại.

Đó là nó. Hy vọng nó sẽ giúp ích cho bất cứ ai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.