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

Posted

技术标签:

【中文标题】Travis CI 构建 [Cocoapod Swift] 失败,没有“这样的模块...”错误【英文标题】:Travis CI build [Cocoapod Swift] fails with no 'such module...' error 【发布时间】:2019-11-28 08:17:10 【问题描述】:

我有一个用 Swift 编写的repository,它是一个标准的 cocoapod 工作区(标准格式,带有使用 Quick 和 Nimble 测试创建的示例应用程序,没有 UI 测试),它在我的本地构建(并通过测试运行)机器(Xcode 11.2.1,macOS Catalina 10.15.1)顺利,但是 Travis CI 构建失败,并出现模块之一不存在的错误:

/Users/travis/build/Kentico/kontent-delivery-sdk-swift/Example/KenticoKontentDelivery/KontentModels/Cafe.swift:9:8: no such module 'ObjectMapper'

完整的 Travis CI 日志here。

.podspec文件:

Pod::Spec.new do |s|
  s.name             = 'KenticoKontentDelivery'
  s.version          = '2.0.0'
  s.summary          = 'Swift SDK for Kentico Kontent Delivery'

  s.description      = <<-DESC
  Swift SDK for Kentico Kontent Delivery.
                       DESC

  s.homepage         = 'https://github.com/kentico/kontent-delivery-sdk-swift'
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          =  :type => 'MIT', :file => 'LICENSE' 
  s.author           =  'makma' => 'martinmakarsky@gmail.com' 
  s.source           =  :git => 'https://github.com/kentico/kontent-delivery-sdk-swift.git', :tag => s.version.to_s 
  s.social_media_url = 'https://twitter.com/kenticokontent'

  s.ios.deployment_target = '8.0'

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

  s.dependency 'AlamofireObjectMapper', '~> 5.2.0'
  s.dependency 'ObjectMapper', '~> 3.5.1'
  s.dependency 'Kanna', '~> 4.0.2'
  s.xcconfig =  'HEADER_SEARCH_PATHS' => '$(SDKROOT)/usr/include/libxml2' 

end

Podfile:

use_frameworks!
platform :ios, '12.0'

target 'KenticoKontentDelivery_Example' do
  pod 'KenticoKontentDelivery', :path => '../'
  pod 'AlamofireImage', '~> 3.6.0'
  pod 'ObjectMapper', '~> 3.5.1'
  pod 'AlamofireObjectMapper', '~> 5.2.0'


  target 'KenticoKontentDelivery_Tests' do
    inherit! :search_paths

    pod 'Quick', '~> 2.2.0'
    pod 'Nimble', '~> 7.0'
    pod 'ObjectMapper', '~> 3.5.1'
    pod 'AlamofireObjectMapper', '~> 5.2.0'
  end
end

.travis.yml:

osx_image: xcode11.1
language: objective-c
cache: cocoapods
podfile: Example/Podfile
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 && xcodebuild test -enableCodeCoverage YES -workspace Example/KenticoKontentDelivery.xcworkspace -scheme KenticoKontentDelivery-Example -sdk iphonesimulator -destination 'name=iPhone 8' ONLY_ACTIVE_ARCH=NO | xcpretty
- pod lib lint
after_success:
- bash <(curl -s https://codecov.io/bash)
deploy:
  provider: script
  script: sh ./scripts/push.sh
  skip_cleanup: true
  on:
    tags: true

我尝试了什么:

更改了所有依赖项的版本 更改了 osx_image 版本

【问题讨论】:

确保您的本地环境干净。例如,pod install 在现有 CocoaPods 安装中的运行方式与在干净安装中的运行方式不同。 Xcode 11.1 和 11.2 之间也可能有所不同? 感谢您的建议,我已经在 vanilla macOS 安装上尝试过。我也尝试过调整 XCode 版本,但没有成功。 【参考方案1】:

我终于调整了设置,以便能够在 Travis CI 上成功运行。我不确定哪个设置会影响结果,但是,在这些更改之后,构建和测试运行顺利。

IPHONEOS_DEPLOYMENT_TARGET 降级到版本 11 在Podfile 中设置platform :ios, '11.0'.podspec 中设置s.ios.deployment_target = '11.0' 设置s.swift_versions = '5.0' 已删除 .swift-version 文件

【讨论】:

以上是关于Travis CI 构建 [Cocoapod Swift] 失败,没有“这样的模块...”错误的主要内容,如果未能解决你的问题,请参考以下文章

travis.ci 上的 Android 构建变体

Travis CI 构建失败,因为没有输出

由于 PySide2 和 Matplotlib,Travis-CI 无法构建

Travis-CI 在我的项目中使用 xcodebuild 构建/链接问题

Fastlane Scan 的构建过程错过了 Jenkins CI 上的 CocoaPod 框架

Travis CI + Go:为不同的操作系统创建特定的构建流程