Skip to content
This repository has been archived by the owner on Jan 26, 2023. It is now read-only.

クラッシュ後、はてなブックマークの再ログインが要求される #112

Closed
Watson1978 opened this issue Nov 9, 2014 · 28 comments

Comments

@Watson1978
Copy link
Contributor

アプリを放置しておくと、以下のようなログと共にクラッシュするようです。
その後、アプリを起動し直してブックマークしようとすると再ログインが要求されます。

bookmark_fast_cell.rb:32 を実行すると、method_missingを呼び出そうとしているので変数のどれかがnilになっていたりするのかと思われます。

Incident Identifier: 4C8A28F2-B38E-4577-8A98-7A6578ADC778
CrashReporter Key:   588db57f190d0cbb5035ddb9b4382acdda5b8305
Hardware Model:      iPhone6,1
Process:             HBFav [171]
Path:                /private/var/mobile/Containers/Bundle/Application/9813C1C0-3A91-4A14-AE1E-62100E3CC742/HBFav.app/HBFav
Identifier:          HBFav
Version:             2.7.3 (2.7.3)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2014-11-09 12:04:19.035 +0900
Launch Time:         2014-11-09 05:11:07.577 +0900
OS Version:          iOS 8.1 (12B411)
Report Version:      105

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x25c3ac1f __exceptionPreprocess + 127
1   libobjc.A.dylib                 0x3340ec8b objc_exception_throw + 38
2   HBFav                           0x007a6195 __vm_raise() + 472
3   HBFav                           0x007a62e9 rb_vm_raise + 324
4   HBFav                           0x006e8a85 rb_exc_raise + 8
5   HBFav                           0x007a3b99 rb_vm_method_missing + 908
6   HBFav                           0x0078ba97 rb_vm_dispatch + 4962
7   HBFav                           0x0078a513 rb_vm_trigger_method_missing + 1030
8   HBFav                           0x0078b483 rb_vm_dispatch + 3406
9   HBFav                           0x000b23e9 vm_dispatch + 716
10  HBFav                           0x0051f9a5 rb_scope__heightForBookmark:__ (bookmark_fast_cell.rb:32)
11  HBFav                           0x0079b1cb dispatch_rimp_caller(objc_object* (*)(objc_object*, objc_selector*, ...), unsigned long, objc_selector, int, unsigned long const*) + 26234
12  HBFav                           0x0078bee5 rb_vm_dispatch + 6064
13  HBFav                           0x000b23e9 vm_dispatch + 716
14  HBFav                           0x0065b607 rb_scope__tableView:heightForRowAtIndexPath:__ (timeline_view_controller.rb:218)
15  HBFav                           0x0065be8d __unnamed_125 + 168
16  UIKit                           0x29201c67 __66-[UISectionRowData refreshWithSection:tableView:tableViewRowData:]_block_invoke + 514
17  UIKit                           0x291c7bcb -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 4018
18  UIKit                           0x291c9f0f -[UITableViewRowData numberOfRows] + 98
19  UIKit                           0x291c9e67 -[UITableView noteNumberOfRowsChanged] + 150
20  UIKit                           0x291c9893 -[UITableView reloadData] + 1402
21  HBFav                           0x000d29b7 __unnamed_202 + 34
22  HBFav                           0x0078bbbd rb_vm_dispatch + 5256
23  HBFav                           0x000b23e9 vm_dispatch + 716
24  HBFav                           0x00657ad9 rb_scope__tableView:reloadDataWithKeepingContentOffset:__ (timeline_view_controller.rb:171)
25  HBFav                           0x0078bee5 rb_vm_dispatch + 6064
26  HBFav                           0x000b23e9 vm_dispatch + 716
27  HBFav                           0x00656473 rb_scope__observeValueForKeyPath:ofObject:change:context:__block__ (timeline_view_controller.rb:152)
28  HBFav                           0x0078d0af vm_block_eval(RoxorVM*, rb_vm_block*, objc_selector*, unsigned long, int, unsigned long const*) + 1082
29  HBFav                           0x0078cc2b rb_vm_block_eval + 174
30  HBFav                           0x00779067 rb_gcd_block_dispatcher + 98
31  libdispatch.dylib               0x3396e7a7 _dispatch_client_callout + 22
32  libdispatch.dylib               0x33971fa3 _dispatch_main_queue_callback_4CF + 718
33  CoreFoundation                  0x25c009d1 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
34  CoreFoundation                  0x25bff0d1 __CFRunLoopRun + 1512
35  CoreFoundation                  0x25b4d211 CFRunLoopRunSpecific + 476
36  CoreFoundation                  0x25b4d023 CFRunLoopRunInMode + 106
37  GraphicsServices                0x2cf060a9 GSEventRunModal + 136
38  UIKit                           0x291591d1 UIApplicationMain + 1440
39  HBFav                           0x000ba32d main (main.mm:15)
40  libdyld.dylib                   0x3398eaaf start + 2
@Watson1978
Copy link
Contributor Author

