iOS模擬器適配2023-03-17

接手的公司iOS項(xiàng)目是組件化開發(fā),項(xiàng)目也比較大疾牲,App Store顯示的包有400多M,并且無法適配模擬器衙解。所以阳柔,首先我來進(jìn)行模擬器適配。

1蚓峦、報(bào)錯(cuò)building for iOS Simulator, but linking in object file built for iOS

如報(bào)錯(cuò)

In /Users/zhanyu/Workspace/iOS/********_iOS/Pods/ZYMapKit/BaiduMapFramework/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils(BMKOpenPoiOption.o), building for iOS Simulator, but linking in object file built for iOS, file 
'/Users/zhanyu/Workspace/iOS/********_iOS/Pods/ZYMapKit/BaiduMapFramework/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils' for architecture arm64

這個(gè)問題目前應(yīng)該只出現(xiàn)在M1芯片的Mac上舌剂,似乎又是一個(gè)兼容性問題,因?yàn)镸1芯片的Mac本身就是arm架構(gòu)暑椰,所以模擬器自然也支持arm架

第一步修改Podfile文件
#        config.build_settings['VALID_ARCHS'] = ['arm64', 'x86_64','arm64-apple-ios']
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
第二步修改霍转,在編譯設(shè)置中,對(duì)模擬器排除 arm64
205eeeed9a71efcbc2541e357ae3cc0f.png

然后pod install
再檢查

第三步:在主項(xiàng)目和pod項(xiàng)目的PROJECT的Build Settings中一汽,刪除VALID_ARCHS(整個(gè)刪除谴忧,不能只刪除value留下Key
jietudjhfjds.png

Xcode 12不再支持VALID_ARCHS,需移除角虫!采用Excluded Architectures過濾掉不需要的架構(gòu)即可沾谓!
如果項(xiàng)目在Build Settings下的User-Defined中添加了VALID_ARCHS屬性,需要將其移除戳鹅,否則無法在Xcode 12編譯運(yùn)行設(shè)備均驶。
如果確實(shí)需要設(shè)定支持/不支持的架構(gòu),通過Excluded Architectures配置即可枫虏。

ps:ios模擬器運(yùn)行報(bào)錯(cuò)
Command PhaseScriptExecution failed with a nonzero exit code妇穴,也可以嘗試以上方式解決

2、模擬器不支持的庫瑞修德隶债、推送腾它、PKI、PLPlaykit死讹、愛心推PLMediaStreamingKit

如報(bào)錯(cuò)Could not find module 'RXD_SDK' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios, at:

先用如以下方式過濾import和調(diào)用代碼
#if targetEnvironment(simulator)
import RXD_SDK
#else
#endif

如報(bào)錯(cuò)
Undefined symbol: OBJC_CLASS$_HDtuiliuVideoViewController
在HDtuiliuVideoViewController類中找到代碼引用PLPlaykit代碼

#if TARGET_IPHONE_SIMULATOR
#else
                // 初始化 PLPlayerOption 對(duì)象
                PLPlayerOption *option = [PLPlayerOption defaultOption];
                // 更改需要修改的 option 屬性鍵所對(duì)應(yīng)的值
                [option setOptionValue:@10 forKey:PLPlayerOptionKeyTimeoutIntervalForMediaPackets];
                [option setOptionValue:@2000 forKey:PLPlayerOptionKeyMaxL1BufferDuration];
                [option setOptionValue:@1000 forKey:PLPlayerOptionKeyMaxL2BufferDuration];
                [option setOptionValue:@(YES) forKey:PLPlayerOptionKeyVideoToolbox];
                [option setOptionValue:@(kPLLogNone) forKey:PLPlayerOptionKeyLogLevel];
                self.player = [PLPlayer playerLiveWithURL:[NSURL URLWithString:self.model.playUrl] option:option];
                self.player.delegate = self;
                self.player.playerView.frame = CGRectMake(0, 180, kScreenWidth, 250);
                [self.videoView addSubview:self.player.playerView];
                [self.player play];
#endif

如調(diào)用了PLMediaStreamingKit中代碼也報(bào)錯(cuò)瞒滴,可以修改

#if TARGET_IPHONE_SIMULATOR
#else
    [PLStreamingEnv initEnv];
#endif

其他的地方,如

#if targetEnvironment(simulator)
#else
        if viewController is QYSessionViewController {
            printLog(message: "已進(jìn)入客服頁面")
#endif

#if targetEnvironment(simulator)
#else
        let option = QYSDKOption.init()
        option.appKey = ThirdLibConfig.shared.QY_NIM_Appkey
        option.appName = ""
        option.isFusion = false
        QYSDK.shared().register(with: option)
#endif



    /** 獲取Wifi Ssid */
     public func getSsid() -> String? {
        if let interface : CFArray = CNCopySupportedInterfaces() {
#if targetEnvironment(simulator)
#else
            NSLog("\(interface)");
            for i in 0..<CFArrayGetCount(interface) {
                let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interface, i);
                NSLog("\(interfaceName)");
                let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
                if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString), let interfaceData = unsafeInterfaceData as? [String : AnyObject] {
                    if let ssid =  interfaceData["SSID"] as? String {
                        return ssid
                    }
                }
            }
        }
