如何正确签署包含.dylib文件的xcframework?
问题背景
开发一款带C兼容接口的跨平台C++库,目标打包为XCFramework分发。使用CMake编译并单独签署各平台二进制文件后,通过xcodebuild -create-xcframework生成XCFramework。仅iOS物理设备加载库时出现签名错误,模拟器、macOS及Catalyst环境下无异常。
当前构建命令
生成XCFramework的命令:
xcodebuild -create-xcframework -library builds/catalyst/Release/mylib.1.1.0.dylib -headers include -library builds/macos/Release/mylib.1.1.0.dylib -headers include -library builds/ios/Release/mylib.1.1.0.dylib -headers include -library builds/ios-sim/Release/mylib.1.1.0.dylib -headers include -output Mylib.xcframework
物理设备加载错误日志
dyld[8339]: Library not loaded: @rpath/mylib.1.1.0.dylib
Referenced from: <3D40ED9F-BDDA-3878-80B7-52E4C1D79471> /private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/BasedClient.framework/BasedClient
Reason: tried: '/usr/lib/system/introspection/mylib.1.1.0.dylib' (errno=2, not in dyld cache),
'/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (code signature invalid in <0E938CE1-2726-3C26-A057-49DAD2351627> '/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (errno=1) sliceOffset=0x00000000, codeBlobOffset=0x004F2FF0, codeBlobSize=0x0000E810),
'/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (code signature invalid in <0E938CE1-2726-3C26-A057-49DAD2351627> '/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (errno=1) sliceOffset=0x00000000, codeBlobOffset=0x004F2FF0, codeBlobSize=0x0000E810),
'/private/preboot/Cryptexes/OS@rpath/mylib.1.1.0.dylib' (errno=2),
'/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (code signature invalid in <0E938CE1-2726-3C26-A057-49DAD2351627> '/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (errno=1) sliceOffset=0x00000000, codeBlobOffset=0x004F2FF0, codeBlobSize=0x0000E810),
'/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (code signature invalid in <0E938CE1-2726-3C26-A057-49DAD2351627> '/private/var/containers/Bundle/Application/212147E0-C36B-413C-95F0-9819D78D0F9B/BasicExample.app/Frameworks/mylib.1.1.0.dylib' (errno=1) sliceOffset=0x00000000, codeBlobOffset=0x004F2FF0, codeBlobSize=0x0000E810),
'/usr/local/lib/mylib.1.1.0.dylib' (errno=2),
'/usr/lib/mylib.1.1.0.dylib' (errno=2, not in dyld cache)
排查情况
- 单独检查各
.dylib文件,签名状态均正常 - 尝试遵循官方指南使用Xcode归档,执行命令:
但归档产物的文件结构中出现可疑的xcodebuild archive -project Mylib.xcodeproj -scheme Mylib -destination "generic/platform=iOS" -archivePath "archives/Mylib" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES@rpath目录:. └── Mylib_iOS_Simulator.xcarchive ├── Info.plist ├── Products │ └── @rpath │ └── mylib.1.1.0.dylib └── dSYMs
内容的提问来源于stack exchange,提问作者Francesco M

