1. 程式人生 > >iOS開發中如何繞過第三方SDK對BundleID的檢驗

iOS開發中如何繞過第三方SDK對BundleID的檢驗

在開發中有些第三方SDK會對BundleID做校驗。

比如高德地圖如果BundleID沒有註冊就不能獲取經緯度及反地理編碼。

比如Fido就不能使用其生物識別開通驗證功能。

但是測試的包的BundleID由於某些功能限制或企業證書限制不能使用註冊過的BundleID打包,怎麼辦呢。

1,找到第三方sdk是通過哪個系統方法獲取的BundleID

比如我們的是 NSBundle 的 bundleIdentifier 屬性

2.找到第三方sdk是通過哪個方法呼叫的第一步的方法

比如我們的是第三方SDK初始化的時候  [FSDK getInstance];

3,在呼叫第二步方法的前後分別加標記,要返回正確的BundleID和返回實際的BundleID

        GlobalVariables.isNeedHook = YES;
        [FSDK getInstance];
        GlobalVariables.isNeedHook = NO;

4為NSBundle新增分類替換bundleIdentifier方法

.h
#import <Foundation/Foundation.h>

@interface NSBundle (swizz)

@end


.m
#import "NSBundle+swizz.h"

@implementation NSBundle (swizz)

+ (void)load{
    Method originalMethod = class_getInstanceMethod([NSBundle class], @selector(bundleIdentifierSw));
    Method swizzledMethod = class_getInstanceMethod([NSBundle class], @selector(bundleIdentifier));
    method_exchangeImplementations(originalMethod, swizzledMethod);
}
- (NSString *)bundleIdentifierSw{
    if (GlobalVariables.isNeedHook == YES) {
        return @"註冊過的";
    }else{
        return [self bundleIdentifierSw];
    }
}
@end

ok