Группа приложений в Embedded Framework не имеет общего доступа

Я пытаюсь обмениваться данными между моим расширением iOS и WatchKit, используя общий модуль, содержащийся во встроенной структуре. Общий класс модуля имеет общие данные, хранящиеся в NSUserDefault, с группой приложений.

Однако то, что я пишу в общий ресурс группы приложений в приложении iOS, не отображается при чтении из расширения WatchKit.

У меня включены группы приложений с одинаковым идентификатором группы в обеих целях. iOS читает и записывает без ошибок, и если Watch записывает данные, они также считывают их без ошибок, но ни один из них не видит записи, сделанные другим.

Любые мысли о том, как решить, высоко ценятся.

public class ShareManager() {
    private let sharedKey = “kungFuShare"

    public var kungfuFighters:Array<KungFu> = [];

    public init() {
        readFromShare()
    }

    public func readFromShare() {
        let myData = NSUserDefaults(suiteName: "group.com.27feathers.kungfu"
        if let rawData: NSData = myData?.objectForKey(sharedKey) as? NSData
        {                     
            var myData: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(rawData);
            self.kungfuFighters = myData as? [KungFu] ?? []
        }
    }

    public func writeToShare() {
        let myData = NSUserDefaults(suiteName: "group.com.27feathers.kungfu")
        let saveData = NSKeyedArchiver.archivedDataWithRootObject(self.kungfuFighters)
        myData?.setObject(saveData, forKey: sharedKey)
        myData?.synchronize() // same behavior with or without this
    }
}

public class KungFu: NSObject, NSCoding {
    public var fighterName:String

    public init(fighterName:String) {
        self.fighterName = fighterName
    }

    required public init(coder: NSCoder) {
        self.fighterName = coder.decodeObjectForKey("fighterName")! as String
        super.init()
    }

    public func encodeWithCoder(coder: NSCoder) {
       coder.encodeObject(self.fighterName, forKey: "fighterName")
    }
}

person billd    schedule 08.02.2015    source источник


Ответы (1)


После упрощения до самого базового уровня простого сохранения Bool в NSUserDefaults в приложении iOS и последующей попытки чтения в Watch я обнаружил, что чтение все еще не удалось.

Это побудило меня зарегистрировать новую группу приложений в Центре разработчиков.

Затем я перешел на новую группу приложений для целей iOS и Watch. После использования новой группы приложений все работает! Теперь я могу писать в приложении для iPhone и читать в Watch.

Я понятия не имею, почему первая группа приложений не работала, поскольку я выполнил те же самые шаги при создании второй. Возможно, в этой бета-версии 6.2 Xcode есть что-то глючное.

person billd    schedule 08.02.2015
comment
Я нашел добавление группы приложений в первый раз невероятно громоздким и недокументированным. Вы должны отправить отчет об ошибке, я был бы рад продублировать его - person phillfarrugia; 08.02.2015