2011-11-29 14 views
8

Tôi đang sử dụng keychain trong ứng dụng của mình và tôi gặp phải lỗi này khi chạy ứng dụng dưới dạng AdHoc. Nó không xuất hiện khi tôi chạy nó với trình gỡ lỗi (với hồ sơ dự phòng của nhà phát triển). Nếu ứng dụng đã được cài đặt trên thiết bị và tôi cài đặt lại nó trên Xcode thì tôi nhận thấy rằng ứng dụng không có quyền truy cập vào keychain. Nó xảy ra chắc chắn vì những lỗi đó.Cách giải quyết "quyền truy cập 'nhóm truy cập keychain' có giá trị không được phép bởi hồ sơ cung cấp"

Tôi đã dành nhiều thời gian để giải quyết lỗi đó và một số đề xuất thêm tệp quyền lợi với nhóm truy cập keychain trong đó. Nhưng tôi không thể tìm thấy bất kỳ tài liệu nào của Apple hoặc bất kỳ giải thích hợp lý nào về những quyền lợi cần thiết cho.

Ai đó có thể giúp tôi giải quyết nó?

Trả lời

5

Có một bài đăng khá cũ here bạn cần có quyền phân biệt gói Bundle Identifier mà App của bạn đang sử dụng vì đó là cách KeyChain cho phép ứng dụng của bạn truy cập nó.

Khi hai ứng dụng có mã nhận dạng Bundle cùng trong hạt bó, họ có thể chia sẻ truy cập Keychain ..

Vì vậy, nếu ứng dụng A có Bundle Id chung: com.yourcompany.AAAAAA Và ứng dụng B như một Id Bundle chung com.yourcompany.BBBBBB

