2012-06-27 57 views
6

Tôi có một ứng dụng lưu trữ tên người dùng và mật khẩu trong keychain. Tất cả mọi thứ đã làm việc tốt khi làm việc trên Xcode 3, tôi vừa mới chuyển đến Xcode 4 và bây giờ khi tôi chạy các ứng dụng, tôi nhận được một dấu nhắc:Ứng dụng luôn yêu cầu quyền truy cập vào keychain

Application wants to use your confidential information stored in keychain" in your keychain.

Sau khi nhấn luôn luôn cho phép tôi thấy việc áp dụng thêm vào kiểm soát truy cập danh sách các mặt hàng keychain, nhưng tôi nhận được mỗi khi tôi chạy các ứng dụng.

Ngoài ra sau khi nhấn Luôn cho phép lại, tôi thấy rằng điều khiển truy cập có hai phiên bản của cùng một ứng dụng. Có vẻ như hệ điều hành nghĩ rằng đây là một ứng dụng mới.

Bất kỳ ý tưởng nào được đánh giá cao.

+0

Bạn ký mã bằng ứng dụng của mình như thế nào? (Đó là một trong những lý do phổ biến nhất cho vấn đề này.) – abarnert

+0

Tôi phải thiết lập mã đăng nhập trong cài đặt Xcode, Dưới ký hiệu mã Tôi đã chọn mã nhận dạng mã cho Ứng dụng ID nhà phát triển của mình –

+0

Bạn đã chạy bản dựng trước đó trên cùng một máy?Tùy thuộc vào yêu cầu được chỉ định (tùy thuộc vào phiên bản Xcode 4 bạn sử dụng, nếu bạn chỉ gắn bó với mặc định), Keychain có thể xử lý phiên bản cũ của bạn và phiên bản mới của bạn dưới dạng ứng dụng khác nhau, nghĩa là bản dựng mới của bạn sẽ bật lên cảnh báo nếu bản dựng cũ đã lưu trữ bất cứ thứ gì trong Keychain. – abarnert

Trả lời

3

Tôi tin rằng vấn đề là yêu cầu được chỉ định của chữ ký của bạn làm cho nó không chấp nhận chính nó là "cùng một ứng dụng" như chính nó (cho mục đích Keychain).

Một nguyên nhân phổ biến cho điều này — và tôi nghĩ đó là của bạn — đang sử dụng chứng chỉ ID ứng dụng dành cho nhà phát triển, không yêu cầu được chỉ định và không cài đặt chứng chỉ trung gian.

Một yêu cầu ID Nhà phát triển tiêu chuẩn trông như thế này:

designated => anchor apple generic and 
identifier \"com.example.appName\" and 
((cert leaf[field.1.2.840.113635.100.6.1.9] exists) or 
(certificate 1[field.1.2.840.113635.100.6.2.6] exists and 
certificate leaf[field.1.2.840.113635.100.6.1.13] exists and 
certificate leaf[subject.OU] = \"1AZBYCXDW9V\")) 

Nếu bạn muốn xây dựng này chính mình, bạn phải thay thế định danh với nhận dạng bó của bạn và subject.OU với giá trị từ cert của bạn. (Nếu bạn kích đúp vào nó trong Keychain Access, nó phải được liệt kê như là Organizational Unit). Sau đó bạn có thể thêm vào "Flags Mã Ký Khác":

--requirements "=designated ..." (the whole mess from above) 

Tuy nhiên, một cách tốt hơn để làm điều này là để sử dụng Xcode 4.3.2 hoặc mới hơn. Nếu nó nhận ra rằng bạn đang sử dụng chứng chỉ ID ứng dụng dành cho nhà phát triển và có thể thấy chứng chỉ trung gian trong móc khóa, nó sẽ tạo điều này theo mặc định.

Ngoài ra, nếu bạn sử dụng Trình tổ chức lưu trữ trong Xcode để "Xuất ứng dụng đã ký ID nhà phát triển", thay vì chỉ sử dụng công cụ xây dựng từ thư mục đích của bạn, nó sẽ đảm bảo ký ứng dụng của bạn và bất kỳ dấu hiệu kèm theo nào khác nó sẽ kiểm tra mọi thứ được thiết lập đúng cách. (Thất bại khá khó hiểu - ví dụ: bước "Chọn nhà phát triển để ký bằng" của bạn có thể không có lựa chọn, với thông báo trong nhật ký hệ thống không có thông tin hữu ích - nhưng ít nhất thực tế là nó không thành công hoặc thu hẹp thành công Nếu có vấn đề gì.)

Dù bằng cách nào, bạn cần phải tải xuống và cài đặt (trên máy xây dựng) của bạn cert trung gian, được gọi là "Chứng chỉ nhà phát triển ID", từ liên kết "Chứng chỉ trung gian nhà phát triển" tại trang web Developer Certificate Utility .

Điều cuối cùng: Ngay cả khi điều này giải quyết được vấn đề của bạn đang chạy trên máy xây dựng, bạn thực sự muốn thử nghiệm trên phiên bản hệ điều hành cũ nhất mà bạn hỗ trợ. Ví dụ, các yêu cầu được biên soạn bởi mã hiệu của Lion đôi khi không thể được phân tích cú pháp trên Leopard, hoặc đôi khi ngay cả trên Snow Leopard. Nếu điều đó xảy ra ... hãy xem Gatekeeper vs. Leopard: an ongoing tale.

+0

Cảm ơn abarnert, đó là rất nhiều thông tin tuyệt vời. Nhưng có vẻ như tôi đã tìm thấy giải pháp cho vấn đề này. Tôi đã xóa mã ký từ giao diện người dùng trong Xcode và thêm mã này dưới dạng bước dòng lệnh ở cuối tập lệnh xây dựng của tôi. Điều này dường như đang làm việc tốt, nhưng thực sự, cảm ơn rất nhiều cho tất cả sự giúp đỡ. –

+1

Nitin, bạn có thể chia sẻ độ phân giải của mình không, tôi gặp vấn đề tương tự với Xcode 6 –

Các vấn đề liên quan