我已将 SpatialIite
合并到一个 Xcode 项目中,该项目使用来自 Proj.4
的头文件,只有一个头文件。两者都是 Xcode 项目并具有静态目标。
我正在尝试从 git 子模块迁移到 Cocoapods。由于静态目标似乎很难与 Cocoapods 一起使用,我只想以通常的方式构建项目。我为 Proj.4
制作了 podspec。在为 SpatialLite
编写 podfile 后,我收到了警告:
[!] The target `SpatialiteIOS [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The target `SpatialiteIOS [Debug]` overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The target `SpatialiteIOS [Debug - Release]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The target `SpatialiteIOS [Debug - Release]` overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Pods.xcconfig'.
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
我阅读了 this issue,但我对警告的含义以及我能做些什么来解决它一无所知。
另外的问题是,当我打开工作区以及单独打开 SpatiaLite 项目时,两者都针对 Mac OSX 64,而假设它是一个 iOS 项目。我的 podfile 确实说“平台:ios”。
这在大多数情况下肯定有效:
转到您的目标构建设置->其他链接器标志 ->双击。将 $(inherited)
添加到新行。
如果您对“...target overrides the GCC_PREPROCESSOR_DEFINITIONS build setting defined in...”有疑问,那么您必须将 $(inherited) 添加到您的目标 Build Settings -> Preprocessor Macros
您的构建设置与 Cocoapods 想要的默认构建设置之间存在冲突。要查看 Cocoapods 构建设置,请查看项目中 Pods/Target Support Files/Pods-${PROJECTNAME}/ 中的 .xcconfig 文件。对我来说,这个文件包含:
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/Commando"
OTHER_LDFLAGS = -ObjC -framework Foundation -framework QuartzCore -framework UIKit
PODS_ROOT = ${SRCROOT}/Pods
如果您对 Cocoapods 设置感到满意,请转到项目的构建设置,找到适当的设置并按 Delete 键。这将使用来自 Cocoapods 的设置。
另一方面,如果您有需要使用的自定义设置,则将 $(inherited) 添加到该设置。
我在终端中看到了 pod 命令的这 3 个错误
pod install
[!] MY_APP [Debug/Release] 目标覆盖 HEADER_SEARCH_PATHS ... [!] MY_APP [Debug/Release] 目标覆盖 OTHER_LDFLAGS ... [!] MY_APP [Debug/Release] 目标覆盖 GCC_PREPROCESSOR_DEFINITIONS .. .
通过将 $(inherited) 添加到所有这 3 个错误将消失
标头搜索路径 其他链接器标志 预处理器宏
在项目 -> 目标 -> 构建设置中
现在该命令将运行而不会出现任何错误
pod install
Other Linker Flags
的标志还不够时,上述方法对我有用。
我在运行 pod install
时遇到了类似的问题,我看到了以下警告/错误(与 CLANG_CXX_LIBRARY
相关):
来自 Cocoapods 的错误/警告
[!] The `Project [Debug]` target overrides the `CLANG_CXX_LIBRARY` build setting defined in `Pods/Target Support Files/Pods/Pods.debug.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
[!] The `Project [Release]` target overrides the `CLANG_CXX_LIBRARY` build setting defined in `Pods/Target Support Files/Pods/Pods.release.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or
- Remove the build settings from the target.
修复
选择您的项目,以便您可以看到构建设置。选择您的目标(目标下的 AppName) 查找 C++ 标准库(它可能是粗体 - 这意味着它已被覆盖)。选择线(所以它突出显示为蓝色),然后按 ⌘ + DELETE(Command + Backspace)
该行不应再加粗,如果您运行 pod install
,警告/错误应该会消失。
视觉辅助
https://i.stack.imgur.com/PEvCc.jpg
在您的项目中,找到 Target -> Build Settings -> Other Linker Flags
,选择 Other Linker Flags
,按 delete
(Mac 键盘)/Backspace
(普通键盘)恢复设置。这个对我有用。
例子:
https://i.stack.imgur.com/M3V6J.png
https://i.stack.imgur.com/CG7fH.png
对我来说,问题在于我的目标测试。我的主应用目标中已经有了 $(inherited)
标志。
https://i.stack.imgur.com/oVPG1.png
如果 Xcode 在链接时抱怨,例如找不到 -lPods 的库,它不会检测到隐式依赖项:
转到 Product > Edit Scheme 单击 Build 添加 Pods 静态库 Clean 并再次构建
下面的第一行链接拯救了我的一天:
要将值添加到项目构建设置中的选项,请在值列表前面加上 $(inherited)。
https://github.com/CocoaPods/CocoaPods/wiki/Creating-a-project-that-uses-CocoaPods#faq
另外,不要忘记在 pod 文件的开头插入这一行:
platform :iOS, '5.0'
我添加了 $(inherited) 但我的项目仍未编译。对我来说,问题是标志“仅为活动架构构建”,我必须将其设置为“是”。
不要忘记在 pod 文件的开头插入(或取消 Commanet)这一行:
platform :iOS, '9.0'
这节省了我的一天
platform: ios, '9.0'
并且不能解决问题。
每次我将 pod 添加到 podfile 时,都会发生这种情况。
我不断尝试寻找问题,但我只是一次又一次地转圈!
错误信息范围很广,但是每次修复的方法都是一样的!
注释掉 (#) podfile 中的所有 pod 并在终端中运行 pod install。
然后...
取消注释掉 podfile 中的所有 pod,然后再次运行 pod install。
这对我每次都有效!
当我将 $(inherited) 标志添加到相关文件(在本例中为 LIBRARY_SEARCH_PATHS)时,它导致了另一个错误 Undefined symbols for architecture arm64: "_swift_getTypeByMangledNameInContextInMetadataState
更改以下内容有效,我能够构建:
>LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
- "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", <--- Change this...
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.2/$(PLATFORM_NAME)\"", <--- to this
"\"$(inherited)\"",
> );
GCC_PREPROCESSOR_DEFINITIONS
构建设置”有问题,那么您必须将 $(inherited) 添加到您的目标构建设置 ->预处理器宏$(inherited)
已经在顶行,但它对我不起作用:/