在 iOS 12 中,Apple 引入了NSSecureUnarchiveFromDataTransformerName用于 CoreData 模型实体的可转换属性。我曾经将 Transformer Name 字段保持为空,它隐式使用了NSKeyedUnarchiveFromDataTransformerName. 这个转换器现在已被弃用,将来保持该字段为空将意味着NSSecureUnarchiveFromDataTransformerName取而代之。
在 iOS 13 中,如果该字段为空,您现在会收到一个运行时警告,告诉您上述内容。我在任何地方都找不到关于此的任何文档,我得到的唯一参考是 WWDC 2018 核心数据最佳实践演讲,其中简要提到了我刚才所说的内容。
现在我有一个带有实体的模型,该实体直接将HTTPURLResponse对象存储在 Transformable 属性中。它符合NSSecureCoding,我在运行时检查supportsSecureCoding是true。
NSSecureUnarchiveFromDataTransformerNameTransformer Name 的设置崩溃并显示以下消息:
Object of class NSHTTPURLResponse is not among allowed top level class list (
NSArray,
NSDictionary,
NSSet,
NSString,
NSNumber,
NSDate,
NSData,
NSURL,
NSUUID,
NSNull
) with userInfo of (null)
Run Code Online (Sandbox Code Playgroud)
所以听起来 Transformable 属性只能是这些顶级对象。
我尝试对安全转换器进行子类化并allowedTopLevelClasses按照文档的建议覆盖该属性:
@available(iOS 12.0, *)
public class NSSecureUnarchiveHTTPURLResponseFromDataTransformer: NSSecureUnarchiveFromDataTransformer …Run Code Online (Sandbox Code Playgroud) 我正在运行Xcode 11 Beta4。我正在使用CocoaPods,并且想将Swift Package Manager的依赖项之一用作静态库而不是框架。在使用Xcode 11创建的新项目中,可以成功导入依赖项,但是在我现有的CocoaPods工作区中则不能。
我认为这可能是相关的,但我也在Xcode中收到此链接警告:
directory not found for option '-L/Users/username/Library/Developer/Xcode/DerivedData/App-axanznliwntexmdfdskitsxlfypz/Build/Products/Release-iphoneos
Run Code Online (Sandbox Code Playgroud)
在发出警告后,我去查看目录是否存在,并且确实存在。除了CocoaPods的存在之外,新创建的项目与我的旧项目之间没有任何有意义的区别。
将不胜感激任何指针。