CFPrefsPlistSource iOS 10 में मान पढ़ने में विफल


86

मैंने आज अपना Xcode 8 बीटा 2 में अपडेट किया है और मैं ऐप और टुडे एक्सटेंशन के बीच डेटा साझा करने का प्रयास कर रहा हूं। मैं इस लॉग चेतावनी के साथ सामना कर रहा हूँ:

2016-07-08 18: 00: 24.732472 प्रोजैक्टएक्स [941: 42801] [यूजर डिफॉल्ट्स] को CFPrefsPlistSource <0x1700f1280> (डोमेन: group .xpto, उपयोगकर्ता: kCFPreferencesAnyUser, ByHost: Yes, कंटेनर: null) में मान पढ़ने में विफल। : एक कंटेनर के साथ kCFPreferencesAnyUser का उपयोग करना केवल सिस्टम कंटेनर के लिए अनुमत है, cfprefsd से कोचिंग

कोई मुझे मदद कर सकता है?


7
मैं अपने ऐप में इसी मुद्दे के साथ हूँ
प्रवीण कांबले

@PravinKamble मुझे यह त्रुटि मिली, लेकिन मैं सब कुछ एक्सेस कर सकता हूं (उपयोगकर्ता डिफॉल्ट्स के appgroup)।
Klevison

1
9.3 पर तैनाती का लक्ष्य बदलना यह पूरी तरह से डिवाइस पर चलता है, लेकिन यह iOS 10 के साथ काम नहीं करेगा मैं समाधान की तलाश में रहूंगा, जैसे ही समाधान खोजने के लिए यहां पोस्ट किया जाएगा
प्रवीण कांबले

@PravinKamble आपने अपना प्रोजेक्ट Xcode 8 बीटा 2 का उपयोग करके बनाया है?
Klevison

मैं XCode 8 बीटा 4 के साथ साझा चूक का उपयोग करके एक ही चीज़ प्राप्त करता हूं
Gruntcakes

जवाबों:


76

यह वास्तव में एक डरावना चेतावनी है जिसे iOS 10 और macOS 10.12 में पेश किया गया था:

NSUserDefaults टिप: वर्तमान OS में एक लॉग की गई त्रुटि "... कंटेनर के साथ केवल सिस्टम कंटेनर के लिए अनुमत है ..."।

यह सहज है।

एक विशेष विफलता मोड को पकड़ने की कोशिश कर रहा है, उसी समय एक सामान्य ऑपरेशन केस पकड़ा गया।

UserDefaults पर मेरे उत्तराधिकारी को भी इस तरह के खतरनाक मामले को कम करने के लिए असंभव बनाने के लिए एक तरीका नहीं मिला है: /

https://twitter.com/Catfish_Man/status/784460565972332525 [धागा]

आपकी टीम आईडी को प्रस्तुत करने की सलाह चेतावनी को शांत कर देगी, लेकिन एक नया खाली उपयोगकर्ता चूक भी बनाएगी। यह किसी भी पहले संग्रहीत डेटा को अपठनीय होने का परिणाम देगा।

फिलहाल, इसका हल सिर्फ इसे नजरअंदाज करना है।

इसके अलावा, मंचों पर Apple स्टाफ सदस्य CFM :

जब तक आप निजी कार्यों का उपयोग किए बिना मुझे लगता है कि यह संभव नहीं है, तब तक लॉग संदेश बहुत ही शानदार है, लेकिन यह संभव नहीं है (यह उन कार्यों के दुरुपयोग को पकड़ने के लिए जोड़ा गया था, लेकिन दुर्भाग्य से एक सामान्य उपयोग के मामले में भी पकड़ा गया)।


1
मैंने एक ऐप समूह बनाने की कोशिश की जो टीम आईडी से शुरू होता है लेकिन यह 'समूह' के साथ शुरू करने के लिए मजबूर करता है। तो - क्या दो को मैच नहीं माना जाता है ???
SAHM

3
मैं हाई सिएरा पर इस लॉग संदेश देख रहा हूँ। टीम आईडी को प्रस्तुत करना मेरे लिए चेतावनी को शांत नहीं करता है। क्या Apple इसे ठीक करने का इरादा कर रहा है?
mschmidt

1
क्षमा करें, क्या आप कृपया विस्तृत कर सकते हैं? "अपनी टीम आईडी को प्रीपेन्ड करें" क्या?
मोतिन श्योरर

19

