我想在应用程序中禁用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


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


让我们谈谈宏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/

10-09 23:38