CFPrefsPlistSource iOS 10'da değerler okunamadı


87

Bugün Xcode 8'imi beta 2'ye güncelledim ve Uygulama ile Bugün Uzantısı arasında veri paylaşmaya çalışıyorum. Şu günlük uyarısıyla karşı karşıyayım:

2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Kullanıcı Varsayılanları] CFPrefsPlistSource <0x1700f1280> içindeki değerler okunamadı (Etki Alanı: group.xpto, Kullanıcı: kCFPreferencesAnyUser, ByHost: Evet, Kapsayıcı: (boş)) : KCFPreferencesAnyUser'ın bir kapsayıcıyla kullanılmasına yalnızca Sistem Kapsayıcıları için izin verilir, cfprefsd'den çıkarılır

birisi bana yardım edebilir mi?


7
uygulamamda aynı sorunu yaşıyorum
Pravin Kamble

@PravinKamble Bu hatayı aldım, ancak her şeye erişebiliyorum (kullanıcı varsayılanlarının uygulama grubu).
Klevison

1
9.3 üzerindeki dağıtım hedefini değiştirerek mükemmel cihazda çalışır olacaktır ama iOS 10 ile iş i bulmak çözümü en kısa sürede burada yazılan olacak çözüm arıyor olacak olmayacak
Pravin Kamble

@PravinKamble projenizi Xcode 8 beta 2 kullanarak mı oluşturdunuz?
Klevison

XCode 8 beta 4 ile paylaşılan varsayılanları kullanarak aynı şeyi elde ediyorum.
Gruntcakes

Yanıtlar:


79

Bu aslında iOS 10 ve macOS 10.12'de tanıtılan sahte bir uyarıdır:

NSUserDefaults ipucu: mevcut işletim sistemlerinde "… bir kapsayıcıya yalnızca Sistem Kapsayıcıları için izin verilir…" günlüğe kaydedilmiş bir hata var.

Bu sahte.

Belirli bir arıza modunu yakalamaya çalışırken, aynı zamanda normal bir çalışma durumu yakaladı.

UserDefaults'daki halefim, semptomatik vakayı hata ayıklamayı imkansız hale getirmeden bunu daha az endişe verici hale getirmenin bir yolunu bulamadı: /

https://twitter.com/Catfish_Man/status/784460565972332544 [ileti dizisi]

Ekip kimliğinizi önceden ekleme tavsiyesi, uyarıyı susturur, ancak aynı zamanda yeni bir boş kullanıcı varsayılanları oluşturur. Bu, önceden saklanan verilerin okunamaz hale gelmesine neden olacaktır.

Şimdilik çözüm, onu görmezden gelmektir.

Ayrıca, forumlarda Apple personel üyesi CFM :

Özel işlevler kullanmadan mümkün olmadığını düşündüğüm çok özel şeyler yapmadığınız sürece günlüğe kaydedilen mesaj sahte.


1
Ekip kimliğiyle başlayan bir uygulama grubu oluşturmaya çalıştım, ancak onu "grup" ile başlamaya zorluyor. Yani - ikisinin uyuşmaması gerekiyor mu ???
SAHM

3
Bu günlük mesajlarını High Sierra'da görüyorum. Takım kimliğini prepending yok değil benim için uyarıyı. Apple bunu düzeltmek mi istiyor?
mschmidt

1
Pardon, lütfen ayrıntılandırır mısınız? Ekip kimliğinizi neye ekleyin?
Motti Shneor

19

Ana uygulamanız ve uzantınız arasında veri aktarmak için UserDefaults'u Uygulama Gruplarıyla nasıl kullanacağınız aşağıda açıklanmıştır:

  1. Ana uygulamanızda, Proje Gezgini'nde projenizi seçin.

  2. Ana uygulama hedefinizi seçin ve Yetenekler sekmesini seçin.

  3. Uygulama Grupları anahtarını AÇIK konumuna getirin. Bu, bir dizi yetki oluşturmak için Geliştirici Portalı ile iletişim kuracaktır.

  4. Yeni bir kap oluşturun. Apple'a göre, kapsayıcı kimliğiniz "grup" ile başlamalıdır, bu nedenle "group.io.intrepid.myapp" gibi bir ad mükemmeldir.

  5. Uzantı hedefinizi seçin ve Uygulama Gruplarını etkinleştirme işlemini tekrarlayın. Yeni bir Uygulama Grubu oluşturmayın, sadece ana uygulama hedefinde yeni oluşturulan grubu seçin.

  6. Uygulamanızda veya uzantınızda UserDefault'ları okurken veya yazarken, erişmeyin UserDefaults.standard. Bunun yerine kullanın UserDefaults(suiteName: "group.io.intrepid.myapp"). Not: Paket adı, 4. Adımda oluşturulan Uygulama Grubu kabınızın adıdır.

Grup etkinleştirin ve hem uzantı hem de uygulama yeteneği bölümü için aynı grup kimliğini kullanın!

Kredi http://blog.intrepid.io/ios-app-extensions adresine gider