以下のようなコードを仕込み例外処理をするようにして、様子を見てみます。

diff --git a/app/view/bookmark_fast_cell.rb b/app/view/bookmark_fast_cell.rb
index 09d05cc..5082112 100644
--- a/app/view/bookmark_fast_cell.rb
+++ b/app/view/bookmark_fast_cell.rb
@@ -42,8 +42,9 @@ def self.heightForBookmark(bookmark, width, no_title = false)
       title_height = self.heightForTitle(bookmark.title, width)
       margin = comment_height > 0 ? 4 : 0
     end
-
     [68, 10 + name_size.height + 4 + comment_height + margin + title_height + 10].max
+  rescue
+    68
   end

   def self.heightForComment(comment, width)

@naoya
Copy link
Owner

naoya commented Nov 10, 2014

おお、ありがとうございます

Background fetch 時のクラッシュと再ログインに相関があるのかな・・・

@Watson1978
Copy link
Contributor Author

クラッシュすると再ログインが必要になる因果関係は不明ですが、この現象は何度か見かけました。

Background fetch の時にはてブSDKが何かしていて、クラッシュ時にデータが飛んでいるのですかね?

@naoya
Copy link
Owner

naoya commented Nov 10, 2014

SDK 絡みのことは把握してないですねえ

@Watson1978
Copy link
Contributor Author

以下のようなクラッシュログを出力して死ぬケースもあるようです。たぶん、Background処理で時間がかかりすぎて、強制終了したのかと思われます。
そして再ログインが要求されました。とりあえず報告まで。

Incident Identifier: BF92E930-1754-41B5-AF9E-13821C42224F
CrashReporter Key:   588db57f190d0cbb5035ddb9b4382acdda5b8305
Hardware Model:      iPhone6,1
Process:             HBFav [443]
Path:                /private/var/mobile/Containers/Bundle/Application/4816ADB4-A9D2-4ADA-B5B6-DC80338660B7/HBFav.app/HBFav
Identifier:          HBFav
Version:             2.7.3 (2.7.3)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2014-11-11 04:47:23.405 +0900
Launch Time:         2014-11-10 00:51:56.990 +0900
OS Version:          iOS 8.1 (12B411)
Report Version:      105

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  3

Application Specific Information:
<BKNewProcess: 0x15fd24e30; HBFav; pid: 443> has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x15fe26bb0> id: 48-3D8BC497-0130-4A96-A768-79D2F8FC0A33 name: Background Content Fetching (734) process: <BKNewProcess: 0x15fd24e30; HBFav; pid: 443> permittedBackgroundDuration: 30.000000 reason: backgroundContentFetching owner pid:48 preventSuspend  preventThrottleDownUI  preventIdleSleep  preventSuspendOnSleep 
)}

Elapsed total CPU time (seconds): 4.820 (user 4.820, system 0.000), 8% CPU 
Elapsed application CPU time (seconds): 0.619, 1% CPU

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   GraphicsServices                0x2cf060a5 GSEventRunModal + 133
7   UIKit                           0x291591cd UIApplicationMain + 1437
8   HBFav                           0x000ba231 main (main.mm:15)
9   libdyld.dylib                   0x3398eaad start + 1

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x33a412a0 kevent64 + 24
1   libdispatch.dylib               0x3397a9fd _dispatch_mgr_invoke + 277
2   libdispatch.dylib               0x3397020f _dispatch_mgr_thread + 35

