如何在iOS APP中手动包含动态库

时间:2018-12-05 20:46:27

标签: ios dynamic-linking dynamic-library rpath otool

我有一个iOS应用程序(不是用xcode制作的),我需要在其中包含一个动态库。我的计算机上有这个库:

\webrtc
    \WebRTC.framework
        \Headers
            \*.h
        \Modules
            \module.modulemap
        \WebRTC
        \Info.plist

然后我将这些文件部署到我的应用中:

ALLiveVideoChatClient.app
    \Frameworks
        \WebRTC.framework
            \Headers
                \*.h
            \Modules
                \module.modulemap
            \WebRTC
            \Info.plist

当我这样做

otool -L ALLiveVideoChatClient.app/ALLiveVideoChatClient

返回我:

@rpath/WebRTC.framework/WebRTC (compatibility version 0.0.0, current version 0.0.0)

,当我尝试运行我的应用程序时,收到错误消息:

  

异常类型:EXC_CRASH(SIGABRT)异常代码:   0x0000000000000000,0x0000000000000000异常注意:   EXC_CORPSE_NOTIFY终止描述:DYLD,库未加载:   @ rpath / WebRTC.framework / WebRTC |引用自:   /var/containers/Bundle/Application/A2C3A7DA-D35E-4649-AEA0-9AB518E48971/ALLiveVideoChatClient.app/ALLiveVideoChatClient   |原因:未找到图片由线程触发:0

所以我检查@rpath的值

otool -l ALLiveVideoChatClient.app/ALLiveVideoChatClient

它返回了我

cmd LC_RPATH
cmdsize 32
path $ORIGIN (offset 12)

我不确定$ORIGIN是什么意思,但可以将其指向ALLiveVideoChatClient.app,因此我将@rpath更新为指向$ORIGIN/Frameworks,将-rpath $ORIGIN/Frameworks添加到链接器中({{ 3}}),但我仍然收到错误找不到图片

我做错了什么?将动态库手动添加(因此无需xcode)到iOS应用的步骤是什么?

1 个答案:

答案 0 :(得分:1)

WebRTC.framework是一个嵌入式框架,您需要将其嵌入到您的应用程序中。如果没有,则会出现上述错误。

要嵌入,请进入构建设置。您将找到有关“嵌入式框架”的部分。点击+图标。它将显示您包含在应用程序中的框架的列表,然后选择WebRTC框架。更多详情,请点击Apple TechNote - Embedding Frameworks In An App

另一方面,我发现Google决定从WebRTC中删除静态库目标是荒唐的。我们修改了build.gn()以生成静态库并改为使用它。如果需要,我可以分享。