今天接到一個新需求,需要製作一個MacOS端的動態庫dylib。
一番查找資料,終於摸索出一條成功的路徑。
1,製作動態庫dylib
project下面,如此選擇。
Type要選擇Dynamic,也就是動態庫
然後就是我常遇到的,創建自己工具類,然後寫一些方法函數。
這個工程創建完,工程目錄下默認有個Products,寫完你的方法就Command + B,如果你寫的方法沒有什麼語法問題,就可以成功生成一個dylib。
2,使用dylib
每一個dylib生成出來都是有自己的路徑的,一般默認/user/local/xxx.dylib。如果你直接將生成的dylib導入你需要的應用工程下,然後再導入頭文件.h,在運行時是會報錯的。
dyld: Library not loaded:
這個時候就需要你去修改dylib中的路徑,也叫id
install_name_tool -id some_path/libxdDevsdk.dylib some_path/libxdDevsdk.dylib
其中這個some_path可以是絕對路徑,也可以是相對路徑。如果是在工程內部使用的,寫成絕對路徑也可以,不過如果是多人協作的工程,這一塊建議寫成相對路徑的。
在做完改ID,再次編譯工程,還會繼續報錯。
dyld: Library not loaded: /usr/local/xxxx.dylib
......
Reason: no suitable image found. Did find:
這個是屬於你打包生成的dylib需要簽名。
那麼你就需要對你的dylib進行簽名,簽名命令
codesign -f -s "Mac Developer: 你的開發者郵箱" xxx.dylib
另外有一個特點的是,如果你的Mac應用工程,沒有用到Hardened Runtime中的服務,你可以刪除該服務。如果刪除了該服務,你的dylib就不再需要簽名(親測有效!)
參考資料
https://blog.csdn.net/ReadyShowShow/article/details/102547633
https://www.jianshu.com/p/d7a0ccc6a7e6
遇到~解決~分享!!!