Front-End Web & Mobile
Using the AWS SDK for iOS with Third Party Frameworks
Version 2 of the AWS Mobile SDK
- This article and sample apply to Version 1 of the AWS Mobile SDK. If you are building new apps, we recommend you use Version 2. For details, please visit the AWS Mobile SDK page.
- This content is being maintained for historical reference.
When you are using the AWS SDK for iOS and other frameworks in your project, you may encounter a duplicate symbol
error when your project fails to compile. The SDK for iOS is designed to be compatible with any properly packaged framework for iOS, but depending on the configuration of your project or included libraries, you may still encounter this error. In this post, I’ll discuss a common reason for this error and a procedure to correct it.
What causes the duplicate symbol error?
When you encounter the duplicate symbol
error with the third party libraries included in the SDK for iOS, check the flags under Build Settings > Other Linker Flags. If you see some of these three flags, this is likely the source of the error: -ObjC
, -all_load
, and -force_load
.
The -ObjC
flag is used to load Objective-C objects including categories from static libraries, and due to a linker bug in the older version of Xcode mentioned in this technical Q&A, you have to use -all_load
or -force_load
flags to properly load categories under certain situations. However, a side effect of this workaround is that it results in the duplicate symbol
error.
In short, Xcode is usually smart enough to prevent a duplicate symbol
error, but a workaround for a linker bug that existed in the old version of Xcode impairs Xcode’s ability to auto-resolve this error.
1. Remove -all_load and -force_load
When you encounter this issue, first get the latest version of Xcode without the aforementioned bug, if possible. Then remove the -all_load
flag and all of the -force_load
flags under Build Settings > Other Linker Flags. You should clean up your project and rebuild it. The error should go away. If the duplicate symbol
error didn’t go away, or you get the unrecognized selector sent to instance
error message in the runtime, the next section details how to solve this.
2. Remove -ObjC and use -force_load
Make sure you’ve removed the -ObjC
and -all_load
flags and use -force_load
flag to forcefully load categories from the third party frameworks you use. Here is an example -force_load
flag usage with the Facebook SDK:
Other Linker Flags: -force_load $(SOURCE_ROOT)/FacebookSDK.framework/Versions/A/FacebookSDK
When you clean up and rebuild your project, the unrecognized selector sent to instance
error message should go away. Do not use the -force_load
flag for the AWS SDK for iOS; it may result in the duplicate symbol
error.
Please leave a comment below if you still have issues with third party frameworks after following this procedure.