2016-02-15 8 views
6

In base a Apple's documentation, il file audio in ~/Library/Sounds verrà cercato dal sistema quando si tenta di riprodurre un suono. Come aggiungo un file audio a questa cartella?Come aggiungere un file alla directory del bundle principale/Libreria/Suoni?

Ho provato a scrivere nella cartella in runtime, ma non ho il permesso. Ho aggiunto una cartella Libreria/Suoni in xcode ma sembra che non copi più.

enter image description here

Xcode -> finestra - dispositivi>, selezionare la mia app e mostrargli il contenitore, cartella non è lì enter image description here

Per aggiungere un po 'di contesto, sto facendo suono personalizzato per notifica push parse. Il server mi ha detto che durante la trasmissione a molti utenti, l'invio di una stringa sonora personalizzata nel payload per ciascun utente sarà troppo difficile. Come soluzione, sto cercando di utilizzare un singolo file audio che verrà sovrascritto in modo dinamico ogni volta che l'utente seleziona un nuovo suono.

Quindi il file audio deve essere rilevato automaticamente dal sistema e può essere modificato in fase di esecuzione dall'app. L'aggiunta del file al pacchetto principale non funzionerà in quanto è di sola lettura. Spero che un file in ~/Library/Sound sia modificabile.

Non ho idea di come procedere a questo punto. Qualsiasi aiuto sarà molto apprezzato.

Aggiornamento: ho erroneamente cercato di creare una directory in fase di esecuzione utilizzando

 try fileManager.createDirectoryAtPath("Library/Sounds", withIntermediateDirectories: true, attributes: nil) 

Il codice corretto dovrebbe essere

 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.

+0

per eventuali/risorse modificabile rinnovabili si dovrebbe usare la cartella della cache – sage444

+0

Il problema è un file audio nella cartella di cache non verrà rilevato da Apple per il suono di notifica push – Cymric

risposta

4

il link che hai è per Mac! il documento corretto per iOS deve essere here

In sintesi, è sufficiente aggiungere il file audio al progetto come risorsa non localizzata del pacchetto dell'app.

+0

Grazie per la correzione Allen. L'aggiunta del file direttamente al pacchetto principale non funzionerà in quanto il file non sarà modificabile. La pagina web che colleghi indica che la cartella Libreria/Suoni del contenitore dei dati verrà rilevata automaticamente da Apple e spero che i file in questa directory siano modificabili. Quindi la mia domanda è chiedere come aggiungere un file a questa directory. Contrassegnerò una risposta corretta anche se un file in Libreria/Suono non è modificabile a condizione che qualcuno possa dirmi come farlo. – Cymric

+0

@Cymric se stai cercando di creare file in fase di esecuzione in Libreria, dovresti guardare questo post SO: http://stackoverflow.com/questions/27216189/files-disappearing-from-nslibrarydirectory – Allen

+0

Ho scoperto cosa Ho sbagliato quando ho creato la directory nella libreria da quella domanda, questo è il modo di indicarmelo – Cymric

0

ho avuto lo stesso identico problema a lavoro. Vorrei suggerire -

  1. Avere più file audio nel progetto.
  2. Selezione audio utente persistente.
  3. Quando si riceve notifica push, riprodurre il suono utilizzando ciò che si ostinava a passaggio 2.
+0

Il suono riprodotto dal dispositivo è controllato dalla stringa in il payload della notifica push, ad esempio, se il server invia sound1.caf, l'app non ha modo di riprodurre sound2.caf. Come affermato nella mia domanda, il server non è in grado di inviare una stringa audio diversa a utenti diversi. – Cymric

+0

Stai dicendo che è "controllato" dalla stringa nel payload della notifica push.Ma il server non è in grado di inviare una stringa audio diversa a utenti diversi. Quindi, come viene controllato dalla stringa nel payload della notifica push? Perché non hai più file di suoni e hai una logica sul lato client che riprodurrebbe il suono. Perché vuoi modificare i file? –

+0

Quando il telefono riceve una notifica push remota, il sistema operativo cerca automaticamente il file audio specificato nel carico utile della notifica e lo riproduce. Non è possibile per l'app modificare questo processo. L'app potrebbe non essere nemmeno in esecuzione quando arriverà la notifica. – Cymric

1

Ho lottato anche con questo. È necessario creare la directory Libreria/Suoni a livello di codice e spostare il suono personalizzato in esso.

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)") 
}