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

오늘 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에서 분리됩니다.

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



답변

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

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

이것은 가짜입니다.

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

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

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

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

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

또한 포럼의 Apple 직원 CFM :

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


답변

앱 그룹과 함께 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 로 이동합니다.


답변

내 macOS 앱에서도 동일한 문제가 발생했습니다.

해결 방법 : 장치를 재부팅하십시오!

https://stackoverflow.com/a/39876271


답변

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

group.com.mycompany.myapp

group.MYTEAMID.com.mycompany.myapp

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


답변

SuiteName (접미사)은 기본 번들 ID가 아니어야합니다.


답변

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

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


답변

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