Question

Am struggling to get TestFlight working with my MonoTouch app (Monotouch 5, IOS5) and have not found any MonoTouch documentation for TestFlight.

Here is what I tried so far.

  1. Downloaded TestFlight bindings from https://github.com/mono/monotouch-bindings/tree/master/TestFlight -- after adding this as a reference it seemed that the TestFlight methods were actually not exposed at all, so I looked for another set of bindings.

  2. Downloaded ayoung's TestFlight bindings from https://github.com/ayoung/monotouch-testflight. Built monotouch-testflight.dll with Make, copied it to the project and added to References -- this time the TestFlight methods were all visible.

  3. Added libTestFlight.a to the Lib folder in my MonoTouch project with BuildAction set to Nothing. (I also have RedLaser in there).

  4. Per ayoung, I enabled LLVM compiler (with ARMv7); ayoung states it is required. In Project Options -> iPhone Build my additional mtouch arguments are:

    -cxx -nosymbolstrip -nostrip -gcc_flags "-lgcc_eh -framework SystemConfiguration -framework CFNetwork -framework CoreVideo -framework CoreMedia -framework AVFoundation -framework OpenGLES -framework Security -L${ProjectDir}/Lib -ltestflight -RedLaserSDK -ObjC"

Note: The app worked ok with RedLaser before TestFlight was added to the project.

Here -lgcc_eh is as per ayoung -- I have not been able to find out what it is or what it is for. Perhaps I should have a gcc_eh.dll (?) but I don't AFAIK, and I don't know where I could find such a thing.

  1. In Main.cs I added

    using TestFlightSdk;

and In FinishedLaunching I added

TestFlight.TakeOff( "(downloaded team token is here)" );
  1. Compiled and installed with no error (Release|iPhone).

  2. When I now run the app on the device, it exits immediately with no diagnostic that I can discover.

  3. The app also exits immediately if compiled to Debug|iPhone. In this case, however, if I turn off LLVM despite ayoung's strictures then in Application Output I see the following:

    TestFlight: Started Session TestFlight: Crash Handlers are installed Thread started: Thread started: TestFlight: Team Token is recognized TestFlight: End of Session TestFlight: Communication with TestFlight is currently disabled, check earlier in your log for details

This might be because I have not yet uploaded the app's .ipa file to TestFlight?? (The app does launch in this case however.)

  1. I am trying to find out how to generate a .ipa file. TestFlight documentation shows how to do this from XCode but my app is code-only with no .xib so that option seems to be out? TestFlight documentation also shows how to generate a .ipa from the .app file. Here my problem is, how do I lay my hands on the .app file for a device build?

Any help with these issues would be so much appreciated.

Was it helpful?

Solution

-lgcc_eh is needed to include the Exception Handling GCC library, which is often required if you link with C++ libraries.

You also have a lot of -framework options that do not look required (MonoTouch already adds them) - but that won't be the cause of your problem. If you're curious about what mtouch use/provide at compilation time then you can add "-v -v -v" to the "additional touch arguments" in your project options (and look at the build output).

As for the main issue I think it's related to the fact the TestFlight handlers are not compatible (presently) with MonoTouch (5.0). MonoTouch exception handling already provides it's own crash handlers (e.g. for NullReferenceException) and adding other handlers needs to be done with care (how and when to do it is very important). This is likely why the current bindings in monotouch-bindings don't include every feature available in testflight.

I suggest you to open a bug report at bugzilla.xamarin.com and you'll get email updates on the progress (and know exactly when the feature will become available).

p.s. try to break your issues into several (stack overflow) questions, you're more likely to receive answers that way since not everyone knows all the answers to every question you might have :-)

OTHER TIPS

I was going down the wrong track entirely. Finally found the MonoTouch documentation which describes the built-in support for TestFlight:

http://docs.xamarin.com/ios/tutorials/TestFlight_Support

Will try this, it should solve the problem.

Distributing throug testflightapp is a different thing than using the testflightsdk in you app.

The first one is by clicking the upload to testflight button in the menu.

The second is by including the actual sdk. In the last few day they (xamarin) released new testflight sdk bindings. That don't recuire you to modify the mtouch parameters. So it should be much easier to include it.

Personally i really like the testflight sdk... Helps me better (let) test my apps.

From the sound of this Xamarin bug report, it seems as though even if you get the TestFlight SDK native library working with MonoTouch bindings or by linking it yourself, you're still going to have the problem that TestFlight is not going to properly handle any NullReference exceptions and is simply going to crash the app when it encounters one. This makes the whole point of the TestFlight SDK kind of pointless until either a) MonoTouch is re-tooled to deal with it or b) TestFlight releases a managed Mono library.

Don't get me wrong, I REALLY want to be able to use the TestFlight SDK with MonoTouch. I've been beating my head against the wall trying to get it work all day. Something is failing when I call the TestFlight.TakeOff("MyKey") method. Control does return from the method, but then it crashes shortly thereafter...about 1 second after it's called. Weird.

If anyone else has gotten it work, I'd love to hear about your experiences. Thanks.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top