Cody Blog

Software development

在iOS/Swift中使用 liblinphone 函式庫

本文記錄了我在 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

http://i.imgur.com/N5UbxNy.png

在這個檔案中加入以下的內容:

#import "linphone/lpconfig.h"
#import "linphone/linphonecore.h"
#import "linphone/linphonecore_utils.h"

修改 Search Paths:

為了能讓 swift 專案能夠找到這些指定的 *.h header 檔案, 修改 Build Settings > Search Paths:

  1. User Header Search Path 加入 $(SRCROOT)/liblinphone-sdk/apple-darwin/include

user-header-search-path

  1. Always Search User Paths 設為 Yes

Always Search User Paths

修改 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/liblinphone-trial/liblinphone-sdk/apple-darwin/lib/mediastreamer 這兩個資料夾中的所有 .a static library 檔加入。另外再加入以下的 .tbd 檔跟 Framework:

Link Binary With Libraries

設定 linphonerc config

把 linphonerc、linphonerc-factory 這兩個檔案加到 project navigation 中, linphonerc 跟 linphonerc-factory 的內容可參考這裡這裡

執行

liblinphone 的使用方法這邊就先不多談,可參考: LinphoneManager.swift,裡面有示範要如何撥打電話、接聽電話跟使用 call back 來得知 liblinphone 的一些狀態,像是註冊是否成功或是失敗等等。

結論

liblinphone 基本上可以直接使用 swift 開發是沒問題的,只要透過 bridging header 檔案即可使用。只是過程中可能會用到COpaquePointer來跟 linphone 物件溝通就是了。

更多

iOS

Related Posts

Comments