[iOS] dyld: warning: could not load inserted library

最近在尝试引入单元测试 XCTest,一开始使用的是个人开发者账号写了一个单元测试的 demo,正常调试或者运行都没有问题,但是在运行单元测试的时候,遇见了很奇怪的错误。

先报一下环境,mac OS 10.14.6,XCode 11.3.1,iOS 13.3.1。

运行单元测试时,APP 正常启动,但是 XCode 控制台出现如下提示,XCode 上方的状态文本一直显示 Testing,过一两分钟后 APP 自动停止运行。

// APP 启动后出现
dyld: warning: could not load inserted library '/private/var/containers/Bundle/Application/4F5376E0-75DA-44FD-A058-B92BFA10AACF/NSNotificationCenterDemo.app/Frameworks/libXCTestBundleInject.dylib' into hardened process because no suitable image found.  Did find:
	/private/var/containers/Bundle/Application/4F5376E0-75DA-44FD-A058-B92BFA10AACF/NSNotificationCenterDemo.app/Frameworks/libXCTestBundleInject.dylib: code signature invalid for '/private/var/containers/Bundle/Application/4F5376E0-75DA-44FD-A058-B92BFA10AACF/NSNotificationCenterDemo.app/Frameworks/libXCTestBundleInject.dylib'

	/private/var/containers/Bundle/Application/4F5376E0-75DA-44FD-A058-B92BFA10AACF/NSNotificationCenterDemo.app/Frameworks/libXCTestBundleInject.dylib: stat() failed with errno=25

// APP 停止时出现
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  * frame #0: 0x0000000193be0c04 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x0000000193be0020 libsystem_kernel.dylib`mach_msg + 76
    frame #2: 0x0000000193d93964 CoreFoundation`__CFRunLoopServiceMachPort + 220
    frame #3: 0x0000000193d8e7fc CoreFoundation`__CFRunLoopRun + 1428
    frame #4: 0x0000000193d8df40 CoreFoundation`CFRunLoopRunSpecific + 480
    frame #5: 0x000000019e01e534 GraphicsServices`GSEventRunModal + 108
    frame #6: 0x0000000197f19580 UIKitCore`UIApplicationMain + 1940
    frame #7: 0x0000000100034188 NSNotificationCenterDemo`main(argc=5, argv=0x000000016fdd3648) at main.m:18:12
    frame #8: 0x0000000193c0ce18 libdyld.dylib`start + 4
  thread #6, name = 'com.apple.uikit.eventfetch-thread'
    frame #0: 0x0000000193be0c04 libsystem_kernel.dylib`mach_msg_trap + 8
    frame #1: 0x0000000193be0020 libsystem_kernel.dylib`mach_msg + 76
    frame #2: 0x0000000193d93964 CoreFoundation`__CFRunLoopServiceMachPort + 220
    frame #3: 0x0000000193d8e7fc CoreFoundation`__CFRunLoopRun + 1428
    frame #4: 0x0000000193d8df40 CoreFoundation`CFRunLoopRunSpecific + 480
    frame #5: 0x00000001940d3340 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 232
    frame #6: 0x00000001940d3218 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 92
    frame #7: 0x0000000197fb4e9c UIKitCore`-[UIEventFetcher threadMain] + 156
    frame #8: 0x00000001940d1fa4 Foundation`-[NSThread main] + 40
    frame #9: 0x000000019420da74 Foundation`__NSThread__start__ + 852
    frame #10: 0x0000000193b21840 libsystem_pthread.dylib`_pthread_start + 168
  thread #8
    frame #0: 0x0000000193c03ab4 libsystem_kernel.dylib`__workq_kernreturn + 8

其中主要的问题是“*.dylib: code signature invalid”。

后面我尝试过以下方法来解决这个问题。


1. 来自 CSDN 博客 dyld: could not load inserted library '/Developer/usr/lib/libBacktraceRecording.dylib' because image

(1) Clean 后重新 Build。

(2) 退出Xcode后删掉目录 ~/Library/Developer/Xcode/DerivedData。

(3) 重启 iPhone。

这方法对我这个情况无效。


2. 来自 Apple Developer Forums dyld: Library not loaded

(1) 注释 Podfile 文件中的 use_frameworks!

由于我的单元测试 Demo 中还没有添加 cocoapods,Podfile 文件自然也是没有的。

不过,在下面的评论区中,我看到一段很有意思的回复。

As an unpaid developer user, I was not able to make any of the workarrounds be successful. Apple seems to be preventing unpaid developers to use frameworks in their applications with IOS 13.3.1.

In my case I am using SQLite.swift framework from GitHub which stopped working with IOS 13.3.1

 

I hope Apple gives an answer to this thread.

这段评论里提到了账号会影响到动态库的使用。


3. 来自 Stack Overflow Xcode 7.0 XCTest dyld: could not load inserted library IDEBundleInjection

(1) 重新选择 Code Signing Identity。

我尝试把 Demo 中 Target 下主工程和单元测试工程的个人开发者账号都换成了公司的账号,最终 Testing 成功。


放一张单元测试成功运行的截图。


2020.5.6 补充……

这两天,把 Mac 升级到了 10.15.4,Xcode 升级到了 11.4.1,iOS 升级到了 13.4.1,再次尝试使用个人开发者账户对这个工程运行单元测试,发现又可以用个人开发者账户运行了。

我:???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值