最近項目進行iOS的SDK更新,因為提審包時,Apple郵件提示UIwebview即將不能使用,2020年4月后包含UIwebview的新應用不能上傳,老應用九月必須更新。
於是我將項目所有用到UIWebView的地方進行了更換,
於是進行下述步驟:
1.屏蔽移除項目所以三方SDK,直接入自己開發的SDK和代碼
提審有警告
2.屏蔽移除項目所以三方SDK,將項目自己開發的SDK和代碼UIWebView進行更新去除
提審有警告
定位到問題,項目本身就有,不全在SDK。
查找發現unity存在UIWebView的使用,於是找到解決方案:
unity libiPhone-lib.a 里面有UIWebView的引用,雖然項目沒用到
解決:
將libiPhone-lib.a拆開,將里面的引用更新,再合並。
!!!!!!!!!!!!!
PS:最終建議,最好升級項目unity版本,別直接改unity的東西,這只是解決UIWebView的一種方案,但改動unity的東西會存在風險,比如破壞其他unity功能。
!!!!!!!!!!!!!
比如:Application.OpenURL(),做了如下處理后,這個方法iOS將無法生效,需要自定義實現相關功能
具體實現
2.1 構建URLUtility.o
(1)新建文件URLUtility.mm,並寫入下面代碼。
#include <iostream> #import <UIKit/UIKit.h> using namespace std; namespace core { template <class type> class StringStorageDefault {}; template <class type,class type2> class basic_string { public: char *c_str(void); }; } void OpenURLInGame(core::basic_string< char,core::StringStorageDefault<char> > const&arg){} void OpenURL(core::basic_string<char,core::StringStorageDefault<char> >const&arg){ const void *arg2= &arg; UIApplication *app = [UIApplication sharedApplication]; NSString *urlStr = [NSString stringWithUTF8String:(char *)arg2]; NSURL *url = [NSURL URLWithString:urlStr]; [app openURL:url]; } void OpenURL(std::string const&arg){ UIApplication *app = [UIApplication sharedApplication]; NSString *urlStr = [NSString stringWithUTF8String:arg.c_str()]; NSURL *url = [NSURL URLWithString:urlStr]; [app openURL:url]; }
(2)使用腳本將URLUtility.mm生成對應的URLUtility.o
打開終端,使用cd命令先去 URLUtility.mm 對應的目錄,執行下述腳本
clang -c URLUtility.mm -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
意思是使用Xcode編譯 URLUtility.mm生成arm64架構支持的URLUtility.o(如果項目包含其他的架構,可在執行腳本生成)

2.2 處理libiPhone-lib.a
找到自己即將打到包力的libiPhone-lib.a,使用腳本查看包含的架構,
lipo -info libiPhone-lib.a
比如我們就是用到了 armv7 arm64 兩種架構
(1)拆分libiPhone-lib.a
現在分別將這個libiPhone-lib.a 拆分為對應架構的libiPhone-lib.a並放到對應架構URLUtility.o所在的文件夾
lipo libiPhone-lib.a -thin armv7 -output /Users/admin/URLUtility7/libiPhone-lib7.a
lipo libiPhone-lib.a -thin arm64 -output /Users/admin/URLUtility64/libiPhone-lib64.a
(2)替換libiPhone-lib.a里的URLUtility.o
將各自架構libiPhone-lib.a里的URLUtility.o替換為我們生成的。
ar -d 是移除,ar -q是添加
ar -d /Users/admin/URLUtility7/libiPhone-lib7.a URLUtility.o ar -q /Users/admin/URLUtility7/libiPhone-lib7.a /Users/admin/URLUtility7/URLUtility.o ar -d /Users/admin/URLUtility64/libiPhone-lib64.a URLUtility.o ar -q /Users/admin/URLUtility64/libiPhone-lib64.a /Users/admin/URLUtility64/URLUtility.o

如果出現這樣的提示,就說明對應架構里不包含URLUtility.o,可以跳過,直接進行下一步。
(3)合並libiPhone-lib.a
現在兩個架構的libiPhone已經是符合標准的,,我們再做最后一步,就是將兩個架構的libiPhone合成為一個
lipo -create /Users/admin/URLUtility7/libiPhone-lib7.a /Users/admin/URLUtility64/libiPhone-lib64.a -output libiPhone-lib.a
做完這部,再上傳提審,沒有警告郵件。
3.其他三方SDK,進行更新,一般的SDK最新版都進行了處理。
點個贊再走唄。。。
如有疑問,聯系作者
博客園:這個我不知道誒
