Snapchat LoginKit导致致命错误(Swift)

时间:2019-05-07 05:22:50

标签: swift debugging cocoapods snapchat

我正在尝试使用Snapchat的Bitmoji和Login SDK来允许访问用户的Bitmoji头像。但是,调用SCSDKLoginClient.login()时,应用程序立即崩溃。

堆栈跟踪如下:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000107ab16fb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x0000000107055ac5 objc_exception_throw + 48
    2   CoreFoundation                      0x00000001079ffddc _CFThrowFormattedException + 194
    3   CoreFoundation                      0x0000000107b1dc31 -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] + 321
    4   CoreFoundation                      0x0000000107aad3db +[NSDictionary dictionaryWithObjects:forKeys:count:] + 59
    5   SCSDKLoginKit                       0x0000000106f1e5e5 SCSDKLoginKit + 5605
    6   SCSDKLoginKit                       0x0000000106f28982 SCSDKLoginKit + 47490
    7   SCSDKLoginKit                       0x0000000106f28189 SCSDKLoginKit + 45449
    8   MeetUp                              0x0000000106398df6 $s6MeetUp10ImageUtilsC16getBitmojiAvatar2onSo7UIImageCSo16UIViewControllerC_tFZ + 358
    9   MeetUp                              0x00000001063a8632 $s6MeetUp27CreateProfileViewControllerC11fromBitmojiyySo13UIAlertActionCF + 274
    10  MeetUp                              0x00000001063ac79c $sTA + 28
    11  MeetUp                              0x00000001063a0462 $sSo13UIAlertActionCIegg_ABIeyBy_TR + 66
    12  UIKitCore                           0x000000010cf3e1d9 -[UIAlertController _invokeHandlersForAction:] + 105
    13  UIKitCore                           0x000000010cf3eb6d __103-[UIAlertController _dismissAnimated:triggeringAction:triggeredByPopoverDimmingView:dismissCompletion:]_block_invoke.461 + 16
    14  UIKitCore                           0x000000010d165ec4 -[UIPresentationController transitionDidFinish:] + 1325
    15  UIKitCore                           0x000000010d169f7c __56-[UIPresentationController runTransitionForCurrentState]_block_invoke.425 + 183
    16  UIKitCore                           0x000000010d2749dc -[_UIViewControllerTransitionContext completeTransition:] + 102
    17  UIKitCore                           0x000000010dd0cf3b -[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:] + 847
    18  UIKitCore                           0x000000010dce08ff -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 343
    19  UIKitCore                           0x000000010dce0f21 -[UIViewAnimationState animationDidStop:finished:] + 293
    20  UIKit                               0x000000012a60ba91 -[UIViewAnimationStateAccessibility animationDidStop:finished:] + 118
    21  UIKitCore                           0x000000010dce0fd5 -[UIViewAnimationState animationDidStop:finished:] + 473
    22  UIKit                               0x000000012a60ba91 -[UIViewAnimationStateAccessibility animationDidStop:finished:] + 118
    23  QuartzCore                          0x000000010c080de7 _ZN2CA5Layer23run_animation_callbacksEPv + 321
    24  libdispatch.dylib                   0x000000010b548db5 _dispatch_client_callout + 8
    25  libdispatch.dylib                   0x000000010b556080 _dispatch_main_queue_callback_4CF + 1540
    26  CoreFoundation                      0x0000000107a188a9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
    27  CoreFoundation                      0x0000000107a12f56 __CFRunLoopRun + 2310
    28  CoreFoundation                      0x0000000107a12302 CFRunLoopRunSpecific + 626
    29  GraphicsServices                    0x00000001119192fe GSEventRunModal + 65
    30  UIKitCore                           0x000000010d84bba2 UIApplicationMain + 140
    31  MeetUp                              0x00000001063a4c7b main + 75
    32  libdyld.dylib                       0x000000010b5bd541 start + 1
    33  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

由于SnapSDK需要修改Plist,因此这也是我的info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>login</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>com.MYNAME.APPNAME</string>
                <string>APPNAME</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>SCSDKScopes</key>
    <array>
        <string>https://auth.snapchat.com/oauth2/api/user.external_id</string>
        <string>https://auth.snapchat.com/oauth2/api/user.display_name</string>
        <string>https://auth.snapchat.com/oauth2/api/user.bitmoji.avatar</string>
    </array>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>NSCameraUsageDescription</key>
    <string>Allows access to uplaod a profile picture from your camera</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>SCSDKRedirectURL</key>
    <string>APPNAME://app</string>
    <key>SCSDKClientId</key>
    <string>***PRIVATE_KEY***
</string>
    <key>LSApplicationQueriesSchenes</key>
    <array>
        <string>itms-apps</string>
        <string>snapchat</string>
        <string>bitmoji-sdk</string>
        <string>APPNAME</string>
    </array>
</dict>
</plist>

当然还有我的实际函数调用:

SCSDKLoginClient.login(from: view) { (success, error) in
    guard error == nil else {
        fatalError(error?.localizedDescription ?? "")
    }

    print("success")
}

所有SDK都包含在嵌入式二进制文件和链接二进制文件和框架中

任何使它正常工作的建议都将受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且能够解决它。这是我的工作Info.plist。

注意:必须用您选择的某些值替换exampleCFBundleURLSchemes下的SCSDKRedirectUrl。我不确定这是否重要,但我们保留所有字母数字字符。您还必须通过开发者门户网站的客户ID替换REPLACEME

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>example</string>
            </array>
        </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
    </array>
    <key>SCSDKClientId</key>
    <string>REPLACEME</string>
    <key>SCSDKRedirectUrl</key>
    <string>example://oauth2</string>
    <key>SCSDKScopes</key>
    <array>
        <string>https://auth.snapchat.com/oauth2/api/user.display_name</string>
        <string>https://auth.snapchat.com/oauth2/api/user.external_id</string>
        <string>https://auth.snapchat.com/oauth2/api/user.bitmoji.avatar</string>
    </array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>snapchat</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</dict>
</plist>

希望这对您有用!