【问题标题】:Error '_BSMachError: port 1607; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND" in Cordova app on iOS 10错误'_BSMachError:端口1607; (os/kern) 无效功能 (0x14)“无法在 iOS 10 上的 Cordova 应用程序中插入 COPY_SEND”
【发布时间】:2017-02-02 06:11:34
【问题描述】:

在我使用 Xcode 7.3.0 构建我的 Cordova 应用程序之前一切正常,但在我使用 Xcode 8 构建相同的应用程序后,它只在 iOS 10 设备上开始崩溃,只要我从 Portrait 更改方向到 Landscape,因为它在 iOS 9.3.1 上仍然可以正常工作。 在调试器中,我得到以下日志:

2016-09-24 18:14:41.212470 MyApp[2542:1028606] [Common] _BSMachError: port 1607; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
2016-09-24 18:14:41.613460 MyApp[2542:1028606] [Common] _BSMachError: port 1607; (os/kern) invalid name (0xf) "Unable to insert COPY_SEND"
2016-09-24 18:14:41.613947 MyApp[2542:1028606] [Common] _BSMachError: port 1607; (os/kern) invalid name (0xf) "Unable to insert COPY_SEND"
2016-09-24 18:14:41.614469 MyApp[2542:1028606] [Common] _BSMachError: port 1607; (os/kern) invalid name (0xf) "Unable to deallocate send right"
Message from debugger: Terminated due to memory issue

下面是堆栈跟踪

警告:无法从 dyld 共享缓存加载任何 Objective-C 类信息。这将显着降低可用类型信息的质量。

* thread #1: tid = 0xfc80c, 0x00000001000cff00 MyApp`-[MainViewController didReceiveMemoryWarning](self=0x0000000119e0da60, _cmd="didReceiveMemoryWarning") + 40 at MainViewController.m:59, stop reason = breakpoint 7.1

  * frame #0: 0x00000001000cff00 MyApp`-[MainViewController didReceiveMemoryWarning](self=0x0000000119e0da60, _cmd="didReceiveMemoryWarning") + 40 at MainViewController.m:59
    frame #1: 0x0000000192e29964 UIKit`+[UIViewController _traverseViewControllerHierarchyWithDelayedRelease:] + 432
    frame #2: 0x0000000192d5a0f4 UIKit`-[UIApplication _performMemoryWarning] + 232
    frame #3: 0x0000000192d5a294 UIKit`-[UIApplication _receivedMemoryNotification] + 140
    frame #4: 0x0000000100a7d21c libdispatch.dylib`_dispatch_client_callout + 16
    frame #5: 0x0000000100a893a8 libdispatch.dylib`_dispatch_continuation_pop + 708
    frame #6: 0x0000000100a97fa8 libdispatch.dylib`_dispatch_source_latch_and_call + 204
    frame #7: 0x0000000100a7f304 libdispatch.dylib`_dispatch_source_invoke + 836
    frame #8: 0x0000000100a82060 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 652
    frame #9: 0x000000018cc29f2c CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    frame #10: 0x000000018cc27b18 CoreFoundation`__CFRunLoopRun + 1660
    frame #11: 0x000000018cb56048 CoreFoundation`CFRunLoopRunSpecific + 444
    frame #12: 0x000000018e5d9198 GraphicsServices`GSEventRunModal + 180
    frame #13: 0x0000000192b2f818 UIKit`-[UIApplication _run] + 684
    frame #14: 0x0000000192b2a550 UIKit`UIApplicationMain + 208
    frame #15: 0x00000001000c7ecc MyApp`main(argc=1, argv=0x000000016fd3fab8) + 76 at main.m:32
    frame #16: 0x000000018bb385b8 libdyld.dylib`start + 4

我在跑步

  • Xcode 8
  • Cordova 6.3.0 (iOS 4.1.0)
  • iOS 10 iPhone 6

请帮忙。

