我正在创建一个CocoaPod,比如MyPod
,这取决于另一个Cocoapod,比如RxSwift
。
所以我在MyPod.podspec
:
s.dependency "RxSwift", "~> 3.0.1"
但是,在开发MyPod
时,我如何实际使用依赖项?
import RxSwift
// ^
// No such module 'RxSwift'
public class MyClass { //...
我缺少一个步骤,还是一些常见的约定?看起来像Moya这样的其他项目正在使用Carthage来构建开发时的依赖项。我应该这样做,还是可以添加Podfile
?
我知道这对于位于repo中的示例应用程序来说应该不是问题,该应用程序具有自己的Podfile
。但是,我仍然希望在示例应用程序之外的顶层进行测试,并且能够在处理它时实际构建框架,同样,在示例应用程序之外。
答案 0 :(得分:10)
我不能谈论是否使用CocoaPods或Carthage。两者都有其优点和缺点。此外,应该考虑许多因素,其中一些因素可能无法控制(比如坚持使用CocoaPods的客户端!)所以我会跳过那部分。
但是,对于您的问题,您正在开发的吊舱确实可以依赖于另一个吊舱。您已拥有正确的s.dependency
行。这是必要的。
但是,我怀疑你无法引用从属pod的原因可能是因为你的“测试者/示例”中没有Podfile。项目和/或您在Podspec中添加依赖项后没有pod install
。
之所以这样做是因为我怀疑是因为Xs实际上并没有处理Podspec,所以你实际上并没有下载(或编译)依赖。
相反,当您进行pod安装(当然是通过命令行)时,CocoaPods将使用您的开发窗格,您依赖的窗格(在Podspec中)以及Podfile中的任何其他窗格创建一个Pod项目。 / p>
为了测试这个理论,我:
s.dependency 'RxSwift', '~> 3.0.1'
。pod install
。import RxSwift
行。PureLayout
。)您可以查看我在公共GitHub上创建的演示: https://github.com/ericwastaken/CocoaPod-Dependency-Demo
老实说,我已经使用pod lib create
创建了几个pod,它确实创建了一个总是对我有用的漂亮结构。出于这个原因,我建议总是使用它来创建你的pod的骨架。
Xcode 8评论:pod lib create
似乎仍然在创建一个Swift 1.x项目。因此,在您使用此工具后,当您打开Xcode时,您将被提供给"转换"到更新版本的Swift。我会让那个转换发生在那时(第一次),这样你就可以使用Swift 2.x或3.x语法(你选择)。
答案 1 :(得分:3)
我最终使用Carthage构建框架依赖项。我想我也可以使用CocoaPods来做它。但是,这需要我开始使用工作区,我不想这样做,以便尽可能减少更改。
此外,对于迦太基,我不需要添加新的Podfile
/ Podfile.lock
,因为迦太基将使用现有的Cartfile
/ Cartfile.resolved
。这是因为当在自己构建框架时,Carthage在另一个项目和中使用框架时使用Cartfile.resolved
。然而,使用CocoaPods时,在另一个项目中使用框架时会使用*.podspec
,但 Podfile.lock
(如果您添加了Podfile
)需要在框架本身中安装依赖的pod。
答案 2 :(得分:0)
这是一个非常具有挑战性的问题,需要将一些解决方案组合在一起。 @EricWasTaken的解决方案提供了帮助,并添加了:
source 'https://github.com/CocoaPods/Specs.git'
到我的Podfile的顶部。然后导航到示例应用程序并运行
pod repo update
pod install
现在我正在创建的框架可以找到我的框架所需的cocoapods。