我有一个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 回答
检查错误消息是否源自"Unity-iPhone Tests"目标 . 可能发生的事情是您的源文件是两个构建目标的成员,并且由于pod
GooglePlayGames
仅包含在主目标中,因此您的Tests目标将会抱怨,因为它无法编译您的源代码而没有代码所指的依赖项 .解决此问题的一种方法是取消标记测试目标的源文件,并暂时注释掉特定于测试的代码 . 现在看看它是否可以编译 .
稍后,为了让您的测试再次运行,您可以将某些源文件标记为测试目标的成员,特别是不引用依赖项的代码,或者完全抽象出依赖项的代码,以便测试目标不会需要了解它们 . 这样,您仍然可以直接在两个目标之间共享一些代码,并能够测试某些需要测试的东西 .
另一个可能更好的解决方案是从测试中取消标记所有内容,并将
import Unity-iPhone
添加到测试文件的顶部 . "downside"这是你必须花时间调整主目标中代码的范围(即public
vsinternal
vsprivate
),以确保测试模块可以看到类和函数 . 请注意这一点,因为如果您正在创建其他开发人员将使用的库项目,那么您在此处更改范围可能会产生重要影响 .gpg.framework是GooglePlayGames Pod的一部分,因此它链接到libPod.a . Unity-iPhone项目链接到libPod,这就是它找到gpg lib的方式 .
您可以通过查看Pods / GooglePlayGames来查看Pod中包含的内容 .
您正在接受哪些版本的podspec?如果你查看Podfile.lock,它有一些信息 . 我的项目正在运行,这是我的Podfile.lock内容:
Cocoapods还有一些故障排除提示:https://guides.cocoapods.org/using/troubleshooting.html