9

Tôi đã tìm thấy sự cố với XCode 8 trong đó các tệp .entitlements không được tham chiếu đúng cho từng lược đồ. Về cơ bản, tệp Debug .entitlements của tôi đang được tham chiếu cho lược đồ Phát hành của tôi. Điều này gây ra sự cố bởi vì chúng tôi đã triển khai logic thông báo đẩy phong phú mới và yêu cầu sử dụng nhóm Ứng dụng.Xcode 8: các quyền lợi khác nhau cho mỗi lược đồ gây ra lỗi

Tôi đang sử dụng hai nhóm khác nhau (Phát triển và Sản xuất), do đó sẽ có hai Nhóm ứng dụng cụ thể.

Bất kỳ ai biết cách giải quyết vấn đề này?

Cảm ơn bạn

+1

tôi m cũng có vấn đề này. Lược đồ QA của chúng tôi đang cố sử dụng giá trị 'production' của chúng tôi cho quyền lợi' aps-environment', mặc dù được cấu hình đúng trong 'CODE_SIGN_ENTITLEMENTS' Build Setting. –

+0

@AlbertBori kiểm tra câu trả lời của tôi ... nó sẽ giúp bạn. –

Trả lời

10

Tôi đã tìm được giải pháp. Hãy một tập tin .entitlements thêm này:

<key>aps-environment</key> 
<string>$(APS_ENVIRONMENT)</string> 
<key>com.apple.security.application-groups</key> 
<array> 
    <string>$(APP_GROUP)</string> 
</array> 

Sau đó, trong mục tiêu> Xây dựng thiết lập Đặt cùng một tập tin .entitlements trong Ký> Mã Quyền lợi Ký Thêm Setting User-Defined cho APS_ENVIRONMENT và APP_GROUP thiết lập các nhóm chính xác cho mỗi Mục tiêu.

Vì vậy, dựa trên Xcode đích sẽ sử dụng những gì bạn đặt cho APS_ENVIRONMENT và APP_GROUP.

Bạn cũng có thể làm điều này trong quá trình ... đã làm một số công cụ dọn dẹp tuyệt vời ngay hôm nay.

+0

Tôi đã sử dụng giải pháp này trong một năm qua nhưng đã thấy rằng đôi khi trung tâm dev của Apple sẽ hiển thị rằng một vài ID nhóm được liên kết với nhóm không đúng, điều này có thể phá vỡ việc viết mã thủ công. Khá thường xuyên tôi sẽ phải đi vào đó và sửa chữa các hiệp hội (chỉ để có nó thay đổi một lần nữa sau này). Rất khó để hiểu tại sao/làm thế nào mà có thể xảy ra và có thể phụ thuộc vào thiết lập của tôi, nhưng linh cảm là Xcode đang làm việc tự động và không thích biến. –

3

Mặc dù giải pháp của Tim chủ yếu là làm việc cho tôi, Xcode có tất cả khó chịu và cho biết tự động cấp phép không thể giải quyết vấn đề với các tập tin quyền lợi. Tôi không nghĩ rằng nó thích biến.

giải pháp của chúng tôi là:

  1. Enable tất cả các nhóm ứng dụng trên tất cả các mục tiêu mà cần truy cập.

Enable all app groups

  1. Xác định một thiết lập người dùng định nghĩa dự án cấp gọi PROJECT_APP_GROUP cho tên nhóm ứng dụng bằng cách vào Project -> Build Settings, nhấn vào nút "+" và chọn "Thêm cài đặt do người dùng xác định".

User-Defined PROJECT_APP_GROUP setting

  1. Đặt một biến trong file info.plist cho mỗi mục tiêu đó cần truy cập vào nhóm ứng dụng của bạn.

enter image description here

  1. Sau đó truy cập vào nhóm ứng dụng chính xác tại thời gian chạy bằng cách biến APP_GROUP từ tập tin của mục tiêu của bạn info.plist.

    + (NSString *)appGroupIdentifier 
    { 
        // this method returns the app group identifier by fetching it from the info.plist file. 
        // this string is dynamic based on build scheme. for instance group.ourApp vs. group.ourApp-dev 
        return [[[NSBundle mainBundle] infoDictionary] valueForKey:@"APP_GROUP"]; 
    } 
    

HOẶC

Bây giờ tôi nghĩ về nó, nếu bạn có macro Preprocessor thiết lập cho từng xây dựng, nó có thể được dễ dàng hơn để làm điều gì đó như:

+ (NSString *)appGroupIdentifier 
{ 
#ifdef BUILD_DEV 
    return @"group.myApp-dev"; 
#elif BUILD_STAGING 
    return @"group.myApp-staging"; 
#else 
    return @"group.myApp"; 
#endif 
} 
+1

Nhược điểm với phương pháp này là ứng dụng của bạn đang "sử dụng" cả 3 nhóm cùng một lúc. Chắc chắn bạn đang kiểm soát xem mã của bạn đang xem xét cái gì, nhưng iOS cho rằng tất cả đều đang được sử dụng theo một cách nào đó. Điều đó có nghĩa là khi bạn xóa ứng dụng dev của bạn để thử nghiệm một cái gì đó từ tươi cài đặt nó sẽ không sản phẩm nào nhóm ứng dụng - bạn sẽ phải xóa dàn dựng và các ứng dụng prod là tốt. –

+0

@KieranHarper bạn nói đúng, chúng tôi tìm thấy điều này sau khi một số thử nghiệm và kết thúc với một cách tiếp cận giống như của Tim. –

+0

Điều này phù hợp với tôi Cảm ơn bạn! –

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