Giter Site home page Giter Site logo

new2010 / linphone-iphone Goto Github PK

View Code? Open in Web Editor NEW

This project forked from belledonnecommunications/linphone-iphone

0.0 1.0 0.0 42.81 MB

Linphone is a free VoIP and video softphone based on the SIP protocol. Mirror of linphone-iphone (git://git.linphone.org/linphone-iphone.git)

Home Page: http://linphone.org

License: GNU General Public License v2.0

Shell 1.60% Objective-C 96.49% MATLAB 0.18% C 0.04% Python 1.68%

linphone-iphone's Introduction

Build Status

Linphone is a free VoIP and video softphone based on the SIP protocol.

Dialer screenshot

How can I contribute?

Thanks for asking! We love pull requests from everyone. Depending on what you want to do, you can help us improve Linphone in various ways:

Help on translations

Top translations: linphone-ios

Interested in helping translate Linphone? Contribute on Transifex.

Report bugs and submit patchs

If you want to dig through Linphone code or report a bug, please read CONTRIBUTING.md first. You should also read this README entirely ;-).

How to be a beta tester ?

Enter the Beta :

  • Download TestFlight from the App Store and log in it with your apple-id
  • Send an email to [email protected], with object : [Beta test - Request], where you precise your apple-id you logged in TestFlight with
  • You will receive an invitation code to the beta in the following days via your email associated to your apple-id
  • Enter the invitation code received into TestFlight
  • Download Linphone from TestFlight
  • And voilà ! TestFlight will send you a notification every time a new beta test is available.

Send a crash report :

  • It is done automatically by TestFlight

Report a bug :

  • Open Linphone
  • Go to Settings —> Advanced —> Send logs
  • An email to [email protected] is created with your logs attached
  • Fill in the bug description with :
    • What you were doing
    • What happened
    • What you were expecting
    • Approximately when the bug happened
  • Change the object to [Beta test - Bug report]
  • Send the mail

Building and customizing the SDK

Linphone for iPhone depends on liblinphone SDK. This SDK is generated from makefiles and shell scripts.

Steps to customize the liblinphone SDK options are:

  1. Install HomeBrew, a package manager for OS X (MacPorts is supported but deprecated).
  2. Install Linphone dependencies: open iTerm.app in the current directory and list dependencies to install using: ./prepare.py
  3. Reorder your path so that brew tools are used instead of Apple's ones which are obsolete: export PATH=/usr/local/bin:$PATH
  4. Build SDK (see below for options and explanations): ./prepare.py -c && ./prepare.py && make

For instance to generate the liblinphone multi-arch SDK in GPL mode, simply invoke:

    ./prepare.py [options] && make

The resulting SDK is located in liblinphone-sdk/ root directory.

Incorporating our SDK in your project

After the SDK has been built, add all the .framework files located in liblinphone-sdk/apple-darwin/Frameworks to your XCode project Embedded Frameworks. Add a Run Script step to your build steps, put it after your step to embed frameworks, set it to use our deploy.sh script located in liblinphone-sdk/apple-darwin/Tools.

Licensing: GPL third parties versus non GPL third parties

This SDK can be generated in 2 flavors:

  • GPL third parties enabled means that liblinphone includes GPL third parties like FFmpeg. If you choose this flavor, your final application must comply with GPL in any case. This is the default mode.

  • NO GPL third parties means that Linphone will only use non GPL code except for liblinphone, mediastreamer2, oRTP and belle-sip. If you choose this flavor, your final application is still subject to GPL except if you have a commercial license for the mentioned libraries. To generate the liblinphone multi arch SDK without GPL third parties, invoke:

      ./prepare.py -DENABLE_GPL_THIRD_PARTIES=NO -DENABLE_FFMPEG=NO [other options] && make
    

Customizing features

