ios - travis 上的 Cocoapod CI 无法安装依赖项

标签 ios xcode cocoapods travis-ci

这是我根据 cocoapods 指南使用 pod lib create 创建的 cocoapod:https://guides.cocoapods.org/making/using-pod-lib-create.html .目录结构和文件以及示例项目是为我生成的。

我的 .travis.yml 看起来像这样:

# references:
# * https://www.objc.io/issues/6-build-tools/travis-ci/
# * https://github.com/supermarin/xcpretty#usage

osx_image: xcode10.3
language: objective-c
# cache: cocoapods
xcode_workspace: Example/MUXSDKImaListener.xcworkspace
xcode_scheme: MUXSDKImaListener-Example
podfile: Example/Podfile
xcode_sdk: iphonesimulator9.3
before_install:
- gem install cocoapods # Since Travis is not always on latest version
- pod repo update
- pod install --project-directory=Example
script:
- set -o pipefail && xctool test -enableCodeCoverage YES -workspace Example/MUXSDKImaListener.xcworkspace -scheme MUXSDKImaListener-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty
- pod lib lint

当 travis 尝试构建这些测试时,在安装 Cocoapods 时会遇到错误。这个输出有点令人困惑,因为它似乎说它需要 Mux-Stats-AVPlayer 1.0.1,但随后它仍然找不到该版本。

该版本存在:https://cocoapods.org/pods/Mux-Stats-AVPlayer

$ bundle --version
Bundler version 2.0.2
announce
$ xcodebuild -version -sdk
$ pod --version
1.7.5
before_install.1
2.77s$ gem install cocoapods
2.76s$ pod install --repo-update --project-directory=Example
Updating local specs repositories
Adding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`
Analyzing dependencies
[!] CocoaPods could not find compatible versions for pod "Mux-Stats-AVPlayer":
  In snapshot (Podfile.lock):
    Mux-Stats-AVPlayer (= 1.0.1, ~> 1.0.1)
  In Podfile:
    Mux-Stats-Google-IMA (from `../`) was resolved to 0.3.0, which depends on
      Mux-Stats-AVPlayer (~> 1.0.1)
None of your spec sources contain a spec satisfying the dependencies: `Mux-Stats-AVPlayer (= 1.0.1, ~> 1.0.1), Mux-Stats-AVPlayer (~> 1.0.1)`.
You have either:
 * mistyped the name or version.
 * not added the source repo that hosts the Podspec to your Podfile.
[!] Automatically assigning platform `iOS` with version `9.3` on target `MUXSDKImaListener_Tests` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.
The command "pod install --repo-update --project-directory=Example" failed and exited with 31 during .
Your build has been stopped.

完整的构建在这里:

https://travis-ci.org/muxinc/mux-stats-google-ima/builds/588638291

我似乎在这个 .travis.yml 配置文件中遗漏了一些明显的东西。

示例项目的 Podfile

use_frameworks!
target 'MUXSDKImaListener_Tests' do
  pod 'Mux-Stats-Google-IMA', :path => '../'

  pod 'Specta'
    pod 'Expecta'
end

示例项目的Podfile.lock

PODS:
  - Expecta (1.0.6)
  - GoogleAds-IMA-iOS-SDK (3.10.1)
  - Mux-Stats-AVPlayer (1.0.1):
    - Mux-Stats-Core (~> 2.0.0)
  - Mux-Stats-Core (2.0.12)
  - Mux-Stats-Google-IMA (0.3.0):
    - GoogleAds-IMA-iOS-SDK (~> 3.9)
    - Mux-Stats-AVPlayer (~> 1.0.1)
  - Specta (1.0.7)

DEPENDENCIES:
  - Expecta
  - Mux-Stats-Google-IMA (from `../`)
  - Specta

SPEC REPOS:
  https://github.com/cocoapods/specs.git:
    - Expecta
    - GoogleAds-IMA-iOS-SDK
    - Mux-Stats-AVPlayer
    - Mux-Stats-Core
    - Specta

EXTERNAL SOURCES:
  Mux-Stats-Google-IMA:
    :path: "../"

SPEC CHECKSUMS:
  Expecta: 3b6bd90a64b9a1dcb0b70aa0e10a7f8f631667d5
  GoogleAds-IMA-iOS-SDK: 0e37ab83b22075ad631a70dcba9528cb246c92bf
  Mux-Stats-AVPlayer: e8ab70f9e67ac54958ac6ee87f479e3c0486baf5
  Mux-Stats-Core: 73e692799571459722526ff4a721b6872da5c776
  Mux-Stats-Google-IMA: 6ef4042dc3a1052ed55edfcc35a55b8106d2a4a3
  Specta: 3e1bd89c3517421982dc4d1c992503e48bd5fe66

PODFILE CHECKSUM: 95e48c48a4efb20f1822c750f01f9c105d46475a

COCOAPODS: 1.7.5

pod 的 Mux-Stats-Google-IMA.podspec 文件:

#
# Be sure to run `pod lib lint MUXSDKImaListener.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#

