AirDrop分享airdropme.zip异常:文件位置与代码修改咨询
问题解决步骤
1. 文件存放位置调整
- 不要把
airdropme.zip放在Assets.xcassets里,这个目录是专门管理图像、颜色等资源资产的,无法直接通过文件URL访问。 - 直接将
airdropme.zip拖到Xcode项目的根目录(或任意普通文件夹),拖入时确保勾选**"Copy items if needed",并且在右侧检查器的Target Membership**中勾选你的App Target,这样文件才会被打包进App Bundle。
2. 修正代码获取正确的文件URL
原来的代码直接用文件名创建URL是错误的,App Bundle里的文件路径不是当前工作目录,必须通过Bundle.main获取正确路径。修改后的代码如下:
@IBAction func airdropMyFile() { // 从主bundle获取文件的正确URL guard let fileURL = Bundle.main.url(forResource: "airdropme", withExtension: "zip") else { // 处理文件找不到的情况,比如打印日志或提示用户 print("找不到airdropme.zip文件") return } let filesToShare = [fileURL] let activityViewController = UIActivityViewController(activityItems: filesToShare, applicationActivities: nil) // iPad适配(如果支持iPad) if let popoverController = activityViewController.popoverPresentationController { popoverController.sourceView = self.view popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) popoverController.permittedArrowDirections = [] } self.present(activityViewController, animated: true, completion: nil) }
关键说明
Bundle.main.url(forResource:withExtension:)会自动在App Bundle中查找对应文件,返回正确的文件URL,这是获取bundle内文件的标准方式。- 加入空值判断(
guard let)可以避免文件不存在时崩溃,同时能做错误处理。 - 补充了iPad的popover适配,避免在iPad上因未设置sourceRect导致的崩溃问题。
内容的提问来源于stack exchange,提问作者Rev Archer
相关产品推荐
相关产品推荐

