前言
m1芯片的mac普及已经很广泛了,对于一个iOS程序员可能会碰到一些兼容性的问题。
问题分析处理方案
笔者今天就碰到一个,如下:
1.问题:集成友盟sdk时,模拟器无法编译
2.分析:是因为友盟sdk支持的是x86_64架构的模拟器,而m1芯片下的模拟器是arm64架构
3.以往的处理方式:以前可以通过finder中Xcode->显示简介->选中Rosetta 来解决,笔者今天发现这个选项没有了,所以另寻他法。
4.如今处理:Xcode->product->destination->destination achitectures->show rosetta destinations,这时模拟器会处于兼容x86_64架构模式
编译时还有可能出现类似以下的问题:
解决:
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
end
总结
通过以上的方式处理之后虽然可以编译成功,但是在调用友盟sdk的时候会出现黑屏,由于友盟sdk的源码看不到,所以不再深入探索。猜测还是架构支持的问题,笔者最后的处理方式是针对模拟器和真机做判断处理,如下:
桥接文件:
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
#import <UMCommon/UMCommon.h>
#import <UMVerify/UMVerify.h>
#endif
友盟sdk初始化:
// 友盟初始化
func initUmeng() {
#if targetEnvironment(simulator)
#else
UMConfigure.initWithAppkey("", channel: nil)
let info = ""
//设置SDK参数,app生命周期内调用一次即可
UMCommonHandler.setVerifySDKInfo(info)
#endif
}