【问题标题】:Starting CMMotionActivityManager gives SIGABRT启动 CMMotionActivityManager 给 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。这通常表示致命 单声道运行时或您使用的本机库之一中的错误

应用程序。

我实例化管理器的方式有问题吗?

【问题讨论】:

    标签: c# xamarin xamarin.ios core-motion


    【解决方案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>
    

    它就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 2014-06-15
      • 2012-06-01
      相关资源
      最近更新 更多