本文記錄了我在 ios 上面使用 Liblinphone 的過程。
基於 Github basefx/linphone-swift 上面的這個專案,StackOverflow 討論 為基礎來修改的。另外,我把這篇的結果也放到 github 上面給大家參考: https://github.com/cwliu/linphone-swift-demo
把 linphone iOS 加入 Swift 的 Project
下載 liblinphone SDK: http://www.linphone.org/releases/ios/liblinphone-iphone-sdk-latest.zip
解壓縮之後,裡面是一個liblinphone-sdk
的資料夾,把這個資料夾複製到 swift 的專案之中。
新增 objective-c bridging header
因為 liblinphone 是 c 的 library,所以要在 swift 的專案中使用的話,要設定bridging header
。在 Project Navigator
中新增一個 .h Header 設定一個檔名,例如 linphone-swift-demo-Bridging.h
。並在 project setting 的 Build Settings > Swift Compiler - Code Generation 中設定Objective-C Bridging Header
為這個檔案:
linphonedemo3/bridge.h
在這個檔案中加入以下的內容:
#import "linphone/lpconfig.h"
#import "linphone/linphonecore.h"
#import "linphone/linphonecore_utils.h"
修改 Search Paths:
為了能讓 swift 專案能夠找到這些指定的 *.h header 檔案, 修改 Build Settings > Search Paths
:
User Header Search Path
加入 $(SRCROOT)/liblinphone-sdk/apple-darwin/include
Always Search User Paths
設為Yes
修改 Linked Frameworks and Libraries
先在程式碼任意的地方呼叫 linphone 的函式,例如加上:
linphone_core_set_log_file(nil)
這時侯就可以先嘗試 Build看看,會發生很多 Error,這是正常的,會發生很多 Undefined symbols for architecture
,要解決這個問題。
到 Project 設定頁中的 General > Linked Frameworks and Libraries
,點選左下角的 +
鍵 ,點選Add Other...
。先把 liblinphone-sdk/apple-darwin/lib
跟 linphone-trial/liblinphone-sdk/apple-darwin/lib/mediastreamer
這兩個資料夾中的所有 .a static library 檔加入。另外再加入以下的 .tbd 檔跟 Framework:
設定 linphonerc config
把 linphonerc、linphonerc-factory 這兩個檔案加到 project navigation 中, linphonerc 跟 linphonerc-factory 的內容可參考這裡跟這裡。
執行
liblinphone 的使用方法這邊就先不多談,可參考: LinphoneManager.swift,裡面有示範要如何撥打電話、接聽電話跟使用 call back 來得知 liblinphone 的一些狀態,像是註冊是否成功或是失敗等等。
結論
liblinphone 基本上可以直接使用 swift 開發是沒問題的,只要透過 bridging header 檔案即可使用。只是過程中可能會用到COpaquePointer
來跟 linphone 物件溝通就是了。