ไม่สามารถอ่านค่าใน CFPrefsPlistSource iOS 10


87

ฉันได้อัปเดต Xcode 8 เป็นเบต้า 2 แล้ววันนี้และฉันพยายามแชร์ข้อมูลระหว่างแอปและส่วนขยายวันนี้ ฉันกำลังเผชิญกับคำเตือนบันทึกนี้:

2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [ค่าเริ่มต้นของผู้ใช้] ไม่สามารถอ่านค่าใน CFPrefsPlistSource <0x1700f1280> (โดเมน: group.xpto, ผู้ใช้: kCFPreferencesAnyUser, ByHost: ใช่คอนเทนเนอร์: (null)) : อนุญาตให้ใช้ kCFPreferencesAnyUser กับคอนเทนเนอร์สำหรับ System Containers โดยแยกออกจาก cfprefsd

ใครก็ได้ช่วยฉันที


7
ฉันมีปัญหาเดียวกันนี้ในแอปของฉัน
Pravin Kamble

@PravinKamble ฉันได้รับข้อผิดพลาดนี้ แต่ฉันสามารถเข้าถึงได้ทุกอย่าง (กลุ่มแอปเริ่มต้นของผู้ใช้)
Klevison

1
การเปลี่ยนเป้าหมายการปรับใช้บน 9.3 จะทำงานได้อย่างสมบูรณ์บนอุปกรณ์ แต่ใช้ไม่ได้กับ iOS 10 ฉันกำลังมองหาวิธีแก้ปัญหาฉันจะโพสต์ที่นี่ทันทีที่พบวิธีแก้ปัญหา
Pravin Kamble

@PravinKamble คุณได้สร้างโครงการของคุณโดยใช้ Xcode 8 beta 2 หรือไม่
Klevison

ฉันได้รับสิ่งเดียวกันโดยใช้ค่าเริ่มต้นที่ใช้ร่วมกันกับ XCode 8 beta 4
Gruntcakes

คำตอบ:


79

นี่เป็นคำเตือนปลอมที่เปิดตัวใน iOS 10 และ macOS 10.12:

เคล็ดลับ NSUserDefaults: ในระบบปฏิบัติการปัจจุบันมีข้อผิดพลาดที่บันทึกไว้ "... กับคอนเทนเนอร์ได้รับอนุญาตสำหรับ System Containers เท่านั้น ... "

นี่เป็นเรื่องปลอม

พยายามจับโหมดความล้มเหลวโดยเฉพาะพบกรณีการทำงานปกติในเวลาเดียวกัน

ผู้สืบทอดของฉันใน UserDefaults ยังไม่ได้คิดหาวิธีที่จะทำให้สิ่งนี้น่าตกใจน้อยลงโดยไม่ทำให้กรณีที่มีอาการไม่สามารถแก้ไขข้อบกพร่องได้: /

https://twitter.com/Catfish_Man/status/784460565972332544 [ด้าย]

คำแนะนำในการเตรียม ID ทีมของคุณไว้ล่วงหน้าจะปิดการเตือน แต่จะสร้างค่าเริ่มต้นของผู้ใช้ใหม่ที่ว่างเปล่าด้วย ซึ่งจะส่งผลให้ข้อมูลที่เก็บไว้ก่อนหน้านี้ไม่สามารถอ่านได้

ในขณะนี้การแก้ปัญหาคือการเพิกเฉยต่อมัน

นอกจากนี้ CFM ของเจ้าหน้าที่ Apple ในฟอรัม :

ข้อความที่บันทึกจะปลอมแปลงเว้นแต่คุณจะทำสิ่งที่เฉพาะเจาะจงมากซึ่งฉันไม่คิดว่าจะเป็นไปได้โดยไม่ใช้ฟังก์ชันส่วนตัว (ถูกเพิ่มเข้ามาเพื่อตรวจจับการใช้งานฟังก์ชันเหล่านั้นในทางที่ผิด แต่น่าเสียดายที่เกิดกรณีการใช้งานตามปกติ)


1
ฉันพยายามสร้างกลุ่มแอปที่ขึ้นต้นด้วย ID ทีม แต่บังคับให้ขึ้นต้นด้วย "กลุ่ม" งั้น - ทั้งสองคนไม่น่าจะตรงกันเหรอ ???
SAHM

3
ฉันเห็นข้อความบันทึกนี้ใน High Sierra การใส่รหัสทีมล่วงหน้าไม่ได้ปิดเสียงเตือนสำหรับฉัน Apple ตั้งใจจะแก้ไขปัญหานี้หรือไม่?
mschmidt

