How to get started with WebRTC and iOS without wasting 10 hours of your life

I recently had the chance to play around with the new WebRTC framework, a really cool new technology that will eventually allow for point-to-point real-time video chat without plug-ins or extra software. Ideally this technology will be built into all modern browsers (it’s already in Chrome and Firefox!) but Apple is definitely dragging their feet. If you want to incorporate this technology into an iOS application, you need to directly use the WebRTC libraries that implement the protocol. Fortunately, an Objective-C implementation of just about everything exists and is free to use.
That being said, incorporating the WebRTC libraries into your project is a total nightmare. The project is set up to support a large number of platforms simultaneously, so the build system is extremely complicated. Forget about opening Xcode and using interface builder, you are going to be doing everything from the command line if you want to work directly with the libraries.

Why not just take the compiled libraries and build on top of them? WebRTC is still on the bleeding edge of development, and changes are being made to the framework almost every day. Until a stable release point is reached, you will need to pull in the latest library changes as they happen in order to stay on top of development.

If you are building a production application then you are going to need to get down in the guts and work directly with the libraries, and in order to compile them you need to jump through a bunch of hoops (especially if you are working with Xcode 5 and iOS 7). It took a surprising amount of effort to get this to build for the simulator, and then trying to get it to build for a device was even more work. In hopes of saving other people some time, here’s a compilation of all the steps I needed to do to get the example application building and then running on both the iOS simulator and a physical device.

Get the code base

Keep in mind that at the time of this writing, this is a project being very actively developed. It’s very likely the build process is going to change as time goes on. These instructions are based on syncing the code base at revision r7538.

Come back a few days later when it’s finished downloading, and then you can move on to setting up the build.

Building and running on the iOS 7/8 simulator

This source code is capable of building for a number of different platforms, and since we are only interested in building for iOS we are going to create our own build script that compiles and runs exclusively for the iOS simulator. That’s right, forget about actually using Xcode we are going to be building everything from the command line. Oh yeah!

First, at the top level of your working directory create a new shell script file to kickoff the build:

# Run the function specified by the first parameter on the command line

$@

This script contains a few functions that allow you to build the AppRTC example app for a few different purposes. First, build the source code and example application by running the script with the following parameter:

./build_apprtc.sh build_iossim

Once the build has completed successfully, launch the iOS simulator and run the example application by using the following parameter:

./build_apprtc.sh run_simulator

Your iOS simulator should pop up automatically and launch the test application. To give it a try, you’re going to have to create a video session that the test application can connect to. The easiest way to do this is:

1) Open a Chrome browser tab on your computer or Android device (I’ve had great success with the Google Nexus 7 and 10).

2) Go to http://apprtc.appspot.com

3) Give the browser permissions to access your camera, and wait for your smiling face to show up.

4) Notice that the URL in your browser has changed. It will now look something like this:

http://apprtc.appspot.com?r=87514723

5) The number appended to the end of the URL is the room number. This is the key piece of information you need to get the test application to connect. Switch back to the iOS simulator, and type that number into the text box. Press the join button on the keyboard and away it will go. The test application has not been the most reliable thing in the world for me, see you might need to try a few times before it connects successfully. Also be careful with the volume on your computer, it’s super easy to get a feedback loop going.

We have a demo! Now let’s see if we can get this thing to work on an actual iOS device.

Building and running directly on an iOS device

To build the test application for an actual iOS device, use the following parameter:

./build_apprtc.sh build_iosdevice

The script will switch the architecture to armv7 and codesign the application. In order to upload the compiled application to an attached iOS device, we need to install an additional tool called ideviceinstaller. Its super-easy to install using homebrew (although it takes a while to build).

brew install ideviceinstaller --HEAD

Once that tool is installed, you can use another parameter on the build script to install and run the application on your attached iOS device:

./build_apprtc.sh run_on_device

Curveball: IOS 7

(NOTE: the latest revisions of the framework have solved this problem, so you can skip this step. I’m leaving the solution here for those that run into it)

The build scripts were designed with iOS 6 in mind, and include an obsolete framework not available in the iOS 7 SDK. Building the code for an actual iOS device will spit out an error that reads something like “ld: framework not found IOKit”. Fortunately, fixing this problem is as easy as deleting a few lines. Open src/talk/libjingle.gyp and search for:

framework IOKit

There should be 2 instances of that in the file, just delete both of those lines.

Curveball: Codesigning

