首页 文章

XCode项目没有获取CocoaPod配置

提问于
浏览
0

我有一个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 的子文件夹,带有调试和发布配置文件,配置基本相同,

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%确定任何配置文件实际上是有效的,因为我对它们的确切方式非常不熟悉 .

2 回答

  • 0

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

    解决此问题的一种方法是取消标记测试目标的源文件,并暂时注释掉特定于测试的代码 . 现在看看它是否可以编译 .

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

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

  • 0

    gpg.framework是GooglePlayGames Pod的一部分,因此它链接到libPod.a . Unity-iPhone项目链接到libPod,这就是它找到gpg lib的方式 .

    您可以通过查看Pods / 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

相关问题