美文网首页
iOS解决无法适配模拟器的问题

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

作者: fortitude1990 | 来源:发表于2019-01-18 10:59 被阅读10次

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

    使用模拟器来适配全面屏,第一个要解决的问题就是去除不支持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方法。

    相关文章

      网友评论

          本文标题:iOS解决无法适配模拟器的问题

          本文链接:https://www.haomeiwen.com/subject/nzigdqtx.html