使用Swift和Objective-C构建Cocoapod:如何处理伞头问题?

时间:2016-07-04 21:19:49

标签: ios objective-c swift cocoapods xcode7.3

我有一个现有的Xcode框架,它同时使用Swift和Objective-C,我试图将其作为Cocoapod工作。到目前为止我的步骤是:

1)我使用pod lib create SMCoreLib初始化新文件夹(https://guides.cocoapods.org/making/using-pod-lib-create.html)。

2)我将我的框架中的Swift和Objective-C代码复制到这个新初始化的pod文件夹中的SMCoreLib / Classes文件夹中。我还将此代码拖到_Pods.xcodeproj中的相关组中。

3)我对项目的.podspec文件进行了一些更改。它如下(请注意,Github repo尚未通过这些更改进行更新;如果有人想要,我可以这样做):

Pod::Spec.new do |s|
  s.name             = 'SMCoreLib'
  s.version          = '0.0.2'
  s.summary      = 'Spastic Muffin Core Library for iOS'

# This description is used to generate tags and improve search results.
#   * Think: What does it do? Why did you write it? What is the focus?
#   * Try to keep it short, snappy and to the point.
#   * Write the description between the DESC delimiters below.
#   * Finally, don't worry about the indent, CocoaPods strips it!

  s.description      = <<-DESC
    Objective-C and Swift classes to support Spastic Muffin code.
                       DESC

  s.homepage     = "https://github.com/crspybits/SMCoreLib.git"
  s.license      = { :type => "GPL3", :file => "LICENSE.txt" }
  s.author             = { "Christopher Prince" => "<snip>" }

  s.platform     = :ios, "8.0"

  s.source       = { :git => "https://github.com/crspybits/SMCoreLib.git", :tag => "#{s.version}" }

  s.ios.deployment_target = '8.0'

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

  s.resources = "SMCoreLib/Assets/**"

  # s.resource_bundles = {
  #   'SMCoreLib' => ['SMCoreLib/Assets/*.png']
  # }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  # s.frameworks = 'UIKit', 'MapKit'
  # s.dependency 'AFNetworking', '~> 2.3'

  s.requires_arc = true

  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }

  s.dependency 'AFNetworking'
  s.dependency 'HPTextViewTapGestureRecognizer', '~> 0.1'
  s.dependency 'Reachability'
end

我的问题是我在尝试构建Example Xcode项目和尝试lint pod时都失败了。构建Example Xcode项目,我得到以下错误:

Xcode errors

从命令行开始,当我这样做时:

pod lib lint --allow-warnings --verbose --no-clean

我收到以下错误:

- NOTE  | [iOS] xcodebuild:  <module-includes>:2:9: note: in file included from <module-includes>:2:
- ERROR | [iOS] xcodebuild:  /Users/chris/Library/Developer/Xcode/DerivedData/App-bhqthebvswpzxeesjidsqpmmwovu/Build/Products/Release-iphonesimulator/SMCoreLib/SMCoreLib.framework/Headers/SMCoreLib-Swift.h:103:9: error: 'SMCoreLib/SMCoreLib.h' file not found
- NOTE  | [iOS] xcodebuild:  <unknown>:0: error: could not build Objective-C module 'SMCoreLib'

问题似乎是在自动生成的SMCoreLib-Swift.h生成的接口标头中,找不到SMCoreLib.h伞形标头。我非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我有解决此问题的黑客攻击。我想要一个更好的。解决方法是将SMCoreLib.h文件放在:SMCoreLib/Classes/SMCoreLib.h。该文件包含单行:

#import "SMCoreLib-umbrella.h"

问题似乎是Generated Interface Header不尊重模块映射中给出的伞标题的名称更改。 Cocoapods创建此模块映射并更改名称。此hack修复程序存在于此项目的{4}的Git仓库中。