CFPrefsPlistSource iOS 10에서 값을 읽지 못했습니다.


87

오늘 Xcode 8을 베타 2로 업데이트했으며 App과 Today Extension간에 데이터를 공유하려고합니다. 이 로그 경고에 직면했습니다.

2016-07-08 18 : 00 : 24.732472 ProjetctX [941 : 42801] [사용자 기본값] CFPrefsPlistSource <0x1700f1280>의 값을 읽지 못했습니다 (도메인 : group.xpto, 사용자 : kCFPreferencesAnyUser, ByHost : 예, 컨테이너 : (null)). : 컨테이너와 함께 kCFPreferencesAnyUser를 사용하는 것은 시스템 컨테이너에만 허용되며 cfprefsd에서 분리됩니다.

누구든지 나를 도울 수 있습니까?


7
난 내 응용 프로그램에서이 같은 문제를 겪고
Pravin Kamble

@PravinKamble이 오류가 발생했지만 모든 항목에 액세스 할 수 있습니다 (사용자 기본값의 앱 그룹).
Klevison

1
9.3에 배포 대상을 변경하면 완벽하게 장치에서 실행하지만 그것은 아이폰 OS 10 일 내가 내가 찾기 솔루션으로 즉시 여기에 게시 될 것입니다 솔루션을 찾는 것입니다하지 않습니다
Pravin Kamble

@PravinKamble Xcode 8 베타 2를 사용하여 프로젝트를 만들었습니까?
Klevison

XCode 8 베타 4에서 공유 기본값을 사용하여 동일한 결과를 얻습니다.
Gruntcakes

답변:


79

이것은 실제로 iOS 10 및 macOS 10.12에 도입 된 가짜 경고입니다.

NSUserDefaults 팁 : 현재 OS에는 "… 컨테이너는 시스템 컨테이너에만 허용됩니다…"라는 오류가 기록됩니다.

이것은 가짜입니다.

특정 장애 모드를 포착하려고 시도하면서 동시에 정상 작동 사례를 포착했습니다.

UserDefaults의 후임자는 증상이있는 경우를 디버깅 할 수 없게 만들지 않고이를 덜 경고하는 방법을 찾지 못했습니다.

https://twitter.com/Catfish_Man/status/784460565972332544 [스레드]

팀 ID를 추가하라는 조언은 경고를 무음으로 만들지 만 비어있는 새 사용자 기본값도 생성합니다. 이로 인해 이전에 저장된 데이터를 읽을 수 없게됩니다.

당분간 해결책은 그냥 무시하는 것입니다.

또한 포럼의 Apple 직원 CFM :

개인 기능을 사용하지 않고는 불가능하다고 생각되는 매우 구체적인 작업을 수행하지 않는 한 로깅 된 메시지는 가짜입니다 (해당 기능의 오용을 포착하기 위해 추가되었지만 안타깝게도 일반적인 사용 사례도 포착했습니다).


1
팀 ID로 시작하는 앱 그룹을 만들려고했지만 강제로 '그룹'으로 시작합니다. 그래서-두 사람이 일치하면 안되나요 ???
SAHM

3
High Sierra에서이 로그 메시지가 표시됩니다. 팀 ID를 추가해도 경고 가 울리지 않습니다 . Apple이이 문제를 해결할 계획입니까?
mschmidt

1
죄송합니다. 자세히 설명해 주시겠습니까? 무엇에 "팀 ID를 앞에 붙이세요"?
Motti Shneor 19.07.07

19

앱 그룹과 함께 UserDefaults를 사용하여 기본 앱과 확장간에 데이터를 전달하는 방법은 다음과 같습니다.

  1. 기본 앱의 프로젝트 네비게이터에서 프로젝트를 선택하십시오.

  2. 기본 앱 대상을 선택하고 기능 탭을 선택합니다.

  3. 앱 그룹 스위치를 ON으로 전환합니다. 이는 인 타이틀먼트 세트를 생성하기 위해 개발자 포털과 통신합니다.

  4. 새 컨테이너를 만듭니다. Apple에 따르면 컨테이너 ID는 "group"으로 시작해야하므로 "group.io.intrepid.myapp"과 같은 이름이 완벽합니다.

  5. 확장 대상을 선택하고 앱 그룹 활성화 프로세스를 반복합니다. 새 앱 그룹을 만들지 말고 기본 앱 대상에서 방금 만든 그룹을 선택하기 만하면됩니다.

  6. 앱이나 확장 프로그램에서 UserDefaults를 읽거나 쓸 때 UserDefaults.standard. 대신 UserDefaults(suiteName: "group.io.intrepid.myapp"). 참고 : 제품군 이름은 4 단계에서 생성 된 앱 그룹 컨테이너의 이름입니다.

