提问人:C. Ocoa 提问时间:10/19/2023 最后编辑:C. Ocoa 更新时间:10/20/2023 访问量:122
应用程序在 macOS 10.13 上崩溃,尽管符号被包装在 @available 中,但“DYLD,[0x4] 符号缺失”(macOS 10.14.4, *)
App crashes on macOS 10.13 with "DYLD, [0x4] Symbol missing" despite symbol being wrapped in @available(macOS 10.14.4, *)
问:
在我的 Objective-C 项目中只出现了一个符号。它被一个块包围:kDADiskDescriptionMediaEncryptedKey
@available
if (@available(macOS 10.14.4, *)) {
CFStringRef x = kDADiskDescriptionMediaEncryptedKey;
}
然而,该程序在macOS 10.13上崩溃:
Date/Time: 2023-10-18 19:37:34.273 +0200
OS Version: Mac OS X 10.13.6 (17G65)
Report Version: 12
Anonymous UUID: C780E8BB-9F5C-A7EC-2846-AD51F8D2912C
Time Awake Since Boot: 2700 seconds
System Integrity Protection: enabled
Crashed Thread: 0
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: DYLD, [0x4] Symbol missing
Application Specific Information:
dyld: launch, loading dependent libraries
Dyld Error Message:
Symbol not found: _kDADiskDescriptionMediaEncryptedKey
Referenced from: /Users/USER/Desktop/AvailableCrash.app/Contents/MacOS/AvailableCrash
Expected in: /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
in /Users/USER/Desktop/AvailableCrash.app/Contents/MacOS/AvailableCrash
我在 macOS 13.6 (22G120) 上运行 Xcode 15.0 (15A240d)。程序在此开发计算机上按预期运行。
我做错了什么?
答:
0赞
Marek H
10/19/2023
#1
您不需要引用该符号。在宏块中使用硬编码值,看看是否有帮助。DAMediaEncrypted
(lldb) po kDADiskDescriptionMediaEncryptionDetailKey
DAMediaEncryptionDetail
(lldb) po kDADiskDescriptionMediaEncryptedKey
DAMediaEncrypted
评论
0赞
C. Ocoa
10/19/2023
是的,这是真的。为了简洁起见,我选择了这个例子,以构建一个再现问题的最小例子。实际上我正在使用不同的功能。
2赞
Brendan Shanks
10/20/2023
#2
Xcode 15.0 有一些与弱链接相关的错误(即符号在应该弱链接时没有弱链接),这是我在 PyObjC 中发现的一个错误。
试试 Xcode15.1b1,如果这不能解决问题,请向 Apple 提交反馈。同时,继续使用 Xcode 14 构建您的运输应用程序。
评论
1赞
C. Ocoa
10/20/2023
非常感谢!Xcode 15.1beta (15C5028h) 修复了此问题。但是,弱链接还有其他问题。我已经提交了错误报告(FB13289462)。
1赞
Carl Lindberg
10/23/2023
有一个标志 -ld_classic(添加到OTHER_LDFLAGS),它可以强制在 Xcode 15 中使用旧链接器,这可能允许您使用 Xcode 15。如果回到 Xcode 14,不确定这是否有效;如果您需要在 Xcode 之间切换,您可以有条件地添加 SDK = iphoneos17* 或 sdk-iphonesimulator17*。-Wl,-ld_classic
评论
kDADiskDescriptionMediaEncryptionDetailKey
kDADiskDescriptionMediaEncryptedKey