Pod::Spec.new do |s|
  s.name             = 'Mux-Stats-Google-IMA'
  s.version          = '0.3.0'
  s.summary          = 'Mux-Stats-Google-IMA is for tracking performance analytics and QoS monitoring for video with mux.com.'

  s.description      = <<-DESC
    The Mux Stats Google IMA is designed to be used with Mux-Stats-AVPlayer and GoogleAds-IMA-iOS-SDK to track performance analytics and QoS monitoring for video.
                       DESC

  s.homepage         = 'https://mux.com'
  s.social_media_url = 'https://twitter.com/muxhq'
  s.license          = { :type => 'Apache 2.0', :file => 'LICENSE' }
  s.author           = { 'Mux' => 'ios-sdk@mux.com' }
  s.source           = { :git => 'https://github.com/muxinc/mux-sdk-ima-listener.git', :tag => "v#{s.version}" }

  s.ios.deployment_target = '9.0'

  s.source_files = 'MUXSDKImaListener/Classes/**/*'

  s.dependency 'Mux-Stats-AVPlayer', '~> 1.0.1'
  s.dependency 'GoogleAds-IMA-iOS-SDK', '~> 3.9'
end

最佳答案

我不知道为什么我的示例中的 pod 安装失败,但恢复到自动生成的 .travis.yml 修复了它。我唯一需要修改的是在 before_install:

下添加说明

pod setup 没有此行 - pod lib lint 因特定错误而失败:

ERROR | [iOS] unknown: Encountered an unknown error (Unable to find a specification for Mux-Stats-AVPlayer (~> 1.0.0) depended upon by Mux-Stats-Google-IMA) during validation.

gem update并发 ruby 没有这行 - pod lib lint失败并出现不同的错误:

ERROR | [iOS] unknown: Encountered an unknown error (uninitialized constant Concurrent::Promises) during validation.

所以,这就是我的 .travis.yml 现在的样子,它运行测试并运行 pod lib lint

# references:
# * https://www.objc.io/issues/6-build-tools/travis-ci/
# * https://github.com/supermarin/xcpretty#usage

osx_image: xcode7.3
language: objective-c
# cache: cocoapods
# podfile: Example/Podfile
before_install:
- gem install cocoapods # Since Travis is not always on latest version
# Avoid error: Encountered an unknown error (uninitialized constant Concurrent::Promises) during validation
# https://github.com/CocoaPods/CocoaPods/issues/8948
- gem update concurrent-ruby
- pod setup
# - pod install --project-directory=Example
script:
- set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/MUXSDKImaListener.xcworkspace -scheme MUXSDKImaListener-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
- pod lib lint

关于ios - travis 上的 Cocoapod CI 无法安装依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069952/

相关文章:

iOS - 当值可以为零时如何处理字符串连接?

c++ - 在系统中安装我编译的库以供可执行文件使用

ios - Watchkit 扩展中的 SwiftyJSON 不起作用

iphone - 每次从同一 View 加载应用程序

ios - 如何删除警告 : "-pie being ignored. it is only used when linking a main executable"

ios - cocoapods 0.37.1 - 更新 Podfile 时,框架不再链接

ios - 使用swift制作下拉列表?

ios - ios应用需要什么样的模板

ios - UICollectionView传入collectionView :numberOfItemsInSection: is nil

xcode - 在 iOS Cocoa 静态库项目中使用 Objective-C 代码,在 iOS 应用程序项目中使用 Swift 代码