有没有办法在构建我的 Cocoapod 时指定对另一个分支的依赖?

Posted

技术标签:

【中文标题】有没有办法在构建我的 Cocoapod 时指定对另一个分支的依赖?【英文标题】:Is there a way to specify a dependency on another branch when building my Cocoapod? 【发布时间】:2015-07-24 20:06:43 【问题描述】:

我正在尝试构建一个依赖于 Alamofire 和 SwiftyJSON 的不同分支的 Cocoapod(目前 - 这将在 ios 9 和 Xcode 7 退出测试版时发生变化)。这是因为我的 Cocoapod 是用 Swift 2.0 编写的。更具体地说,我的 pod 目前依赖于 swift2-0 Alamofire 分支和 xcode7 SwiftyJSON 分支。

我的 Podspecs 文件目前如下所示:

#
# Be sure to run `pod lib lint ALSMAL.podspec' to ensure this is a
# valid spec and remove all comments before submitting the spec.
#
# Any lines starting with a # are optional, but encouraged
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = "ALSMAL"
  s.version          = "2.0.0"
  s.summary          = "A Swift wrapper for the Atarashii MAL API."
  s.description      = <<-DESC
A Swift, protocol-oriented iOS framework to interact with Atarashii MAL API, an unofficial API for MyAnimeList.net.
                       DESC
  #s.homepage         = "https://github.com/AndyIbanez/ALSMAL"
  s.homepage         = "https://andyibanez.com"
  s.license          = :type => "MIT", :file => "LICENSE"
  s.author           =  "Andy Ibanez" => "andy@andyibanez.com" 
  s.source           =  :git => "https://AndyIbanez@bitbucket.org/AndyIbanez/alsmal.git", :tag => s.version.to_s 
  # s.social_media_url = 'https://twitter.com/AndyIbanezK'

  s.platform     = :ios, '9.0'
  s.requires_arc = true

  s.source_files = 'ALSMAL/*'
  s.resource_bundles = 
    'ALSMAL' => ['Pod/Assets/*.png']
  

  s.dependency 'Alamofire'
  s.dependency 'SwiftyJSON'
end

如您所见,我在 end 之前的最后两行中指定了 Alamofire 和 SwiftyJSON 的依赖项。

我在另一个 *** 答案中读到,我无法在 Podspec 中为我的依赖项指定分支,因此我应该在我的 Podfile 中指定它们。我做到了:

# Uncomment this line to define a global platform for your project
platform :ios, '9.0'
use_frameworks!

link_with 'ALSMAL', 'ALSMALTests'

target 'ALSMAL' do
   pod 'Alamofire', :git => "https://github.com/Alamofire/Alamofire.git", :branch => "swift-2.0"
   pod 'SwiftyJSON', :git => "https://github.com/SwiftyJSON/SwiftyJSON.git", :branch => "xcode7"
end

target 'ALSMALTests' do
    pod 'Alamofire', :git => "https://github.com/Alamofire/Alamofire.git", :branch => "swift-2.0"
    pod 'SwiftyJSON', :git => "https://github.com/SwiftyJSON/SwiftyJSON.git", :branch => "xcode7"
end

然后,因为我的项目使用的是 iOS 9/Xcode 7 技术,我将 Xcode 的命令行工具更改为使用 Xcode 7 beta(Xcode > Preferences > Locations > 将“命令行工具”设置为 Xcode 7)并尝试 linting它。它失败了:

 - ERROR |  Alamofire/Source/Request.swift:76:30: error: '#' has been removed from Swift; double up 'user user' to make the argument label the same as the parameter name

(它会引发更多错误,但所有这些都与从 Swift 1.0/1.2 到 Swift 2.0 的更改有关)。

当然,这只能意味着 Cocoapods 正在下载 Alamofire 依赖项的官方分支,因为 Swift 2.0 有效地删除了用于创建函数参数标签和同名变量的 # 语法。 swift2-0 分支修复了这个问题。

如果我运行我的单元测试,它们都可以正常编译和运行,所以有些东西使 Cocoapods 使用我的依赖项的主分支版本,而不是我在 Podfile 中明确定义的那些。

有什么方法可以为我的 pod 设置不同的分支依赖项?这只会暂时使用,因为我想开始构建我的 iOS 9 应用程序并在真实案例中测试我的 pod。一旦 Xcode 7 退出测试版,我用于我的 pod 的分支很可能会与它们各自的 master 合并,我不必再寻找解决方法来让它们工作了。

【问题讨论】:

【参考方案1】:

我在Cocoapods Repository 中提问,其中一位贡献者回答了我的问题。

Linting(因此,尝试上传您的 pod)在您的 Podspec 而不是 Podfile 上运行,并且无法在 Podspec 中指定不同的分支。

不可以,非发布依赖只能在 Podfile 中设置。

因此,遗憾的是,我想做的事情是不可能的。

【讨论】:

以上是关于有没有办法在构建我的 Cocoapod 时指定对另一个分支的依赖?的主要内容,如果未能解决你的问题,请参考以下文章

目标C:通过cocoapod在我的应用程序中添加框架时发生名称冲突

Travis CI 构建 [Cocoapod Swift] 失败,没有“这样的模块...”错误

使用 Swift 构建 Cocoapod 并依赖于 Objective-C 框架

Cocoapod:为啥 Xcode 构建过程试图找到已经从我的项目中删除的库

如何修复 cocoapod .modulemap 文件未找到

错误:詹金斯“没有这样的模块 <Swift Cocoapod 名称>”