带有静态库的私有 pod 以及 swift pod
Posted
技术标签:
【中文标题】带有静态库的私有 pod 以及 swift pod【英文标题】:Private pod with static library in along with swift pod 【发布时间】:2016-06-05 12:50:37 【问题描述】:我正在为一个 ios 开发团队开发 Pod(在私人仓库中)。我的低级 C/Obj-C 核心 pod 包含一个带有一些标头的静态库,并在其他 pod 中用作依赖项(使用--use-libraries
推送)。
现在 iOS 团队想要集成 Swift pod,他们不得不在项目的 Podfile 中添加 use_framework!
选项。当然,他们在pod install
期间得到了如下错误:
“XXX”目标具有传递依赖,包括静态 二进制文件
我在网上花了半天时间寻找一种方法让我的 pod 与 use_framework!
选项兼容,但徒劳无功。这非常令人沮丧,因为 Google 服务 pod 证明可以以一种干净的方式绕过这个问题(不是使用 verify_no_static_framework_transitive_dependencies
技巧):主 pod 及其几乎所有依赖项都包含静态库,并且一切都与迅捷豆荚。以 Google/SignIn 为例,它依赖于 Google/Core(vendored_libraries:Libraries/libGGLCore.a)和 GoogleSignIn(vendored_libraries:Libraries/libSignIn.a)。
知道我可以做些什么来使我的 pod 与 use_framework!
选项兼容吗?
谢谢大家,
干杯,
汤姆
【问题讨论】:
嘿汤姆,我也在和这个作斗争......老实说,我现在不知道。我想知道的是:你确定谷歌做到了这一点吗?我假设 GoogleSignIn 是一个用 Objective-C 编写的静态库。所以他们——如果我弄错了,请纠正我——不必使用“use_framework!”完全... 是的,但我认为 GoogleSignIn 也是静态的... Google/SignIn pod 依赖于 Google/Core pod 和 GoogleSignIn pod,它们都只包含静态库(.a 可执行文件)和标头。基本上和我的豆荚一样。如果您使用 Google/SignIn pod、swift pod(例如 Alamofire)和use_framework!
选项创建 podfile,则 pod install 可以正常工作。如果我对我的 pod 而不是 Google/SignIn 执行相同操作,则会出现“传递依赖项”错误...无法弄清楚他们做了什么:/
我找到了this,但不完全理解,无法让它工作......
啊,好的。现在我明白你的意思了。我已经读过了,但不幸的是我也没有...
【参考方案1】:
我想我找到了解决问题的方法。这很奇怪,但我会说它足够干净,可以在生产中使用它;)
我找到了here。这个想法只是在你的 podspec 中的 source_files 列表中包含一个源文件(甚至是一个空文件)。
基本上,我的 podspec 的源代码部分如下所示:
s.source_files = "myLib/Empty.m", "myLib/Headers/*.h"
s.vendored_libraries = "myLib/myLib.a"
我所做的唯一修改是在源文件中添加“myLib/Empty.m”(Empty.m 严格为空)。没有它,当我 pod install 时,我会系统地遇到 transitive dependencies 错误。有了它,pod install 工作正常。它适用于 Cocoapods 0.0.39 和 1.0.0.beta.4。
好吧,看起来这是一个不太脏的解决方案,但我不确定它是否适用于所有情况。而且Cocoapods的清洁度也不是什么好消息……
正如我之前在 cmets 中提到的,Google 似乎找到了更清洁的解决方案。所以如果有人知道真正干净的解决方案,请分享!
干杯,
汤姆
PS : 我想我会将文件命名为 DirtyCocoapodHack.m 而不是 Empty.m,相信开发团队会喜欢它;) p>
【讨论】:
以上是关于带有静态库的私有 pod 以及 swift pod的主要内容,如果未能解决你的问题,请参考以下文章