我有一个XCode项目,Unity-iPhone
配置了Podfile,
platform :ios
target 'Unity-iPhone' do
pod 'GooglePlayGames', '~> 4.4'
end
target 'Unity-iPhone Tests' do
end
与Pods
相邻的Unity-iPhone
项目,甚至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%确定任何配置文件实际上都有效,因为我对它们的确切方式非常不熟悉。
答案 0 :(得分:0)
检查错误消息是否来自" Unity-iPhone测试"目标。可能发生的事情是您的源文件是两个构建目标的成员,并且由于pod GooglePlayGames
仅包含在主目标中,因此您的Tests目标会抱怨因为它无法编译您的源而没有依赖项代码指的是。
对此的一个解决方案是取消标记测试目标的源文件,并暂时注释掉特定于测试的代码。现在看看它是否可以编译。
稍后,为了让您的测试再次运行,您可以将某些源文件标记为测试目标的成员,特别是不引用依赖项的代码,或者完全抽象出依赖项的代码,以便测试目标根本不需要了解它们。这样,您仍然可以直接在两个目标之间共享一些代码,并能够测试某些需要测试的内容。
另一个可能更好的解决方案是取消标记测试中的所有内容,并将import Unity-iPhone
添加到测试文件的顶部。 "缺点"为此,您必须花时间调整主要目标中的代码范围(即public
vs internal
vs private
),以确保类和函数对于测试模块。请注意这一点,因为如果您正在开发其他开发人员正在开发的应用程序系列,或者如果您正在创建其他开发人员将使用的库项目,那么您在此处更改范围可能会产生重要影响
答案 1 :(得分: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