坑: iOS打包framework通過pod方式給別人用

背景:我所在部門A需要做一個功能,通過SDK的方式嵌入到公司的另一個部門B的App
名詞解釋:
SDK:我所在部門A開發(fā)的iOS framework
接入方:部門B的App
第三方庫:主要類似AFNetworking, SDWebImage等開源庫

解決方案的步驟:

  1. 把代碼變成framework
  2. 把framework上傳到公司的github上去
  3. 接入方通過pod方式引用framework
    此篇文章是記錄在整個過程中遇到的問題和其對應(yīng)的解決方案
    問題1:
    生成framework文件并上傳到私有倉庫上.期間被github/pod 命令中出現(xiàn)各種網(wǎng)絡(luò)卡給惡心了~!@#$%^&*()_+
    這個問題可以通過以下鏈接來解決:
    http://m.itdecent.cn/p/8036432f6333

問題2:
一般自己寫的framework如果需要依賴第三方,需要在podspecs中添加如下的:


image.png

s.dependency
這種依賴庫,如果不加這些代碼,接入方(部門B)不會自動pod install下SDK需要的第三方庫.
問題1的解決方案中,我沒有加s.dependency, 所以那個連接的內(nèi)容需要更改

問題3:
pod有使用和不使用下面代碼的區(qū)別

use_frameworks!

實際上我也沒有搞清楚具體的區(qū)別,這個我還需要去查閱相關(guān)的資料.
接入方是不使用,而我們這邊自己使用的測試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:直接引用SDK工程的代碼結(jié)構(gòu)圖
Demo2:通過pod方式引用

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的真機/模擬器(沒有相關(guān)設(shè)備/也沒有下載相關(guān)的simulator).
Demo2 可以正常安裝
在iOS8真機提示:
The application does not have a valid signature.
嘗試了網(wǎng)上的各種解決方案都不可以.
肯定不是證書的問題,因為我新建一個干凈的工程是可以安裝的.
最好找到原因了


image.png

刪除紅色框內(nèi)容的時候,Demo1在iOS8和iOS11都可以安裝,但是無法讀取圖片資源了....
找到解決無法安裝的原因,但是還沒有找到無法讀取圖片資源的問題.
這個又是一個遺留的問題了.

問題6
我們的Demo旋轉(zhuǎn)的設(shè)置為:


image.png

但是接入方的旋轉(zhuǎn)的設(shè)置為:


image.png

他們是通過代碼的方式控制所有的界面旋轉(zhuǎn)問題.
這個也是一個巨坑~~~~

問題7
當(dāng)代碼封包的時候,如果修改了大量代碼,那一定要讓測試測一遍,不能隨便自我感覺良好,我真的是崩潰,剩余的時間太少,都沒有做好這個代碼鎖定這個操作.
這個是給自己敲響的一個警鐘.
需要測試就是要去測試.
我修改歷史聊天記錄的方式(分為以前的單聊和現(xiàn)在的群聊,兩種顯示的方式是不一樣的),這種問題是真的坑爹啊.

總結(jié).
寫這篇文章后我感覺我還有好幾個問題沒有掌握,只是了解一點皮毛.
需要我列出來,然后一個一個的去調(diào)研去研究.
1.pod use_frameworks!的功能
2.Embedded Binaries 和 Linked Frameworks and Libraries 的相關(guān)的研究與用法.

  1. iOS8安裝不了與圖片顯示不了問題研究
    4.iOS旋轉(zhuǎn)問題,在各個版本的差異
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,207評論 1 180
  • 文/伶霏 從3月到10月在微信讀書一共7個月的時間,讀書累計180個小時,讀完27本書。平均算下來相當(dāng)于每個月不到...
    伶霏閱讀 745評論 2 1
  • 人的成長分為兩面:內(nèi)與外。 在外,為學(xué)日益,學(xué)技能學(xué)知識,天天進步。 在內(nèi),為道日損,甩掉觀念、習(xí)慣、自以為是,甩...
    禾人愛閱讀 548評論 0 0
  • 不知道你身邊有沒有這樣的人 在食堂打飯的時候,如果你們兩個同時看中一道菜,那么他會對你說:“這個菜好吃嗎?”你回答...
    柔西鹽閱讀 727評論 0 1

友情鏈接更多精彩內(nèi)容