一、从其他App获取文件:官方文档
第一步:
让自己的App显示在系统的分享列表里:需要修改 *.plist 文件
Key为:CFBundleDocumentTypes
Value是:数组,可以包含n个字典,一般一个字典表示支持一种类型的文件
字典:
Key | Value |
---|---|
CFBundleTypeName | 文件类型名称(自己起个名) |
LSHandlerRank | 包含Owner,Default,Alternate,None四个可选值 |
LSItemContentTypes | 数组类型,包含支持的文件类型:官方标识符文档(也可以自定义) |
这里给一个我需要支持.bin文件的例子:
代码语言:javascript复制<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>Binary</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
<key>LSItemContentTypes</key>
<array>
<string>public.data</string>
<string>public.executable</string>
<string>com.apple.mach-o-binary</string>
<string>com.apple.pef-binary</string>
</array>
</dict>
</array>
然后就可以.bin文件的分享列表里看到自己的app了,如图:
第二步:获取文件
当从其他app分享文件过来时,会调用:
代码语言:javascript复制// MARK: - 其他app分享过来时回调
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
print("openURLContexts:(URLContexts)")
}
保存的位置:会在Document下新建一个Inbox文件夹,分享过来的文件都会存在这个文件夹下:
代码语言:javascript复制// 获取 Document/Inbox 里从其他app分享过来的文件
let manager = FileManager.default
let urlForDocument = manager.urls(for: .documentDirectory, in: .userDomainMask)
var documentUrl = urlForDocument[0] as URL
documentUrl.appendPathComponent("Inbox", isDirectory: true)
do {
let contentsOfPath = try manager.contentsOfDirectory(at: documentUrl,
includingPropertiesForKeys: nil,
options: .skipsHiddenFiles)
self.url = contentsOfPath.first // 保存,为了展示分享
print("contentsOfPath:n(contentsOfPath)")
} catch {
print("error:(error)")
}
二、分享文件到其他App
代码语言:javascript复制// MARK: - 点击分享文件
@objc func clickShare() {
if let url = self.url {
documentController = UIDocumentInteractionController(url: url)
documentController?.presentOptionsMenu(from: self.view.bounds, in: self.view, animated: true)
}
}
以上~
参考1、参考2