在重新启动手机

时间:2017-07-04 19:18:01

标签: ios swift realm crashlytics

我不完全确定从哪里开始。我在Swift for iOS 10.3中有一个使用Crashlytics和Realm的iOS应用程序,每天几次,当我启动我的应用程序时,它只是位于启动屏幕,然后立即关闭。当发生这种情况时(通过碰撞,或在​​设备上),我得不到任何日志,并且解决这个问题的唯一方法是,如果我重新启动手机,重新安装应用程序,或者如果我在几小时后再试一次。我不知道如何调试这个问题。

我的应用程序启动功能如下:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    Fabric.with([Crashlytics.self])
    // Override point for customization after application launch.
    self.createDirectories()
    var performShortcutDelegate = true
    let dir: URL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.BackloggerSharing")!
    let realmPath = dir.appendingPathComponent("db.realm")

    let config = Realm.Configuration(fileURL: realmPath, schemaVersion: 1, migrationBlock: {
        migration, oldSchemaVersion in
        if oldSchemaVersion < 1 {
            // auto migrate
        }
    })
    Realm.Configuration.defaultConfiguration = config
    self.compactRealm(at: realmPath)

    (UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])).tintColor = Util.appColor
    UISlider.appearance().tintColor = Util.appColor
    self.window?.tintColor = Util.appColor

    if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem {
        self.shortcutItem = shortcutItem
        performShortcutDelegate = false
    }

    return performShortcutDelegate
}

func createDirectories() {
    let playlistsFolder = Util.getPlaylistImagesDirectory()

    if !FileManager.default.fileExists(atPath: playlistsFolder.absoluteString) {
        do {
            try FileManager.default.createDirectory(at: playlistsFolder, withIntermediateDirectories: true, attributes: nil)
        } catch let error as NSError {
            NSLog(error.localizedDescription)
        }
    }
}

func compactRealm(at realmPath: URL) {
    let defaultParentURL = realmPath.deletingLastPathComponent()
    let compactedURL = defaultParentURL.appendingPathComponent("default-compact.realm")
    autoreleasepool {
        let realm = try? Realm()
        try! realm?.writeCopy(toFile: compactedURL)
    }
    try! FileManager.default.removeItem(at: realmPath)
    try! FileManager.default.moveItem(at: compactedURL, to: realmPath)
}

非常感谢任何有关此事的帮助!

2 个答案:

答案 0 :(得分:1)

原来我在今天的扩展中有一个领域没有关闭领域实例。当我加载我的应用程序时,我会尝试打开另一个领域(现在是第二个不受支持的进程),并执行迁移和压缩。我已经更新了今日扩展,以便在不需要时关闭领域实例。

此调试是根据我的应用程序未保存日志确定的,因为我达到了应用程序允许的最大值(25)。我清理了原木,找到了它们,象征着它们,发现Realm在打开时挣扎。

答案 1 :(得分:0)

如果您使用Realm,并且在数据库中进行了更改,则应重新安装该应用程序,否则它将在“启动”屏幕上崩溃, 如果上面不是问题,那么你的应用可能会使用最大内存,或者你的某些代码会导致内存泄漏。