天気情報取得時に希に異常終了していたバグが特定できまし。現在 v1.2.4 を申請しているので数日で公開できると思います。
他、News取得時、ターゲットのニュースURLに不正なキャラクタ(主には漢字)が有る場合にも異常終了してバグも合わせて修正しました。(これはサーバ側でも対処済)
何れもiOS版のみのバグ修正になります。
この「希に」ってのが曲者で、毎回落ちるなら原因特定も早いんだけど「希に」だと問題の特定に時間がかかります。原因さえわかれば修正するのは簡単なんですけどね。
ここからはちょっと開発者向け
天気情報取得時のバグは完全にケアレスミスでした…
WEBサービスから取得した天気情報をCoreDataにキャッシュしている部分で、このメソッドそのものがスレッドなのに、それを考慮した作りになってませんでした。
同じような処理をしている「e-tide」では正しく実装しているにもかかわらずです(笑)
// appDelegate の抜粋 lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "SurfTideDelta") container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } }) return container }() --- これはミス(メインスレッドならOK) ↓ let context = self.appDelegate.persistentContainer.viewContext --- Backgroundではこちらが正しい ↓ let context: NSManagedObjectContext = NSManagedObjectContext.init(concurrencyType: .privateQueueConcurrencyType) context.parent = self.appDelegate.persistentContainer.viewContext
あともう1点ニュースの件
こちらは想定外というか、イメージURLに漢字(実際には①とか)があるときに「URL」でインスタンス化すると nil に…
ファイル名にそんな文字使うこと自体が変だとは思うんだけど(某官公庁のサイトデータ)落ちるのは頂けない…。なので、サーバーで不正文字を含むイメージURLは無効にするとともに、アプリの方でも対処ロジックを入れておきました。
Comments