BUG= R=tkchin@webrtc.org Review URL: https://codereview.webrtc.org/1829783003 . Patch from Jon Hjelle <hjon@webrtc.org>. Cr-Commit-Position: refs/heads/master@{#12128}
51 lines
2.8 KiB
Plaintext
51 lines
2.8 KiB
Plaintext
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.
|