Và nếu họ cả hai đều có một tập tin quyền lợi trong .ipa họ (plist có chứa một mảng keyed "keychain-access-nhóm" với một chuỗi ".com.yourcompany.AAAAA" và .com.yourcompany.BBBBB ")

Họ có thể chia sẻ quyền truy cập KeyChain ..

  • Về vấn đề Debug/AdHoc của bạn. trong cài đặt dự án, hãy chọn trong "Ký mã" -> "Quyền ký tên mã" cả hai đều trống.
2

Tôi tìm thấy giải pháp. Tiền tố appID có vẻ khác với cấu hình adHoc và Debug.

Giả sử chúng ta có AppIds sau:.

  • a.com.mycompany.A
  • b *

id thứ hai được tạo ra bởi xcode và đó là tiền tố được sử dụng để ký phiên bản gỡ lỗi của ứng dụng. Id đầu tiên được sử dụng để ký phiên bản AdHoc của ứng dụng.

Nếu bây giờ bạn thử sử dụng móc khóa với nhóm truy cập a.com.mycompany, bạn sẽ có quyền truy cập keychain cho phiên bản AdHoc. Nếu bạn sử dụng accessgroup b.com.mycompany bạn sẽ có quyền truy cập trong phiên bản gỡ lỗi. Không ai trong số họ làm việc cho cả hai.

Tôi đã giải quyết sự cố bằng cách tạo id ký tự đại diện mới: a. * Và sử dụng nó cho "Hồ sơ cấp phép iOS Team: *". Có vẻ như hồ sơ cung cấp này bằng cách nào đó được sử dụng để ký một bản dựng gỡ lỗi của ứng dụng. Tôi thực sự nghĩ nó sử dụng Profile Provisioning Development để ký nó?

Tuy nhiên, với những thay đổi này tôi có thể truy cập vào keychain trong chế độ gỡ lỗi và adHoc với cùng một nhóm truy cập.

Có vẻ như người dùng đã đăng ký mới không gặp sự cố này, giờ đây xCode tự động tạo id có tiền tố phù hợp.

0

Như đã đề cập trong các câu trả lời khác, điều này là do hồ sơ cấp phép sai đang được sử dụng.

Tôi gặp vấn đề này trong XCode 6. Tôi có hai mục tiêu trong dự án của mình và một trong số chúng luôn được xây dựng với cấu hình sai, bất kể tôi đã làm gì (bao gồm thay đổi cài đặt Provisioning Profile trong Build Settings).

Sau giờ chơi đùa với nó, tôi nhận thấy như sau:

  1. Mục tiêu tốt đã sử dụng một cấp phép hồ sơ được gọi là "XC: com.mycompanyname.mytargetname1"
  2. Mục tiêu tan vỡ đã sử dụng một hồ sơ có tên "XC:". Tiểu sử này là cấu hình "Xcode: Wildcard AppID()".

Tôi không biết nơi một trong những đến từ đâu, nhưng những gì tôi đã làm để khắc phục vấn đề của tôi là thế này:

  1. Đăng nhập vào developers.apple.com
  2. Đến Giấy chứng nhận, nhận dạng & Profiles
  3. Clicked về "Tất cả" dưới Provisioning Profiles trên thanh bên trái
  4. Clicked vào "+"
  5. tạo một hồ sơ mới được gọi là "XC: c om.mycompanyname.mytargetname2 "(LƯU Ý: cài đặt sẽ dành riêng cho bạn. Bạn nên thay thế com.mycompanyname.mytargetname2 bằng ID gói của ứng dụng.

Sau khi hoạt động.

+0

Điều đó có thể đã gây ra sự cố, nhưng tôi gặp lỗi này chỉ với một hồ sơ cấp phép duy nhất (và chỉ có một hồ sơ cấp phép duy nhất). – EntangledLoops

1

Khi chạy vào cùng một vấn đề này và một số biến thể trong đó (lỗi ITMS-90164, trong số những người khác). Sau khi nghịch ngợm với các thiết lập khác nhau trong nhiều giờ, không có kết quả, tôi cuối cùng, miễn cưỡng, theo sau Apple's Technical Q&A QA1814: Setting up Xcode to automatically manage your provisioning profiles. Các bước rất đơn giản và dễ hiểu, hoàn chỉnh với ảnh chụp màn hình và ghi chú quan trọng để tái chế Xcode sau khi bạn thực hiện xong các thay đổi. Quan trọng nhất, nó đã giải quyết (các) vấn đề của tôi và cho phép tôi cuối cùng tải tệp lưu trữ của tôi lên App Store.

0

Ngoài các giải pháp được đề cập ở trên, tôi đã gặp phải một biến thể khác của vấn đề này.

Số nhận dạng tổ chức của tôi đã thay đổi (có thể liên quan đến việc chấp nhận cập nhật thỏa thuận mới nhất trên developer.apple.com) và do đó tiền tố cho ứng dụng của tôi đã thay đổi.Vì vậy, trong khi trước đây có thể là ABCCYZ0U812.com.whatever.app bây giờ là 90210SUXX11.com.whatever.app

Khi tôi gửi đi và bạn sẽ có màn hình thông báo "Gửi (tên ứng dụng) cho Apple" và có danh sách được gọi là "Nhị phân và quyền lợi", khi tôi sẽ mở rộng danh sách dưới ứng dụng của tôi (hai lần, vì tôi đoán Xcode có lỗi lần đầu tiên) tôi sẽ nhìn thấy một cái gì đó giống như

AppName.app (5 entitlements)   (provisioning profile) (arrow) 

application-identifier 
90210SUXX11.com.whatever.app 

... 

keychain-access-groups 
ABCCYZ0U812.com.whatever.app 

com.apple.developer.team-identifier 
90210SUXX11 

vì vậy, đối với một số lý do nó vẫn sử dụng định danh đội cũ cho các bit keychain-access-groups nhưng hiện không khớp với số nhận dạng nhóm mới

Tôi đã thực hiện theo dõi do

  1. nhấp vào mũi tên bên cạnh cấp phép hồ sơ để mở Finder để nơi các cấu hình được tổ chức
  2. xóa tất cả các file trong thư mục .mobileprovision
  3. Closed ra nộp thoại
  4. Trong Xcode, Nhấp vào Xcode -> Tùy chọn -> Tài khoản và để tài khoản của tôi tải xuống lại hồ sơ cung cấp
  5. Đã cố gửi lại tệp lưu trữ

Bây giờ tất cả những gì xuất hiện và nó làm việc

AppName.app (5 entitlements)   (provisioning profile) (arrow) 

application-identifier 
90210SUXX11.com.whatever.app 

... 

keychain-access-groups 
90210SUXX11.com.whatever.app 

com.apple.developer.team-identifier 
90210SUXX11 

Có thể có một cách tinh tế hơn để sửa chữa nó mà không xóa tất cả mọi thứ nhưng điều đó nên đưa bạn đi đúng hướng.