swift - Snapchat LoginKit 导致 fatal error (Swift)

标签 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 均包含在嵌入式二进制文件和链接二进制文件和框架中

非常感谢任何使其正常工作的建议。谢谢。

最佳答案

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

注意:您必须将 CFBundleURLSchemesSCSDKRedirectUrl 下的 example 替换为您选择的某个值。我不确定这是否重要,但我们保留了所有字母数字字符。您还必须将 REPLACEME 替换为开发者门户中的客户端 ID。

<?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>

希望这对您有用!

关于swift - Snapchat LoginKit 导致 fatal error (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56016012/

相关文章:

swift - 如何使用 loadHTMLString() 实现 WKWebView 历史记录的滑动手势

ios - UICollectionView 内的 UITableView -> [错误] 展开 tableView 时意外发现 nil

c - 如何调试 0xc0000417 退出代码的原因

c++ - 在特定对象上调用的成员函数上设置断点

xcode - 我应该为 Pods.xcproj 设置 "update to recommended settings",Xcode 9

swift - 在带有 '-' 的 Swift 中模糊使用运算符 'abs()'

ios - 忽略 "Warning: Attempt to present ... while presentation in progress"是否安全?

visual-studio-2008 - C7兼容和程序数据库之间的区别

ios - 有没有办法在没有代码的情况下制作 cocoa pod ,只是 repo 中已经编译的.framework?

ios - 在 Swift 中使用 CocoaPods 时忽略编译警告