Swift version: 5.10
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
.
SPONSORED Alex is the iOS & Mac developer’s ultimate AI assistant. It integrates with Xcode, offering a best-in-class Swift coding agent. Generate modern SwiftUI from images. Fast-apply suggestions from Claude 3.5 Sonnet, o3-mini, and DeepSeek R1. Autofix Swift 6 errors and warnings. And so much more. Start your 7-day free trial today!
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.