iOS解决无法适配模拟器的问题

2019-01-18  本文已影响10人  fortitude1990

最近要进行全面屏的适配,但是又没有全面屏手机,全面屏手机价格太高,申请一个全面屏测试机估计也没有希望,所以只能使用模拟器来适配全面屏了。

使用模拟器来适配全面屏,第一个要解决的问题就是去除不支持X86架构的第三方静态库。如果直接删除,就要注销掉所有依赖这个库的代码,等适配完之后再一一修改回来,很显然这个方法不可行的,如果逻辑很复杂的话,这个过程一定会出现问题。所以我就打算模拟一个静态库,让这个模拟静态库拥有原有静态库的API,同时支持X86架构。

首先建立一个静态库工程,命名为SimulateYSBLib(假如原来静态库文件为YSBLib.a)。

创建一对.h、.m文件,命名为YSBDeviceAPI(这里必须和YSBDeviceAPI.a的public文件名相同)。然后拷贝YSBLib.a对应的YSBDeviceAPI.h的内容,粘贴到SimulateYSBLib.a对应的YSBDeviceAPI.h中。将YSBDeviceAPI.h设置为public header。

文件目录.png 设置为public.png

为了解决调用方法不存在导致闪退的问题,可以采取以下方案:

在SimulateYSBLib写一个实例方法:

#import <Foundation/Foundation.h>

@interface SimulateYSBLib : NSObject

- (id)commonMethod;

@end

#import "SimulateYSBLib.h"

@implementation SimulateYSBLib

- (id)commonMethod{
    return nil;
}

@end

在YSBDeviceAPI.m重写methodSignatureForSelector、forwardInvocation:

#import "YSBDeviceAPI.h"
#import "SimulateYSBLib.h"

@implementation YSBDeviceAPI


- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector{
    
    if (aSelector == @selector(commonMethod)) {
        return [super methodSignatureForSelector:aSelector];
    }
    
    return [[[SimulateYSBLib alloc] init] methodSignatureForSelector:@selector(commonMethod)];;
    
}

-(void)forwardInvocation:(NSInvocation *)anInvocation{
    
    if (anInvocation.selector == @selector(commonMethod)) {
        [anInvocation invokeWithTarget:[[SimulateYSBLib alloc] init]];
    }
    
    
}



@end

调用YSBDeviceAPI.h的方法时,统一走SimulateYSBLib类的commonMethod方法。

上一篇下一篇

猜你喜欢

热点阅读