Không đọc được giá trị trong CFPrefsPlistSource iOS 10


86

Tôi đã cập nhật Xcode 8 của mình lên phiên bản beta 2 hôm nay và tôi đang cố gắng chia sẻ dữ liệu giữa Ứng dụng và Tiện ích mở rộng ngày hôm nay. Tôi đang phải đối mặt với cảnh báo nhật ký này:

2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Mặc định của người dùng] Không thể đọc các giá trị trong CFPrefsPlistSource <0x1700f1280> (Miền: group.xpto, Người dùng: kCFPreferencesAnyUser, ByHost: Có, Vùng chứa: (null)) : Sử dụng kCFPreferencesAnyUser with a container chỉ được phép đối với System Containers, tách khỏi cfprefsd

Bất cứ ai có thể giúp tôi?


7
tôi đang gặp với cùng một vấn đề này trong ứng dụng của tôi
Pravin Kamble

@PravinKamble Tôi gặp lỗi này nhưng tôi có thể truy cập mọi thứ (nhóm ứng dụng mặc định của người dùng).
Klevison

1
thay đổi mục tiêu triển khai trên 9,3 nó một cách hoàn hảo sẽ chạy trên thiết bị nhưng nó sẽ không làm việc với iOS 10 i sẽ tìm kiếm giải pháp tôi sẽ được đăng ở đây càng sớm càng giải pháp find
Pravin Kamble

@PravinKamble Bạn đã tạo dự án của mình bằng Xcode 8 beta 2 chưa?
Klevison

Tôi nhận được điều tương tự bằng cách sử dụng mặc định được chia sẻ với XCode 8 beta 4.
Gruntcakes

Câu trả lời:


76

Đây thực sự là một cảnh báo giả đã được giới thiệu trong iOS 10 và macOS 10.12:

Mẹo NSUserDefaults: trong hệ điều hành hiện tại có lỗi ghi "… với vùng chứa chỉ được phép đối với Vùng chứa hệ thống…".

Điều này là giả.

Cố gắng bắt một chế độ lỗi cụ thể, đồng thời bắt một trường hợp hoạt động bình thường.

Người kế nhiệm của tôi trên UserDefaults cũng không tìm ra cách để làm cho điều này ít đáng báo động hơn mà không làm cho trường hợp có triệu chứng không thể gỡ lỗi: /

https://twitter.com/Catfish_Man/status/784460565972332544 [chủ đề]

Lời khuyên về việc thêm trước ID nhóm của bạn sẽ tắt cảnh báo nhưng cũng sẽ tạo mặc định người dùng trống mới. Điều này sẽ dẫn đến bất kỳ dữ liệu được lưu trữ trước đó không thể đọc được.

Còn hiện tại, giải pháp chỉ là mặc kệ.

Ngoài ra, CFM nhân viên của Apple trên các diễn đàn :

Thông báo đã ghi là giả mạo trừ khi bạn đang làm những việc rất cụ thể mà tôi không nghĩ là có thể thực hiện được mà không sử dụng các chức năng riêng tư (nó được thêm vào để bắt việc sử dụng sai các chức năng đó, nhưng rất tiếc cũng gặp phải trường hợp sử dụng bình thường).


1
Tôi đã cố gắng tạo một nhóm ứng dụng bắt đầu bằng ID nhóm nhưng nó buộc nó phải bắt đầu bằng 'nhóm'. Vậy - hai người không được hợp nhau sao ???
SAHM

3
Tôi thấy thông báo nhật ký này trên High Sierra. Đặt trước ID đội không im lặng cảnh báo cho tôi. Apple có định sửa lỗi này không?
mschmidt

1
Xin lỗi, bạn có thể vui lòng giải thích? "thêm trước ID nhóm của bạn" để làm gì?
Motti Shneor

19

Đây là cách sử dụng UserDefaults với Nhóm ứng dụng để chuyển dữ liệu giữa ứng dụng chính và tiện ích mở rộng của bạn:

  1. Trong ứng dụng chính của bạn, hãy chọn dự án của bạn trong Project Navigator.

  2. Chọn mục tiêu ứng dụng chính của bạn và chọn tab Khả năng.

  3. Chuyển nút gạt Nhóm ứng dụng thành BẬT. Điều này sẽ giao tiếp với Cổng thông tin dành cho nhà phát triển để tạo một tập hợp các quyền.

  4. Tạo một vùng chứa mới. Theo Apple, ID vùng chứa của bạn phải bắt đầu bằng "group", vì vậy một cái tên như "group.io.intrepid.myapp" là hoàn hảo.

  5. Chọn mục tiêu tiện ích mở rộng của bạn và lặp lại quy trình bật Nhóm ứng dụng. Không tạo Nhóm ứng dụng mới, chỉ cần chọn nhóm vừa được tạo trong mục tiêu ứng dụng chính.

  6. Khi đọc hoặc ghi UserDefaults trong ứng dụng hoặc tiện ích mở rộng của bạn, không truy cập UserDefaults.standard. Thay vào đó sử dụng UserDefaults(suiteName: "group.io.intrepid.myapp"). Lưu ý: Tên bộ là tên của vùng chứa Nhóm ứng dụng của bạn được tạo ở Bước 4.

