保存为包(带有文件包装器)和 icloud 驱动器的文件,在通过电子邮件发送时是否被压缩?
files saved as package (with filewrappers) and icloud drive, are they zipped when emailed?
我有一个使用 UIDocument 并使用文件包装器写入数据的应用程序:
public override func contents(forType typeName: String) throws -> Any {
print("******writing the contents******")
print("**** typeName = \(typeName)")
let result = FileWrapper(directoryWithFileWrappers: [:])
... lots more....
}
这实际上工作正常。我的 plist 中也有文档的 uti。文档可以保存,复制到 icloud 驱动器,导入回应用程序,到目前为止一切顺利....
但现在困难的部分是:Icloud 驱动器有一个电子邮件按钮。如果我通过该按钮将工作文件邮寄给自己,并将文件保存在 mac 上,右键单击菜单选项 "show package contents" 将消失。 (虽然它在 icloud 驱动器中用于相同的文件)。
此外,如果我尝试在 iphone 上打开此邮件附件,我的应用程序无法找到包装文件的子路径。 (所以我的文件名为 bla.myextension,元数据应该位于 bla.myextension/meta.xml 但收件箱中的文件似乎是 "file" 而不是一个目录。
发生了什么事。电子邮件是否以某种方式自动压缩了内容?
文件确实是自动压缩的。所以在 application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:])
中只需检查结果是否是一个目录,因为从 icloud 驱动器打开可能会给你解压缩的结果。如果它是一个目录,那么你必须自己解压它。
var isDir : ObjCBool = ObjCBool( false)
if fileManager.fileExists(atPath: url.path, isDirectory: &isDir) {
if isDir.boolValue {
...copy directory...
}
else {
...unzip and copy....
}
}
我有一个使用 UIDocument 并使用文件包装器写入数据的应用程序:
public override func contents(forType typeName: String) throws -> Any {
print("******writing the contents******")
print("**** typeName = \(typeName)")
let result = FileWrapper(directoryWithFileWrappers: [:])
... lots more....
}
这实际上工作正常。我的 plist 中也有文档的 uti。文档可以保存,复制到 icloud 驱动器,导入回应用程序,到目前为止一切顺利....
但现在困难的部分是:Icloud 驱动器有一个电子邮件按钮。如果我通过该按钮将工作文件邮寄给自己,并将文件保存在 mac 上,右键单击菜单选项 "show package contents" 将消失。 (虽然它在 icloud 驱动器中用于相同的文件)。
此外,如果我尝试在 iphone 上打开此邮件附件,我的应用程序无法找到包装文件的子路径。 (所以我的文件名为 bla.myextension,元数据应该位于 bla.myextension/meta.xml 但收件箱中的文件似乎是 "file" 而不是一个目录。
发生了什么事。电子邮件是否以某种方式自动压缩了内容?
文件确实是自动压缩的。所以在 application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:])
中只需检查结果是否是一个目录,因为从 icloud 驱动器打开可能会给你解压缩的结果。如果它是一个目录,那么你必须自己解压它。
var isDir : ObjCBool = ObjCBool( false)
if fileManager.fileExists(atPath: url.path, isDirectory: &isDir) {
if isDir.boolValue {
...copy directory...
}
else {
...unzip and copy....
}
}