iOS 如何正确签署要通过 dlopen 加载的 C++ dylib

How to correctly sign a C++ dylib to be loaded via dlopen in iOS

我们正在将我们的语言工具集成到移动平台中。

因此,有根据用户请求加载的特定语言库 - 目前为英语、法语、西班牙语或希腊语。

这些库太大,无法静态链接。

目前,我们可以通过 linux 中的 dlopen 和 dlsym 调用加载这些库。

我看到我们可以使用这些以 iOS v8.

开头的调用

正如 Apple Developer Support 所说“...没有全面禁止使用 dlopen 和朋友。”

编译我们的库(使用 CMake 和相关的 iOS 工具链)后,它们已使用与应用程序相同的证书和标识符进行签名,使用

codesign --deep --force --sign "78037F819B5AA1522177B06DA8E7C5343DDBC0CF" --identifier=fr.teamname.libtext_fr ./libtext_fr.dylib

但是,当应用程序(iPad 上的 iOS v14 上的运行)尝试加载文件时,出现错误,我们得到以下原因:

code signature invalid (errno=1) sliceOffset=0x00000000, codeBlobOffset=0x0205D0F0, codeBlobSize=0x000453E0

请注意,我们目前使用的是免费的Apple Id,尚未加入开发者计划。

我已经做了很多搜索,但还没有找到丢失的东西。

现在正确的方向是什么?

经过大量研究,我在苹果开发者论坛上打开了一个请求。

这个问题的答案可以在这里找到: https://developer.apple.com/forums/thread/670761