首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将ObjC pod集成到Swift框架中的问题

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

Stack Overflow用户
提问于 2019-02-08 13:24:04
回答 3查看 1.1K关注 0票数 5

设置

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

显示此问题的项目设置的最小示例可在这里获得:https://github.com/vprimachenko/lottie-pod-problem-sample

现在,我要增强我的框架,提供一些动画视图,并为此使用洛蒂。我使用的是cocoapods版本1.6.0-pre

天真的尝试

我创建了一个包含以下内容的Podfile

代码语言:javascript
运行
复制
target 'fw' do
  pod 'lottie-ios'
end

导致框架中的编译错误。

代码语言:javascript
运行
复制
./fw/fw/File.swift:4:8: error: no such module 'Lottie'
import Lottie
       ^

框架

在googling搜索之后,我将Podfile更改为:

代码语言:javascript
运行
复制
target 'fw' do
  use_frameworks!
  pod 'lottie-ios'
end

结果:运行时崩溃

代码语言:javascript
运行
复制
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!,让我们尝试一下:

代码语言:javascript
运行
复制
target 'fw' do
 use_modular_headers!
 pod 'lottie-ios'
end

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

代码语言:javascript
运行
复制
./app/app/ViewController.swift:3:8: error: missing required module 'Lottie'
import fw
      ^

也许两者都有?

代码语言:javascript
运行
复制
target 'fw' do
 use_modular_headers!
 use_frameworks!
 pod 'lottie-ios'
end

结果:运行时崩溃

代码语言:javascript
运行
复制
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中,因此,当我将其共享给客户时,他们可以直接将其放到应用程序中,而不必担心任何依赖关系。

不幸的是,将其作为带有依赖关系的私有荚发布并不是一种选择。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-16 08:44:44

objective-c中使用swift代码的常见方法是使用桥接标头,请查看以下内容:

将Objective导入Swift

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

#import <Lottie/Lottie.h>

票数 3
EN

Stack Overflow用户

发布于 2019-02-13 01:43:16

如何正确地集成lottie-ios cocoapod,使其完全包含在MY中,因此,当我将其共享给客户时,他们可以直接将它放到他们的应用程序中,而不必担心任何依赖?

我觉得你不想这么做。如果客户的应用程序已经使用Lottie框架,可能与中使用的版本不同呢?

解决这一问题的一个典型方法是要求您的客户将Lottie用作依赖项。如果你在使用可可豆,你的客户不会真正注意到,这是常见的做法。使用spec.dependency在https://guides.cocoapods.org/syntax/podspec.html指定依赖项)

如果真的很绝望,您可以将Lottie的所有源复制到中,并确保它们在自己的模块中定义,以避免冲突。

票数 1
EN

Stack Overflow用户

发布于 2019-02-12 13:17:45

您需要手动将Lottie-ios框架复制到您的私有CocoaPod框架(这是My- Framework )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54593378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档