오늘 확장을 위해 기존 Realm 데이터베이스 파일을 앱 그룹 위치에 복사
내 iOS 앱이 Realm 데이터베이스를 사용하고 있습니다. Today Extension 위젯과 공유 할 수 있도록 현재 default.realm 데이터베이스 파일을 새 디렉토리 (앱 그룹 위치)로 복사하거나 이동하고 싶습니다.
이 게시물이 말한대로 시도했습니다 ( Realm 데이터베이스를 앱 그룹으로 전송하는 방법 )
핵심 코드는
let fileManager = FileManager.default
let originalPath = Realm.Configuration.defaultConfiguration.fileURL!
let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myApp")!.appendingPathComponent("default.realm")
do{
try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath)
}
catch{
print("Error information: \(error)")
}
그리고이 코드 를 아래의 didFinishLaunchingWithOptions 내부에 Realm 마이그레이션 범위에 넣었습니다 .
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
var config = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
let fileManager = FileManager.default
let originalPath = Realm.Configuration.defaultConfiguration.fileURL!
let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myApp")!.appendingPathComponent("default.realm")
do{
try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath)
}
catch{
print("Error information: \(error)")
}
}
}
)
}
이 작업을 시도하면 콘솔에 파일을 저장할 수 없다는 메시지가 표시됩니다.
오류 도메인 = NSCocoaErrorDomain Code = 512 ""default.realm "파일을"2EEADCEE-F9D9-44A8-BDED-B60A689656A2 "폴더에 저장할 수 없습니다." UserInfo = {NSFileOriginalItemLocationKey = file : /// Users / jm / Library / Developer / CoreSimulator / Devices / 38334AE3-6648-402E-AC18-8252426002D6 / data / Containers / Shared / AppGroup / 2EEADCEE-F9D9-44A8-BDED-B60A689656A2 / default.realm, ......
파일을 열기 전에 Realm 데이터베이스 파일을 복사 / 이동해야한다고 들었는데,이 오류와 관련이 있습니까?
도와 주셔서 감사합니다. 좋은 하루 되세요
답변
방법을 찾는 데 도움이 된 댓글에 대해 @Jay에게 감사드립니다.
그가 언급했듯이 Realm DB 파일 이동은 Realm과 관련된 모든 것을 호출하기 전에 이루어져야합니다.
원래 Realm 마이그레이션 내부에 코드가있어서 스키마 버전이 오래되었을 때 한 번만 실행되도록했습니다.
하지만 didFinishLaunchingWithOptions 상단으로 외부로 옮겼으므로 이제 Realm DB 파일을 다른 디렉토리로 이동합니다.
이것이 어려움을 겪고있는 누군가에게 도움이되기를 바랍니다.
let fileManager = FileManager.default
let originalPath = Realm.Configuration.defaultConfiguration.fileURL!
let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myApp")!.appendingPathComponent("default.realm")
if fileManager.fileExists(atPath: originalPath.absoluteString) {
do{
try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath)
print("Successfully replaced DB file")
}
catch{
print("Error info: \(error)")
}
} else {
print("File is not exist on original path")
}
var config = Realm.Configuration(
)
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myApp")!.appendingPathComponent("default.realm")
// Tell Realm to use this new configuration object for the default Realm
Realm.Configuration.defaultConfiguration = config
// Now that we've told Realm how to handle the schema change, opening the file
// will automatically perform the migration
let realm = try! Realm()