Đảm bảo kích hoạt nhóm và sử dụng cùng một id nhóm cho cả phần mở rộng và phần khả năng ứng dụng!

Tín dụng được chuyển đến http://blog.intrepid.io/ios-app-extensions


"chỉ cần chọn nhóm vừa được tạo trong mục tiêu ứng dụng chính" => Làm gì khi nó không xuất hiện ??
user3722523

bật và chọn cùng một nhóm trong tiện ích mở rộng!
Arfan Mirza

Tôi nhắc lại, làm thế nào để chọn cùng một nhóm nếu vùng chọn trống trong tiện ích mở rộng ???
user3722523

Khi bạn bật / tắt các nhóm trong phần Tương thích thì nó sẽ tự động hiển thị danh sách các nhóm, nếu không hiển thị thì kiểm tra Nhóm (Đăng ký tài khoản nhà phát triển), Nhóm cũng cần tương tự! Đặt lại nhóm và chuyển đổi nhóm!
Arfan Mirza

nó vẫn không hoạt động ... tuy nhiên với dự án iOS, nó hoạt động. I'v tạo ra một chủ đề: stackoverflow.com/questions/44914304/...
user3722523



3

Thay đổi tên nhóm của bạn trong các quyền Xcode từ:

group.com.mycompany.myapp

Đến

group.MYTEAMID.com.mycompany.myapp

ps: bạn có thể tìm thấy MYTEAMID của mình trong tư cách thành viên developer.apple.com


3

Giải pháp cho tôi là không sử dụng cùng một số nhận dạng cho Số nhận dạng gói ứng dụng và phần sau "nhóm.".

Giả sử, id gói ứng dụng là "com.app.id", sau đó id nhóm là "group.com.app.id" đang gây ra sự cố. Sau khi tôi thay đổi nó thành "group.com.app.id.something", nó sẽ dừng lại.


0

Xây dựng với Xcode 8.1 Beta và bạn sẽ thấy cảnh báo tương tự, nhưng bạn cũng sẽ nhận được giá trị.


0

Tôi đang gặp phải vấn đề tương tự khi cố gắng sử dụng initWithSuiteName. Có vẻ như đây là một lỗi từ Apple. Giải pháp / cách giải quyết duy nhất mà tôi tìm thấy là đặt lại tất cả các cài đặt của thiết bị. Đi đến Cài đặt -> Chung -> Đặt lại -> Đặt lại Tất cả Cài đặt.

Thao tác này không xóa bất kỳ nội dung nào trên iPhone, chỉ xóa tất cả cài đặt. Sau khi đặt lại cài đặt, mọi thứ hoạt động tốt. Hãy cho tôi biết nếu nó cũng giúp bạn.


-3

nếu bạn gặp sự cố này khi cố gắng lưu dữ liệu vào APP mở rộng bằng cách sử dụng userDefault, có thể bạn đã viết mã này:

[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];

Mã này đặt lại mặc định userDefault .

Trên thực tế, mã chính xác là:

[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"];

http://www.jianshu.com/p/e782104c3bc3


-10

Thay đổi từ

[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];

đến

[[NSUserDefaults alloc] initWithSuiteName:@"nnnnnnnnnn.group.com.xxx.xxx"]; 

nnnnnnnnnSố nhóm của bạn ở đâu , số bạn sử dụng để ký mã của mình.

Đã thử nghiệm theo Xcode 8 GM và iOS 10 GM, và đã hoạt động!


2
Chúng tôi cũng phải sử dụng "nnnnnnnnnn.group.com.xxx.xxx" để viết trong ứng dụng chính hay chỉ sử dụng ID nhóm trong tiện ích mở rộng? Đối với tôi, việc thêm id nhóm dường như để kéo một UserDeaults trống mà không có bất kỳ dữ liệu nào tôi đã lưu vào "group.com.xxx.xxx" trong ứng dụng của mình. Thực sự hy vọng có một bản sửa lỗi cho điều này, vì nó đang chặn bản cập nhật iOS 10 của tôi.
timgcarlson

2
Dữ liệu vẫn không đồng bộ hóa. Lỗi không biến mất.
Jeet

3
hiện tại, có vẻ như lỗi này không ảnh hưởng đến ứng dụng. Nhưng nếu thêm Team id thì lỗi bị thiếu nhưng không tìm nạp được dữ liệu.
scorpiozj

4
Đây không phải là một câu trả lời tốt. Bạn có thể đặt bất kỳ thứ gì khác và bỏ qua lỗi khi được trợ giúp khi bạn thay đổi chìa khóa.
kokluch,

Không làm việc trong trường hợp của tôi, lỗi biến mất nhưng dữ liệu không được lấy
TibiaZ
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.