1
ขอโทษช่วยอธิบายให้ละเอียดได้ไหม "นำหน้า ID ทีมของคุณ" ไปที่อะไร
Motti Shneor

19

วิธีใช้ UserDefaults กับ App Groups เพื่อส่งผ่านข้อมูลระหว่างแอปหลักและส่วนขยายของคุณมีดังนี้

  1. ในแอพหลักของคุณเลือกโปรเจ็กต์ของคุณใน Project Navigator

  2. เลือกเป้าหมายแอปหลักของคุณแล้วเลือกแท็บความสามารถ

  3. สลับกลุ่มแอพเป็นเปิด สิ่งนี้จะสื่อสารกับพอร์ทัลนักพัฒนาเพื่อสร้างชุดการให้สิทธิ์

  4. สร้างคอนเทนเนอร์ใหม่ ตามที่ Apple ระบุรหัสคอนเทนเนอร์ของคุณต้องขึ้นต้นด้วย "กลุ่ม" ดังนั้นชื่อเช่น "group.io.intrepid.myapp" จึงสมบูรณ์แบบ

  5. เลือกเป้าหมายส่วนขยายของคุณและทำขั้นตอนการเปิดใช้งานกลุ่มแอปซ้ำ อย่าสร้าง App Group ใหม่เพียงแค่เลือกกลุ่มที่เพิ่งสร้างในเป้าหมายหลักของแอป

  6. เมื่ออ่านหรือเขียน UserDefaults UserDefaults.standardทั้งในปหรือส่วนขยายของคุณไม่สามารถเข้าถึง ใช้แทนUserDefaults(suiteName: "group.io.intrepid.myapp"). หมายเหตุ: ชื่อชุดคือชื่อคอนเทนเนอร์ของ App Group ที่สร้างในขั้นตอนที่ 4

ตรวจสอบให้แน่ใจว่าเปิดใช้งานกลุ่มและใช้รหัสกลุ่มเดียวกันสำหรับทั้งส่วนขยายและส่วนความสามารถของแอป!

เครดิตไปที่http://blog.intrepid.io/ios-app-extensions


"เพียงแค่เลือกกลุ่มที่เพิ่งสร้างในเป้าหมายหลักของแอป" => จะทำอย่างไรเมื่อไม่ปรากฏ ??
user3722523

เปิดใช้งานและเลือกกลุ่มเดียวกันในส่วนขยายด้วย!
Arfan Mirza

ฉันทำซ้ำวิธีการเลือกกลุ่มเดียวกันหากการเลือกว่างเปล่าในส่วนขยาย ???
user3722523

เมื่อคุณสลับ / เปิดใช้งานกลุ่มในส่วนความเข้ากันได้ระบบจะแสดงรายชื่อกลุ่มโดยอัตโนมัติหากไม่แสดงให้ตรวจสอบทีม (บัญชีผู้พัฒนาที่ลงชื่อ) ทีมก็ต้องการเช่นเดียวกัน ตั้งทีมและสลับกลุ่มอีกครั้ง!
Arfan Mirza

มันยังใช้ไม่ได้ ... อย่างไรก็ตามด้วยโปรเจ็กต์ iOS มันใช้งานได้ ฉันสร้างเธรดแล้ว: stackoverflow.com/questions/44914304/…
user3722523


4

เปลี่ยนชื่อกลุ่มของคุณในสิทธิ์ Xcode จาก:

group.com.mycompany.myapp

ถึง

group.MYTEAMID.com.mycompany.myapp

ps: คุณสามารถค้นหา MYTEAMID ของคุณได้ในการเป็นสมาชิก developer.apple.com



3

วิธีแก้ปัญหาสำหรับฉันคืออย่าใช้ตัวระบุเดียวกันสำหรับ Bundle Identifier ของแอปพลิเคชันและส่วนที่อยู่หลัง "group"

สมมติว่ารหัสชุดแอปคือ "com.app.id" จากนั้นรหัสกลุ่มเป็น "group.com.app.id" ทำให้เกิดปัญหา หลังจากที่ฉันเปลี่ยนเป็น "group.com.app.id.something" มันจะหยุด


0

สร้างด้วย Xcode 8.1 Beta และคุณจะเห็นคำเตือนเดียวกัน แต่คุณจะได้รับค่าด้วย


0

