README.md 6.45 KB
Newer Older
Gui13's avatar
Gui13 committed
1

DanmeiChen's avatar
DanmeiChen committed
2
Linphone is an open source softphone for voice and video over IP calling and instant messaging. It is fully SIP-based, for all calling, presence and IM features.
DanmeiChen's avatar
DanmeiChen committed
3
General description is available from [linphone web site](https://www.linphone.org/technical-corner/linphone)
DanmeiChen's avatar
DanmeiChen committed
4 5 6 7 8 9

## License

Copyright © Belledonne Communications

Linphone is dual licensed, and is available either :
DanmeiChen's avatar
DanmeiChen committed
10 11
- under a [GNU/GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) license, for free (open source). Please make sure that you understand and agree with the terms of this license before using it (see LICENSE file for details).
- under a proprietary license, for a fee, to be used in closed source applications. Contact [Belledonne Communications](https://www.linphone.org/contact) for any question about costs and services.
DanmeiChen's avatar
DanmeiChen committed
12 13 14 15 16

## Documentation

-   Supported features and RFCs : https://www.linphone.org/technical-corner/linphone/features
-   Linphone public wiki : https://wiki.linphone.org/xwiki/wiki/public/view/Linphone/
17 18


19 20 21 22 23 24 25
# 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

26
<a target="_blank" style="text-decoration:none; color:black; font-size:66%" href="https://www.transifex.com/belledonne-communications/linphone-ios/"
27
title="See more information on Transifex.com">Top translations: linphone-ios</a><br/>
28
<img border="0" src="https://transifex.com/projects/p/linphone-ios/resource/localizablestrings/chart/image_png"/><br/><a target="_blank" href="/"><img border="0" src="https://ds0k0en9abmn1.cloudfront.net/static/charts/images/tx-logo-micro.646b0065fce6.png"/></a>
29 30 31 32 33

Interested in helping translate Linphone? Contribute [on Transifex](https://www.transifex.com/belledonne-communications/linphone-ios).

## Report bugs and submit patchs

34
If you want to dig through Linphone code or report a bug, please read `CONTRIBUTING.md` first. You should also read this `README` entirely ;-).
Benjamin REIS's avatar
Benjamin REIS committed
35

36
## How to be a beta tester ?
Benjamin REIS's avatar
Benjamin REIS committed
37

38
Enter the Beta :
DanmeiChen's avatar
DanmeiChen committed
39 40 41 42
- Download TestFlight from the App Store and log in it with your apple-id
-Tap the public link on your iOS device. The public link : https://testflight.apple.com/join/LUlmZWjH
-Touch View in TestFlight or Start Testing. You can also touch Accept, Install, or Update for Linphone app.
-And voilà ! You can update your beta version with the same public link when a new one is available
Benjamin REIS's avatar
Benjamin REIS committed
43

44
Send a crash report :
Benjamin REIS's avatar
Benjamin REIS committed
45
 - It is done automatically by TestFlight
Benjamin REIS's avatar
Benjamin REIS committed
46

47
Report a bug :
Benjamin REIS's avatar
Benjamin REIS committed
48 49 50 51 52 53 54 55 56 57
 - Open Linphone
 - Go to Settings —> Advanced —> Send logs
 - An email to linphone-iphone@belledonne-communications.com 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
58

DanmeiChen's avatar
DanmeiChen committed
59
# Building the application
jehan's avatar
jehan committed
60

DanmeiChen's avatar
DanmeiChen committed
61
## What's new
62

63
Now the default way of building linphone-iphone is to use CocoaPods to retrieve the linphone-sdk frameworks.
DanmeiChen's avatar
DanmeiChen committed
64
Compared to previous versions, this project no longer uses submodules developper has to build in order to get a working app.
65
However, if you wish to use a locally compiled SDK, read paragraph "Using a local linphone SDK" below to know how to proceed.
66

DanmeiChen's avatar
DanmeiChen committed
67
## Building the app
68

69 70 71 72
If you don't have CocoaPods already, you can download and install it using :
```
	sudo gem install cocoapods
```
73

74 75 76 77 78 79
- Install the app's dependencies with cocoapods first:
```
	pod install
```
  It will download the linphone-sdk from our gitlab repository so you don't have to build anything yourself.
- Then open `linphone.xcworkspace` file (**NOT linphone.xcodeproj**) with XCode to build and run the app.
80

81
# Testing the application
82

DanmeiChen's avatar
DanmeiChen committed
83
We are using the Xcode test navigator to test the UI of Linphone.
84

DanmeiChen's avatar
DanmeiChen committed
85 86
Change the Scheme to LinphoneTester. Press the test navigator button and all the tests will show.
See: https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/05-running_tests.html
87

88
# Limitations and known bugs
jehan's avatar
jehan committed
89

90
* Video capture will not work in simulator (not implemented in it).
jehan's avatar
jehan committed
91

jehan's avatar
jehan committed
92

93
# Using a local linphone SDK
94

95 96 97 98
- Clone the linphone-sdk repository from out gitlab:
```
   git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git --recursive
```
99

100
- Follow the instructions in the linphone-sdk/README file to build the SDK.
101

102 103 104 105 106
- Rebuild the project:
```
   PODFILE_PATH=<path to linphone-sdk-ios> pod install
```
  where <path to linphone-sdk-ios> is your build directory of the linphone-sdk project, containing the `linphone-sdk.podspec` file and a `linphone-sdk` ouptut directory comprising built frameworks and resources.
107

108
- Then open linphone.xcworkspace with Xcode to build and run the app.
109

110
# Enabling crashlythics
111

112 113
We've integrated Crashlythics into liphone-iphone, which can automatically send crash reports. It is disabled by default.
To activate it:
114

115
- Replace the GoogleService-Info.plist for this project with yours (specific to your crashlytics account).
116

117 118 119 120
- Rebuild the project:
```
    USE_CRASHLYTHICS=true pod install
```
DanmeiChen's avatar
DanmeiChen committed
121

122
- Then open `linphone.xcworkspace` with Xcode to build and run the app.
123

124
# Quick UI reference
125 126 127 128 129

- 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:

130 131 132 133 134 135 136 137 138
        MainStoryboard
                |
                | (rootViewController)
                |
            PhoneMainView ---> view |--> app background
                |                   |
                |                   |--> statusbar background
                |
                | (mainViewController)
139
                |
140 141 142 143 144 145 146
            UICompositeView : TPMultilayout
                        |
                        |---> view  |--> statusBar
                                    |
                                    |--> contentView
                                    |
                                    |--> tabBar
147 148


149
When the application is started, the phoneMainView gets asked to transition to the Dialer view or the Assistant view.
150
PhoneMainView exposes the -changeCurrentView: method, which will setup its
Gautier Pelloux-Prayer's avatar
Gautier Pelloux-Prayer committed
151
Any Linphone view is actually presented in the UICompositeView, with or without a statusBar and tabBar.
152

Gautier Pelloux-Prayer's avatar
Gautier Pelloux-Prayer committed
153
The UICompositeView consists of 3 areas laid out vertically. From top to bottom: StatusBar, Content and TabBar.
154 155
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".