Thiết kế mã của API Dropbox không thành công trong Xcode 4.6.3: "đối tượng mã hoàn toàn không được ký"


76

Tôi có một ứng dụng OS X được phân phối thông qua Mac App Store và gần đây đã được cập nhật lên Xcode 4.6.3.

Khi tôi chạy bản dựng thông thường của mình ngay bây giờ, tôi nhận được:

Command /usr/bin/codesign failed with exit code 1:

/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1

Tôi dường như không thể phân biệt được bất kỳ thay đổi nào khác trong dự án của mình, vì vậy tôi không thể biết liệu đó có phải là sự cố liên quan đến bản cập nhật 4.6.3 hay điều gì khác.

Tôi đã thử khởi động lại Xcode, chạy một bản dựng sạch và làm sạch thư mục bản dựng.


Sự cố này vẫn xảy ra trong XCode 8.2 Khi tôi xóa các thử nghiệm của mình, tôi gặp lỗi sau: Không thể tải gói “XXXX” vì không thể định vị tệp thực thi của nó.
UKDataGeek

Câu trả lời:


140

Tôi nghĩ rằng tôi có thể đã tìm ra điều này. Tôi đang chạy Xcode 4.6.3 trên OS X Mavericks, với ấn tượng rằng bất kỳ công cụ xây dựng cụ thể nào đều được đóng gói trong ứng dụng Xcode.

Nhưng, nó có vẻ codesignlà trong /usr/bin. Cho dù nó được đặt ở đó bởi một trong những trình cài đặt Xcode hay đi kèm với cài đặt hệ thống vani, tôi không chắc. Nhưng đọc qua mantrang cho codesign, tôi tìm thấy tùy chọn tiện lợi này:

--deep  When signing a bundle, specifies that nested code content such as helpers, frameworks, and plug-ins, should be recursively signed
             in turn. Beware that all signing options you specify will apply, in turn, to such nested content.
             When verifying a bundle, specifies that any nested code content will be recursively verified as to its full content. By default,
             verification of nested content is limited to a shallow investigation that may not detect changes to the nested code.
             When displaying a signature, specifies that a list of directly nested code should be written to the display output. This lists only
             code directly nested within the subject; anything nested indirectly will require recursive application of the codesign command.

