iOS完整項目製作SDK並調用詳細步驟

前言

本篇博客爲了記錄將iOS完整項目打包爲SDK的整個步驟以及製作過程中所遇到的問題,希望對有相同需求的童鞋有所幫助。(還在奮鬥中。。。有進展則更新)

背景

天空一聲巨響,需求閃亮登場。小Q,來把這個項目做成SDK,給別的客官使用。我:喔。。。。(呆滯中)

小盆友,你是否有很多問號??????????????????

  1. 啥是SDK?
  2. 製作靜態庫還是動態庫呢?
  3. 如何用同一個項目分別製作出應用程序和庫文件?
  4. 項目裏有App extension怎麼辦?
  5. 怎麼將結果返回給GUI呢
  6. 項目裏的notification還能用麼?進程通信可咋搞啊?
  7. 日誌怎麼保存呢?

解惑:

1、啥是SDK?
SDK(software development kits):軟件開發工具包,一般都是一些軟件工程師爲特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件時的開發工具的集合。
通俗點大致就是一庫、一Demo、一使用手冊而已。
2、製作靜態庫還是動態庫呢?
動態庫:運行時加載,發佈的程序需要一同攜帶着。
靜態庫:將彙編期生成的目標.o文件和引用的庫一同鏈接爲可執行文件,有framework和.a的形式。
.a:單純的二進制文件,需要配合.h文件一同使用。
.framework:二進制文件+資源文件,可以直接使用。
.framework = .a + .h + ResourceFile(資源文件)
3、如何用同一個項目分別製作出應用程序和庫文件?
問:爲什麼不新建framework項目?
答:比如新建一個cocoa framework的項目,將代碼添加進來,如果項目代碼更新了或者引用文件目錄改變了怎麼辦?再刪除添加麼?而新建Target,添加相應文件,在同一個項目中方便管理,維護同一套代碼更方便,具體步驟如下:
在這裏插入圖片描述
在這裏插入圖片描述
embed in application = none
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
將所需編譯的源文件拖過來,需要暴露的頭文件放在Header-public中,不需要暴露的則放在Header-project中。

在這裏插入圖片描述
項目涉及swift/oc/c混編和第三方庫(如果不涉及不用往下看了),原來的橋接頭文件此時將不再起效,需要將oc頭文件放在Umbrella Header中。
查看生成的framework/Modules/module.modulemap中有定義requires objc表示支持Object-C。

設置header path,library path等。

調用了openssl靜態庫,引入OC頭文件報錯:Include of non-modular header inside framework module。這個問題搞了很久,找到了個解決方法但是比較麻煩,所以決定採用另一種方式,如下:

在buildPhases中去掉umbrella header,然後在buildsetting中設置原來的Object-C Bridging Header,就可以像原來一樣使用了,省去了很多步驟。
果然很輕鬆的編譯通過了。接下來調用卻提示:
xx is unavailable: cannot find Swift declaration for this class!
???滿臉疑問,提示頭文件找不到,意思就是還是要進行頭文件的解決,進入Framework也不是正常格式,反而顯得更加麻煩,好吧。。回頭是岸啊。

Include of non-modular header inside framework module問題解決:
1、網上解決方法:buildsetting->allow non-modular includes in framework modules(我試了並沒有用,是我打開方式不對麼,哭死…)
2、將openssl相關頭文件不要放在Umbrella Header中import的頭文件中,放在m文件中即可。編譯再一次通過了,撒花🎉。

4、項目裏有App extension怎麼辦?
5、怎麼將結果返回給GUI呢
delegate protocol
6、項目裏的notification還能用麼?進程通信可咋搞啊?
7、日誌怎麼保存呢?

限於經驗有限,已黔驢技窮,望大佬們指點迷津,多多包涵!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章