그룹 활성화 및 확장 및 앱 기능 섹션 모두에 대해 동일한 그룹 ID를 사용하는지 확인하십시오!

크레딧은 http://blog.intrepid.io/ios-app-extensions 로 이동합니다.


"메인 앱 타겟에서 방금 생성 된 그룹을 선택하기 만하면됩니다"=> 나타나지 않았을 때해야 할 일 ??
user3722523

확장에서 동일한 그룹을 활성화하고 선택하십시오!
Arfan Mirza

반복합니다. 확장 프로그램에서 선택 항목이 비어있는 경우 동일한 그룹을 선택하는 방법 ???
user3722523

호환성 섹션에서 그룹을 토글 / 활성화하면 그룹 목록이 자동으로 표시되고 표시되지 않으면 팀 (Signing 개발자 계정)을 확인하면 팀도 동일해야합니다! 팀을 설정하고 그룹을 다시 전환하십시오!
Arfan Mirza

여전히 작동하지 않지만 iOS 프로젝트에서는 작동합니다. : I'v 스레드 생성 stackoverflow.com/questions/44914304/...
user3722523


4

Xcode 인 타이틀먼트의 그룹 이름을 다음에서 변경하십시오.

group.com.mycompany.myapp

group.MYTEAMID.com.mycompany.myapp

추신 : developer.apple.com 멤버십에서 MYTEAMID를 찾을 수 있습니다.



3

나를위한 해결책은 응용 프로그램 번들 식별자와 "그룹"이후 부분에 동일한 식별자를 사용하지 않는 것이 었습니다.

앱 번들 ID가 "com.app.id"이고 그룹 ID가 "group.com.app.id"인 경우 문제가 발생합니다. "group.com.app.id.something"으로 변경하면 중지됩니다.


0

Xcode 8.1 베타로 빌드하면 동일한 경고가 표시되지만 값도 표시됩니다.


0

initWithSuiteName을 사용하려고 할 때 이와 동일한 문제가 발생합니다. 이것은 Apple의 버그 인 것 같습니다. 내가 찾은 유일한 해결책 / 해결 방법은 장치의 모든 설정을 재설정하는 것입니다. 로 이동 설정 -> 일반 -> 재설정 -> 모든 설정 재설정.

이것은 iPhone의 콘텐츠를 지우지 않고 모든 설정을 지 웁니다. 설정을 재설정하면 모든 것이 정상적으로 작동했습니다. 도움이된다면 알려주세요.


0

기본적으로 Apple 설정 앱을 통해 앱 환경 설정을 표시하고 편집하기 위해 Settings.Bundle / Root.plist를 사용하는 경우 UserDefaults.standard 사전을 사용합니다 .

따라서 앱 그룹을 사용 중이고 앱 및 확장 내에서이 기본값 / 설정을 공유하려는 경우 설정 컨테이너를 변경해야합니다.

1 단계 : Settings.Bundle-> Root.plist 열기

Settings.Bundle-> Root.plist를 엽니 다.

2 단계 : Key ApplicationGroupContainerIdentifier를 추가하고 Signing & Capabilities : Looks like group.xx.yy에 정의 된 App-Group-Id를 값으로 설정합니다.

ApplicationGroupContainerIdentifier에 대한 키-값 쌍 추가

이 단계를 구현 한 후 App-Settings의 기본 컨테이너는 이제 UserDefaults.standard (앱 경로)에서 공유 경로로 전환됩니다.


-3

을 사용하여 확장 APP에 데이터를 저장하려고 할 때이 문제가 발생하면 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를 사용해야합니까? 나에게 팀 ID를 추가하면 내 앱에서 "group.com.xxx.xxx"에 저장 한 데이터없이 빈 UserDeaults를 가져 오는 것처럼 보입니다. 내 iOS 10 업데이트를 차단하기 때문에 이것에 대한 수정이 있기를 바랍니다.
timgcarlson

2
데이터는 여전히 동기화되지 않습니다. 오류가 사라집니다.
Jeet

3
현재이 오류는 앱에 영향을 미치지 않는 것 같습니다. 그러나 팀 ID를 추가하면 오류가 누락되지만 데이터를 가져올 수 없습니다.
scorpiozj

4
이것은 좋은 대답이 아닙니다. 다른 것을 넣고 키를 변경할 때 도움말로 오류를 건너 뜁니다.
kokluch

제 경우에는 작동하지 않고 오류가 사라지지만 데이터를 가져 오지 않습니다.
TibiaZ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.