我有一个iOS应用MY-App
,它使用我自己的框架MY-Framework
。两者均以swift
编写。该应用仅处理用户身份验证,并将访问令牌传递给MY-Framework
。 MY-Framework
然后处理整个ScreenFlow和业务逻辑。目标是将MY-Framework
分发给客户以在其应用程序中使用。
出现此问题的项目设置的最小样本可以在这里找到:https://github.com/vprimachenko/lottie-pod-problem-sample
现在,我将使用一些动画来增强提供给视图的框架,并使用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
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
提供自己的标题来解决这种情况,但这感觉更像是一条胶带,而不是适当的解决方案。稍后,我仍将其发布作为其他答案。
我如何使用正确整合lottie-ios
的cocoapod使其完全包含在MY-Framework
中的方式,因此当我与客户共享时,他们可以将其放到他们的App中,不必担心关于任何依赖项?
不幸的是,将其作为具有依赖项的私有pod释放是不可能的。
答案 0 :(得分:2)
在objective-c
中使用swift
代码的常见方法是使用桥接标头,请看一下:
Importing Objective-C into Swift
您需要创建一个桥接头并将其添加到您的项目中,然后在您创建的.h文件中只需添加:
#import <Lottie/Lottie.h>
答案 1 :(得分:1)
我该如何正确地整合lottie-ios cocoapod, 它完全包含在“我的框架”中,因此当我将其共享给 客户,他们可以将其放到他们的应用中,而不必担心 依赖吗?
我认为您不想这样做。如果您客户的应用程序已经使用Lottie框架,该版本可能与MY-Framework中使用的版本不同,该怎么办?
解决此问题的一种典型方法是要求您的客户使用Lottie作为依赖项。如果您使用的是椰壳足,您的客户不会真正注意到它,这是常见的做法。您可以在this answer使用spec.dependency来指定您的依赖项
如果真是绝望,您可以将Lottie的所有源复制到MY框架中,并确保它们在自己的模块中定义以避免冲突。
答案 2 :(得分:0)
您需要手动将Lottie-ios框架复制到您的私有CocoaPod框架(即My-Framework)