"sadece ana uygulama hedefinde yeni oluşturulan grubu seçin" => Görünmediğinde ne yapılmalı ??
user3722523

uzantıda da aynı grubu etkinleştirin ve seçin!
Arfan Mirza

Tekrar ediyorum, uzantıdaki seçim boşsa aynı grup nasıl seçilir ???
user3722523

Uyumluluk bölümünün altındaki grupları açıp / etkinleştirdiğinizde, grup listesini otomatik olarak gösterir, gösterilmiyorsa Ekibi kontrol edin (Geliştirici hesabını imzalama), Takımın da aynı ihtiyacı vardır! Ekibi ayarlayın ve grupları yeniden değiştirin!
Arfan Mirza

hala çalışmıyor ... ancak iOS projesinde çalışıyor. Bir ileti dizisi oluşturdum: stackoverflow.com/questions/44914304/…
user3722523


4

Xcode yetkilerindeki grup adınızı şundan değiştirin:

group.com.mycompany.myapp

İçin

group.MYTEAMID.com.mycompany.myapp

ps: MYTEAMID'nizi developer.apple.com üyeliğinde bulabilirsiniz



3

Benim için çözüm, uygulama Bundle Identifier ve "group" sonrasındaki kısım için aynı tanımlayıcıyı kullanmamaktı.

Diyelim ki uygulama paketi kimliği "com.app.id", ardından "group.com.app.id" olarak grup kimliği sorunlara neden oluyor. "Group.com.app.id.something" olarak değiştirdikten sonra durur.


0

Xcode 8.1 Beta ile oluşturun ve aynı uyarıyı göreceksiniz, ancak değeri de alacaksınız.


0

İnitWithSuiteName'i kullanmaya çalışırken aynı sorunla karşılaşıyorum. Görünüşe göre bu Apple'dan gelen bir hata. Bulduğum tek çözüm / geçici çözüm, cihazın tüm ayarlarını sıfırlamak. Gidin Ayarlar -> Genel -> Reset -> Tüm Ayarları Sıfırla.

Bu, iPhone'daki herhangi bir içeriği silmez, yalnızca tüm ayarları siler. Ayarı sıfırladıktan sonra her şey yolunda gitti. Sana da yardımcı olup olmadığını bana bildirin.


0

Varsayılan olarak, Apple Settings App aracılığıyla uygulama tercihlerinizi görüntülemek ve düzenlemek için Settings.Bundle / Root.plist'i kullanıyorsanız, UserDefaults.standard sözlüğünü kullanır .

Dolayısıyla, Uygulama Grupları kullanıyorsanız ve bu varsayılanları / ayarları uygulamalarınız ve uzantınız içinde paylaşmak istiyorsanız, ayarlarınızın kapsayıcısını değiştirmeniz gerekir.

Adım 1: Settings.Bundle -> Root.plist'i açın

Settings.Bundle -> Root.plist'i açın

Adım 2: ApplicationGroupContainerIdentifier anahtarını ekleyin ve değer olarak İmzalama ve Yeteneklerinizde tanımlanan Uygulama-Grup-Kimliğinizi ayarlayın: group.xx.yy gibi görünür

ApplicationGroupContainerIdentifier için Anahtar / Değer çifti ekleyin

Bu adımı uyguladıktan sonra, Uygulama Ayarlarınız için varsayılan kapsayıcı artık UserDefaults.standard'dan (uygulamanızın Yolu) Paylaşılan Yol'a geçecektir.


-3

kullanarak APP uzantısına veri kaydetmeye çalıştığınızda bu sorunu yaşıyorsanız userDefault, belki bu kodu yazmışsınızdır:

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

Bu kod varsayılana sıfırlanır userDefault.

Aslında doğru kod şudur:

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

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


-10

Dan değiştir

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

-e

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

nnnnnnnnnTakım numaranız nerede , kodunuzu imzalamak için kullandığınız numara.

Xcode 8 GM ve iOS 10 GM altında test edildi ve çalıştı!


2
Ana uygulamada da yazmak için "nnnnnnnnnn.group.com.xxx.xxx" kullanmalı mıyız, yoksa uzantıdaki ekip kimliğini mi kullanmalıyız? Benim için, ekip kimliğini eklemek, uygulamamdaki "group.com.xxx.xxx" e kaydettiğim verilerin hiçbiri olmadan boş bir UserDeaults'u alıyor gibi görünüyor. Gerçekten iOS 10 güncellememi engellediği için bunun bir düzeltme olduğunu umuyorum.
timgcarlson

2
Veriler hala senkronize olmuyor. Hata ortadan kalkar.
Jeet

3
şu anda bu hatanın uygulamayı etkilemediği görülüyor. Ancak Takım kimliği eklenirse, hata eksiktir ancak veriler alınamaz.
scorpiozj

4
Bu iyi bir cevap değil. Başka bir şey koyarsınız ve anahtarı değiştirirken yardım olarak hatayı atlarsınız.
kokluch

Benim durumumda çalışmıyor, hata kayboluyor ancak veriler
alınmıyor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.