【问题讨论】:

  • 我找到了问题的根本原因......它添加到项目中的新 svg 文件(大小 > 1 mb)在横向模式下创建了问题。我不确定问题出在 iOS Web View 组件还是 svg 文件上,因为对于较小的 svg,它工作得非常好。
  • 根本原因(根据您粘贴的堆栈跟踪)是您的应用程序使用了太多内存,并且在请求时没有释放足够的内存。这似乎也与您对.svg 文件大小的评论一致。您应该在您的应用委托中实现 didReceiveMemoryWarning 选择器以释放未使用的对象。
  • 在 AlertController 的处理程序内调用 popViewController() 时出现此错误。将调用 popViewController() 的代码异步调度到主线程解决了这个问题,因为在调用 pop 之前清理了警报控制器。我添加此评论是因为收到此错误的其他人可能是由其他原因引起的,而不是为您造成的。

标签: objective-c cordova ios10 xcode8


【解决方案1】:

我在调试器中收到“无效功能 (0x14)“无法插入 COPY_SEND”消息,这将阻止应用启动约 10 秒。

我在已从项目中删除但仍显示在断点导航器中的文件中设置了断点(文件名以红色显示)。

我删除了所有断点,此后再也没有看到错误消息。

【讨论】:

  • 我知道这听起来很奇怪,但这确实起到了作用。刚刚删除了所有断点和 BAM!一切都突然好起来了!
  • 也适合我。注意代码,如果你得到 0x14,这个就是你的解决方案。
  • 为我工作 :)
  • 收到该错误:[Common] _BSMachError: port c203; (os/kern) 无效功能 (0x14) “无法插入 COPY_SEND”。删除断点修复了它。
  • 这是一个狡猾的解决方案,但它对我有用!请修理这个苹果!
【解决方案2】:

我在 iOS10.0 测试阶段遇到了同样的问题,而且它似乎仍然存在于 Xcode v11 中。

实际上有两个单独的错误:


1. 首先,正如 Avaan 评论的那样,您必须在 info.plist 中设置所有隐私使用。我相信这是导致您崩溃的原因。

从iOS10.0开始,必须明确告诉用户你将使用手机的哪些功能,以及出于什么原因。


2.关于错误:

BSMachError:端口 1607; (os/kern) 无效能力 (0x14) “无法 插入 COPY_SEND"

我用这个小解决方法解决了这个错误:

  1. 进入项目设置/常规 -> 部署信息,检查所有方向。

  1. 构建并运行,界面应根据设备方向旋转。
  2. 撤消您刚刚执行的操作(取消选中您不需要的方向)。再次构建并运行,错误不应再出现。

希望对你有帮助

