在pod安装后,Pod / Header为空

时间:2016-04-08 19:11:53

标签: objective-c swift cocoapods

问题

我曾经在我的项目(完全正常工作的项目)中拥有一组功能性的Pod,直到最新的pod install运行,现在我得到的文件未找到"我的桥接标题中提到的标题的错误(这是一个包含Obj-C的Swift项目)。在做了一些研究之后,似乎应该在Pods/Headers中对标题进行符号链接,该目录对我来说是空的。但是,已下载了pod本身,并且存在所有相应的Pods/[Lib]目录。

最后的已知状态

我在此错误开始之前发生的变化是为我正在引入的其中一个库指定了:git:commit标记。然后我重新pod install并开始看到"找不到文件"错误。当时我正在使用Cocoapods 0.39

当前状态

我已经尝试了其他堆栈溢出线程的一些解决方案,包括添加User Header Search Paths,它们没有效果(现在回到原始版本),并且更新了我的cocoapods。我目前的cocoapods版本现在是1.0.0.beta.6。除了我遇到的其他令人头疼的问题,例如我必须重写部分Podfile以符合新标准,我现在似乎又回到了相同的状态(所有库都成功下载,但是找不到标题)。

以下是我在桥接标题中包含标题的示例:

// In this header, you should import all the public headers of your framework using statements like #import <MyKit/PublicHeader.h>
#import <CocoaLumberjack/CocoaLumberjack.h>

这就是我的Podfile的样子(我试图减少它以避免不相关的内容):

source 'https://github.com/CocoaPods/Specs'
platform :ios, '8.0'

use_frameworks!
pod 'CocoaLumberjack', '2.0.0'
pod 'SwiftyJSON', '~> 2.3'
pod 'Classy', :git => 'https://github.com/ClassyKit/Classy.git', :commit => 'c319908f8bded62e268dfd48ee5d65329b819129'

workspace 'my.work-ios'
project 'mywork' # sdk
project 'Examples/example1' # sample project using sdk
project 'my.work-ios.xcodeproj' # placeholder for main project, not really in use

target 'UnitTests' do
  pod 'Specta'
  pod 'Expecta'
  pod 'OCMock'
  pod 'OHHTTPStubs'
end

# Copy acknowledgements to the Settings.bundle
post_install do | installer |
  require 'fileutils'

  pods_acknowledgements_path = 'Pods/Target Support Files/Pods/Pods-Acknowledgements.plist'
  settings_bundle_path = Dir.glob("**/*Settings.bundle*").first

  if File.file?(pods_acknowledgements_path)
    puts 'Copying acknowledgements to Settings.bundle'
    FileUtils.cp_r(pods_acknowledgements_path, "#{settings_bundle_path}/Acknowledgements.plist", :remove_destination => true)
  end

  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['OTHER_SWIFT_FLAGS'] = "-DLEGACY"
    end
  end
end

更新

经过多次挖掘后,我发现罪魁祸首是use_frameworks!命令,省略它(反过来删除Swift库,因为它们需要它们)导致Pods/Headers被填充包含PrivatePublic目录,以及相关标题的符号链接。

在以前版本的cocoapods中并非如此,我仍然试图了解发生了什么,因为省略该命令对我来说不是一个可用的解决方法(考虑到我使用的Swift库)我的应用程序)。

更新2

评论中已经提到过这一点,但为方便起见,我也将此放在此处。这似乎是由此线程中报告的错误引起的:https://github.com/CocoaPods/CocoaPods/issues/4605#issuecomment-208822149。该线程还提出了一些可能对某些人来说足够好的解决方法。对我来说,他们不是,所以我回到0.39。

1 个答案:

答案 0 :(得分:0)

您是否尝试过此设置?

target 'TargetProject' do

    pod 'CocoaLumberjack', '2.0.0'
    pod 'SwiftyJSON', '~> 2.3'
    pod 'Classy', :git => 'https://github.com/ClassyKit/Classy.git', :commit     => 'c319908f8bded62e268dfd48ee5d65329b819129'

end
  

并添加了'.swift-version'?它包含的地方   '3.0-GM-CANDIDATE'

我正在使用swift 3.0的这种设置