我试图在我的LibGDX iOS项目上实现google,当我试图启动这个游戏时,我得到了以下错误:
[ERROR] 14:44:17.979 Undefined symbols for architecture arm64:
[ERROR] 14:44:17.980 "_OBJC_CLASS_$_GADInterstitial", referenced from:
[ERROR] 14:44:17.981 objc-class-ref in libGGLAdMob.a(GGLContext+AdMob.o)
[ERROR] 14:44:18.114 (maybe you meant: _OBJC_CLASS_$_GADInterstitialAd)
[ERROR] 14:44:18.157 ld: symbol(s) not found for architecture arm64
[ERROR] 14:44:18.180 clang: error: linker command failed with exit code 1 (use -v to see invocation)
[ERROR] Couldn't compile app
我的gradle
文件中有以下内容:
buildscript {
....
dependencies {
classpath 'com.android.tools.build:gradle:7.1.3'
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.15'
//for ads for firebase
classpath 'com.google.gms:google-services:4.3.10'
}
}
allprojects {
apply plugin: "eclipse"
version = '1'
ext {
...
gdxVersion = '1.10.0'
roboVMVersion = '2.3.15'
...
}
...
}
project(":ios") {
apply plugin: "java-library"
apply plugin: "robovm"
//publish on app store (iOS)
configurations {natives}
dependencies {
...
//robopods
implementation "com.mobidevelop.robovm:robopods-google-mobile-ads-ios:2.2.3"
}
//publish on app store (iOS)
robovm {
// Configure robovm
iosSignIdentity = "Apple Distribution: XXXXXX XXX (XXXXXXXXX)"
iosProvisioningProfile = "XXXX XXXX"
iosSkipSigning = false
arch = "arm64"
stdoutFifo = ""
stderrFifo = ""
}
}
我从这里下载了admob:https://developers.google.com/admob/ios/download
我解压缩文件并将sdk添加到项目中ios
文件夹中的文件夹中。
我在ios文件夹中创建了libs
、arm_libs
和sim_libs
。
然后我将所有.xcframework文件(在我的下载文件夹中)复制并粘贴到libs
文件夹中。然后从我的下载文件夹复制并粘贴.xcframework
文件夹中的.xcframework
文件到arms_libs
和sim_libs
文件夹中。
在Info.plist.xml
中,我将admob添加如下:
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-xxxxxxxxxxxxxxx~xxxxxxxxx</string>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
在robovm.xml
文件中,我添加了以下内容:
<frameworkPaths>
<path>libs</path>
<path variant="device">arm_libs</path>
<path variant="simulator">sim_libs</path>
</frameworkPaths>
<frameworks>
....
<!-- googleMobileAdsASKiOS 9.5.0-->
<framework>GoogleAppMeasurement</framework>
<framework>GoogleMobileAds</framework>
<framework>GoogleUtilities</framework>
<framework>nanopb</framework>
<framework>PromisesObjC</framework>
<framework>UserMessagingPlatform</framework>
<framework>GoogleAppMeasurementIdentitySupport</framework>
</frameworks>
然后启动物理设备(iPhone 8),得到以下错误:
[ERROR] 14:44:17.979 Undefined symbols for architecture arm64:
[ERROR] 14:44:17.980 "_OBJC_CLASS_$_GADInterstitial", referenced from:
[ERROR] 14:44:17.981 objc-class-ref in libGGLAdMob.a(GGLContext+AdMob.o)
[ERROR] 14:44:18.114 (maybe you meant: _OBJC_CLASS_$_GADInterstitialAd)
[ERROR] 14:44:18.157 ld: symbol(s) not found for architecture arm64
[ERROR] 14:44:18.180 clang: error: linker command failed with exit code 1 (use -v to see invocation)
[ERROR] Couldn't compile app
....
我尝试了许多不同的解决方案,我在网上找到,但似乎没有任何效果。任何帮助都将不胜感激。谢谢!
发布于 2022-07-28 07:33:38
更新:根案例是com.mobidevelop.robovm:robopods-google-mobile-ads-ios
,它依赖于com.mobidevelop.robovm:robopods-google-apis-ios
,并且这个伪文件包含本机库libGGLCore.a,它公开了这些缺失的依赖项。这个库没有源代码,从2016年起,RoboVM被女士关闭,您不应该使用这些绑定,因为这些绑定没有更新。考虑使用alt-pods
作为更新的和正在更新(由我)
MobiVM 吉特频道上也有类似的问题。很少有这样的时刻:
libGGLAdMob.a
的引用也没有对_OBJC_CLASS_$_GADInterstitial
的引用。您可以通过在GAD框架上搜索二进制文件或使用nm
工具来检查这一点;com.mobidevelop.robovm:robopods-google-mobile-ads-ios
已经过时了。从根本上讲,使用错误的框架(例如旧框架)是有可能的。
作为测试的一种快速方法,这里有一个使用丙氨酸豆荚绑定(通常是最近的) https://github.com/dkimitsa/alt-pods-tests/tree/master/firebase-google-ads的示例项目
https://stackoverflow.com/questions/72439256
复制相似问题