NB: This is related to this question on project structure, but I have decided to a vastly the use-case to better abstract the problem.
Problem
How do I include afnetworking in my iOS App and an accompanying iOS Extension (ios8-extention, ios8-today-widget or ios8-share-extension) via CocoaPods?
Issues
For use in Extensions, AFNetworking needs to be build with
#define AF_APP_EXTENSIONS
, does this mean I need 2 versions AFNetworking? One for the Extension and one for the App?How do I set up the Podfile so frameworks are built and copied to the correct places? Documentation on
use_frameworks!
is a bit thin.
Update:
As Rhythmic Fistman mentioned the original answer's method gets overwritten when doing a new pod install.
Aelam provided the following method in this Github issue:
Obsolete answer:
1) Be sure that
pod 'AFNetworking'
is included for both targets (your container app and extension) in your podfile.Example in my case:
2) In XCode, click on Pods on the hierarchy view to bring its build options. Then on the build options, select the target for which you are looking at the build options in the dropdown. There select
Pods-{Extension Target Name}-AFNetworking
(it should have been created automatically by pod install. Then select Build Settings. Then under Apple LLVM 6.0 - Language, verify that Prefix header has a filename. That filename on my case wasTarget Support Files/Pods-{Extension Target Name}-AFNetworking/Pods-{Extension Target Name}-AFNetworking-prefix.pch
. If it doesn't have such a filename or similar then add it.3) Go to that prefix header file that was named there or you added there. It'll be almost empty, then add the following line at the end:
That should allow your container app to point to a version of AFNetworking built normally and your extension app to another built with the flag set. So only one version of the library but built in two different ways, each on one of the targets.
Updating your pod to at least version 2.6 can solve this. See the requirements table at: https://github.com/AFNetworking/AFNetworking
For newcomers to this post, things have changed a little.
I spent a fair amount of time hitting my head against a wall, hopefully this will spare some of you from that same fate.
Cocoapods changed so that it now only generates one library per pod, so in order to properly set the
AF_APP_EXTENSIONS
macro, it actually needs to be set in the AFNetworking target, not your extension's target.For example (with some pretty log statements):
Also worth noting the
pods_project
ininstaller_representation.pods_project.targets.each do |target|
Cocoapods has deprecated
project
and it has been changed topods_project
The one somewhat downside to this is that AFNetworking won't use any UIApplication APIs in the container app either, but that was a non-issue in my project.
Hope this helps.