Swift version: 5.6
It’s common to store resource data like text files and sound effects inside your bundle, but loading them must be done in a particular way to avoid problems.
Rather than try to figure out the layout of your bundle at runtime, the correct thing to do is call the path(forResource:)
method if you’re looking for a string path, or url(forResource:)
if you’re looking for a URL
.
For example, these two lines find the path to input.txt inside the bundle, as both a string and a URL
:
let stringPath = Bundle.main.path(forResource: "input", ofType: "txt")
let urlPath = Bundle.main.url(forResource: "input", withExtension: "txt")
Obviously you only need one of those – if you get to choose then it’s safer to go with the URL
.
TAKE YOUR SKILLS TO THE NEXT LEVEL If you like Hacking with Swift, you'll love Hacking with Swift+ – it's my premium service where you can learn advanced Swift and SwiftUI, functional programming, algorithms, and more. Plus it comes with stacks of benefits, including monthly live streams, downloadable projects, a 20% discount on all books, and free gifts!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.