设置
我有一个 iOS 应用 MY-App
,它使用我自己的框架 MY-Framework
。两者都是用 swift
编写的。该应用仅处理用户身份验证并将访问 token 传递给 MY-Framework
。 MY-Framework
然后处理整个 ScreenFlow 和业务逻辑。目标是将 MY-Framework
分发给客户,以便在他们的应用中使用它。
此处提供了展示此问题的项目设置的最小示例:https://github.com/vprimachenko/lottie-pod-problem-sample
现在我要增强我的框架,提供带有一些动画的 View ,并使用 lottie为了它。我正在使用 cocoapods版本1.6.0-pre
天真的尝试
我创建了一个包含以下内容的 Podfile
target 'fw' do
pod 'lottie-ios'
end
导致框架编译错误
./fw/fw/File.swift:4:8: error: no such module 'Lottie'
import Lottie
^
框架
谷歌搜索后,我将 Podfile
更改为:
target 'fw' do
use_frameworks!
pod 'lottie-ios'
end
结果:运行时崩溃
dyld: Library not loaded: @rpath/Lottie.framework/Lottie
Referenced from: .../Build/Products/Debug-iphonesimulator/fw.framework/fw
Reason: image not found
也许是模块化 header ?
cocoapods发行说明提到 use_modular_headers!
,让我们试试看:
target 'fw' do
use_modular_headers!
pod 'lottie-ios'
end
结果:包含应用程序中的编译器错误
./app/app/ViewController.swift:3:8: error: missing required module 'Lottie'
import fw
^
也许两者都有?
target 'fw' do
use_modular_headers!
use_frameworks!
pod 'lottie-ios'
end
结果:运行时崩溃
dyld: Library not loaded: @rpath/Lottie.framework/Lottie
Referenced from: .../Build/Products/Debug-iphonesimulator/fw.framework/fw
Reason: image not found
黑客
经过一些尝试后,我能够通过为 Lottie
提供自己的 bringing header 来解决这个问题,但这感觉更像是胶带而不是正确的解决方案。稍后我仍会将其作为附加答案发布。
我的问题
我如何正确使用集成 lottie-ios
cocoapod,使其完全包含在 MY-Framework
中,所以当我将它分享给客户时,他们可以将其放入他们的应用程序而不用担心任何依赖关系吗?
遗憾的是,将其作为具有依赖项的私有(private) pod 发布不是一种选择。
最佳答案
常用的使用方式objective-c
swift
中的代码正在使用桥接头,看看这个:
Importing Objective-C into Swift
您需要创建一个桥接 header 并将其添加到您的项目中,然后在您创建的 .h 文件中添加:
#import <Lottie/Lottie.h>
关于ios - 将 ObjC pod 集成到 Swift 框架中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54593378/