I’m preparing Meet Kinksters for a beta release, and a big (and time consuming, and frustrating…) part of this is building and debugging binaries for both iOS and Android. I use the excellent and powerful Expo framework for our React Native app and distribution. Expo is great, however it can’t ease all the pain in debugging especially when building “production” releases which lack most development logging and debugging tools.
One particular frustration was debugging an almost immediate crash of my production app as soon as the splash screen appeared. This being a production build, there is no logging to a console on my remote host/laptop. Even stranger still, because I was running the app through Fastlane I had no crash logs in the normal Analytics settings tab.
Out of despiration, I started searching for ways to stream console logs from my iPad (bought specifically to test my iOS app - under protest!) and most answers were to use Xcode. I think Apple’s closed development ecosystem is a shameless cash grab, so no Mac for me.
I did however stumble upon
libimobiledevice, a library
with companion CLI tools to do just this!
The documentation is pretty sparse, but I was able to connect to my iPad and sift through the logs (they come fast and furious) to encounter my error. Turns out I missed some configuration options when bootstrapping the Facebook Login SDK.
$ idevice_id --list aa4adeaf1dd2688e1c5154d00f411724e914858d $ idevicesyslog -u aa4adeaf1dd2688e1c5154d00f411724e914858d ... Oct 9 04:51:39 MeetKinksters(CoreFoundation) <Notice>: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Starting with v13 of the SDK, a client token must be embedded in your client code before making Graph API calls. Visit https://developers.facebook.com/apps/2630480557258506/settings/advanced/ to find your client token for this app. Add a key named FacebookClientToken to your Info.plist, and add your client token as its value. Visit https://developers.facebook.com/docs/ios/getting-started#configure-your-project for more information.' *** First throw call stack: (0x181ab1d1c 0x1992d6ee4 0x101282ad8 0x1012825dc 0x10127ded0 0x10127e998 0x10127d080 0x10124b394 0x10124675c 0x101249494 0x181a482e8 0x181add8e4 0x181ab2c04 0x181a5d070 0x18314d04c 0x1840114c0 0x18412e05c 0x184356434 0x1842e6174 0x183ef6d44 0x183fb2934 0x183ef8ad4 0x183fdd184 0x184432f38 0x183f2677c 0x183f6851c 0x183ef4e38 0x192c1c328 0x192c3315c 0x192c19bdc 0x192c1fa68 0x181772094 0x181715150 0x192c1b2ac 0x192c1a7c0 0x192c1e960 0x181ad24fc 0x181ae262c 0x<\M-b\M^@\M-&> ...
Just say no to Apple’s vendor lock-in!