The build scripts will look through your keychain and use the code signing identity associated with “iPhone developer”. If you have a single identity registered (i.e. you only ever work with one team or developer account) everything should be fine. If this is you, skip down to the “finally” section below.

If you do not have a valid code signing identity set up & a provisioned iOS device attached to your computer, it’s not going to work. Follow Apple’s guides on how to create an identity and provisioning profile.

If you are an iOS developer that works with multiple clients, odds are that you have multiple code signing identities for the identity “iPhone developer”. The WebRTC build scripts do not have proper handling for this situation, and will throw assertions if you have more than one code signing identity. Fortunately, we can modify the global build configuration to specify the exact code signing identity to use.

First, find the list of valid code signing identities that are available by running this from the command line:

security find-identity

You should see a block of output with all of your valid (and expired) identities. Look for the block at the bottom titled “Valid identities only”

Choose the identity most appropriate for this project, and copy the text between the quotation marks on the corresponding line. Next, open the global configuration file src/build/common.gypi and search for the text ‘CODE_SIGN_IDENTITY’. It should occur around line 4830:

By default, the test application will be built with a bundle ID of com.google.AppRTCDemo. If the signing identity & associated provisioning profile is restricted to a specific bundle ID or wildcard, you might need to switch the test project bundle ID to match (You will see the error “Install – Error occured: ApplicationVerificationFailed” if this is the case). To do that, open the file src/talk/examples/objc/AppRTCDemo/ios/Info.plist and change the following lines to match whatever bundle ID you need:

1

2

<key>CFBundleIdentifier</key>

<string>com.google.AppRTCDemo</string>

Save the file, and kick off the build again. Otherwise, the build will fail with an error similar to “AssertionError: Multiple codesigning identities for identity: iPhone Developer”.

If you are still having trouble with the build choosing the right provisioning profile for the device you are working with, you can take a look at the provisioning profile that was chosen for you with the following command:

NOTE: If you are switching bundle IDs, the build might not automatically pick up the changes. The best way to make sure it rebuilds the test app with the new bundle ID is to delete the output directory at src/out_ios/

If the build is pulling in the wrong provisioning profile even though you have the correct codesigning identity specified, there is a way to manually replace the embedded provisioning profile from the compiled AppRTCDemo.app with the following steps. It’s better to figure out the upstream problem though, since you would have to do this every single time you compile. If you really must do this every time, then you can add the following commands into the end of your makeall-iosdevice.sh script.

1) Delete the existing code signature from the compiled app

rm -rf src/out_ios/Release-iphoneos/AppRTCDemo.app/_CodeSignature/

2) Copy in a new provisioning profile to use, assuming it is sitting in your downloads directory

Finally!

If everything goes well, the upload will succeed and you’ll notice a new demo application icon show up on your device. The build script will not automatically launch the application, so just click on the icon to run the demo. From there follow the same instructions to join a chat room as we did with the simulator.

Debug Mode

To build the libraries in debug mode instead of release mode, all you need to do is replace every instance of “out_ios/Release-” with “out_ios/Debug-” in my build scripts. The build environment will notice that change and use the appropriate optimization levels.

Making Code Changes

There is a ton of code here, but there’s really only a small amount that you need to worry about as an iOS developer. Here are the 2 key locations to start exploring:

AppRTCDemo test project – src/talk/examples/objc

This is the demo application with the high level communication logic and UI

Objective-C WebRTC libraries – src/talk/app/webrtc/objc

These are the Objective-C wrappers to the core communication libraries.

As long as you modify the code in place, the build scripts will automatically tie everything together and compile the finished demo application.

Incorporating WebRTC into Your Custom iOS Application

If you are building an application on top of the WebRTC framework, you don’t really want to mess around with the raw WebRTC source code if you can avoid it. What you really want is the compiled code in a static library that you can just throw into your XCode project. Fortunately for you, the build script will take care of this as well. Use the following parameter to build the libraries for both x86 & armv7 and then combine all of the compiled objects into a single fat library:

./build_apprtc.sh build_all

This will spit out a file named libWebRTC.a into your working directory. Drag this file into your XCode project along with the public headers found here:

