2017-02-22 83 views
2

我有一個來自第三方SDK的靜態庫 - 它是FIT SDK,它編碼並解碼「靈活的&可互操作的數據傳輸協議」,用於各種運動和健身設備。這是一種二進制格式,在SDK中有很好的描述,它還附帶了一堆CPP,C-Sharp和Objective-C示例 - 以及從CPP源構建的靜態庫。共同構建Swift,Objective-C和一個靜態C++庫

從大家似乎認爲,我應該能夠與靜態庫,包括必要的橋接頭建立我的Swift應用程序。

我做了一個screenflow(https://vimeo.com/205082135)顯示發生了什麼,這就是爲什麼我在這裏。

我可以得到Xcode 8(測試版3)來構建一個新的,包含庫甚至一些Objective-C代碼的新鮮項目。只要我添加了橋接頭,即使是基本的包含,XCode環路鏈接器錯誤的隕石坑,抱怨它無法從標準C++庫中找到某些類,例如or。 聞起來像Xcode的配置管理問題,我根本無法理清。

我與庫示例項目是在這裏:https://github.com/bleeckerj/Xcode-FIT-TEST

有沒有人見過這樣的事情?

+1

我不確定這是否會完全解決您的問題,但Swift無法直接與C++進行交互操作。您需要用Objective C API封裝C++庫,並只將該Objective C API暴露給Swift。 –

+0

戴夫的評論是正確的。您可以直接從Swift使用C(而不是C++)API,或者使用Obj-C API(如果有的話)(儘管基於您的項目具有.mm文件的事實,我猜測沒有預先存在包裝)。否則,你必須自己包裝它。 – jtbandes

+0

另請參閱:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-ID17 – jtbandes

回答

0

所以,通過一些幫助和大量的時間和試驗,我設法解決了這個問題並回答了我自己的問題。

實際上,人們需要圍繞C++(或Objective-C++)類的Objective-C包裝器,該類包含要從Swift公開和調用的代碼。然後是Bridge-Header,它公開了Objective-C類。這個特殊的橋接頭是這聽起來很容易,現在它實際上容易 - 但它對我來說是一個謎。這是一個長期的故事,所以我將其解釋爲源自FIT SDK的樣本存儲庫https://github.com/bleeckerj/fit-sdk-with-swift的一部分,該文檔以示例回答問題。

希望這能夠幫助任何遇到此問題的人。