以下步骤需要在墙外(的速度不要太慢):
一、下载代码
1. 下载depot_tools
$ svn co http://src.chromium.org/svn/trunk/tools/depot_tools
2. 打开source .bash_profile 添加depot_tools路径到系统目录 export PATH=$PATH:/Users/mac/depot_tools
3.
$ cd /Users/mac/depot_tools $ gclient config http://webrtc.googlecode.com/svn/trunk
4.
$ gclient sync --force
在这一步block了很久,遇到了以下错误:
Error: Command download_from_google_storage --directory --recursive --num_threads=10 --no_auth --bucket chromium-webrtc-resources trunk/resources returned non-zero exit status 1 in /Users/xxx/work/webrtc/depot_tools Hook 'download_from_google_storage --directory --recursive --num_threads=10 --no_auth --bucket chromium-webrtc-resources trunk/resources' took 20.05 secs
最后在google code下找到了解决的办法:
(https://code.google.com/p/webrtc/issues/detail?id=2811)
找到 trunk/DEPS 下的这几行代码并把它注释掉 { # Download test resources, i.e. video and audio files from Google Storage. "pattern": "\\.sha1", "action": ["download_from_google_storage", "--directory", "--recursive", "--num_threads=10", "--no_auth", "--bucket", "chromium-webrtc-resources", Var("root_dir") + "/resources"], },
5. $gclient runhooks --force
6. 进入 trunk目录,打开all.xcodeproj/
二、编译源码:
根据 trunk/talk/app/webrtc/objc/README 说明,编译源码。
1.找到WebRTC目录下.gclient 文件的内容,添加 target_os = ['ios', 'mac']
2. 在.gclient下添加后,在终端WebRTC路径下,重新执行:
gclient sync
3.1. 编译为MAC版本
进入trunk路径,执行如下命令
export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_objc=1" export GYP_GENERATORS="xcode"
最后找到trunk路径下的all.xcodeproj,用xcode打开就可以了。
3.2. 编译为iOS模拟器版本
export GYP_DEFINES="$GYP_DEFINES OS=ios target_arch=ia32" export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_sim" export GYP_CROSSCOMPILE=1 gclient runhooks ninja -C out_sim/Debug iossim AppRTCDemo
执行了这些后,会在trunk/out_sim/Debug 路径下会产生一个文件 AppRTCDemo.app
执行下列命令即可启动demo
./out_sim/Debug/iossim out_sim/Debug/AppRTCDemo.app
执行 gclient runhooks 遇到这个错误:
AssertionError: Multiple codesigning fingerprints for identity: iPhone Developer
参考:http://ninjanetic.com/how-to-get-started-with-webrtc-and-ios-without-wasting-10-hours-of-your-life/
在文件 : trunk/tools/gyp/pylib/gyp/xcode_emulation.py and at lines 832-833 comment the following line :
#assert identity not in cache or fingerprint == cache[identity], (
#”Multiple codesigning fingerprints for identity: %s” % identity)
解决问题。
3.3 编译为iOS真机版本
a. 安装homebrew
http://chriszeng87.iteye.com/blog/2077674
b.
brew install ideviceinstaller --HEAD
(时间较长)
c.
touch makeall-iosdevice.sh chmod +x makeall-iosdevice.sh
把以下内容复制到你刚刚创建的文件中
function fetch() { echo "-- fetching webrtc" gclient config http://webrtc.googlecode.com/svn/trunk/ echo "target_os = ['mac']" >> .gclient gclient sync sed -i "" '$d' .gclient echo "target_os = ['ios', 'mac']" >> .gclient gclient sync echo "-- webrtc has been sucessfully fetched" } function wrbase() { export GYP_DEFINES="build_with_libjinglth_chromium=0 libjingle_objc=1" export GYP_GENERATORS="ninja" } function wrios() { wrbase export GYP_DEFINES="$GYP_DEFINES OS=ios target_arch=armv7" export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_ios" export GYP_CROSSCOMPILE=1 } function wrmac() { wrbase export GYP_DEFINES="$GYP_DEFINES OS=mac target_arch=x64" export GYP_GENERATOR_FLAGS="$GYP_GENERATOR_FLAGS output_dir=out_mac" } function buildios() { echo "-- building webrtc ios" pushd trunk wrios && gclient runhooks && ninja -C out_ios/Debug-iphoneos AppRTCDemo popd echo "-- webrtc has been sucessfully built" } function launch() { echo "-- launching on device" ideviceinstaller -i trunk/out_ios/Debug-iphoneos/AppRTCDemo.app echo "-- launch complete" } function fail() { echo "*** webrtc build failed" exit 1 } #fetch || fail wrios || fail buildios || fail launch || fail
最后
./makeall-iosdevice.sh
大功告成。
以上参考了:
1. http://www.cnblogs.com/leehongee/p/3383266.html
2. http://blog.csdn.net/qs_csu/article/details/17416003
3. http://ninjanetic.com/how-to-get-started-with-webrtc-and-ios-without-wasting-10-hours-of-your-life/