背景:我所在部門A需要做一個功能,通過SDK的方式嵌入到公司的另一個部門B的App
名詞解釋:
SDK:我所在部門A開發(fā)的iOS framework
接入方:部門B的App
第三方庫:主要類似AFNetworking, SDWebImage等開源庫
解決方案的步驟:
- 把代碼變成framework
- 把framework上傳到公司的github上去
- 接入方通過pod方式引用framework
此篇文章是記錄在整個過程中遇到的問題和其對應的解決方案
問題1:
生成framework文件并上傳到私有倉庫上.期間被github/pod 命令中出現(xiàn)各種網(wǎng)絡卡給惡心了~!@#$%^&*()_+
這個問題可以通過以下鏈接來解決:
http://www.reibang.com/p/8036432f6333
問題2:
一般自己寫的framework如果需要依賴第三方,需要在podspecs中添加如下的:
s.dependency
這種依賴庫,如果不加這些代碼,接入方(部門B)不會自動pod install下SDK需要的第三方庫.
問題1的解決方案中,我沒有加s.dependency, 所以那個連接的內(nèi)容需要更改
問題3:
pod有使用和不使用下面代碼的區(qū)別
use_frameworks!
實際上我也沒有搞清楚具體的區(qū)別,這個我還需要去查閱相關的資料.
接入方是不使用,而我們這邊自己使用的測試Demo是使用的,因此接入方在使用的時候一直出現(xiàn)錯誤,具體的錯誤好像是無法pod下來,pod會出錯.
解決方案:
如果接入方改成使用,那么他們pod install又會出現(xiàn)其他的錯誤.因此為了能讓接入方接入,所以只能我們這邊需要更改一下.
創(chuàng)建framework工程的時候默認的 Mach-O(Build Settings) 是:Dynamic Library.
因此我們需要更改成:Static Library.
然后再各種重新pod,接入方也各種pod,這樣這個問題也解決了.
問題4:
解決問題3后,又出現(xiàn)了一個附帶的問題,接入方無法正常顯示圖片了!!!
又是崩潰了~~~~~
那就繼續(xù)解決了
說明一下:為了開發(fā)SDK,我們準備了2個demo,一個是通過直接引用SDK工程的Demo,一個是通過pod方式私有庫上的SDK
Demo1是方便開發(fā),Demo2是方便驗證
最終的解決方案如下:
在獲取圖片的時候添加類別中加這樣的一個方法:
+ (UIImage *)bdss_imageInBDSSBundle:(NSString *)imageName
{
// 開發(fā)過程需要得到圖片的方式
NSString *name2 = [@"Frameworks/BDSSSDK.framework/TDSSResources.bundle" stringByAppendingPathComponent:imageName];
// NSString *name3 = [@"frameworks/BDSSSDK.framework/TDSSResources.bundle" stringByAppendingPathComponent:imageName];
// 打包成pod后,得到圖片的方式
NSString *name4 = [@"TDSSResources.bundle" stringByAppendingPathComponent:imageName];
// NSString *name5 = [@"BDSSSDK.framework/TDSSResources.bundle" stringByAppendingPathComponent:imageName];
// NSString *name6 = [@"framework/BDSSSDK.framework/TDSSResources.bundle" stringByAppendingPathComponent:imageName];
UIImage *image1 = [UIImage imageNamed:imageName];
UIImage *image2 = [UIImage imageNamed:name2];
// UIImage *image3 = [UIImage imageNamed:name3];
UIImage *image4 = [UIImage imageNamed:name4];
// UIImage *image5 = [UIImage imageNamed:name5];
// UIImage *image6 = [UIImage imageNamed:name6];
// NSLog(@"image1:%@, image2:%@, image3:%@, image4:%@, image5:%@, image6:%@", image1, image2, image3, image4, image5, image6);
// NSLog(@"image1:%@, image2:%@, image4:%@", image1, image2, image4);
return image1 ? image1 : (image2 ? image2 : (image4));
}
注意上述代碼中name2和name4兩種方式:
其中name2是在Demo1中能正確獲取圖片
name4是在Demo2(Pod方式)中能正確獲取圖片.
是不是各種崩潰啊.
這個問題我覺得理論上還有更好的解決方案,需要我花時間繼續(xù)調(diào)研.
問題5
Demo1 可以在iOS11真機(模擬器)上正常安裝,但是在iOS8真機上無法正常安裝,
沒有測試iOS9,iOS10的真機/模擬器(沒有相關設備/也沒有下載相關的simulator).
Demo2 可以正常安裝
在iOS8真機提示:
The application does not have a valid signature.
嘗試了網(wǎng)上的各種解決方案都不可以.
肯定不是證書的問題,因為我新建一個干凈的工程是可以安裝的.
最好找到原因了
刪除紅色框內(nèi)容的時候,Demo1在iOS8和iOS11都可以安裝,但是無法讀取圖片資源了....
找到解決無法安裝的原因,但是還沒有找到無法讀取圖片資源的問題.
這個又是一個遺留的問題了.
問題6
我們的Demo旋轉(zhuǎn)的設置為:
但是接入方的旋轉(zhuǎn)的設置為:
他們是通過代碼的方式控制所有的界面旋轉(zhuǎn)問題.
這個也是一個巨坑~~~~
問題7
當代碼封包的時候,如果修改了大量代碼,那一定要讓測試測一遍,不能隨便自我感覺良好,我真的是崩潰,剩余的時間太少,都沒有做好這個代碼鎖定這個操作.
這個是給自己敲響的一個警鐘.
需要測試就是要去測試.
我修改歷史聊天記錄的方式(分為以前的單聊和現(xiàn)在的群聊,兩種顯示的方式是不一樣的),這種問題是真的坑爹啊.
總結(jié).
寫這篇文章后我感覺我還有好幾個問題沒有掌握,只是了解一點皮毛.
需要我列出來,然后一個一個的去調(diào)研去研究.
1.pod use_frameworks!的功能
2.Embedded Binaries 和 Linked Frameworks and Libraries 的相關的研究與用法.
- iOS8安裝不了與圖片顯示不了問題研究
4.iOS旋轉(zhuǎn)問題,在各個版本的差異