ios - Objective-C:在违反可空性注释时强制执行编译错误

标签 ios objective-c ios-frameworks

背景

我们一直在开发公共(public)动态 iOS/macOS 框架。该框架是用 Objective-C 编写的,但与 Swift 完全兼容。

最近,我们更改了一种公共(public) API 方法的可空性注释:

来自

- (void)setServer:(nullable ABCLocation *)location;

- (void)setServer:(nonnull ABCLocation *)location;

,因此开发人员需要创建 [ABCLocation default] 实例并将其传递给新的 API。

问题

现在,我们关心的是,如何强制/通知开发人员围绕我们的新 API 更改他们现有的代码?

当将 API 与 Swift 一起使用时,它似乎可以通过抛出错误来很好地处理可空性。

Objective-C 仅在传递 nil 时生成警告,当开发人员将 nullable 属性传递给方法。

我们如何强制开发人员更改他们的 API?这里有哪些常见做法?

更新:

我们将框架作为二进制文件分发,使用Release配置构建,其中断言被关闭。

更新#2:

到目前为止,我们已经接受了从 Objective-C 使用我们的 API 的现实。但是,我们实现了“故障安全”行为:如果传递 nil,该方法会在内部创建 [ABCLocation default] 实例并隐式传递它。

最佳答案

当注释不满足时生成警告是一个很好的做法。在 API 中进行诸如 nullable -> nonnull 之类的更改则不然。

关于ios - Objective-C:在违反可空性注释时强制执行编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46823907/

相关文章:

ios - 当数据以 JSON 形式出现时,保存数据并将其从 TableView Controller 发送到详细 View Controller 的正确方法是什么

ios - 首次在iOS设备上安装enterprise in house distribution App失败

Objective-C - 测试对象实例被释放/释放

ios - PresentModalViewController 一旦应用程序从 Framework 启动

ios - 如何在 Xcode 6 上设置 svn 存储库?

ios - 可以为 viewWillAppear 创建一个选择器,但不能为 viewDidLoad 创建一个选择器

ios - 将叠加层添加到 Mapview

c - 为什么 NSError 需要双重间接? (指向指针的指针)

ios - #if canImport() 没有找到带有 CocoaPods 的框架

ios - Jenkins,我如何归档单个子目录(没有上面的整个树结构)?