अपने मुख्य ऐप और अपने एक्सटेंशन के बीच डेटा पास करने के लिए ऐप समूह के साथ UserDefaults का उपयोग कैसे करें:

  1. अपने मुख्य ऐप में, प्रोजेक्ट नेविगेटर में अपनी परियोजना का चयन करें।

  2. अपना मुख्य ऐप लक्ष्य चुनें और क्षमताएं टैब चुनें।

  3. एप्लिकेशन समूह को चालू पर टॉगल करें। यह एंटाइटेलमेंट का एक सेट उत्पन्न करने के लिए डेवलपर पोर्टल के साथ संवाद करेगा।

  4. एक नया कंटेनर बनाएँ। Apple के अनुसार, आपकी कंटेनर आईडी "समूह" से शुरू होनी चाहिए, इसलिए "group.io.intrepid.myapp" जैसे नाम एकदम सही हैं।

  5. अपना एक्सटेंशन लक्ष्य चुनें और ऐप समूहों को सक्षम करने की प्रक्रिया दोहराएं। एक नया ऐप समूह न बनाएं, केवल उस समूह का चयन करें जिसे मुख्य ऐप लक्ष्य में बनाया गया था।

  6. अपने ऐप या अपने एक्सटेंशन में UserDefaults पढ़ते या लिखते समय, एक्सेस न करें UserDefaults.standard। इसके बजाय उपयोग करें UserDefaults(suiteName: "group.io.intrepid.myapp")। नोट: सुइट का नाम चरण 4 में आपके ऐप ग्रुप कंटेनर का नाम है।

सुनिश्चित करें, समूह सक्षम करें और एक्सटेंशन और ऐप क्षमता अनुभाग दोनों के लिए एक ही समूह आईडी का उपयोग करें!

इसका श्रेय http://blog.intrepid.io/ios-app-extensions को जाता है


"बस उस समूह का चयन करें जो मुख्य ऐप लक्ष्य में बनाया गया था" => जब यह प्रकट नहीं हुआ तो क्या करें ??
user3722523

विस्तार में भी एक ही समूह को सक्षम और चुनें!
अरफान मिर्ज़ा

मैं दोहराता हूं, अगर एक्सटेंशन में चयन खाली है तो उसी समूह का चयन कैसे करें ???
user3722523

जब आप संगतता अनुभाग के तहत समूहों को टॉगल / सक्षम करते हैं, तो यह समूहों की ऑटो शो सूची, यदि नहीं दिखा रहा है तो टीम (साइनिंग डेवलपर खाता) की जांच करें, टीम को भी उसी की आवश्यकता है! टीम और टॉगल समूहों को फिर से सेट करें!
अरफान मिर्ज़ा

यह अभी भी काम नहीं करता है ... हालांकि iOS प्रोजेक्ट के साथ यह काम करता है।
Ivv



3

आपको Xcode एंटाइटेलमेंट में समूह का नाम बदलें:

group.com.mycompany.myapp

सेवा

group.MYTEAMID.com.mycompany.myapp

ps: आप अपना MYTEAMID developer.apple.com सदस्यता में पा सकते हैं


3

मेरे लिए समाधान था कि बंडल बंड पहचानकर्ता और "समूह" के बाद के हिस्से के लिए समान पहचानकर्ता का उपयोग न करें।

कहते हैं, ऐप बंडल आईडी "com.app.id" है, फिर समूह id "group.com.app.id" के रूप में समस्या पैदा कर रहा है। मैं इसे "group.com.app.id.something" में बदलने के बाद बंद कर देता हूं।


0

Xcode 8.1 बीटा के साथ निर्माण करें और आप एक ही चेतावनी देखेंगे, लेकिन आपको मूल्य भी मिलेगा।


0

जब मैं initWithSuiteName का उपयोग करने की कोशिश कर रहा हूं तो मैं इसी मुद्दे का सामना कर रहा हूं। लगता है कि यह Apple का एक बग है। एकमात्र समाधान / वर्कअराउंड मैंने पाया कि डिवाइस की सभी सेटिंग्स को रीसेट करना है। सेटिंग्स पर जाएं -> सामान्य -> ​​रीसेट -> सभी सेटिंग्स रीसेट करें।

यह iPhone पर किसी भी सामग्री को मिटाता नहीं है, बस सभी सेटिंग्स मिटा देता है। सेटिंग को रीसेट करने के बाद, सब कुछ ठीक हो गया। मुझे पता है अगर यह भी आपकी मदद करता है।


-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" का उपयोग करने वाले हैं, या विस्तार में टीम आईडी का उपयोग करें? मेरे लिए, मेरे ऐप में "group.com.xxx.xxx" में सहेजे गए किसी भी डेटा के बिना टीम आईडी जोड़ना एक खाली UserDeaults खींचना प्रतीत होता है। वास्तव में उम्मीद है कि इसमें एक सुधार होगा, क्योंकि यह मेरे iOS 10 अपडेट को रोक रहा है।
टाइमगर्लसन

2
डेटा अभी भी सिंक नहीं है। त्रुटि दूर हो जाती है।
जीत

3
वर्तमान में ऐसा लगता है कि यह त्रुटि एप्लिकेशन को प्रभावित नहीं करती है। लेकिन अगर टीम आईडी को जोड़ा जाए, तो त्रुटि गायब है लेकिन डेटा नहीं लाया जा सकता है।
स्कॉर्पियोजज

4
यह एक अच्छा जवाब नहीं है। आप किसी भी अन्य चीज़ को डालेंगे और कुंजी को बदलने में मदद के रूप में त्रुटि को छोड़ देंगे।
कोक्लुच

मेरे मामले में काम नहीं करने पर, त्रुटि गायब हो जाती है, लेकिन डेटा नहीं मिल रहा है
टिबिअज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.