Thread 2 name:  WebThread
Thread 2:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   WebCore                         0x30f74ebf RunWebThread(void*) + 415
7   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
8   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
9   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 3 name:  GAIThread
Thread 3:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   Foundation                      0x26884bf9 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 261
7   Foundation                      0x268d30b9 -[NSRunLoop(NSRunLoop) run] + 77
8   HBFav                           0x007cdb0d +[GAI threadMain:] + 61
9   Foundation                      0x26949b57 __NSThread__main__ + 1115
10  libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
11  libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
12  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 4:
0   libsystem_kernel.dylib          0x33a54b38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x33ad13f5 _pthread_cond_wait + 517
2   libsystem_pthread.dylib         0x33ad22d9 pthread_cond_wait + 37
3   Foundation                      0x268cf733 -[NSCondition wait] + 191
4   HBFav                           0x0008211b -[PFCommandCache runLoop] (PFCommandCache.m:501)
5   Foundation                      0x26949b57 __NSThread__main__ + 1115
6   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
7   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
8   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 5 name:  AVAudioSession Notify Thread
Thread 5:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   libAVFAudio.dylib               0x248573eb GenericRunLoopThread::Entry(void*) + 131
7   libAVFAudio.dylib               0x24849909 CAPThread::Entry(CAPThread*) + 193
8   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
9   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
10  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 6:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   Foundation                      0x26884bf9 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 261
7   Foundation                      0x268d30b9 -[NSRunLoop(NSRunLoop) run] + 77
8   HBFav                           0x000a85d1 +[PF_AFURLConnectionOperation networkRequestThreadEntryPoint:] (PF_AFURLConnectionOperation.m:151)
9   Foundation                      0x26949b57 __NSThread__main__ + 1115
10  libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
11  libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
12  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 7 name:  com.apple.NSURLConnectionLoader
Thread 7:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   CFNetwork                       0x25702b9b +[NSURLConnection(Loader) _resourceLoadLoop:] + 483
7   Foundation                      0x26949b57 __NSThread__main__ + 1115
8   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
9   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
10  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 8 name:  com.apple.CFSocket.private
Thread 8:
0   libsystem_kernel.dylib          0x33a5508c __select + 20
1   CoreFoundation                  0x25c05103 __CFSocketManager + 495
2   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
3   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
4   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 9 name:  AFNetworking
Thread 9:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   Foundation                      0x26884bf9 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 261
7   Foundation                      0x268d30b9 -[NSRunLoop(NSRunLoop) run] + 77
8   HBFav                           0x000148e7 +[AFURLConnectionOperation networkRequestThreadEntryPoint:] (AFURLConnectionOperation.m:184)
9   Foundation                      0x26949b57 __NSThread__main__ + 1115
10  libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
11  libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
12  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 10 name:  JavaScriptCore::BlockFree
Thread 10:
0   libsystem_kernel.dylib          0x33a54b38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x33ad13f5 _pthread_cond_wait + 517
2   libsystem_pthread.dylib         0x33ad22d9 pthread_cond_wait + 37
3   libc++.1.dylib                  0x32ce9e8d std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 33
4   JavaScriptCore                  0x26e0a16b JSC::BlockAllocator::blockFreeingThreadMain() + 211
5   JavaScriptCore                  0x26e06605 WTF::wtfThreadEntryPoint(void*) + 13
6   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
7   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
8   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 11 name:  JavaScriptCore::Marking
Thread 11:
0   libsystem_kernel.dylib          0x33a54b38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x33ad13f5 _pthread_cond_wait + 517
2   libsystem_pthread.dylib         0x33ad22d9 pthread_cond_wait + 37
3   libc++.1.dylib                  0x32ce9e8d std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 33
4   JavaScriptCore                  0x26fd1d21 JSC::GCThread::waitForNextPhase() + 101
5   JavaScriptCore                  0x26fd1d85 JSC::GCThread::gcThreadMain() + 49
6   JavaScriptCore                  0x26e06605 WTF::wtfThreadEntryPoint(void*) + 13
7   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
8   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
9   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 12 name:  WebCore: CFNetwork Loader
Thread 12:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   WebCore                         0x30f9e4e1 WebCore::runLoaderThread(void*) + 289
7   JavaScriptCore                  0x26e06605 WTF::wtfThreadEntryPoint(void*) + 13
8   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
9   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
10  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 13 name:  com.apple.coremedia.player.async
Thread 13:
0   libsystem_kernel.dylib          0x33a41540 semaphore_wait_trap + 8
1   libdispatch.dylib               0x33978eef _dispatch_semaphore_wait_slow + 187
2   MediaToolbox                    0x27607427 fpa_AsyncMovieControlThread + 1963
3   CoreMedia                       0x263a3f11 figThreadMain + 185
4   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
5   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
6   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 14:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b95e77 CFRunLoopRun + 95
6   CoreMotion                      0x2644fedb 0x26410000 + 261851
7   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
8   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
9   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 15:
0   libsystem_kernel.dylib          0x33a559cc __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x33acfea9 _pthread_wqthread + 789
2   libsystem_pthread.dylib         0x33acfb80 start_wqthread + 4