src/talk/app/webrtc/objc/public/*.h

Additionally, you will need to add a few frameworks to your project in order for it to build correctly:

Also note that the WebRTC libraries currently only build for armv7 and x86. The standard architectures defined for a new XCode project expect armv7s & arm64. Your application build will fail at the moment unless you manually limit your project to only build for those architectures. Apple recently announced that arm64 is going to be required in applications submitted to the app store in the near future, so let’s hope the WebRTC libraries are updated to support that soon!

Enjoy playing around with the project, and definitely let me know if you learn any other tips or tricks.

Need Help?

We can help you get your WebRTC application working for iOS or Android.

Comments 146

This is a really excellent guide, I’d had wished it was available when I was going through the same troubles getting webrtc running on IOS. Thank you very much for this, I expect this will save a lot of people a lot of time!

I think the basic idea is to build the libraries using the command line tools, and then either copy or symlink the *.a files from the trunk/out_ios directories into your larger project. That’s essentially what they did there (Note that this particular GitHub project does not build the libraries, but all of the code is there for reference).

That’s a tricky problem, but most likely it is related to the code signing identity and provisioning profiles on your computer. I have not seen any definitive answers online, but this seems like a pretty reasonable experiment to try:

hi,jason,i have some questions about the example application on ios, your answer will be so appreciated
1.what’s the different between your steps and the “great starting point” one:https://github.com/gandg/webrtc-ios
2.i have build the “great starting point” one on iphone and type the room number then apply, but i get nothing but a red rectangle on screen.what happened?
3.does the example application on ios support video capture and sending or video recieving or both of them?
4.the googls says(http://www.webrtc.org/reference/getting-started):”On mac, Open trunk/talk/examples/peerconnection/server/server_test.html. Click connect. Observe that the peerconnection_server announces your connection. Now you can open one more tab with the page, connect that too (with a different name) and send messages between the peers.” i tried this and found that this webpage example using xmlhttprequest as the signalling channel, which is different from the room number method. is it possible to use the xmlhttprequest method instead of the room number method on the ios example application?how to do that?

2. First, keep in mind that project only works on actual iOS devices, it will not work on the simulator. Second, at this point in time (December 2013) the WebRTC framework is not very stable on iOS. It has not been unusual for me that a video connection can only be established 1 out of every 8 times I try.

3. The https://github.com/gandg/webrtc-ios project supports both sending and receiving video, although at the moment only the received video will show up on the device screen (not the local camera).

4. I have only tested using http://apprtc.appspot.com so unfortunately I’m not sure how to help you with the test page you are talking about.

Thank you very much for giving other people instructions on how to finish this project, it’t been great following your tips. Anyway, I am trying to do a group video chat application on iOS like @Nick, so I was wondering if you could explain a bit more about how to incorporate this project into my existing code, because I am using Xcode and here we are doing shell commands. Also I have looked at this project https://github.com/gandg/webrtc-ios, how ever it does not really build and run in my Xcode, I get like 9 errors and stuff. Your help would be much appreciated! It’ll be great if you can send me your email address so we can get in touch. Thanks again!

You might have a typo in your build script, are you trying to build for the simulator or an actual device? The filename of your build script implies the simulator to me, but it looks like it’s specifying the armv7 architecture which probably will not work.

Double check your build script, especially this function if you are trying to build for the simulator:

I successfully able to do on simulator but when i did for device I got the following error:
— webrtc has been sucessfully built
— launching on device
ERROR: stat: trunk/out_ios/Debug-iphoneos/AppRTCDemo.app: No such file or directory
— launch complete

If that all looks okay, then it sounds like there is some other error happening during the build phase, possibly related to code signing. Do you see any other error messages being printed out further back in the output log?

the gclient sync step always fails for me with various errors about http:// sites not being reachable. if i manually take each line that says “running” and replace http:// with https:// and take out non-interactive it will let me manually grab those particular checkouts. but it still dies with.

I would definitely double check that you are not running a really old version of subversion, I’ve seen people get similar errors for that reason. Otherwise the only thing I could think to really check would be any firewall settings you might have that would prevent subversion from talking to the Internet?

i tried updating to a newer build of svn but still get similiar problems. was thinking maybe it was company network firewall issues (will have to check into that) but tried while remoted in to my computer at home as well with similar issues. its a shame the process doesnt appear to be a bit more transparent. i’d have no problem editing config files to change everything to https if i could, but i cant figure out where it fetches those lists from.

From what I can tell, your issue seems to have to do with the iOS simulator, not with (lib)webrtc. Make sure it’s not running in the background somewhere (check the processes). Try to start it manually:
$ ios-sim start
If this works, you can try “Reset Content and Settings…” from the i”OS Simulator” menu.

Otherwise, try googling this error message, there seems to be a lot of discussion going on..

i see some examples in these build scripts for getting things working on the mac end, i know that part is incomplete since there is no mac example in the talk/ folder, if one was to add a mac project in the same way as the iOS one in that folder how would they get things building via your scripts? what other modifications would need to be done?

Hi jason,
I do follow your instruction except this
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
To fix the build for multiple identities, we will need to modify 2 files. Open trunk/talk/libjingle_examples.gyp and change line 271 from this:

To build the libraries in release mode instead of debug mode, all you need to do is replace every instance of “out_ios/Debug-” with “out_ios/Release-” in my build scripts (makeall-iosdevice.sh or makeall-iossim.sh). The build environment will notice that change and use the appropriate optimization levels.

Present webrtc trunk is not working. And not geting build.
please check the and let me know. And ninja -c out/Debug and ninja -c out/Debug All is working. But AppRTCDemo.app file is not geting generating. please tell me solution for that. And also update the Blog.

In file : 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)

hi,
I’m getting the following error when i try to compile it for simulator/mac
‘/makeall-iossim.sh: line 44: ./out_sim/Debug/iossim: No such file or directory’.
is that dir should be created manually? I’m strucking here for a long time still no lucky, please reply to this thread asap.

@shivang,
Make sure you have good internet connection before test this build, i tried on wifi, even for me first 2 times didnt work and crashed as well. I tried again it worked. After red screen it may take some time to connect the call (its upto internet speed) so just wait for some seconds may be 30 – 40 seconds.

Tried everything you wrote, nothing changes.https://github.com/gandg/webrtc-ios – i see just red screen with errors
It drives me mad.
Has somebody run it? Does somebody have working project?
Can you send me xcode project? Thanks.

@ Jane and anyone else having this issue.
1) Before starting the iOS project, create a new iOS App ID in the Apple Development portal with your own account and name for the ID. You will not be able to use com.google..AppRTCDemo for the id, so suggest changing com.google to your own company.
2) Once the project is trying to build with the instructions on this page, then you can edit the trunk/talk/examples/ios/AppRTCDemo/Info.plist file with the correct app ID you created in step 1. Just search for com.google.AppRTCDemo for what to replace.

However I am having some issues. So far the simulated version (I followed the instructions and used the Terminal) has given me better results than example version built in xcode (Downloaded the project and run on an iphone 4s).
Currently I have only managed to get a video connection once and it died after a short time, was extremely bad quality and movement was jerky.

The simulated version worked the few times I tested it, while I can never get the iphone version working.

Okay I am an idiot. I was trying to test with Firefox. It did work once in that randomly though.

Got it working with Chrome, insane delay on voice. Also Iphone picture does update its transmissions? Aka the picture in the browser stops updating.
Do you feel this could be due to the phone? any suggestions? thanks

In file included from ../../webrtc/common_audio/fir_filter_neon.cc:13:
/Users/o2c_macmini_02/15-05-2014/webrtc/trunk/third_party/llvm-build/Release+Asserts/bin/../lib/clang/3.5.0/include/arm_neon.h:28:2: error: “NEON support not enabled”
#error “NEON support not enabled”

This is a super useful article, especially the make scripts – huge time saver. Now that the current HEAD supports both audio and video on iOS it might be worthwhile to update the article to not reference https://github.com/gandg/webrtc-ios – it’s still a great self-contained project but it is built against a pretty far-back revision of the WebRTC libraries; just getting that branch to build is somewhat tough.
Also, one suggestion/update wrt correcting code-signing errors for people with multiple “iPhone Developer” identities – it seems to me the cleaner solution is to choose a particular identity/signing-profile by tweaking the trunk/build/common.gypi build environment, e.g. replacing the lines around 4720

I am having trouble building the video and jingle libs myself.
The instructions found here https://github.com/gandg/webrtc-ios – scroll down to the section stating how to build them.
Once my files are located in the …/trunk/talk/app/webrtc/objc the instructions say “Build the AppRTCDemo target: wrios && gclient runhooks && ninja -C out_ios/Debug AppRTCDemo”.
I am sure I am just being stupid here, but I am not sure what is meant by this.
The name and the fact it states target suggests that I should build with xcode, but then where/what do I do with the following line wrios && gclient runhooks && ninja -C out_ios/Debug AppRTCDemo.
I have seen this line within the two scripts mentioned in the tutorial?

Okay I am just a dummy, I saw Jason’s comment about building the libraries with the command prompts then adding them into the xcode project.
However despite my removing of the IOKIT lines, im still getting complaints.
At least now I know how to build them, ill look into it some more.

I was build the webrtc for ios. Open the all.xcodeproj, then build the target of AppRTCDemo. And i get a error about “common_audio_sse2″, the detail look like this:
clang: error: argument unused during compilation: ‘-msse2′

The all.xcodeproj can’t work well? Are you able to compile and run it?

Looks like I am building something other than iOS while following these steps. Here is a cut of my log with first error encounter:
— webrtc has been sucessfully fetched
— building webrtc ios
~/Projects/WebRTC/trunk ~/Projects/WebRTC
gclient(505) MergeWithOsDeps:Conflicting dependencies for third_party/nss: [(‘mac’, ), (‘ios’, )]. (target_os=(‘mac’, ‘ios’))
gclient(505) MergeWithOsDeps:Conflicting dependencies for testing/iossim/third_party/class-dump: [(‘mac’, ‘http://src.chromium.org/svn/trunk/deps/third_party/class-dump@199203′), (‘ios’, )]. (target_os=(‘mac’, ‘ios’))

,later the following warning will skyrocket into log:
“Warning: Ignoring unsupported variable “$(ARCHS_STANDARD_INCLUDING_64_BIT)”.

Turns out it build for Mac OS or some alike of. I feel it should be configured somehow and somewhere close within scripts but I cannot figure out where exactly.
Would greatly appreciate a kind sir who could enlight me with some hints here. Thank you.

Hi,
I loved your article and I am sharing it with anyone who is interested in web rtc. Is there a way to set your own stun server in the config for the example app? Have you happened upon this? I am just wondering because I am working on an app that requires me to host my own stun server.
I really appreciate your article and all your efforts!!
Thank you,
Ryan

You sure can. You will need to customize the signaling layer code in the example application, located here:

trunk/talk/examples/objc/

The example application uses the public Google STUN server stun.l.google.com as directed by apprtc.appspot.com. You will need to customize the code here for however your STUN server is configured, presumably by avoiding talking to apprtc.appspot.com and using your own signaling servers instead.

Make sure you’re using the latest version of the chromium depot tools, others have said this problem occurs with older versions. If you still see this problem, try using one of the specific release versions of WebRTC instead of the latest development branch by adding a parameter to the sync call:

I have a working iOS app using WebRTC, but it sometimes fails with the error GAE onError 400. After investigation, this error is coming from the GAE channel API (Javascript code running in ios_channel.html). Error 400 is an invalid SID, and in my case it is happening after the channel has been successfully opened. I guess that AppRTC is prematurely closing the channel?

What do you do for a server? I’ve got the code running on iOS; but I want to connect to my own server, ideally with an MCU, and some other video manipulation. Would the iOS code work against, for example licode? Or is there a specific server we need to download to use it with?

it’s very impressive; and I want to use it on a project I’m on; but I need to move beyond pointing at the sample URL provided with the git repo, and have no idea what to use for that.

I followed the directions above, but there is no trunk/out_ios directory. Is this created automatically somewhere? The makeall-iosdevice.sh script tells ninja to use that directory, but it doesn’t exist?

It sounds like something failed further back in the build process. Take a look closely through the build log and you will most likely see it complaining about something there. That directory gets created only after everything else succeeds.

Hey,Jason !
Just one word for this blog its Fantastic.I have been already wasted my 1 day in this topic.But still can’t get any idea.How to do it.
Today i just followed your direction.It seems it will work for me too..
I just have following all the direction but i stuck at this error can anyone let me know..what i m missing..

Believe it or not, it is actually doing something back there. It’s downloading gigantic code repositories, so I would just let it run. I recently grabbed the code for Android and it took almost 4 hours to download the several-gig source.

ios simulator works fine but when I try to run on device a i get this error message:

roberts-mbp:WebRTC robertsabol$ ./makeall-iosdevice.sh
— building webrtc ios
~/Development/Work/WebRTC/src ~/Development/Work/WebRTC
.gclient file in parent directory /Users/robos23/Development/Work/WebRTC might not be the file you want to use
Error: No solution specified
~/Development/Work/WebRTC
— webrtc has been sucessfully built
— launching on device
ERROR: stat: src/out_ios/Debug-iphoneos/AppRTCDemo.app: No such file or directory
— launch complete

That sounds like it might be a code signing issue to me. Are you sure that you have a valid provisioning profile installed for this device & app ID? Take a close look at the “Curveball: Codesigning” section in the article.

Thanks for the awesome guide and the recent update. I think you have a typo in “Building and running directly on an iOS device”: i believe you meant “./build_apprtc.sh build_iosdevice” not “./build_apprtc.sh build_iossim” as you wrote down.

I’m not exactly sure what’s going on there but it seems like something got hosed up pretty bad. I would try deleting your working directory and trying to download the code from scratch again. Also, revision 6604 is super old and definitely won’t build with the new instructions on this post. I updated the description to reference the revision that is working for me with (7538). Sorry, I missed updating that last time around.

Haha, thanks! Putting together an Android post is on my list, hopefully I can get to it in the next week or so. The main thing to know there is that you can not build Android WebRTC on Mac. You need to use either a Linux machine or run Ubuntu in a virtual machine like VMWare Fusion.

Hi, Jason,
I have two problems. Do you have some ideas?
The one is the iOS demo can call the demo in website.(website create the room, then iOS side join the room). However, if the iOS side create the room, when the website join in, the iOS app will have error and closed.
“Stats: Failed to set session description: Failed to set remote offer sdp: Called in wrong state: STATE_SENTINITIATE ”
above information appears in the website.
When android side call the ios side, there is the same problem.

The other question is, there are two demos in android platform. one is AppRTCdemo, and the other is WebRTCdemo.

I found it in http://www.webrtc.org/reference/getting-started.
WebRTCDemo (Android application using media engines)
Target name WebRTCDemo. This app does not use WebRTC native APIs. It can send and receive media streams if manually connected to another WebRTCDemo that is directly accessible (e.g. firewalls might prevent you from establishing a connection). Further it allows setting, enabling and disabling audio and video processing functionality (e.g. echo cancellation, NACK, audio codec and video codec).

The demo app is intended to be just that, a very simple demonstration of the technology working. It does not support any of the features you have mentioned, you would have to design that yourself. I am not aware of any other public demos that do include those features, but it would not surprise me if they are out there somewhere.

I have been searching for a few days to find a simple tutorial showing how I might add a data channel to the AppRTCDemo app but can’t find anything. I took a stab at adding the following code after the ICE state changed to RTCICEConnectionConnected:

to get the data channel set up. Important point for me was the stream ID and where to create the channel. Looks like I’m good to go. Thanks again Jason for the great tutorial that I’m sure has save many developers lots of time.

Hey,Jason !
Just one word for this blog its Fantastic.I have been already wasted my 1 day in this topic.But still can’t get any idea.How to do it.
Today i just followed your direction.It seems it will work for me too..
I just have following all the direction but i stuck at this error can anyone let me know..what i m missing..

run “./build_apprtc.sh build_iossim”
./build_apprtc.sh build_iossim
— building WebRTC for the iOS simulator
./build_apprtc.sh: line 7: pushd: src: No such file or directory
.gclient file in parent directory /Users/a360/Desktop/webrtc might not be the file you want to use
Error: No solution specified
ninja: Entering directory `out_ios/Release-iphonesimulator’
ninja: fatal: chdir to ‘out_ios/Release-iphonesimulator’ – No such file or directory
./build_apprtc.sh: line 10: popd: directory stack empty

The WebRTC source code should have been downloaded into the ‘src’ directory, which appears to be missing for you. Make sure that step 3 under the “Get the code base” section above was successful for you before attempting to build anything.

or
./build_apprtc.sh build_iossim
— building WebRTC for the iOS simulator
~/Desktop/webrtc/src ~/Desktop/webrtc
.gclient file in parent directory /Users/a360/Desktop/webrtc might not be the file you want to use
Error: No solution specified
ninja: Entering directory `out_ios/Release-iphonesimulator’
ninja: error: loading ‘build.ninja': No such file or directory
~/Desktop/webrtc

Hi Jason
Its fantastic to follow your direction.
When I run ./build_apprtc.sh run_simulator Just as you said The test application has not been the most reliable thing I tried numerous times and all failed. This is what I get from command line
2015-03-11 10:01:14.820 AppRTCDemo[8842:56962] Client connecting.
2015-03-11 10:01:14.824 AppRTCDemo[8842:56962] Registering with room server.
2015-03-11 10:01:19.186 AppRTCDemo[8842:56962] Error parsing JSON: The operation couldn’t be completed. (Cocoa error 3840.)
2015-03-11 10:01:19.186 AppRTCDemo[8842:56962] Failed to register with room server. Result:0
2015-03-11 10:01:19.186 AppRTCDemo[8842:56962] Client disconnected.
Is is normal ? Could I continue my step? if not what should I do?