将ObjC pod集成到Swift框架中的问题

Val*_*rij 6 xcode ios cocoapods swift lottie

设置

我有一个MY-App使用我自己的框架的iOS应用程序MY-Framework.两者都是写的swift.该应用程序仅处理用户身份验证并将访问令牌传递给MY-Framework.MY-Framework然后处理整个ScreenFlow和业务逻辑.目标是将MY-Framework客户分发给他们的应用程序.

此处提供了展示此问题的项目设置的最小示例:https://github.com/vprimachenko/lottie-pod-problem-sample

现在我是用一些动画增强我的框架提供的视图,并使用.我正在使用版本1.6.0-pre

天真的尝试

Podfile用以下内容创建了一个

target 'fw' do
  pod 'lottie-ios'
end
Run Code Online (Sandbox Code Playgroud)

这导致框架中的编译错误

./fw/fw/File.swift:4:8: error: no such module 'Lottie'
import Lottie
       ^
Run Code Online (Sandbox Code Playgroud)

构架

经过一些谷歌搜索后我改变Podfile了:

target 'fw' do
  use_frameworks!
  pod 'lottie-ios'
end
Run Code Online (Sandbox Code Playgroud)

结果:运行时崩溃

dyld: Library not loaded: @rpath/Lottie.framework/Lottie
  Referenced from: .../Build/Products/Debug-iphonesimulator/fw.framework/fw
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

模块头可能吗?

发行说明提及use_modular_headers!,让我们尝试:

target 'fw' do
 use_modular_headers!
 pod 'lottie-ios'
end
Run Code Online (Sandbox Code Playgroud)

结果:包含应用程序中的编译器错误

./app/app/ViewController.swift:3:8: error: missing required module 'Lottie'
import fw
      ^
Run Code Online (Sandbox Code Playgroud)

也许两者都?

target 'fw' do
 use_modular_headers!
 use_frameworks!
 pod 'lottie-ios'
end
Run Code Online (Sandbox Code Playgroud)

结果:运行时崩溃

dyld: Library not loaded: @rpath/Lottie.framework/Lottie
 Referenced from: .../Build/Products/Debug-iphonesimulator/fw.framework/fw
 Reason: image not found
Run Code Online (Sandbox Code Playgroud)

黑客

经过一些尝试,我能够通过提供我自己的带头来解决这个问题,Lottie但这感觉更像是一个胶带而不是一个合适的解决方案.我稍后会发布这个作为补充答案.

我的问题

我如何使用正确集成lottie-ioscocoapod以完全包含它MY-Framework,所以当我分享给客户时,他们可以将它放入他们的应用程序而不用担心任何依赖?

将它作为具有依赖关系的私有pod发布,遗憾的是不是一种选择.

Moh*_*hyG 3

objective-c使用代码的常见方法swift是使用桥接标头,看一下:

将 Objective-C 导入 Swift

您需要创建一个桥接头并将其添加到您的项目中,然后在您创建的 .h 文件中添加:

#import <Lottie/Lottie.h>