Thread 16:
0   libsystem_kernel.dylib          0x33a559cc __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x33acfea9 _pthread_wqthread + 789
2   libsystem_pthread.dylib         0x33acfb80 start_wqthread + 4

@naoya
Copy link
Owner

naoya commented Nov 10, 2014

Background 処理 30 sec にひっかからないように rss feed を取得するときの network timeout は 25 sec にしてあるのですが、それ以外のところで何か時間がかかるパターンがあるんですかね・・・うーん

@Watson1978
Copy link
Contributor Author

Highlighted Thread: 3で示されているのがGoogle Analyticsのものだと思うのですが、たぶんそれが関係しているのではないかなと思います。

@Watson1978
Copy link
Contributor Author

適当にGoogle Analyticsをアプリから除去して試してみます。

@Watson1978
Copy link
Contributor Author

とりあえずGoogle Analyticsに関連するコードを消してみたのですが、まだ再ログイン前の状態でアプリを上書きしたら、ログインし直さなくてもブックマークできてしまいました。

何を言っているか分からねーと思うが、自分も何が起きたのか分からんw

@naoya
Copy link
Owner

naoya commented Nov 10, 2014

な、なんだと・・・?

@naoya
Copy link
Owner

naoya commented Nov 10, 2014

Google Analytics が SSHKeychain だかなんだか、SDK と同じライブラリ使ってて競合してるとかそういう感じだろうか

@Watson1978
Copy link
Contributor Author

Google Analyticsが犯人くさいですね。

とりあえず、毎日一回くらいの頻度でクラッシュしていたので、
Google Analyticsを削除したバージョンの様子を2・3日観察して、
クラッシュするかどうか、クラッシュした場合に再ログインが要求されるか
様子を見たいと思います。

@naoya
Copy link
Owner

naoya commented Nov 10, 2014

ありがとうございます。自分も試してみます

GA のコード除去した diff ほしいかも

@Watson1978
Copy link
Contributor Author

以下の変更を加えてます。
Watson1978/HBFav2@7e1befd...b11e366

@Watson1978
Copy link
Contributor Author

再ログインが要求された時点でアプリを一端終了するとセッションが復活する?
(以前、どれかのissueでコメントに見かけたような気がする)

まだ以下のようなログで死に、再ログインが要求されました。

Incident Identifier: E6F40324-719C-4BAF-9B10-D560FD61189A
CrashReporter Key:   588db57f190d0cbb5035ddb9b4382acdda5b8305
Hardware Model:      iPhone6,1
Process:             HBFav [1020]
Path:                /private/var/mobile/Containers/Bundle/Application/03B71ADC-5C15-42ED-9A48-07049F75ED5C/HBFav.app/HBFav
Identifier:          HBFav
Version:             2.7.3 (2.7.3)
Code Type:           ARM (Native)
Parent Process:      launchd [1]

Date/Time:           2014-11-11 11:55:53.282 +0900
Launch Time:         2014-11-11 08:22:42.076 +0900
OS Version:          iOS 8.1 (12B411)
Report Version:      105

Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread:  5

