如何将音频共享到我的iOS应用程序中,以及如何处理"无法共享"错误



我正在尝试将语音邮件共享到我的应用程序中。

为了简化流程,我找到了一篇Medium文章:https://medium.com/macoclock/ios-share-extension-swift-5-1-1606263746b,介绍如何使用照片实现共享扩展。

我的策略是把它落实到位,因为网上没有关于如何使用音频的说明,用断点点击发送到我的项目的文件。

当我在Simulator和侧面加载的iPhone中运行后,可以理解地阅读了博客步骤,实现了代码,并停止了ShareViewController文件中的断点命中时,问题就出现了。

问题:

  • 如何共享音频?我需要在共享视图控制器中识别的文件类型是什么
  • 如何通过";无法连接";错误

我的步骤是:

  1. 添加新目标
  2. 选择共享扩展
  3. (添加到共享plist(NSExtensionAttributes Dictionary,(然后(NSExtentionActivationRule Dictionary和(然后(NSExtensionActivationSupportsImageWithMaxCount Number 1
  4. 选择共享方案和设备(iPhone 8 plus模拟器或本地iPhone(
  5. 单击"带断点运行">
  6. 选择要打开的照片应用程序
  7. 单击照片,从共享表中单击我的应用程序
  8. 获取警报(标题:"无法共享",消息:"准备共享时出错…"(

这是代码:

import UIKit
import Social
import MobileCoreServices
@objc(ShareExtensionViewController)
class ShareViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()

self.handleSharedFile()
}

private func handleSharedFile() {
// extracting the path to the URL that is being shared
let attachments = (self.extensionContext?.inputItems.first as? NSExtensionItem)?.attachments ?? []
let contentType = kUTTypeData as String
for provider in attachments {
// Check if the content type is the same as we expected
if provider.hasItemConformingToTypeIdentifier(contentType) {
provider.loadItem(forTypeIdentifier: contentType,
options: nil) { [unowned self] (data, error) in
// Handle the error here if you want
guard error == nil else { return }

if let url = data as? URL,
let imageData = try? Data(contentsOf: url) {
self.save(imageData, key: "imageData", value: imageData)
} else {
// Handle this situation as you prefer
fatalError("Impossible to save image")
}
}}
}
}

private func save(_ data: Data, key: String, value: Any) {
let userDefaults = UserDefaults()
userDefaults.set(data, forKey: key)
}
}

这是我的plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>ACI-Share</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<string>TRUEPREDICATE</string>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
</dict>
</plist>

我不是这方面的专家,但我终于设法让我的应用程序能够共享音频文件(.mp3(。问题是共享扩展并不是真正用于音频文件的。它真的适用于图片和社交媒体网站。如果你共享音频,你必须将你的应用程序和应用程序扩展放入你自己的应用程序组。然后,当你共享音频时,将音频从包含应用程序的文档文件夹复制到应用程序扩展程序共享的文件夹中,然后它就可以读取了。总之,这就是解决我问题的原因

这里有一个帮助我的链接:www.invasivecode.com

最新更新