WooKoo Blog

물과 같이

개발/개발

[iOS] - SQLite3 기존 DB 사용하기

WooKoo 2019. 12. 1. 00:40

으아아아아악!

나는 영어 사전 어플을 만들기 위해서 영어 사전이라는 DB를 어플리케이션을 동작할 때 넣어줘야했다.

결론적으로는 해결을 했다. 

해당 시뮬레이션 기기마다 경로가 달라서 DB파일을 어떻게 넣어줘야하는지 몰랐는데

만들어둔 DB를 시뮬레이터가 돌아갈 때 새로운 DB를 만들어 Copy해주는 방법을 사용해야했다.

어떻게 하는지 알아보자.


먼저 제작한 데이터 베이스를 프로젝트 폴더 안에 넣어주자.

이런 식!

 

그 후에는 

 

https://github.com/stephencelis/SQLite.swift

 

stephencelis/SQLite.swift

A type-safe, Swift-language layer over SQLite3. Contribute to stephencelis/SQLite.swift development by creating an account on GitHub.

github.com

 

여기 프로젝트를 다운받아서 압축을 풀어주자!

 

그 후

이런 식으로 프로젝트를 추가해준다.

 

그 후 메인 프로젝트의 설정에 가자.

 

여기 사진에서는 OwlEnglish 프로젝트 파일이 될 것이다.

 

위 사진과 같이 Build Phases 에서

 

Dependencies와 Link Binary With Libraries 에 SQLite iOS 버전의 프레임 워크를 추가해준다.

 

이렇게 하면 기본 설정은 끝이 난다.

 

그 후 아래와 같은 메소드를 추가 해준다.

 

    //dbPath
    func dbPath() -> String{
        let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let docsDir = dirPaths[0] as String
        let destPath = (docsDir as NSString).appendingPathComponent("wook.sqlite3")
        return destPath
    }

 

이 메소드와

 

    func copyDatabases(){
        let fileManager = FileManager.default
        if let path = Bundle.main.path(forResource: "OwlDB", ofType: "sqlite3"){
            do{
                try fileManager.copyItem(atPath: path, toPath: dbPath())
                print("성공했다 카피")
                print(path)
                print(dbPath())
            }catch{
                print(error)
            }
            
        }
    }

 

이 메소드이다.

카피 메소드에서는 복사 할 기존의 DB 에 대해서 설정해주고 위에 dbPath에서 새로 생성 될 DB의 이름을 알아내서 추가해준다.

 

이렇게 생성하고나서 빌드를 돌리면 아무 것도 일어나지않는다!

 

바로 함수만 만들었으니까 흐흐흐

 

viewDidLoad에 카피 함수를 동작시켜보자!!

 

그럼 아마 시뮬레이션 경로에 들어가서 sqlite3 파일을 열어보면 기존의 DB의 내용들이 복사되었을 것이다.

 


참고한 블로그당. 나에게 힘이 되었다.

https://kd3302.tistory.com/965

 

코딩 아이폰 xcode 서버 데이터 sqlite에 복사 후 접근하기

코딩 아이폰 xcode 서버 데이터 sqlite에 복사 (코딩 초보가 공부하면서 생각 안날 때 참고하기 위해서 정리하는 노트 같은 글이니 혹시 이 글을 보는 분들이 계신다면 참고만 하셨으면 좋겠네요.^^;) 앱에서 필요..

kd3302.tistory.com