我不完全确定从哪里开始。我在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)
}
非常感谢任何有关此事的帮助!
答案 0 :(得分:1)
原来我在今天的扩展中有一个领域没有关闭领域实例。当我加载我的应用程序时,我会尝试打开另一个领域(现在是第二个不受支持的进程),并执行迁移和压缩。我已经更新了今日扩展,以便在不需要时关闭领域实例。
此调试是根据我的应用程序未保存日志确定的,因为我达到了应用程序允许的最大值(25)。我清理了原木,找到了它们,象征着它们,发现Realm在打开时挣扎。
答案 1 :(得分:0)
如果您使用Realm,并且在数据库中进行了更改,则应重新安装该应用程序,否则它将在“启动”屏幕上崩溃, 如果上面不是问题,那么你的应用可能会使用最大内存,或者你的某些代码会导致内存泄漏。