Я включил группы приложений для своего приложения и его расширение iMessage, чтобы я мог делиться данными между ними. Я реализовал синхронизацию NSUserDefaults в обоих кодах. Тем не менее, я не нашел хороший способ проверить синхронизацию.Тестирование синхронизации NSUserDefaults в группах приложений в симуляторе
В одном из ViewControllers для моего основного приложения, я добавил этот:
var defaults = NSUserDefaults(suiteName: "group.com.myAppGroup")
defaults?.setObject(movieTitles, forKey: "movieTitles")
defaults?.synchronize()
print("synchronizing movieTitles as \(movieTitles)")
В расширения Шеззаде, я добавил это:
var defaults = NSUserDefaults(suiteName: "group.com.myAppGroup")
defaults?.synchronize()
// Check for null value before setting
if let movieTitles = defaults!.stringForKey("movieTitles") {
print("synchronized movieTitles from \(movieTitles)")
}
else {
print("Cannot synchronize movieTitles")
}
Когда я запустить приложение в Симуляторе, я вижу в консоли, что синхронизация происходит. Когда я запускаю расширение в Simulator, я вижу на консоли, что он пытается синхронизировать (и не работает, потому что приложение не работает, поэтому синхронизация не синхронизируется). Всякий раз, когда я пытаюсь запустить обе цели одновременно в симуляторе, я получаю эту аварию для расширения Шеззадя:
libsystem_kernel.dylib`mach_msg_trap:
0x109d2b380 <+0>: movq %rcx, %r10
0x109d2b383 <+3>: movl $0x100001f, %eax ; imm = 0x100001F
0x109d2b388 <+8>: syscall
-> 0x109d2b38a <+10>: retq
0x109d2b38b <+11>: nop
Я не достаточно опытным при отладке, чтобы знать, что это значит. На последней строке также отображается (lldb)
.
Любая помощь приветствуется. Как еще я могу проверить свой код синхронизации?