在 iOS 中禁用 NSParameterAssert
Posted
技术标签:
【中文标题】在 iOS 中禁用 NSParameterAssert【英文标题】:Disable NSParameterAssert in iOS 【发布时间】:2019-11-28 08:43:39 【问题描述】:我想在应用程序中禁用 NSParameterAssert
我正在使用 AFOAuth2Manager 使用 pod。因此我无法评论或删除此特定文件中的行。此文件(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;
您能帮我解决这个问题吗?
【问题讨论】:
为什么需要这样做? “断言”表示如果不满足这个条件,这个方法就不能正常工作。 【参考方案1】:是的,技术上你可以做到。
# 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
此钩子脚本将用nil
替换来自Foundation.framework
的原始NSParameterAssert
定义,您可以在运行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 中禁用 NSParameterAssert的主要内容,如果未能解决你的问题,请参考以下文章