Application Specific Information:
<BKNewProcess: 0x15fe32f30; HBFav; pid: 1020> has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x15fe2d9c0> id: 48-D4CED82D-79EF-4169-9983-6F4959694FD0 name: Background Content Fetching (862) process: <BKNewProcess: 0x15fe32f30; HBFav; pid: 1020> permittedBackgroundDuration: 30.000000 reason: backgroundContentFetching owner pid:48 preventSuspend  preventThrottleDownUI  preventIdleSleep  preventSuspendOnSleep 
)}

Elapsed total CPU time (seconds): 8.380 (user 8.380, system 0.000), 14% CPU 
Elapsed application CPU time (seconds): 0.123, 0% CPU

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   GraphicsServices                0x2cf060a5 GSEventRunModal + 133
7   UIKit                           0x291591cd UIApplicationMain + 1437
8   HBFav                           0x000bc2d1 main (main.mm:15)
9   libdyld.dylib                   0x3398eaad start + 1

Thread 1 name:  Dispatch queue: com.apple.libdispatch-manager
Thread 1:
0   libsystem_kernel.dylib          0x33a412a0 kevent64 + 24
1   libdispatch.dylib               0x3397a9fd _dispatch_mgr_invoke + 277
2   libdispatch.dylib               0x3397020f _dispatch_mgr_thread + 35

Thread 2 name:  WebThread
Thread 2:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   WebCore                         0x30f74ebf RunWebThread(void*) + 415
7   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
8   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
9   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 3:
0   libsystem_kernel.dylib          0x33a54b38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x33ad13f5 _pthread_cond_wait + 517
2   libsystem_pthread.dylib         0x33ad22d9 pthread_cond_wait + 37
3   Foundation                      0x268cf733 -[NSCondition wait] + 191
4   HBFav                           0x000841cb -[PFCommandCache runLoop] (PFCommandCache.m:501)
5   Foundation                      0x26949b57 __NSThread__main__ + 1115
6   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
7   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
8   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 4 name:  AVAudioSession Notify Thread
Thread 4:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   libAVFAudio.dylib               0x248573eb GenericRunLoopThread::Entry(void*) + 131
7   libAVFAudio.dylib               0x24849909 CAPThread::Entry(CAPThread*) + 193
8   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
9   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
10  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 5:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   Foundation                      0x26884bf9 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 261
7   Foundation                      0x268d30b9 -[NSRunLoop(NSRunLoop) run] + 77
8   HBFav                           0x000aa681 +[PF_AFURLConnectionOperation networkRequestThreadEntryPoint:] (PF_AFURLConnectionOperation.m:151)
9   Foundation                      0x26949b57 __NSThread__main__ + 1115
10  libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
11  libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
12  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 6 name:  com.apple.NSURLConnectionLoader
Thread 6:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   CFNetwork                       0x25702b9b +[NSURLConnection(Loader) _resourceLoadLoop:] + 483
7   Foundation                      0x26949b57 __NSThread__main__ + 1115
8   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
9   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
10  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 7 name:  com.apple.CFSocket.private
Thread 7:
0   libsystem_kernel.dylib          0x33a5508c __select + 20
1   CoreFoundation                  0x25c05103 __CFSocketManager + 495
2   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
3   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
4   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 8 name:  AFNetworking
Thread 8:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   Foundation                      0x26884bf9 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 261
7   Foundation                      0x268d30b9 -[NSRunLoop(NSRunLoop) run] + 77
8   HBFav                           0x00016997 +[AFURLConnectionOperation networkRequestThreadEntryPoint:] (AFURLConnectionOperation.m:184)
9   Foundation                      0x26949b57 __NSThread__main__ + 1115
10  libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
11  libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
12  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 9 name:  JavaScriptCore::BlockFree
Thread 9:
0   libsystem_kernel.dylib          0x33a54b38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x33ad13f5 _pthread_cond_wait + 517
2   libsystem_pthread.dylib         0x33ad22d9 pthread_cond_wait + 37
3   libc++.1.dylib                  0x32ce9e8d std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 33
4   JavaScriptCore                  0x26e0a16b JSC::BlockAllocator::blockFreeingThreadMain() + 211
5   JavaScriptCore                  0x26e06605 WTF::wtfThreadEntryPoint(void*) + 13
6   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
7   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
8   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 10 name:  JavaScriptCore::Marking
Thread 10:
0   libsystem_kernel.dylib          0x33a54b38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x33ad13f5 _pthread_cond_wait + 517
2   libsystem_pthread.dylib         0x33ad22d9 pthread_cond_wait + 37
3   libc++.1.dylib                  0x32ce9e8d std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 33
4   JavaScriptCore                  0x26fd1d21 JSC::GCThread::waitForNextPhase() + 101
5   JavaScriptCore                  0x26fd1d85 JSC::GCThread::gcThreadMain() + 49
6   JavaScriptCore                  0x26e06605 WTF::wtfThreadEntryPoint(void*) + 13
7   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
8   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
9   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 11 name:  WebCore: CFNetwork Loader
Thread 11:
0   libsystem_kernel.dylib          0x33a414f0 mach_msg_trap + 20
1   libsystem_kernel.dylib          0x33a412e5 mach_msg + 37
2   CoreFoundation                  0x25c00937 __CFRunLoopServiceMachPort + 143
3   CoreFoundation                  0x25bfeedd __CFRunLoopRun + 1013
4   CoreFoundation                  0x25b4d20d CFRunLoopRunSpecific + 473
5   CoreFoundation                  0x25b4d01f CFRunLoopRunInMode + 103
6   WebCore                         0x30f9e4e1 WebCore::runLoaderThread(void*) + 289
7   JavaScriptCore                  0x26e06605 WTF::wtfThreadEntryPoint(void*) + 13
8   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
9   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
10  libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 12 name:  com.apple.coremedia.player.async
Thread 12:
0   libsystem_kernel.dylib          0x33a41540 semaphore_wait_trap + 8
1   libdispatch.dylib               0x33978eef _dispatch_semaphore_wait_slow + 187
2   MediaToolbox                    0x27607427 fpa_AsyncMovieControlThread + 1963
3   CoreMedia                       0x263a3f11 figThreadMain + 185
4   libsystem_pthread.dylib         0x33ad1e91 _pthread_body + 137
5   libsystem_pthread.dylib         0x33ad1e03 _pthread_start + 115
6   libsystem_pthread.dylib         0x33acfb8c thread_start + 4

