ios - 在 iOS 中禁用 NSParameterAssert

标签 ios objective-c swift iphone assert

我想在应用程序中禁用NSParameterAssert

我正在使用 pod 来使用 AFOAuth2Manager。所以我无法评论或删除此特定文件中的行。此文件(AFOAuth2Manager.m)纯粹依赖于 podfile

我想在我的项目中禁用以下几行

NSParameterAssert(url);

NSParameterAssert(clientID);

NSParameterAssert( secret );

请检查AFOAuth2Manager.m文件中包含以下代码

- (id)initWithBaseURL:(NSURL *)url
 sessionConfiguration:(NSURLSessionConfiguration *)configuration
             clientID:(NSString *)clientID
               secret:(NSString *)secret {
    NSParameterAssert(url);
    NSParameterAssert(clientID);
    NSParameterAssert(secret);
    self = [super initWithBaseURL:url sessionConfiguration:configuration];
    if (!self) {
        return nil;
    }
    self.serviceProviderIdentifier = [self.baseURL host];
    self.clientID = clientID;
    self.secret = secret;
    self.useHTTPBasicAuthentication = YES;
    [self.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    return self;
}

您能帮我解决这个问题吗?

最佳答案

是的,您可以从技术上做到这一点。

# Inject the target macro.
post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == "AFOAuth2Manager"
            target.build_configurations.each do |config|
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)']
                config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'NSParameterAssert'
            end
        end
    end
end

此 Hook 脚本将用 nil 替换 Foundation.framework 中的原始 NSParameterAssert 定义,您可以在 中检查此build设置运行 pod install 后,Pods 项目中的 >AFOAuth2Manager 目标。现在 Xcode 开始使用预定义的宏构建该目标,这确实是一种 hack 方法。


我们来说说NSParameterAssert宏的用法,该宏用于在开发库时断言所需的参数。它希望库调用者向当前方法传递一个 nonnull 参数,您(调用者)有责任在调用该方法之前检查可为空条件。

所以,您更喜欢的方式是:


if (url && clientID && secret) {
    AFOAuth2Manager *manager = [[AFOAuth2Manager alloc] initWithBaseURL:url
                                                   sessionConfiguration:configuration
                                                               clientID:clientID
                                                                 secret:secret];
} else {
    # ...
}

关于ios - 在 iOS 中禁用 NSParameterAssert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084745/

相关文章:

ios - 为什么 nspredicate 不起作用

ios - 无法在 Xcode 6.4 和 Xcode 7 中构建模块 UIKIT

ios - 更新模型 Realm Swift

ios - 使用 Metal 间接命令缓冲区时出错 : "Fragment shader cannot be used with indirect command buffers"

ios - 从一些已解析的 NSString 中提取文本

iOS - 逐一加载单元

ios - 如何在 swift iOS 中读取并记录图像的原始像素

c# - MonoTouch 无法获取现有钥匙串(keychain)项目的值(value)

iphone - 突出显示此按钮类型不支持的色调颜色

ios - Swift - 将属性添加到两个字符之间的字符串