Và sau đó tôi tìm thấy bài đăng này ( https://alpha.app.net/isaiah/post/6774960 ) từ hai tuần trước (~ tháng 6 năm 2013), đề cập (mặc dù là bài viết thứ hai):

@isaiah Tôi đã hỏi một người trong phòng thí nghiệm về nó. Ông cho biết thiết kế mã hiện yêu cầu các khung nhúng phải được ký riêng trước khi ký mã cho toàn bộ gói ứng dụng.

Chạy lại theo cách thủ công codesignlệnh mà Xcode thường chạy, đồng thời thêm --deepcờ vào cuối, ký ứng dụng đúng cách.

Tôi vẫn chưa chắc chắn chính xác cách ký thủ công này có những phân nhánh nào hoặc liệu tôi có thể điều chỉnh bản dựng Xcode để thêm --deepcờ tự động hay không, nhưng đây có vẻ là vấn đề cơ bản. ( codesignkhông còn tự động ký hiệu sâu vào gói ứng dụng của bạn nữa.)


39
Có - Tôi có thể tìm thấy tùy chọn "Cờ ký mã khác" trong Cài đặt bản dựng của dự án Xcode của tôi, thêm --deepvào đó và bản dựng hiện hoạt động thành công. Chúng tôi sẽ xem liệu điều này có thông qua Mac App Store hay không.
Craig Otis

Tôi không tin rằng thiết kế mã đã từng ký "sâu" trước đây. Tôi sử dụng thiết kế mã mọi lúc, trong các ứng dụng chứa lib của bên thứ ba và thiết kế mã chỉ ký tên tệp thực thi chính (trong Ngữ cảnh / MacOS /), trong khi các tệp lib khác cần các lệnh gọi ký hiệu mã riêng biệt.
Thomas Tempelmann

1
@ThomasTempelmann Tôi gần như không biết đủ codesignđể hiểu chính xác những gì đã thay đổi. Tất cả những gì tôi biết là từ 10,8 đến 10,9 (hoặc có thể là Xcode 4 thành Xcode 5, tôi đã nâng cấp cả hai cùng một lúc), hành vi đã thay đổi và đây là những gì đang làm việc để tôi gửi ứng dụng của mình thành công.
Craig Otis

3
Đối với những người tò mò, tôi đã sử dụng Xcode 5 trên 10.8 được một thời gian, nhưng chỉ gặp sự cố này hôm nay khi tôi cố gắng đăng nhập dưới 10.9.
Rob McBroom

2
Craig Hockenberry (liên kết trong câu trả lời dưới đây) giải thích lý do tại sao sử dụng sâu là sai
Paul Bruneau

68

Như được đánh dấu trong các câu trả lời khác, có một sự thay đổi đối với cách ký mã hoạt động. Nếu bạn đã cài đặt bất kỳ Xcode 5 DP nào thì các công cụ mới sẽ được sử dụng ngay cả khi bạn đang sử dụng Xcode 4.6.X.

Tất cả những gì bạn cần làm ở giai đoạn này (trong Xcode 4.6.X) là lấy cờ --deep được đề xuất ở trên và thêm nó vào cờ ký mã của bạn (Mục tiêu, Cài đặt bản dựng) xem hình ảnh bên dưới.

Chỉ định ký sâu của các khuôn khổ được nhúng


3
đã giúp tôi. Tôi đoán điều này có nghĩa là bạn đang xác nhận bằng cách nào đó cho tất cả các thư viện đã nhập mà bạn sử dụng.
Tom Andersen

Theo một bình luận cho câu trả lời của tôi ở trên, nó có vẻ như điều này thực sự có thể là một vấn đề cụ thể để OS 10.9, và không để Xcode 5.
Craig Otis

3
Apple TechNote 2206 cho biết "Mặc dù tùy chọn --deep có thể được áp dụng cho thao tác ký, nhưng điều này không được khuyến nghị. Chúng tôi khuyên bạn nên ký mã từ trong ra ngoài theo từng giai đoạn riêng lẻ (như Xcode tự động thực hiện). Đăng nhập bằng --deep là trường hợp khẩn cấp chỉ sửa chữa và điều chỉnh tạm thời. "
Elise van Looij

12

Đối với tôi, sự cố này được gây ra sau khi kéo một thư mục có tên "tài nguyên" trong dự án của tôi. Sau khi thay đổi tên của nó thành bất kỳ thứ gì khác (chẳng hạn như "resourcessss"), lỗi đã biến mất.


Đây là vấn đề của tôi. Cũng lưu ý rằng hệ thống tệp mac thông thường không phân biệt chữ hoa chữ thường, vì vậy nếu bạn có một thư mục hoặc tệp được đặt tên, chẳng hạn như "Tài nguyên" hoặc "NGUỒN LỰC", nó cũng sẽ gây ra sự cố này.
Kevin,

Điều này cũng giải quyết được vấn đề của tôi. Điều duy nhất cần làm là xóa Resourcethư mục khỏi gói ứng dụng và khởi động lại Xcode.app.
cảm giác

Tôi gặp một số vấn đề nhưng câu trả lời này đã giúp tôi. Tôi thấy rằng tôi có cả một thư mục màu xanh có tên là Tài nguyên và một thư mục màu vàng có tên là Tài nguyên. Tôi cũng thấy rằng tệp mà nó phàn nàn chỉ nằm trong một trong những thư mục đó. Cuối cùng tôi đã xóa hoàn toàn cái màu xanh lam (tham chiếu, không phải các tệp, đều giống nhau). Tôi cũng đã đổi tên nó thành Res. Không hoàn toàn chắc chắn điều này là cần thiết (tôi đã làm trước khi xóa thư mục màu xanh lam), vì tôi có một dự án khác có thư mục màu vàng có tên là Tài nguyên và không có vấn đề gì ở đó.
Andy Weinstein

Cái này cũng có tác dụng với tôi. Tôi muốn thêm một từ khóa vào trang này. Vấn đề của tôi là với bản gốc. Vì vậy, không thực sự là x-code / ios dev thuần túy. Hy vọng rằng điều này cũng sẽ giúp ích cho người khác.
David Brown

Đối với những người đọc trong tương lai, nếu bạn CẦN bao gồm một thư mục có tên Resources(như tôi đã làm), tất cả những gì bạn phải làm là, khi thêm vào dự án, hãy chọn Create Groupsthay vì Create Folder Referencesvà lỗi này sẽ không phát sinh. (Chỉ cần chắc chắn các thành viên mục tiêu của bạn vẫn đang thiết lập cho các tập tin nói sau)
Albert Renshaw

4

Tôi cũng gặp vấn đề tương tự, nhưng câu trả lời rất đơn giản: nhận dạng ký mã trên ứng dụng của tôi được đặt thành "-", vì vậy chỉ cần đặt thành "Không ký mã" là tôi đã khắc phục được sự cố.

"-" dường như là cài đặt mặc định khi bạn thực hiện một số hành động, mặc dù tôi không thể cho bạn biết đó là những gì.


1
Giải pháp này tốt cho ứng dụng chạy trên trình mô phỏng nhưng khi chúng tôi muốn tạo ipa hoặc lưu trữ tại thời điểm đó, giải pháp này sẽ không hoạt động từ phía tôi.
Bhavsang Jam

2

Điều này có thể giúp bạn:

Cuối cùng tôi đã tìm ra giải pháp bằng cách thử và sai. Trong trường hợp của tôi, tôi có tên thư mục khớp với biến "Tên sản phẩm" trong cài đặt bản dựng. Điều này cũng khớp với toàn bộ tên dự án! Vì vậy, tôi chỉ đơn giản là thay đổi một lĩnh vực. Tôi đã thay đổi “Cài đặt bản dựng” -> “Tên sản phẩm”. Giá trị của MySpecialApp đã được thay đổi thành My-SpecialApp. Đó chỉ đơn giản là nó! Sau đó, tôi đăng nhập lại vào cổng thông tin nhà phát triển của Apple và tạo một ID ứng dụng mới và hồ sơ cấp phép di động để phát triển và phân phối và phần còn lại là lịch sử. Bản phát hành của tôi hiện hoạt động khi được triển khai qua bản phân phối Ad Hoc. Một lưu ý cuối cùng về điều này. Đây chắc chắn là một lỗi mà Apple nên cảnh báo người dùng rằng họ đã làm sai điều gì đó và kích hoạt một số loại hành động sửa chữa tự động. - Tìm hiểu thêm tại:http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf


1
Cảm ơn bạn đã trả lời @VBB, nhưng rất tiếc tên sản phẩm đã không thay đổi trong vài năm qua. (Và tôi không thể thay đổi nó bây giờ.)
Craig Otis

0

Đối với tôi, đó là một Framework PaddleMAs bị hỏng: 1. Tôi đã xóa khỏi Tệp Cocoapods của mình 2. Chạy pod install 3. Khởi động lại Xcode của tôi

và nó đã giải quyết được vấn đề. Vì lý do nào đó, một khung công tác bị hỏng sẽ ngăn không cho nó được ký. Rất tiếc, XCode không hiển thị lỗi này thực sự rõ ràng và cung cấp cho bạn một đề xuất sửa chữa tốt. Đã nêu ra một lỗi với Apple để sửa chữa.

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.