Kesalahan: _handleNonLaunchSpecificActions di iOS9

157

Saya mendapatkan kesalahan berikut di iOS 9:

    -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action -> 
      <FBSSceneSnapshotAction: 0x150b2aef0> 
       {
            handler          = remote;
            info = <BSSettings: 0x15333f650> 
            {
                (1) = 5;
            };
        }

Adakah orang lain yang menemukan kesalahan ini atau implikasinya? Apa yang salah?

Roddy
sumber
6
Masih dalam rilis beta pasca iOS9. Akan lebih baik untuk memahami apa masalahnya dan implikasinya.
Roddy
11
Saya memiliki masalah yang sama ketika saya mengunci iPhone saya ketika aplikasi saya sedang berjalan. iOS 9.0, XCode 7.0.
NKorotkov
5
Tampaknya bug Apple sejak proyek baru yang dibuat dengan Xcode 7 memiliki masalah yang tepat ini juga.
Hongfei
12
Adakah yang pantas dibicarakan di forum pengembang Apple? Tampaknya semua jenis bug ditutup dengan "mengapa Anda ingin melakukan itu jika Apple tidak menginginkannya?" Adalah perhentian terakhir dari keputusasaan ketika ingin menyelesaikan masalah.
Roddy
11
Lihat pertanyaan stackoverflow.com/questions/32658037/… - ini membahas masalah yang sama.
iPhone Guy

Jawaban:

10

Tidak ada yang salah dengan kode Anda. Ini adalah pesan logging internal ke Apple, dan Anda harus mengajukan radar tentang hal itu.

Ada dua petunjuk yang menunjukkan bahwa ini mungkin kode Apple:

  1. Garis bawah yang memimpin nama metode _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionadalah konvensi yang menunjukkan bahwa metode ini bersifat pribadi / internal untuk kelas yang dideklarasikan. (Lihat komentar ini .)

  2. Masuk akal untuk menebak bahwa dua awalan huruf dalam FBSSceneSnapshotActionadalah singkatan untuk FrontBoard, yang menurut Rene Ritchie dalam " daftar keinginan iOS 9: Mode Tamu" adalah bagian dari seluruh keluarga perangkat lunak yang terkait dengan meluncurkan aplikasi:

Dengan iOS 8, Apple merevisi manajer sistemnya, SpringBoard, menjadi beberapa komponen yang lebih kecil dan lebih fokus. Selain BackBoard, yang sudah dipintal untuk menangani tugas latar belakang, mereka menambahkan Frontboard untuk tugas latar depan. Mereka juga menambahkan PreBoard untuk menangani layar Kunci dalam kondisi aman dan terenkripsi. [...]

Saya tidak tahu untuk apa BSawalan BSSettingsini, tetapi analisis pesan log ini akan menunjukkan bahwa itu bukan apa-apa yang Anda lakukan, dan Anda harus mengajukan radar dengan langkah-langkah untuk mereproduksi pesan logging.

Jika Anda ingin mencoba dan mengambil jejak tumpukan, Anda dapat menerapkan kategori yang ditautkan ke sini . Beberapa orang akan berpendapat bahwa menimpa API pribadi adalah ide yang buruk, tetapi dalam hal ini injeksi sementara untuk mengambil jejak stack tidak bisa terlalu berbahaya.

EDIT:

Tapi, kami masih ingin tahu apa tindakan ini. Jadi saya meletakkan breakpoint -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]dan mulai mencetak nilai register dan menemukan kelas bernama FBSceneImplyang memiliki banyak informasi tentang aplikasi saya:

Tempat kejadian

Kami dapat mengetahui metode privat mana yang disebut selanjutnya (disimpan di konter program, daftar 15.)

Penghitung Program

Saya mencoba menemukan FBSceneSnapshotActionreferensi yang tidak ditangani di log, tetapi tidak ada dadu. Kemudian, saya subklasifikasi aplikasi UIA, dan mengesampingkan _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Sekarang saya bisa melakukan aksi secara langsung, tapi tetap saja, kita tidak tahu apa itu.

Kemudian, saya melihat FBSceneSnapshotAction lagi. Ternyata itu memiliki superclass bernama BSAction.

Lalu saya menulis alat yang mirip dengan RuntimeBrowser dan mencari semua subclass dari BSAction. Ternyata ada cukup banyak dari mereka:

Daftar aksi

Dua nama metode yang kita miliki (satu dari log dan satu dari penghitung program pada perangkat) menunjukkan bahwa tindakan ini digunakan di bawah tenda untuk melewati tindakan di sekitar sistem.

Beberapa tindakan mungkin dikirim ke callback delegasi aplikasi, sementara yang lain ditangani secara internal.

Apa yang terjadi di sini adalah bahwa ada tindakan yang tidak ditangani dengan benar dan sistem memperhatikannya. Kami seharusnya tidak melihatnya, rupanya.

Moshe
sumber
Maaf tapi ini bukan jawaban; lebih dari komentar berikut. Kode ini sangat banyak kesalahan internal Apple, ini tidak dipertanyakan. Tebakan sebenarnya bukan resolusi dan penjelasan iOS8 yang diberikan tidak relevan karena kesalahan hanya muncul di iOS9 (ini tidak terjadi di iOS8).
Roddy
2
Jawaban untuk "apa yang salah" adalah bahwa sesuatu di dalam SpringBoard belum menangani tindakan snapshot. Itulah yang dikatakan pesan logging. Tidak banyak orang di luar Apple yang bisa memberi tahu Anda.
Moshe
Fakta bahwa pesan logging ini belum muncul di iOS 8 tidak terlalu relevan. Ini adalah pesan logging liar yang harus diarsipkan ke radar.
Moshe
Saya memang memperhatikan pagi ini bahwa seseorang telah memperbarui pertanyaan saya dan bukan itu yang awalnya saya tanyakan, itulah sebabnya ada sedikit pemutusan. Bahkan tidak tahu bahwa pertanyaan dapat diperbarui oleh orang lain.
Roddy
Untuk menjawab pertanyaan awal Anda: tidak ada implikasi selain dari mengajukan radar.
Moshe