You can enable non-free codecs by using -DENABLE_NON_FREE_CODECS=ON and -DENABLE_<codec>=ON. To get a list of all features, the simplest way is to invoke prepare.py with --list-features:

    ./prepare.py --list-features

You can for instance enable X264 using:

    ./prepare.py -DENABLE_NON_FREE_CODECS=ON -DENABLE_X264=ON [other options]

Built architectures

4 architectures currently exists on iOS:

  • 64 bits ARM64 for iPhone 5s, iPad Air, iPad mini 2, iPhone 6, iPhone 6 Plus, iPad Air 2, iPad mini 3.
  • 32 bits ARMv7 for older devices.
  • 64 bits x86_64 for simulator for all ARM64 devices.
  • 32 bits i386 for simulator for all ARMv7 older devices.

Note: We are not compiling for the 32 bits i386 simulator by default because Xcode default device (iPhone 6) runs in 64 bits. If you want to enable it, you should invoke prepare.py with i386 argument: ./prepare.py i386 [other options].

Upgrading your iOS SDK

Simply re-invoking make should update your SDK. If compilation fails, you may need to rebuilding everything by invoking:

    ./prepare.py -c && ./prepare.py [options] && make

Building the application

After the SDK is built, just open the Linphone Xcode project with Xcode, and press Run.

Note regarding third party components subject to license

The liblinphone SDK is compiled with third parties code that are subject to patent license, specially: AMR, SILK G729 and H264 codecs. Linphone controls the embedding of these codecs by generating dummy libraries when there are not available. You can enable them using prepare.py script (see -DENABLE_NON_FREE_CODECS=OFF option). Before embedding these 4 codecs in the final application, make sure to have the right to do so.

Testing the application

We are using the KIF framework to test the UI of Linphone. It is used as a submodule (instead of CocoaPods) for ease.

Simply press ⌘U and the default simulator / device will launch and try to pass all the tests.

Limitations and known bugs

  • Video capture will not work in simulator (not implemented in it).

Debugging the SDK

Sometime it can be useful to step into liblinphone SDK functions. To allow Xcode to enable breakpoint within liblinphone, SDK must be built with debug symbols by using option --debug:

    ./prepare.py --debug [other options] && make

Debugging mediastreamer2

For iOS specific media development like audio video capture/playback it may be interesting to use mediastream test tool. You can build it using the following:

    ./prepare.py -G Xcode -g && make
    # then open the project for a given architecture (here x86_64, to run on simulator):
    open WORK/ios-x86_64/Build/linphone_builder/EP_linphone_builder.xcodeproj

Then you can select mediastream target and launch it on device. You can configure scheme to pass custom parameters.

Quick UI reference

  • The app is contained in a window, which resides in the MainStoryboard file.

  • The delegate is set to LinphoneAppDelegate in main.m, in the UIApplicationMain() by passing its class

  • Basic layout:

      MainStoryboard
              |
              | (rootViewController)
              |
          PhoneMainView ---> view |--> app background
              |                   |
              |                   |--> statusbar background
              |
              | (mainViewController)
              |
          UICompositeView : TPMultilayout
                      |
                      |---> view  |--> statusBar
                                  |
                                  |--> contentView
                                  |
                                  |--> tabBar
    

When the application is started, the phoneMainView gets asked to transition to the Dialer view or the Assistant view. PhoneMainView exposes the -changeCurrentView: method, which will setup its Any Linphone view is actually presented in the UICompositeView, with or without a statusBar and tabBar.

The UICompositeView consists of 3 areas laid out vertically. From top to bottom: StatusBar, Content and TabBar. The TabBar is usually the UIMainBar, which is used as a navigation controller: clicking on each of the buttons will trigger a transition to another "view".

linphone-iphone's People

Contributors

bagage avatar peppsac avatar brieucv avatar gui13 avatar fgrisez avatar viish avatar jeannotlapin avatar datbewar avatar cdeschambc avatar mickhopes avatar sanavak avatar solomax avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.