【讨论】:

  • 哇...我没想到它会起作用,但它确实起作用了。 +1 编辑:XCode v8.1
  • +1 很好,第二步解决了我的错误。最初检查了所有方向,然后我只保留了肖像,然后构建并运行,然后再次检查所有方向。我正在使用 WKWebView
  • 对我不起作用:(。仍然崩溃。Xcode 11.1。在 iOS 11.4.1 硬件上运行。问题出现在应用程序启动时,我在它完成启动之前旋转。它没有发生在 Xcode 下运行/调试时,仅在独立时。我猜这与“无法插入 COPY_SEND”有关,因为当我在 Xcode 下运行时,我会看到该消息。
  • 我使用的是 Xcode 9.4.1。我已经尝试了所有这些,但我仍然得到这个奇怪的错误。我没有崩溃,我可以将任何媒体项目发布到我的聊天表中。还有其他建议吗?
  • 这对苹果来说太可笑了。
【解决方案3】:

我在执行 Core Data 重置时准确地收到了这个错误,但上述解决方案都没有工作或与我的情况相关。原来是代码发生在 UIAlert 的操作中,需要推送到主线程中。通过此处找到的解决方案 - Error _BSMachError: (os/kern) invalid capability (20) after receiving remote notification on CloudKit record addition - 并在下面针对 Swift 4 进行了更新:

alert.addAction(UIAlertAction(title: "Reset Now", style: UIAlertAction.Style.default, handler: { action in
            DispatchQueue.main.async {
                // Core Data reset code goes here...
            }
}))

【讨论】:

    【解决方案4】:

    对我来说原因是[myTextField becomeFirstResponder];放置在初始 viewWillAppear 线程结束之后。

    【讨论】:

      【解决方案5】:

      Xcode 11.5 引入了一个新的无效功能:[textField resignFirstResponder] 以及难以理解的添加 "Unable to insert COPY_SEND"

      在装有 iOS 9.3.6 的 iPad 上:

      2020-05-23 20:35:01.576 _BSMachError: (os/kern) invalid capability (20)
      2020-05-23 20:35:01.580 _BSMachError: (os/kern) invalid name (15)
      

      在装有 iPadOS 13.5 的 iPad 上:

      2020-05-23 20:38:49 [Common] _BSMachError: port 12f0f; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
      

      在装有 iOS 13.5 的 iPhone 上:

      2020-05-23 20:43:34 [Common] _BSMachError: port d503; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
      

      [textField resignFirstResponder] 不能再使用了。请参阅How to resign first responder from text field when user tap elsewhere? 了解替代方案。

      【讨论】:

      • 当我想用 Xcode 11.5 调用 textField.becomeFirstResponder 时遇到同样的问题。这是一个错误还是我们真的需要选择一个替代方案?
      • 您将不得不使用替代方案。请参阅我在回复的最后一行中发布的链接。
      【解决方案6】:

      我遇到了类似的问题(查看my question on SO),发现我的 UI 已经创建了另一个自身的实例,同时呈现了这两个实例。

      如果您还没有找到解决问题的方法,我建议您使用 Debug View Hierarchy-tool...也许您遇到了和我一样的问题。

      祝你好运!

      【讨论】:

        【解决方案7】:

        我在添加没有匹配字符串的 Info.plist 键时得到了这个。在我的例子中,我添加了没有描述的 NSLocationAlwaysAndWhenInUseUsageDescription。访问权限对话框会导致发生此错误。添加字符串值解决了这个问题。 iOS11.

        【讨论】:

        • 原来这是我的问题。很奇怪吧?谢谢!
        【解决方案8】:

        我收到此错误,尝试了此线程中的所有解决方案,但没有任何效果。我修复了一个看似无关的 UIColor(颜色超出范围)错误,并且这个 COPY_SEND 问题也消失了。

        具体的 UIColor 错误是 UIColorBreakForOutOfRangeColorComponents。

        【讨论】:

        • 为我工作。谢谢。
        【解决方案9】:

        事实证明 - 如果您调用 EventKit、ContactsKit、麦克风、相机等需要权限而没有 Info.plist 键的应用程序将崩溃,例如
        隐私 - 使用时的位置 使用说明
        隐私 - 媒体库使用说明

        我从https://forums.developer.apple.com/thread/48959 线程得到了这个答案

        另外,检查你是否忘记禁用僵尸。

        【讨论】:

        • 您好 NSSam,我尝试了所有选项,但没有解决问题。崩溃仅发生在真实设备上,在模拟器上运行良好,但会发出大量警告。
        • 尝试添加 NSPhotoLibraryUsageDescription。
        【解决方案10】:

        我在使用 iPhone 11 pro 模拟器时突然遇到了这个错误,而它在其他任何地方(其他模拟器和实际设备)都可以正常工作。

        我的解决方案是通过选择硬件 > 擦除所有内容和设置来重置模拟器...

        希望它能在同样的情况下帮助其他人。

        【讨论】:

          【解决方案11】:

          对我来说是我的 plist 上的翻译。仔细检查您的 plist 是否已本地化,是否翻译了正确的隐私文本。

          我花了好几个小时才找到它... 我一直遇到 SFSafariView 布局问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-04-04
            • 2018-12-07
            • 1970-01-01
            • 2015-12-19
            相关资源
            最近更新 更多