ios - Cocoapod - 混合 Objective-C 和 Swift 项目中自定义配置的构建错误

标签 ios swift objective-c cocoalumberjack

我在为以下项目设置中的自定义构建配置编译主项目时遇到构建错误。但是我没有收到调试配置的构建错误。

MainProject ( Mixed Objective-C and Swift)
 |_ SubProject1 ( Only Objective-C)

MainProject build configs :
 |_ Debug
 |_ Inhouse
 |_ Adhoc
 |_ Store

SubProject1 build configs:
 |_ Debug
 |_ Release

Pod 文件:

workspace 'MainProject.xcworkspace'
platform :ios, '9.0'

target 'MainProject' do
   use_frameworks!

   def shared_pods
     # all the pods go here
     pod 'CocoaLumberjack/Swift'
   end

   target 'MainProject' do
     project 'MainProject'
     shared_pods
   end

   target 'SubProject1' do
     project 'Subprojects/SubProject1/Subproject1'
     shared_pods
   end
end

主项目和子项目都使用 Cocoalumberjack。由于子项目是一个 obj-c 项目,它使用带有以下导入语句的 cocoalumberjack obj-c 版本。

#import "CocoaLumberjack/CocoaLumberjack.h"

构建调试配置时,没有构建失败。但是当构建 Inhouse/Adhoc/Store 配置时,它无法在 header 搜索路径中找到 cocoalumberjack header 文件。从构建日志中,我可以推断出,

构建主项目调试配置时,相同的配置用于构建 pod 和子项目。因此,Pod 被放置在 Debug-iphonesimulator 路径中。由于子项目有Debug配置,它也引用了Debug-iphonesimulator路径中的pod headers。因此构建成功。

当构建 Mainproject 中的其他自定义配置时,比如说 Inhouse,Pod 被放置在 Inhouse-iphonesimulator 路径中。由于子项目没有内部配置,因此默认为发布配置。这导致在构建子项目时在发布中间路径中搜索 cocoalumberjack 头文件。但是 Cocoalumberjack header 不存在于发布配置路径中,而是存在于内部中间路径中。这会导致构建错误。请在下面找到构建错误日志。

CompileC /Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Intermediates/Subproject1.build/Release-iphonesimulator/SubProject1.build/Objects-normal/x86_64/SubProject1.o

/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Intermediates/Subproject1.build/Release-iphonesimulator/SubProject1.build/SubProject1-generated-files.hmap -F/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Products/Release-iphonesimulator

> -F/Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Products/Release-iphonesimulator/CocoaLumberjack -iquote /Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Products/Release-iphonesimulator/CocoaLumberjack/CocoaLumberjack.framework/Headers -c /Users/someusername/Anand/iOS/Practices/StackOverflow/MainProject/Subprojects/SubProject1/SubProject1/SubProject1.m -o /Users/someusername/Library/Developer/Xcode/DerivedData/MainProject-gslvjyjvbpzplkerotbufvukmpac/Build/Intermediates/Subproject1.build/Release-iphonesimulator/SubProject1.build/Objects-normal/x86_64/SubProject1.o

In file included from /Users/someusername/Anand/iOS/Practices/StackOverflow/MainProject/Subprojects/SubProject1/SubProject1/SubProject1.m:10: /Users/someusername/Anand/iOS/Practices/StackOverflow/MainProject/Subprojects/SubProject1/SubProject1/Logger.h:9:9: fatal error: 'CocoaLumberjack/CocoaLumberjack.h' file not found

import "CocoaLumberjack/CocoaLumberjack.h"

    ^ 1 error generated.

有人可以帮我解决这个自定义配置的构建错误吗?如果需要更多详细信息,请告诉我。

最佳答案

这应该可以解决您的问题:

第一步

用这个更新你的 Podfile:

workspace 'MainProject.xcworkspace'
platform :ios, '9.0'
use_frameworks!

def shared_pods
  # all the pods go here
  pod 'CocoaLumberjack/Swift'
end

target 'MainProject' do
 project 'MainProject'
 shared_pods
end

target 'SubProject1' do
 project 'Subprojects/SubProject1/Subproject1'
 shared_pods
end

第二步

在终端上运行此命令以从项目中卸载 pod,以便稍后进行全新安装:

pod deintegrate

第 3 步

删除 Podfile.lock

rm -rf Podfile.lock

第四步

再次运行安装:

pod install

第 5 步

如果您使用 Lumberjack 作为框架,您可以像这样导入:

@import CocoaLumberjack

希望它能解决,请告诉我结果...

注意事项:

或者您可以尝试 NSLogger也适用于混合的 objective-c + swift 项目。

还有 other alternatives

关于ios - Cocoapod - 混合 Objective-C 和 Swift 项目中自定义配置的构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45768104/

相关文章:

ios - 使用 Bundle Identifier(无 url scheme)点击按钮打开应用程序

iphone - 使用 iOS 处理条形码/QRcode

swift - NSStringEnumerationOptions.ByWords 出现错误 - Swift 4.2

objective-c - 更改 UINavigationBar 字体属性?

ios - 将 NSString 转换为 Objective-C 控件

iphone - SearchDisplay Controller 没有显示我的搜索结果

ios - Swift 协议(protocol)错误

iOS:实现实时音频流的正确方法是什么?

ios - 在 Swift 中使用 UITableView 以编程方式切换 View

html - 无法通过 NSAttributedString 使 <img> 适合 UITextView/HTML 中的屏幕宽度