Search code examples
iosswiftxcodefileapp-distribution

Where to put the text files when I distribute the app?


I have a simple application that needs to read multiple text files. But right now in order to access the files I am giving the address of the file in my laptop.

let path = "/Users/alimashreghi/Desktop/glossories/science.txt"
var text:String = ""

do{

   text = try NSString(contentsOfFile:path, encoding: NSUTF8StringEncoding) as String

}catch{

}

Now, I am concerned about when I want to distribute the app. Where should I put the text files and how should I read them to ensure that it works properly as an app in an iPhone?

Besides, I don't know much about distributing swift apps.

    //
//  ViewController.swift
//  Test
//
//  Created by Ali Mashreghi on 2016-08-29.
//  Copyright © 2016 Ali Mashreghi. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
    let data = NSData.init(contentsOfFile: "/Users/TestProj/science.txt") //prints Optional(4380)
    let data = NSData.init(contentsOfFile: "science.txt") //prints nil

    print(data?.length)

    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

enter image description here


Solution

  • Just put them in your application's bundle, then you can read them as:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:  "science" ofType:@"txt"];
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    

    Or

        if let filepath = Bundle.main.path(forResource: "science", ofType: "txt")
        {
            let data = NSData.init(contentsOfFile: filepath)
            NSLog("\(data)")
        }
    

    You can drag and drop them into Xcode's navigation area, ensure they are included in the bundle in Xcode's Build Phases | Copy Bundles Resources.