#endif
        return nil;
    }

3、七牛 - Qiniu (= 7.2.5)版本中HappyDNS問題

dyld[52532]: Library not loaded: @rpath/HappyDNS.framework/HappyDNS
 Reason: tried: '/Users/zhanyu/Library/Developer/Xcode/DerivedData/***-fjmngiqwdvbcdyasnbmgeutgqouy/Build/Products/Debug-iphonesimulator/HappyDNS.framework/HappyDNS' (errno=2), '/Users/zhanyu/Library/Developer/CoreSimulator/Devices/CFD4C541-F60A-4190-8CEB-4CFC402A7431/data/Containers/Bundle/Application/3C0A8B63-C41B-49CA-8073-960CF74711ED/*****.app/Frameworks/HappyDNS.framework/HappyDNS' (fat file, but missing compatible architecture (have 'armv7,arm64', need 'x86_64')),

PLShortVideoKit在podspec中dependency了Qiniu7.2.5妓忍,Qiniu7.2.5有個(gè)0.3版本HappyDNS.framework依賴虏两,但是這個(gè)版本壓根沒用還會(huì)導(dǎo)致報(bào)錯(cuò)。
這個(gè)問題我想了很多方式解決都沒用世剖,
如果升級(jí)PLShortVideoKit到3.2.5定罢,七牛變成8.2.0,會(huì)導(dǎo)致其他報(bào)錯(cuò)旁瘫。
如果刪除HappyDNS.framework的引用 -framework "HappyDNS"祖凫,模擬器能跑起來,但是pod install后酬凳,刪除的內(nèi)容又會(huì)復(fù)原惠况。

最終方法:

在本地引入PLShortVideoKit.podspec,版本還是3.1.1粱年,但不依賴s.dependency 'Qiniu', '7.2.5'
在本地引入Qiniu.podspec售滤,版本還是7.2.5罚拟,但不依賴s.dependency 'HappyDNS', '~> 0.3'
然后再Podfile中

  #  PLShortVideoKit用自己編寫的podspec台诗,剔除HappyDNS,解決HappyDNS不適配模擬器問題
  pod 'PLShortVideoKit', :podspec => 'PLShortVideoKit.podspec'
  pod 'Qiniu', :podspec => 'Qiniu.podspec'

pod install后完美解決問題
模擬器能跑起來了

打包時(shí)爆了個(gè)錯(cuò)

error: Build input file cannot be found: '/Users/zhanyu/Library/Developer/Xcode/DerivedData/***-bilorlkikiiqdgbzqzutxjdoxkfz/Build/Intermediates.noindex/ArchiveIntermediates/JFDriver/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/JFDriverWidgetExtension.appex/***WidgetExtension'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it? (in target '***WidgetExtension' from project 'JFDriver')

在***WidgetExtension target 以下地方release也要進(jìn)行設(shè)置


截屏2023-03-17 17.48.34.png

如果一個(gè).framework只有真機(jī)庫赐俗,需要在模擬器中運(yùn)行拉队,此時(shí)加載庫的時(shí)候會(huì)報(bào)錯(cuò)。
解決方法:在Excluded Source File Names中配置
只有在模擬器環(huán)境下阻逮,不使用的庫:(如果在代碼中還要加上#if TARGET_OS_SIMULATOR進(jìn)行模擬器的邏輯判斷粱快。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叔扼,隨后出現(xiàn)的幾起案子事哭,更是在濱河造成了極大的恐慌,老刑警劉巖瓜富,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳍咱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡与柑,警方通過查閱死者的電腦和手機(jī)谤辜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來价捧,“玉大人丑念,你說我怎么就攤上這事〗狍” “怎么了脯倚?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嵌屎。 經(jīng)常有香客問我挠将,道長胳岂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任舔稀,我火速辦了婚禮乳丰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘内贮。我一直安慰自己产园,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布夜郁。 她就那樣靜靜地躺著什燕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竞端。 梳的紋絲不亂的頭發(fā)上屎即,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音事富,去河邊找鬼技俐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛统台,可吹牛的內(nèi)容都是我干的雕擂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼贱勃,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼井赌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贵扰,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤仇穗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后戚绕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纹坐,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年列肢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恰画。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瓷马,死狀恐怖拴还,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欧聘,我是刑警寧澤片林,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響费封,放射性物質(zhì)發(fā)生泄漏焕妙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一弓摘、第九天 我趴在偏房一處隱蔽的房頂上張望焚鹊。 院中可真熱鬧,春花似錦韧献、人聲如沸末患。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璧针。三九已至,卻和暖如春渊啰,著一層夾襖步出監(jiān)牢的瞬間探橱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工绘证, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隧膏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓迈窟,卻偏偏與公主長得像私植,于是被迫代替她去往敵國和親忌栅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子车酣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容