ฉันประสบปัญหาเดียวกันนี้เมื่อพยายามใช้ initWithSuiteName ดูเหมือนว่านี่เป็นบั๊กจาก Apple วิธีแก้ปัญหา / วิธีแก้ปัญหาเดียวที่ฉันพบคือรีเซ็ตการตั้งค่าทั้งหมดของอุปกรณ์ ไปที่การตั้งค่า -> ทั่วไป -> รีเซ็ต -> รีเซ็ตการตั้งค่าทั้งหมด

สิ่งนี้ไม่ได้ลบเนื้อหาใด ๆ บน iPhone เพียงแค่ลบการตั้งค่าทั้งหมด หลังจากรีเซ็ตการตั้งค่าทุกอย่างทำงานได้ดี โปรดแจ้งให้เราทราบหากจะช่วยคุณด้วย


0

ตามค่าเริ่มต้นหากคุณใช้ Settings.Bundle / Root.plist เพื่อแสดงและแก้ไขการตั้งค่าแอพของคุณผ่านแอพการตั้งค่า Apple จะใช้พจนานุกรมUserDefaults.standard

ดังนั้นหากคุณใช้ App-Groups และต้องการแชร์ค่าเริ่มต้น / การตั้งค่านี้ภายในแอปและส่วนขยายของคุณคุณจะต้องเปลี่ยนคอนเทนเนอร์ของการตั้งค่าของคุณ

ขั้นตอนที่ 1: เปิดการตั้งค่าของคุณ Bundle -> Root.plist

เปิด Settings.Bundle -> Root.plist

ขั้นตอนที่ 2: เพิ่มคีย์ApplicationGroupContainerIdentifierและเป็นค่าที่ตั้ง App-Group-Id ของคุณซึ่งกำหนดไว้ใน Signing & Capabilities ของคุณ: ดูเหมือนว่า group.xx.yy

เพิ่มคู่คีย์ - ค่าสำหรับ ApplicationGroupContainerIdentifier

หลังจากที่คุณใช้ขั้นตอนนี้คอนเทนเนอร์เริ่มต้นสำหรับการตั้งค่าแอปของคุณจะเปลี่ยนจาก UserDefaults.standard (เส้นทางแอปของคุณ) เป็นเส้นทางที่ใช้ร่วมกัน


-3

หากคุณประสบปัญหานี้เมื่อคุณพยายามบันทึกข้อมูลลงในแอปส่วนขยายโดยใช้userDefaultบางทีคุณอาจเขียนรหัสนี้:

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

userDefaultรหัสนี้เริ่มต้นการตั้งค่า

จริงๆแล้วรหัสที่ถูกต้องคือ:

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

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


-10

เปลี่ยนจาก

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

ถึง

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

nnnnnnnnnหมายเลขทีมของคุณอยู่ที่ไหนหมายเลขที่คุณใช้ลงนามในรหัสของคุณ

ผ่านการทดสอบภายใต้ Xcode 8 GM และ iOS 10 GM และได้ผล!


2
เราควรใช้ "nnnnnnnnnn.group.com.xxx.xxx" สำหรับการเขียนในแอปหลักด้วยหรือใช้เพียงแค่รหัสทีมในส่วนขยาย สำหรับฉันการเพิ่ม ID ทีมดูเหมือนจะดึง UserDeaults ว่างเปล่าโดยไม่มีข้อมูลใด ๆ ที่ฉันบันทึกไว้ใน "group.com.xxx.xxx" ในแอปของฉัน หวังเป็นอย่างยิ่งว่าจะมีการแก้ไขปัญหานี้เนื่องจากบล็อกการอัปเดต iOS 10 ของฉัน
timgcarlson

2
ข้อมูลยังไม่ซิงค์ ข้อผิดพลาดหายไป
Jeet

3
ขณะนี้ดูเหมือนว่าข้อผิดพลาดนี้จะไม่มีผลกับแอป แต่หากเพิ่มรหัสทีมข้อผิดพลาดจะหายไป แต่ไม่สามารถดึงข้อมูลได้
scorpiozj

4
นี่ไม่ใช่คำตอบที่ดี คุณจะใส่สิ่งอื่นใดและข้ามข้อผิดพลาดเป็นความช่วยเหลือเมื่อคุณเปลี่ยนคีย์
kokluch

ไม่ทำงานในกรณีของฉันข้อผิดพลาดหายไป แต่ไม่มีการดึงข้อมูล
TibiaZ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.