Проверка подлинности ios 8 + LiveSDK приводит к сбою приложения

У меня в магазине есть приложение, которое использует API LiveSDK для входа пользователя в OneDrive. Последний релиз был выпущен до выхода iOS8, но без проблем работает с iOS8.

Теперь я хочу отправить обновление (не относящееся к функциям OneDrive), и я использую xcode 6.1.1, но, тестируя приложение, я заметил, что каждый раз, когда пользователь проходит аутентификацию в OneDrive, приложение вылетает, как только возвращается из просмотра сегмента или с обратной стороны. на главный вид.

Мне удалось изолировать проблему в этой строке, добавленной в viewDidLoad:

self.liveClient = [[LiveConnectClient alloc] initWithClientId:APP_CLIENT_ID
                                                             delegate:self
                                                            userState:@"initialize"];

и я действительно следовал основным инструкциям по входу в систему, которые можно найти здесь:

http://msdn.microsoft.com/en-us/library/dn631822.aspx

Шаги для воспроизведения проблемы (как на устройстве, так и на симуляторе) следующие:

а) приложение запускается б) нажмите кнопку входа в облачную службу, которая запустит контроллер перевернутого вида в) в) войдите в OneDrive с кодом, предоставленным MS d) вернитесь к основному контроллеру e) CRASH!

След состоит в следующем:

#########################################################
*** First throw call stack:
(
    0   CoreFoundation                      0x028dd1e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x026598e5 objc_exception_throw + 44
    2   CoreFoundation                      0x0297a243 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
    3   CoreFoundation                      0x028cd50b ___forwarding___ + 1019
    4   CoreFoundation                      0x028cd0ee _CF_forwarding_prep_0 + 14
    5   CloudFella                          0x0015c867 -[LiveConnectClientCore dealloc] + 48
    6   libobjc.A.dylib                     0x0266a692 _ZN11objc_object17sidetable_releaseEb + 268
    7   libobjc.A.dylib                     0x0266baeb -[NSObject release] + 25
    8   CloudFella                          0x00158af1 -[LiveConnectClient dealloc] + 44
    9   libobjc.A.dylib                     0x0266a692 _ZN11objc_object17sidetable_releaseEb + 268
    10  libobjc.A.dylib                     0x02669e81 objc_release + 49
    11  libobjc.A.dylib                     0x02669e3e objc_storeStrong + 39
    12  CloudFella                          0x00157b9d -[CFFlipsideViewController .cxx_destruct] + 249
    13  libobjc.A.dylib                     0x026582d4 _ZL27object_cxxDestructFromClassP11objc_objectP10objc_class + 128
    14  libobjc.A.dylib                     0x0265824f object_cxxDestruct + 20
    15  libobjc.A.dylib                     0x0266327a objc_destructInstance + 48
    16  libobjc.A.dylib                     0x026632ab object_dispose + 20
    17  UIKit                               0x01433d1a -[UIViewController dealloc] + 1854
    18  UIKit                               0x01430915 -[UIViewController release] + 89
    19  libobjc.A.dylib                     0x02669e97 objc_release + 71
    20  libobjc.A.dylib                     0x02656bf0 objc_setProperty_nonatomic + 48
    21  UIKit                               0x01a6167d -[_UIViewControllerOneToOneTransitionContext _setFromViewController:] + 47
    22  UIKit                               0x01a61490 -[_UIViewControllerOneToOneTransitionContext dealloc] + 43
    23  libobjc.A.dylib                     0x0266a692 _ZN11objc_object17sidetable_releaseEb + 268
    24  libobjc.A.dylib                     0x0266baeb -[NSObject release] + 25
    25  UIKit                               0x01a60834 -[_UIViewControllerTransitionContext completeTransition:] + 135
    26  UIKit                               0x01a7a5b1 -[UIViewControllerBuiltinTransitionViewAnimator transitionViewDidComplete:fromView:toView:removeFromView:] + 50
    27  UIKit                               0x01416137 -[UITransitionView notifyDidCompleteTransition:] + 345
    28  UIKit                               0x01415e61 -[UITransitionView _didCompleteTransition:] + 1333
    29  UIKit                               0x014181b7 -[UITransitionView _transitionDidStop:finished:] + 107
    30  UIKit                               0x013666dc -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 267
    31  UIKit                               0x013669c8 -[UIViewAnimationState animationDidStop:finished:] + 80
    32  QuartzCore                          0x00fd6bb4 _ZN2CA5Layer23run_animation_callbacksEPv + 304
    33  libdispatch.dylib                   0x0326b4d0 _dispatch_client_callout + 14
    34  libdispatch.dylib                   0x03259726 _dispatch_main_queue_callback_4CF + 340
    35  CoreFoundation                      0x0294243e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
    36  CoreFoundation                      0x028835cb __CFRunLoopRun + 1963
    37  CoreFoundation                      0x028829d3 CFRunLoopRunSpecific + 467
    38  CoreFoundation                      0x028827eb CFRunLoopRunInMode + 123
    39  GraphicsServices                    0x0301f5ee GSEventRunModal + 192
    40  GraphicsServices                    0x0301f42b GSEventRun + 104
    41  UIKit                               0x01316f9b UIApplicationMain + 1225
    42  CloudFella                          0x000eeea6 main + 94
    43  libdyld.dylib                       0x034af6d9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
#

Если я войду в другие облачные сервисы, доступные в моем приложении (Google drive, dropbox, evernote), у меня не возникнет никаких проблем.

Проблема возникает как со старым API LiveSDK (который включен в текущую хорошую версию в магазине), так и с самой новой сборкой (2 месяца), добавленной в приложение для решения некоторых проблем проверки, описанных здесь: https://github.com/liveservices/LiveSDK-for-iOS/issues/43

Я подозреваю, что при переходе от Xcode 5 к xcode 6 что-то изменилось в параметрах здания, что вызывает проблему, однако я не уверен, где проблема и как ее обойти.

В качестве теста я вынудил собрать приложение только для 32-битных архитектур, но оно также рухнуло: это ожидалось, поскольку API LiveSDK совместим с 64-битной архитектурой, но, конечно, хотел попробовать...

Любая помощь с благодарностью.

Спасибо дом

1 ответ

Решение

Оказывается, это может быть действительно ошибкой в ​​liveSDK.

Открыл следующий выпуск:

https://github.com/liveservices/LiveSDK-for-iOS/issues/53

и другой пользователь API ( https://github.com/sylverb), столкнувшийся с той же проблемой, дал мне хороший обходной путь, пока ошибка не будет исправлена:

"Это было сбой из-за"[authRefreshRequest cancel];"в методе выпуска LiveConnectClientCore.m . У меня было временное исправление, добавив"self"в эту строку в методе refreshSessionWithDelegate (также в LiveConnectClientCore.m):

 self.authRefreshRequest = [[[LiveAuthRefreshRequest alloc] initWithClientId:_clientId
                                                                     scope:_scopes
                                                              refreshToken:refreshToken
                                                                  delegate:delegate
                                                                 userState:userState
                                                                clientStub:self]
                          autorelease];

"

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

Другие вопросы по тегам