【问题标题】:XCode project not picking up CocoaPod configurationXCode 项目没有选择 CocoaPod 配置
【发布时间】:2015-08-10 20:16:05
【问题描述】:

我有一个 XCode 项目,Unity-iPhone,它配置了一个 Podfile,

platform :ios

target 'Unity-iPhone' do
pod 'GooglePlayGames', '~> 4.4'
end

target 'Unity-iPhone Tests' do

end

以及与Unity-iPhone 相邻的Pods 项目的所有内容,甚至Unity-iPhone 项目似乎 设置正确。

Unity-iPhone里面有个子文件夹Pods,里面有debug和release配置文件,配置基本一样,

FRAMEWORK_SEARCH_PATHS = "$(PODS_ROOT)/GooglePlayGames/gpg-cpp-sdk/ios" "$(PODS_ROOT)/google-plus-ios-sdk/google-plus-ios-sdk-1.7.1" "$(PODS_ROOT)/google-plus-ios-sdk/google-plus-ios-sdk-1.7.1"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GooglePlayGames" "${PODS_ROOT}/Headers/Public/GooglePlayGames/gpg" "${PODS_ROOT}/Headers/Public/google-plus-ios-sdk" "${PODS_ROOT}/Headers/Public/google-plus-ios-sdk/GoogleOpenSource" "${PODS_ROOT}/Headers/Public/google-plus-ios-sdk/GooglePlus"
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GooglePlayGames" -isystem "${PODS_ROOT}/Headers/Public/GooglePlayGames/gpg" -isystem "${PODS_ROOT}/Headers/Public/google-plus-ios-sdk" -isystem "${PODS_ROOT}/Headers/Public/google-plus-ios-sdk/GoogleOpenSource" -isystem "${PODS_ROOT}/Headers/Public/google-plus-ios-sdk/GooglePlus"
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "AddressBook" -framework "AssetsLibrary" -framework "CoreData" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "Foundation" -framework "GoogleOpenSource" -framework "GooglePlus" -framework "MediaPlayer" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "gpg"
PODS_ROOT = ${SRCROOT}/Pods

这看起来完全正确。这些配置从项目设置中正确链接,但是当我尝试构建时,根本没有对gpg 的引用(gpg 是链接期间需要的二进制文件),并且构建失败,所有对声明的引用来自显然失败了。

如果我在构建设置中手动编辑必要的框架,并添加gpg,构建工作,所以框架路径,然后在此之前,标题路径都很好。但是 pod 配置文件中的 OTHER_LDFLAGS 配置只是被忽略/最初从未包含。

老实说,我不能 100% 确定任何配置文件是否真的有效,因为我对它们组合在一起的确切方式相当不熟悉。

【问题讨论】:

    标签: ios xcode cocoapods google-play-games


    【解决方案1】:

    检查错误消息是否源自“Unity-iPhone 测试”目标。可能发生的情况是您的源文件是两个构建目标的成员,并且由于 pod GooglePlayGames 仅包含在主要目标中,因此您的 Tests 目标会抱怨,因为如果没有代码所指的依赖项,它就无法编译您的源代码到。

    对此的一种解决方案是取消标记 Tests 目标的源文件,并暂时注释掉您的 Tests 特定代码。现在看看它是否可以编译。

    稍后,为了让您的测试再次运行,您可以将某些源文件标记为测试目标的成员,特别是不引用依赖项的代码,或者完全抽象出您的依赖项以便测试目标的代码根本不需要知道他们。这样,您仍然可以直接在两个目标之间共享一些代码,并能够测试某些需要测试的东西。

    另一个可能更好的解决方案是取消标记测试中的所有内容并将import Unity-iPhone 添加到测试文件的顶部。这样做的“缺点”是您必须花时间调整主要目标中的代码范围(即public vs internal vs private)以确保类和函数对测试可见模块。请注意这一点,因为如果您正在开发其他开发人员将使用的一系列应用程序,或者如果您正在创建其他开发人员将使用的库项目,那么您如何在此处更改范围可能会产生重要影响。

    【讨论】:

    • 为答案干杯,但不,这 100% 仅与主项目相关,与测试无关。我想我通过说明我是否添加对 gpg 的引用来澄清这一点,如果解决了问题。与她的测试项目无关。
    • 啊,好点,我忽略了这一点。症状听起来很相似。我记得在一个项目中,我不得不使用github.com/kylef/cocoapods-deintegrate 从项目中完全删除与 cocoapods 相关的构建设置并重新安装。
    【解决方案2】:

    gpg.framework 是 GooglePlayGames Pod 的一部分,因此它链接到 libPod.a。 Unity-iPhone 项目链接到 libPod,因此它是如何找到 gpg 库的。

    您可以通过查看 Pod/GooglePlayGames 查看 Pod 中包含的内容。

    您选择的是哪个版本的 podspec?如果你查看 Podfile.lock,它有一些信息。我的项目正在运行,这是我的 Podfile.lock 内容:

    PODS:
      - google-plus-ios-sdk (1.7.1)
      - GooglePlayGames (4.4.1):
      - google-plus-ios-sdk (>= 1.5)
    
    DEPENDENCIES:
      - GooglePlayGames (~> 4.4)
    
    SPEC CHECKSUMS:
      google-plus-ios-sdk: 47adbe03ea904bdb7aa1c0eca282a23c4686e1bc
      GooglePlayGames: 9102e31d4e04e7a642419fef9a4cf0814a128b7d
    

    还有一些针对 Cocoapods 的故障排除技巧:https://guides.cocoapods.org/using/troubleshooting.html

    【讨论】:

    • 嘿 Clayton,是的,我的 Podfile.lock 和我的 Podfile.lock 完全相同,但最后多了一个 COCOAPODS: 0.38.2 行。不幸的是,正如我所说,一切看起来都是 100% 正确的,Pods 部分中的一切看起来都是正确的,而且每个库和框架文件看起来都存在并且一切都很好,但是在构建主项目时,事情就是没有联系起来。跨度>
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    相关资源
    最近更新 更多