如何将文件添加到主包&s; Library / Sounds目录?

时间:2016-02-15 21:00:54

标签: ios xcode apple-push-notifications

根据Apple's documentation,〜/ Library / Sounds中的声音文件将在尝试播放声音时由系统搜索。如何将声音文件添加到此文件夹?

我试图在运行时写入该文件夹,但没有权限。我在xcode中添加了一个Library / Sounds文件夹,但它似乎没有复制过来。

enter image description here

xcode - >窗口 - >设备,选择我的应用程序和显示容器,文件夹不存在 enter image description here

要添加一些上下文,我正在为解析推送通知执行自定义声音。服务器人告诉我,当向许多用户广播时,为每个用户在有效载荷中发送自定义声音字符串将非常困难。作为一种解决方法,我试图使用单个声音文件,每次用户选择新声音时都会被动态覆盖。

因此,声音文件需要由系统自动检测,并且可以在应用程序的运行时进行修改。将文件添加到主包不起作用,因为它是只读的。我希望〜/ Library / Sound中的文件可以编辑。

我不知道如何继续这一点。任何帮助将不胜感激。

更新: 我错误地尝试使用

在运行时创建目录
        try fileManager.createDirectoryAtPath("Library/Sounds", withIntermediateDirectories: true, attributes: nil)

正确的代码应该是

        let libraryDir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.UserDomainMask, true)
        let directoryPath = "\(libraryDir.first!)/Sounds"
        try fileManager.createDirectoryAtPath(directoryPath, withIntermediateDirectories: true, attributes: nil)

My solution to the custom sound problem.

3 个答案:

答案 0 :(得分:5)

您拥有的链接适用于Mac!适用于iOS的正确文档应为here

总之,您只需将声音文件作为应用程序包的非本地化资源添加到项目中。

答案 1 :(得分:2)

我也在努力解决这个问题。您必须以编程方式创建Library / Sounds目录并将自定义声音移入其中。

let soundsDirectoryURL = fileManager.urls(for: .libraryDirectory, in: .userDomainMask).first!.appendingPathComponent("Sounds")

//attempt to create the folder
do {
    try fileManager.createDirectory(atPath: soundsDirectoryURL.path,
                                    withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
    print("Error: \(error.localizedDescription)")
}

答案 2 :(得分:0)

我在工作中遇到了完全相同的问题。我建议 -

  1. 项目中有多个声音文件。
  2. 坚持用户的声音选择。
  3. 当您收到推送通知时,请使用您在步骤2中保留的内容播放声音。