iOS_从其他App获取文件、分享文件给其他App

一、从其他App获取文件:官方文档

第一步:

让自己的App显示在系统的分享列表里:需要修改 *.plist 文件

Key为:CFBundleDocumentTypes

Value是:数组,可以包含n个字典,一般一个字典表示支持一种类型的文件

  字典: 

Key Value

CFBundleTypeName

文件类型名称(自己起个名)

LSHandlerRank

包含OwnerDefaultAlternateNone四个可选值

LSItemContentTypes

数组类型,包含支持的文件类型:官方标识符文档(也可以自定义)

这里给一个我需要支持.bin文件的例子:

CFBundleDocumentTypes

  
    CFBundleTypeName
    Binary
    LSHandlerRank
    Alternate
    LSItemContentTypes
    
      public.data
      public.executable
      com.apple.mach-o-binary
      com.apple.pef-binary
    
  

然后就可以.bin文件的分享列表里看到自己的app了,如图:

iOS_从其他App获取文件、分享文件给其他App_第1张图片iOS_从其他App获取文件、分享文件给其他App_第2张图片

第二步:获取文件

当从其他app分享文件过来时,会调用:

// MARK: - 其他app分享过来时回调
func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
  print("openURLContexts:\(URLContexts)")
}

保存的位置:会在Document下新建一个Inbox文件夹,分享过来的文件都会存在这个文件夹下:

// 获取 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

// 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

 

你可能感兴趣的:(iOS开发,ios,xcode,swift)