适用于 iOS 的 Xamarin facebook sdk 导致应用程序崩溃
Posted
技术标签:
【中文标题】适用于 iOS 的 Xamarin facebook sdk 导致应用程序崩溃【英文标题】:Xamarin facebook sdk for iOS causing app crash 【发布时间】:2017-11-02 20:36:41 【问题描述】:我在一个 xamarin 项目中使用适用于 ios 的 xamarin facebook sdk,其中包含共享代码和表单 UI 以及 Azure 移动应用后端。我正在尝试使用此 sdk 进行客户端流程登录,但无法做到。该应用程序在启动后立即在设备上崩溃。但是,当在 android 端使用类似的方法(使用 xamarin facebook sdk for android)时,一切都很好。我的代码基于 Adrian Hall 在他的 book 中提出的建议。它在模拟器中运行良好,并打开 Web 视图进行登录,但在设备上失败。以下是iOS项目中的代码:
public class iOSLoginProvider : ILoginProvider
public async Task LoginAsync(MobileServiceClient client)
var accessToken = await LoginFacebookAsync();
var zumoPayload = new JObject()
["access_token"] = accessToken
;
await client.LoginAsync("facebook", zumoPayload);
public UIViewController RootView => UIApplication.SharedApplication.KeyWindow.RootViewController;
private TaskCompletionSource<string> fbtcs;
public async Task<string> LoginFacebookAsync()
fbtcs = new TaskCompletionSource<string>();
var loginManager = new LoginManager();
loginManager.LogInWithReadPermissions(new[] "public_profile" , RootView, LoginTokenHandler);
return await fbtcs.Task;
private void LoginTokenHandler(LoginManagerLoginResult loginResult, NSError error)
if (loginResult.Token != null)
fbtcs.TrySetResult(loginResult.Token.TokenString);
else
fbtcs.TrySetException(new Exception("Facebook Client Flow Login Failed"));
我在 info.plist 中添加了要求权限,并将 Facebook 应用程序列入白名单。当我注释掉LoginFacebookAsync()
和LoginTokenHandler()
时,应用程序运行良好。它完美启动,虽然没有登录,因为代码不完整,但它确实启动了。但是,一旦这些方法在代码中,应用程序就无法启动。我也尝试在两台设备(iOS 9.3.5 和 iOS 10.3.3)和模拟器上编译。
更新 以下是来自设备日志的崩溃报告:
Incident Identifier: 8AEC3E39-8670-4C6B-A87E-9B2C014B1A6E
CrashReporter Key: ce11b8d9b291dbec2269487cc1ef04b41d8b4d35
Hardware Model: iPhone6,1
Process: fbloginios.iOS [646]
Path: /private/var/containers/Bundle/Application/CFE5351F-4DE4-4822-9B42-8C9CE909D905/fbloginios.iOS.app/fbloginios.iOS
Identifier: com.yourcompany.fbloginios
Version: 1.0 (1.0)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.yourcompany.fbloginios [543]
Date/Time: 2017-11-03 08:58:39.0078 -0400
Launch Time: 2017-11-03 08:58:38.5767 -0400
OS Version: iPhone OS 10.3.3 (14G60)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Application Specific Information:
abort() called
Filtered syslog:
None found
Last Exception Backtrace:
0 CoreFoundation 0x18a332fe0 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x188d94538 objc_exception_throw + 56
2 fbloginios.iOS 0x101596494 0x1000c8000 + 21816468
3 fbloginios.iOS 0x1015cfbd8 0x1000c8000 + 22051800
4 libobjc.A.dylib 0x188d95418 CALLING_SOME_+initialize_METHOD + 24
5 libobjc.A.dylib 0x188d95684 _class_initialize + 612
6 libobjc.A.dylib 0x188d9d4b4 lookUpImpOrForward + 228
7 libobjc.A.dylib 0x188da8478 _objc_msgSend_uncached + 56
8 fbloginios.iOS 0x1000ef02c 0x1000c8000 + 159788
9 fbloginios.iOS 0x1000effd0 0x1000c8000 + 163792
10 fbloginios.iOS 0x1017281a8 0x1000c8000 + 23462312
11 fbloginios.iOS 0x1000f00d4 0x1000c8000 + 164052
12 libdyld.dylib 0x18921d59c start + 4
【问题讨论】:
什么是异常/堆栈跟踪(本机和/或托管)? VS中的输出日志没有启动。它只说了两件事: *在“iPhone”上启动“fbloginios.iOS”... *该应用程序已终止。我已经用 mac 上的设备登录更新了这个问题。谢谢。 设备控制台:developer.xamarin.com/guides/ios/… 我已经用崩溃报告更新了这个问题。 您需要用符号表示该崩溃(但 看起来 像 nil/null 异常) 【参考方案1】:我已找到解决此问题的方法。问题在于 info.plist。使用 sdk 4.6.0 及以上版本 info.plist LSApplicationQueriesSchemes 标签中的要求仅为:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
我根据旧版本的 sdk 添加了要求,这导致了问题。我正在关注xamarin's official recipe,它仍然有旧代码。希望它可以帮助遇到类似问题的人。
【讨论】:
以上是关于适用于 iOS 的 Xamarin facebook sdk 导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms - 适用于 iOS 和 Android 的推送通知
适用于 iOS 的 Xamarin facebook sdk 导致应用程序崩溃
适用于 iOS 的 Xamarin Firebase 云消息传递(appDelegate)RemoteMessageDelegate 错误
如何使用适用于 Android 和 iOS 的 Xamarin 表单在特定频道上的 youtube 上上传视频?
Xamarin - 是不是有与适用于 Android 的 Photokit (iOS) 类似的框架,或者是获取图库中所有图像的文件流的好方法?