首先網上很多教程是關於使用swift SMAMB2包的,大部分都是 pod "SMAMB2" 這種方式還是非常簡單的,如果僅僅是這樣還不至於專門寫一篇文章來紀念他。問題就出在我的項目需要用到SMB協議去讀取文件,但是並不是直接讀取! 通俗一點來講就是我的用法和 SMAMB2包提供的用法不同! 那就意 ...
首先網上很多教程是關於使用swift SMAMB2包的,大部分都是
pod "SMAMB2"
這種方式還是非常簡單的,如果僅僅是這樣還不至於專門寫一篇文章來紀念他。問題就出在我的項目需要用到SMB協議去讀取文件,但是並不是直接讀取!
通俗一點來講就是我的用法和 SMAMB2包提供的用法不同!
那就意味我要重新打包了,而當我看了一下源碼發現,AMSMB2竟然又用了libsmb2包,將libsmb2打包成 .a 文件。
剛開始看到兩個項目的 README 我還以為會很簡單。但是萬萬沒想到,光是打包我就經歷了兩天才成功!
第一個坎:
我是用的Mac mini安裝brew,安裝好多次都失敗了,在度娘上尋找了一圈。最後在終端輸入一下代碼:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
參考:https://blog.csdn.net/qq_40922656/article/details/123532784
經過不懈的努力,終於解決了這個問題。
第二個坎:
也不知道是什麼鬼,眼看要到開始生成 .a文件的時候返回找不到什麼玩意。
經過無休止的百度之後,終於發現瞭解決方案。
autoreconf -vif
但是讓我萬萬沒想到的是,這個指令竟然需要到 AMSMB2/buildtool/libsmb2 中去執行(這裡的libsmb2文件夾是源碼中沒有的,需要之後自己添加,如果不添加的話就會自動從github中拉去最新的libsmb2項目)
因為我的項目需要的用法就是要自己重寫libsmb2,因此我已經提前準備好了修改之後的libsmb2(公司大佬修改的,用C寫的,在下C僅局限於輸出Hello world,見笑了)
經過終端編譯後,出現一下這一幕就表示你應該是成功了
這個時候就可以進入到 AMSMB2/buildtool 文件夾下執行build命令了!
./build.sh
出現以上,就表示你的 .a文件已經構建完成了(目前還是不太清楚這些WARNING是什麼意思,如果有明白的大佬歡迎留言指導!)
到此就可以看到你的 libsmb2-ios.a 文件已經安安靜靜的躺在 AMSMB2/libsmb2 文件夾下了!
第三個坎:
我將已經打包完成的 .a文件併入 AMSMB2項目想要重新打包並生成新的靜態 .framework給iOS使用。但是開始編譯那一刻我心態崩了啊,祖國山河一片紅叉!!!
經過我向公司大佬的咨詢在 libsmb2.h 文件中加入以下代碼:
#ifndef UINT64_MAX #include <stdint.h> #endif
very nice,終於乾乾凈凈的編譯通過了,哈哈哈。
到這裡我心酸的自定義libsmb算是畫上一部分句號,至於其他的還有一部分內容沒有解決,等解決完之後再決定是不是需要寫下來!
參考網站:
AMSMB2項目:https://github.com/amosavian/AMSMB2
libsmb2項目:https://github.com/sahlberg/libsmb2
autoreconf -vif:https://stackoverflow.com/questions/15448582/installed-libtool-but-libtoolize-not-found