GameKit на 4.0 не готов для прайм-тайма?Остановка рекламных услуг - PullRequest
3 голосов
/ 09 июля 2010

Приложения Gamekit, работающие под 4.0, неправильно обрабатывают удаление объектов GKSession. Запуск под 3.1.3 или 3.2, если одноранговый узел отключается и сеанс очищается (как в демонстрациях Apple):

[gkSession disconnectFromAllPeers];
[gkSession setAvailable:NO];
[gkSession setDelegate:nil];
[gkSession setDataReceiveHandler:nil withContext:nil];

тогда другие одноранговые узлы получают изменения состояния, и представление таблицы одноранговых узлов может быть обновлено.

В моем приложении один узел запускается как сервер, а другой запускается как клиент. Клиент запрашивает подключение к серверу, и имя клиента появляется в списке игроков на сервере. Если сервер решает принять запрос, соединение сеанса установлено, и они могут играть в игру. Однако если клиент завершает работу до того, как сервер примет запрос, он очищает сеанс (как указано выше) и клиент в ответ исчезает из списка одноранговых серверов (когда он получает изменение состояния). Это прекрасно работает на 3.1–3.2

Когда вы запускаете одно и то же приложение, работающее под 4.0, сервер и клиент выдают ошибку, и одноранговым узлам требуется очень много времени, чтобы получить изменение состояния, и когда они это делают, приложение вылетает без ошибок (даже с NSZombieEnabled = ДА в аргументах сборки). Сервер никогда не получает сообщение «изменение состояния» от клиента. Вместо этого выдаются следующие ошибки:

Thu Jul  8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: BTLocalDeviceRemoveData: 60 byte key, 18 byte value
Thu Jul  8 23:27:26 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE
Thu Jul  8 23:27:26 unknown com.apple.mDNSResponder[18] <Notice>: Call to BTLocalDeviceRemoveData failed with error 7
Thu Jul  8 23:13:39 unknown mDNSResponder[18] <Error>: external_stop_advertising_service:   18 00Z1Tud0A\\.\\.Tonberry\M-b\M^@\M^Ys\\032iPhone._1htnu3uko0uvsp._udp.local. TXT txtvers=1\M-B\M-&state=A
Thu Jul  8 23:13:39 unknown MobileBluetooth[29] <Notice>: BTLocalDeviceRemoveData - BT_ERROR_INVALID_HANDLE

С чем я считаю ключевая ошибка:

Tue Jul 13 21:04:50 Tonberry com.apple.mDNSResponder[21] <Notice>: Call to BTDiscoveryAgentStopScan failed with error 400

Похоже, сеанс не делается недоступным (ошибка при остановке рекламы службы). Фактическая авария:

Thread 3 Crashed:
0   GameKitServices                 0x06352f90 gckSessionChangeStateCList + 411
1   GameKitServices                 0x0635b49c gckSessionRecvProc + 1474
2   libSystem.B.dylib               0x981c181d _pthread_start + 345
3   libSystem.B.dylib               0x981c16a2 thread_start + 34

Я подал ошибку с полным ходом рассмотрения заявки. Само приложение готово и было почти готово к отправке и работает довольно хорошо в соответствии с 3.1.3 / 3.2, но с текущим состоянием Gamekit в 4.0 я больше не могу отправить его. Очень разочарован и очень надеюсь, что этот отчет об ошибке поможет в будущем. Если кто-то поймет эту ошибку или что я могу сделать неправильно, я буду чрезвычайно признателен.

Пожалуйста, помогите, если можете. Я собираюсь добавить полотенце в это приложение, и оно так близко.

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Для тех, кто ищет помощь по этому вопросу, я нашел обходной путь для проблем на 4.0.x (4.1 исправляет сбои, но не время отключения).Просто автоматически примите все.Когда кто-то запрашивает соединение GameKit с connectToPeer :, просто примите его.Не предоставляйте пользователю возможность выбрать его.Отключение однорангового узла от установленного соединения немедленно уведомляет сервер.Если вы оставите их только в состоянии «доступно», то при выходе из соединения произойдет сбой сервера.Подключайтесь раньше и принимайте часто!

1 голос
/ 20 июля 2010

Мое предложение будет заключаться в том, чтобы использовать окончательные предварительные версии 4.1 и сообщать о «новой» проблеме (либо повторно открыть существующую ошибку как не исправленную, либо создать новую). ИМХО, это ваш лучший выбор, чтобы полностью решить проблему до финального релиза или приличной работы от Apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...