Thread 13:
0   libsystem_kernel.dylib          0x33a559cc __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x33acfea9 _pthread_wqthread + 789
2   libsystem_pthread.dylib         0x33acfb80 start_wqthread + 4

Thread 14:
0   libsystem_kernel.dylib          0x33a559cc __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x33acfea9 _pthread_wqthread + 789
2   libsystem_pthread.dylib         0x33acfb80 start_wqthread + 4

@Watson1978
Copy link
Contributor Author

現状をまとめると、

  1. Background fetch処理中にクラッシュすることがある
    30sec以内に処理が終わらないケースがいくつかあるみたい

  2. クラッシュ後にアプリが自動的に再起動すると、はてブのセッションが切れている
    手動でアプリを終了・起動するとセッションは途切れず、クラッシュ後に自動で再起動が行われるとセッションが切れている。セッションが切れた後でも、手動でアプリを終了・起動するとセッションが回復する。
    手動でアプリを終了・起動するケースと処理が起動シーケンスが異なっていて、セッションが切れてしまうのかもしれない。
    Background処理に例外を発生させるコードを挿入すれば、簡単に再現できるかと思うので、モンハンに飽きたら調べてみます。

@naoya
Copy link
Owner

naoya commented Nov 11, 2014

なるほどー!

GA が影響してるようにみえるのは単に Background fetch のクラッシュ原因になってるだけで、認証が求められる直接の原因のは GA とは本来関係ないってことですね。

SDK 認証に関する部分は

  • app_delegate で初期化
  • はてブボタン押したときに HTBHatenaBookmarkViewController.alloc.init してそれを開く
  def open_hatena_bookmark_view
    controller = HTBHatenaBookmarkViewController.alloc.init
    controller.URL = @bookmark.link.nsurl
    self.presentViewController(controller, animated:true, completion:nil)
  end

の二点ぐらいですね。認証要求がされるかどうかは実際は SDK の中で failover して処理されてます

この辺が Background から起動したときに何が違うか、かあ。こうなってくると SDK の中身なのかもしれない・・・

@ninjinkun を招集してみたい。

@Watson1978
Copy link
Contributor Author

