【问题标题】:Private consuming NSDictionary property私人消费 NSDictionary 属性
【发布时间】: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


【解决方案1】:

感谢您的帮助,我能够通过使用字符串值 @"" 来解决此问题

我不得不从开头删除k 字母

NSDictionary *trustKitConfig =
    @{
      @"TSKSwizzleNetworkDelegates": @YES,// How to private consume this property
      @"TSKPinnedDomains": @{
          @"*.apps.atp.dev.jsafrasarasin.com" : @{
              @"TSKIncludeSubdomains": @YES, // Pin all subdomains
              @"TSKEnforcePinning": @YES, // Block connections if pinning validation failed
              @"TSKDisableDefaultReportUri": @YES,
              @"TSKPublicKeyHashes": @[
                @"dz0GbS1i4LnBsJwhRw3iuZmVcgqpn+AlxSBRxUbOz0k=",
                @"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=",
              ],
          },
      }
    };

【讨论】:

  • 你是如何获得第二个 TSKPublicKeyHashes 的?
  • 只是一个假的,但基本上你应该有两个证书,以防第一个过期或被替换
  • 但是我怎样才能获得第二个非假单证呢?
猜你喜欢
  • 1970-01-01
  • 2013-03-28
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2014-02-18
  • 2018-09-19
  • 1970-01-01
相关资源
最近更新 更多