【发布时间】:2021-11-20 01:17:27
【问题描述】:
我目前正在一个 React Native 项目上实现 TrustKit SSL Pinning。
由于我的 XCode 项目中的另一个库已经安装了 TrustKit Cocoapod,我无法再直接引用它,这就是为什么我试图以“私有”方式调用它,就像这个例子一样:
// Disable TrustKit if it is present
Class TrustKit = NSClassFromString(@"TrustKit"); //Private calling
if (TrustKit != nil)
{
// Override TrustKit's logger method, useful for local debugging
void (^loggerBlock)(NSString *) = ^void(NSString *message)
{
NSLog(@"TrustKit log: %@", message);
};
SEL setLoggerBlock = sel_registerName("setLoggerBlock:");
[TrustKit performSelector: setLoggerBlock withObject:loggerBlock];
NSDictionary *trustKitConfig =
@{
kTSKSwizzleNetworkDelegates: @YES,// How to private consume this property
kTSKPinnedDomains: @{
@"*.apps.atp.dev.jsafrasarasin.com" : @{
kTSKIncludeSubdomains: @YES, // Pin all subdomains
kTSKEnforcePinning: @YES, // Block connections if pinning validation failed
kTSKDisableDefaultReportUri: @YES,
kTSKPublicKeyHashes: @[
@"dz0GbS1i4LnBsJwhRw3iuZmVcgqpn+AlxSBRxUbOz0k=",
@"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
],
},
}
};
SEL setInitSharedInstanceWithConfiguration = sel_registerName("initSharedInstanceWithConfiguration:");
[TrustKit performSelector: setInitSharedInstanceWithConfiguration withObject:trustKitConfig];
}
我能够正确执行 TrustKit 方法。但是,我不知道如何通过私人调用来处理字典中的 trustKitConfig 属性
【问题讨论】:
-
通常,如果其他库公开引用 TrusKit,您应该没有问题,没有冲突。如果你不能,你的问题是它不知道常量
kTSK...的值,所以为什么不重新定义它们,或者直接写它们的值。请参阅github.com/datatheorem/TrustKit/blob/… :kTSKSwizzleNetworkDelegates: @YES,=>@"TSKSwizzleNetworkDelegates": @YES,等。 -
“由于我的 XCode 项目中的另一个库已经安装了 TrustKit Cocoapod,我无法再直接引用它。”你能解释一下你遇到了什么问题吗? CocoaPods 专门允许您访问依赖项的子依赖项(事实上,这是使用 CocoaPods 的主要原因,以协调具有相同依赖项的代码中的多个位置)。
-
感谢您到目前为止的帮助。我将添加有关与提到的这两个解决方案相关的描述的更多信息
标签: ios objective-c xcode trustkit