启动 CMMotionActivityManager 给 SIGABRT
Posted
技术标签:
【中文标题】启动 CMMotionActivityManager 给 SIGABRT【英文标题】:Starting CMMotionActivityManager gives SIGABRT 【发布时间】:2017-07-01 03:50:49 【问题描述】:我正在尝试检测在 iPhone 6s 上运行的本机 Xamarin.ios 应用程序中的运动活动。我是这样启动管理器的:
var _manager = new CMMotionActivityManager();
_manager.StartActivityUpdates(new NSOperationQueue(), (activity) =>
// do something with activity
);
当我运行该应用程序时,它因以下错误而失败:
2017-07-01 11:38:51.722 iosapp[1095:318780] 严重:本机 堆栈跟踪:
2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:0 libmonosgen-2.0.dylib 0x00000001007d5920 mono_handle_native_crash + 260 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:1 libsystem_platform.dylib 0x000000018ca1131c _sigtramp + 52 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:2 libsystem_kernel.dylib 0x000000018c9484d0 + 100 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:3 libsystem_kernel.dylib 0x000000018c9484fc system_set_sfi_window + 0 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:4 TCC 0x000000018fb64498 + 0 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:5 TCC 0x000000018fb643b8 + 0 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:6 TCC 0x000000018fb673d4 + 340 2017-07-01 11:38:51.813 iosapp[1095:318780] 严重:7 libxpc.dylib 0x000000018ca46f38 + 80 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:8 libxpc.dylib 0x000000018ca46ea8 + 40 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:9 libdispatch.dylib 0x000000018c80a9a0 + 16 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:10 libdispatch.dylib 0x000000018c8190d4 + 644 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:11 libdispatch.dylib 0x000000018c81aa50 + 540 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:12 libdispatch.dylib 0x000000018c81a7d0 + 124 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:13 libsystem_pthread.dylib 0x000000018ca13100 _pthread_wqthread + 1096 2017-07-01 11:38:51.814 iosapp[1095:318780] 严重:14 libsystem_pthread.dylib 0x000000018ca12cac start_wqthread + 4 2017-07-01 11:38:51.814 iosapp[1095:318780] 关键: ==================================================== =============== 执行本机代码时收到 SIGABRT。这通常表示致命 单声道运行时或您使用的本机库之一中的错误
应用程序。
我实例化管理器的方式有问题吗?
【问题讨论】:
【参考方案1】:可能需要更多代码,但请尝试使用主 NSOperationQueue
public void StartMotionUpdates (Action<ActivityType> handler)
motionActivityMgr.StartActivityUpdates (NSOperationQueue.MainQueue, ((activity) =>
handler (ActivityDataManager.ActivityToType (activity));
));
注意*我在构造函数中初始化
motionActivityMgr = new CMMotionActivityManager ();
我要离开样本:
https://github.com/xamarin/ios-samples/blob/master/ios8/MotionActivityDemo/MotionActivityDemo/ActivityDataManager.cs
【讨论】:
想通了。看我的回答。谢谢【参考方案2】:解决了。这是 info.plist 的权限问题。
来自iOS Core Motion docs:
重要事项 在 iOS 10.0 或之后链接的 iOS 应用程序必须包含使用情况 它的 Info.plist 文件中的描述键,用于它的数据类型 需要。未能包含这些键将导致应用程序崩溃。到 具体访问运动和健身数据,它必须包括 NSMotionUsageDescription。
在我将这个键包含在 info.plist 中之后:
<key>NSMotionUsageDescription</key>
<string>MotionActivity App needs Motion Access</string>
它就像一个魅力。
【讨论】:
以上是关于启动 CMMotionActivityManager 给 SIGABRT的主要内容,如果未能解决你的问题,请参考以下文章