blob: c234617bcad6daac8a8e8f3b5c9664b889762cdb [file] [log] [blame]
We want to generate a dynamic framework for a CocoaPod. Unfortunately, using gyp-xcode generation
for a framework currently presents some issues. To get around those issues, we chose to create a
project with Xcode for building the framework directly.
The Framework directory contains the Xcode project used to build the framework. The PodTest
directory contains a project used to confirm that the built framework installs correctly with
CocoaPods. The build_ios_framework.sh script needs to be run first, then `pod install` should be run
in the same directory as the Xcode project. After installing, the PodTest.xcworkspace should be used
instead of PodTest.xcodeproj.
USAGE
To build the framework, run the build_ios_framework.sh script. This will build static libraries for
iOS (via the build_ios_libs.sh script), collect header files and adjust import/include statements
for use inside the framework, build the framework using the Xcode project, merge multiple
architectures together, and collect the framework files (the .framework itself and the .dSYM) with
the Podspec into a common directory.
DETAILS OF THE XCODE PROJECT
The Xcode project contains relative references to the built static libraries (from
build_ios_libs.sh), with the exception of librtc_api_objc and librtc_base_objc. The iOS source files
from webrtc/api/objc and webrtc/base/objc are also included. NOTE: This will require updating
if/when the built static libraries change.
The flattened header files for webrtc/api/objc and webrtc/base/objc were also added to the Public
Headers of the framework target. NOTE: This will require updating as the Obj-C API changes.
Preprocessor definitions were copied from a gyp-xcode generated project.
RTTI was disabled due to compiler errors and based on the setting in build/common.gypi
(https://code.google.com/p/chromium/codesearch#chromium/src/build/common.gypi&q=rtti&sq=package:chromium&type=cs&l=5069).
Bitcode is disabled for the time being.
The minimum number of system frameworks were linked against based on build errors (currently
AVFoundation, AudioToolbox, CoreMedia, VideoToolbox).
The Build Products Path (SYMROOT) was changed to $SRCROOT/build so the build products are in a known
location.
The created WebRTC scheme was shared so the build_ios_framework.sh script will work on any machine
that runs it.
DEPLOYMENT_POSTPROCESSING is set to "Yes" so debug symbols will be stripped (the iOS Default for
STRIP_INSTALLED_PRODUCT is already set to "Yes").
"-ObjC" is added to OTHER_LDFLAGS to ensure category methods (in particular, those from
RTCAudioSession+Configuration.mm) are included in the framework binary.
During the build process, dSYMs will be generated for each architecture alongside each framework
bundle. These are merged together and placed alongside the final framework product.