iOS開發中如何繞過第三方SDK對BundleID的檢驗
阿新 • • 發佈:2018-12-14
在開發中有些第三方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