あくまでも推測なのですが、Background fetch処理中にクラッシュしたあと自動的に再起動されるときに、"app_delegate で初期化"の処理がすっ飛ばされているのかもしれないですね。この辺のシーケンスを確認した方が良さそうですね。

@naoya
Copy link
Owner

naoya commented Nov 12, 2014

なるほど、そこはコード読んでるだけじゃわからないですね。
デバッグ難しい・・・w

ところで、Background fetch クラッシュとログイン問題に相関があるのはなんとなく見えてきてますが、ずっとこの問題自分の手元では起こってなかったんですよね。

それが最近突然起こるようになりました。

それまでと変えたことと言えば、iOS にパスワード & 指紋認証をかけたことぐらいですね。(ずっとノーガード戦法だった)。それによって Background fetch が失敗しやすくなったのかなあ。

@Watson1978
Copy link
Contributor Author

私はiOS 8にしたあたりから、起こるようになりました。
Appleがネットワークまわりで何かやらかしていないことを祈るのみです。

@yashigani
Copy link

詳しく検証しているわけではありませんので推測ですが,KeyChainに関して同様の現象を知っていましたので参考までに.

iPhoneがロックされている状態ではKeyChainの情報にアクセスすることはできないことがあります.

はてなブックマーク iOS SDKでは,HTBHatenaBookmarkManagersetConsumerKey:consumerSecret:メソッドで初期化する際にKeyChainに保存されているtokenの有無で,認証状態かどうかの状態を決定します.
https://github.com/hatena/Hatena-Bookmark-iOS-SDK/blob/master/SDK/UI/Model/HTBHatenaBookmarkManager.m#L82-L85

HBFav2の動作を検証したわけでも,Background fetchの動作について詳しく知っているわけではないので推測なり恐縮なのですが,BackgroundでHBFav2のapplication:didFinishLaunching:が呼ばれている場合,実際にはログイン済だとしてもKeyChainから認証情報を取得できないため,非ログイン状態とされることがありえるのではないでしょうか.

手動でアプリを終了・起動するとセッションは途切れず、クラッシュ後に自動で再起動が行われるとセッションが切れている。セッションが切れた後でも、手動でアプリを終了・起動するとセッションが回復する。

この状態からも実際にはKeyChainに認証情報が残っているんじゃないかと思います.

@naoya
Copy link
Owner

naoya commented Nov 15, 2014

@yashigani なるほど! それだー、合点がいきました。

  • iPhone がロックされてる状態で Background 処理が走ってクラッシュ
  • 次の Background 処理のタイミングで起動
  • app_delegate で はてなブックマーク SDK の処理が走るが KeyChain 情報にアクセスできず
  • そのままアプリが生きている状態で、ユーザーがロックを解除すると SDK の認証に失敗した状態でアプリがアクティブになってる

というので、これが原因だったんですね。ようやくわかった。

自分の端末が最近になって認証を要求されるようになったのは、iPhone をノーロックでずっと使っていたのをロックしたからですね。それで KeyChain のこの制限に引っかかるようになったと。

ということで #113 での修正も ad hoc ではありますが、効果がありそうです。

これで解決だ、ありがとうございます!

@naoya
Copy link
Owner

naoya commented Nov 15, 2014

その wazanova のに書かれてるのとほぼ同じ現象だった・・・というか、12ヶ月までにブックマークしてたし。残念すぎる・・・

@yashigani
Copy link

#113 で解決が見込めそうですね.
applicationDidBecomeActive:(アプリケーションがActiveになるタイミング)で初期するとアプリケーションのlifecycleに沿った感じでad hocっぽくなくなると思います.

@naoya
Copy link
Owner

naoya commented Nov 15, 2014

@yashigani ありがとうございます!

#114 で実装しました。しばらくこれで使ってみて問題なかったらリリースします!

@naoya
Copy link
Owner

naoya commented Nov 18, 2014

解決されました! 次のバージョン 2.7.4 or 2.8 でリリースします。

@Watson1978
Copy link
Contributor Author

Thank you for fixing the issue 👍

@laiso
Copy link

laiso commented Dec 4, 2014

🐟ッ、なぞ現象解明されていたのか…… 素晴しい

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants