A Frank field trip
Today I’m visiting 955 Dreams (the guys who make Band of the Day, amongst other things) visiting my friend (and their CTO) Chris. We had a fun time figuring out how to get Frank to play nicely with CocoaPods. It wasn’t that tricky, and I’m going to document what we found here to hopefully make it easier for other Cocoapod users.
Problem the first
Frank had trouble with cocoapods for two reasons. Firstly when frankifying the app we needed to frankify the app’s Xcode project, but to build the app we needed to point
frank build at the main Xcode workspace, so that cocoapods could work its magic during the build. This was simply a case of passing the appropriate
--scheme arguments to
Problem the second
Cocoapods uses a Pods.xcconfig which overides the
OTHER_LDFLAGS linker flag setting (amongst other things). Part of the work that
frank setup does is to include some frank-specific settings in the project’s linker flags. Since cocoapods overrides
OTHER_LDFLAGS the frank-specific additions are lost, meaning that the Frank server doesn’t get linked into the app. To fix this we created a seperate .xcconfig file that included both the cocaoapods and the frank .xcconfig files:
However to get xcodebuild to use that file we had to abandon
frank build (which is really just a thin wrapper around xcodebuild) and instead just invoke xcodebuild directly, passing in a
-xcconfig argument. That worked and solved the problem but I think there’s an alternative approach that would let you still use
frank build. Adding a
#include "../Pods.xcconfig" line to the top of the frankify.xcconfig file should achieve the same ends.
The happy ending
Either way, after making those changes we were able to get a Frankfied app up and running and inspectable within Symbiote. I told Chris that I think long term it usually ends up being better to create a Frankified app in CI by creating a custom xcodebuild setup. We’ve established today what’s needed to do that with an app which uses Cocoapods.