./gradlew ios:createIPA -debug --stacktrace
to build my ipa (I assume this was the correct thing to do - I include debug and stacktrace so I can see when I get errors).
I tried to build the 64 bit as well as 32 bit so tried:
./gradlew -Probovm.ipaArchs=thumbv7:arm64 ios:createIPA -debug --stacktrace
but this fails. It does all the compiling and linking but then fails with hundreds of lines similar to:
11:31:58.456 [ERROR] [org.gradle.api.Task] duplicate symbol _OBJC_METACLASS_$_GADAdSizeWrapped in:
11:31:58.457 [ERROR] [org.gradle.api.Task] <...directory path...> /ios/libs/admob-1.0.0-beta-01.jar.extracted/META-INF/robovm/ios/libs/libadmob.a(GADAdSizeWrapped.o)
14:11:41.300 [ERROR] [org.gradle.api.Task] ld: 918 duplicate symbols for architecture arm64
14:11:41.337 [ERROR] [org.gradle.api.Task] clang: error: linker command failed with exit code 1 (use -v to see invocation)
14:11:41.340 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':ios:createIPA'
--
You received this message because you are subscribed to the Google Groups "RoboVM" group.
To unsubscribe from this group and stop receiving emails from it, send an email to robovm+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
14:07:45.422 [DEBUG] [org.gradle.api.Task] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o /data/myWorkspace/myGame/ios/build/robovm.tmp/thumbv7/myGame -arch armv7 -Wl,-filelist,/data/myWorkspace/myGame/ios/build/robovm.tmp/thumbv7/objects -L /Users/myUserid/.m2/repository/org/robovm/robovm-dist/1.0.0-beta-03/unpacked/robovm-1.0.0-beta-03/lib/vm/ios/thumbv7 -ObjC -exported_symbols_list /data/myWorkspace/myGame/ios/build/robovm.tmp/thumbv7/exported_symbols -Wl,-no_implicit_dylibs -Wl,-dead_strip -miphoneos-version-min=5.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -lrobovm-bc -force_load /Users/myUserid/.m2/repository/org/robovm/robovm-dist/1.0.0-beta-03/unpacked/robovm-1.0.0-beta-03/lib/vm/ios/thumbv7/librobovm-rt.a -lrobovm-core -lgc -lpthread -ldl -lm -liconv -lsqlite3 -framework Foundation -framework AudioToolbox -framework AVFoundation -framework CoreGraphics -framework CoreTelephony -framework MessageUI -framework SystemConfiguration -framework UIKit -framework OpenGLES -framework QuartzCore -framework OpenAL -framework GameKit -framework Foundation -framework StoreKit -weak_framework AdSupport -weak_framework StoreKit -force_load /Users/myUserid/.robovm/cache/ios/thumbv7/release/data/myWorkspace/myGame/ios/libs/admob-1.0.0-beta-01.jar.extracted/META-INF/robovm/ios/libs/libadmob.a -force_load /data/myWorkspace/myGame/ios/build/libs/ios/libgdx.a -force_load /data/myWorkspace/myGame/ios/build/libs/ios/libObjectAL.a
And here is the clang for the arm64 that failed ... and it contains the admob library twice !
14:11:37.830 [DEBUG] [org.gradle.api.Task] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -o /data/myWorkspace/myGame/ios/build/robovm.tmp/arm64/myGame -arch arm64 -Wl,-filelist,/data/myWorkspace/myGame/ios/build/robovm.tmp/arm64/objects -L /Users/myUserid/.m2/repository/org/robovm/robovm-dist/1.0.0-beta-03/unpacked/robovm-1.0.0-beta-03/lib/vm/ios/arm64 -ObjC -exported_symbols_list /data/myWorkspace/myGame/ios/build/robovm.tmp/arm64/exported_symbols -Wl,-no_implicit_dylibs -Wl,-dead_strip -miphoneos-version-min=5.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -lrobovm-bc -force_load /Users/myUserid/.m2/repository/org/robovm/robovm-dist/1.0.0-beta-03/unpacked/robovm-1.0.0-beta-03/lib/vm/ios/arm64/librobovm-rt.a -lrobovm-core -lgc -lpthread -ldl -lm -liconv -lsqlite3 -framework Foundation -framework AudioToolbox -framework AVFoundation -framework CoreGraphics -framework CoreTelephony -framework MessageUI -framework SystemConfiguration -framework UIKit -framework OpenGLES -framework QuartzCore -framework OpenAL -framework GameKit -framework Foundation -framework StoreKit -weak_framework AdSupport -weak_framework StoreKit -force_load /Users/myUserid/.robovm/cache/ios/arm64/release/data/myWorkspace/myGame/ios/libs/admob-1.0.0-beta-01.jar.extracted/META-INF/robovm/ios/libs/libadmob.a -force_load /Users/myUserid/.robovm/cache/ios/thumbv7/release/data/myWorkspace/myGame/ios/libs/admob-1.0.0-beta-01.jar.extracted/META-INF/robovm/ios/libs/libadmob.a -force_load /data/myWorkspace/myGame/ios/build/libs/ios/libgdx.a -force_load /data/myWorkspace/myGame/ios/build/libs/ios/libObjectAL.a
CreateIPATask.invoke() calls AbstractRoboVMTask.configure() before it is aware of which architectures to use, and creates classpath.
This includes all the jar files including the admob jar that's in the ios/libs
/myWorkspace/myProject/ios/libs/admob-1.0.0-beta-01.jar
It then issues
AppCompiler compiler = new AppCompiler(builder.build());
which calls mergeConfigsFromClasspath() which adds a thumbv7 cached version of the libadmob.a to the Config.libs because of the admob.jar that is in the classpath
/Users/myUserid/.robovm/cache/ios/thumbv7/release/myWorkspace/myProject/ios/libs/admob-1.0.0-beta-01.jar.extracted/META-INF/robovm/ios/libs/libadmob.a
It then calls
compiler.createIpa(archs);
using arm64 as the parameter
AppCompiler.createIpa() calls Config.build() on this specific arch which causes the arm64 cached version of the libadmob.a to be added to the Config.libs
At this point there are now duplicate libadmob.a entries in the Config.libs even though one is in the thumbv7 directory in the cache and another in the arm64 directory.
So when the clang is done, we get duplicates.
gdxVersion = '1.5.3'
// gdxVersion = '1.5.4-SNAPSHOT'
roboVMVersion = '1.0.0-beta-03'
// roboVMVersion = '1.0.0-SNAPSHOT'
I've tried ABSOLUTELY EVERYTHING with these to try and get eclipse to show the SNAPSHOT versions of robovm as the gradleDependencies for my IOS project but to no avail, they always show beta03.
So, I followed Niklas (he who has to be bowed to) advice and installed the latest robovm eclipse plugin (took a bit of searching to find you have to use http://download.robovm.org/nightlies/eclipse/ as the eclipse update site ! The gradleDependencies for my IOS project still say beta03, but when I build it (outside of eclipse using gradlew) it builds 64 bit successfully !! WOOHOO !!
Now if we could only fix the memory leak when it builds ...
compile "org.robovm:robovm-rt:${roboVMVersion}"
compile "org.robovm:robovm-cocoatouch:${roboVMVersion}"
compile("com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion") {
exclude group: 'org.robovm'
}ld: file not found: /Users/user/.robovm/cache/ios/thumbv7/release/Users/user/.m2/repository/org/robovm/robovm-dist/1.0.0-SNAPSHOT/unpacked/robovm-1.0.0-SNAPSHOT/lib/robovm-rt.jar/com/android/org/bouncycastle/asn1/ASN1TaggedObjectParser.class.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)