Xcode11+ iOS13+ Unity 提包UIWebView 解決方案


最近項目進行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最新版都進行了處理。

 

點個贊再走唄。。。

如有疑問,聯系作者

博客園:這個我不知道誒


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM