iOS9 film şeridi işlenmemiş eylem nedir (handleNonLaunchSpecificActions)?


84

Bir storyboard kullanırken uygulamamı iOS 9'da çalıştırırken konsolda aşağıdaki hatanın belirdiğini fark ettim. XCode7 kullanıyorum. Bu endişelenmem gereken bir şey mi?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

Apple, iOS 9'un kararlılıkla ilgili olduğunu söylüyor, bu yüzden endişelenmemelisiniz ;-) Not: Bende de aynı sorun var ve diğer bazı geliştiriciler de stackoverflow.com/questions/32344082/…
Roma

11
Storyboard'larla ilgili olup olmadığından emin değilim, bunu Storyboard olmayan uygulamamda da görüyorum.
koen

Yapıda başka uyarı var mı? Belki de önemsiz görünen bir uyarıdır?
Joe Susnick

Film şeridi kullanmıyorum ve ayrıca bu uyarıyı alıyorum. Simülatörü CMD + L ile kilitlediğinizde ve ardından uygulamaya geri dönmek için "kilidi açmak için kaydırdığınızda" açılır.
SDW

Cihaz günlüğüne bakıldığında, cihazın ekranını otomatik olarak kapatmakla bir ilgisi olabilir. Hat SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off., belirtilen hata mesajından hemen önce kaydedilir.
Christian

Yanıtlar:


32

Kodunuzda yanlış bir şey yok. Bu, Apple için dahili bir kayıt mesajıdır ve bununla ilgili bir radar oluşturmalısınız.

Bunun muhtemelen Apple'ın kodu olduğunu gösteren iki ipucu var :

  1. Yöntem adının başındaki alt çizgi, yöntemin _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionbildirildiği sınıfa özel / dahili olduğunu gösteren bir kuraldır. ( Bu yoruma bakın .)

  2. " FBSSceneSnapshotActionİOS 9 dilek listesi: Konuk Modu" ndaki Rene Ritchie'ye göre, uygulamaların başlatılmasıyla ilgili tüm yazılım ailesinin bir parçası olan FrontBoard için iki harfli ön ekin kısaltılmış olduğunu tahmin etmek mantıklıdır :

Apple, iOS 8 ile sistem yöneticisi SpringBoard'ı daha küçük, daha odaklanmış birkaç bileşene dönüştürdü. Arka plan görevlerini yerine getirmek için zaten kapatılmış olan BackBoard'a ek olarak, ön plan görevleri için Ön Panel eklediler. Ayrıca Kilit ekranını güvenli, şifreli koşullar altında işlemek için PreBoard eklediler. [...]

Ben hiçbir fikrim yok BSiçinde önek BSSettingsiçin, ancak

BSkısaltmasıdır BackBoard Settingsve bu günlük mesajının analizi, sizin yaptığınız bir şey olmadığını gösterir ve günlük mesajını yeniden oluşturma adımlarını içeren bir radar açmanız gerekir.

Bir yığın izlemeyi denemek ve yakalamak istiyorsanız, buraya bağlı kategoriyi uygulayabilirsiniz . Bazıları, özel API'yi geçersiz kılmanın kötü bir fikir olduğunu iddia edebilir, ancak bu durumda bir yığın izini almak için geçici bir enjeksiyon çok zararlı olamaz.

DÜZENLE:

Ama yine de bu eylemin ne olduğunu bilmek istiyoruz. Bu yüzden bir kesme noktası koydum -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]ve yazmaç değerlerini yazdırmaya başladım ve FBSceneImpluygulamam hakkında bir sürü bilgi içeren bir sınıf buldum :

Faliyet alani, sahne

Sonra hangi özel yöntemin çağrıldığını bulabiliriz ( program sayacında, komut işaretçisinde, kayıt 15'te saklanır )

Program sayıcı

FBSceneSnapshotActionGünlükte atıfta bulunulan ele alınmayanları bulmaya çalıştım , ancak zar yok. Ardından, UIApplication'ın alt sınıfını oluşturdum ve üzerine yazdım _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Şimdi doğrudan eyleme geçebildim, ancak yine de ne olduğunu bilmiyoruz.

Ardından, FBSceneSnapshotAction'a tekrar baktım. Adında bir süper sınıf olduğu ortaya çıktı BSAction.

Sonra RuntimeBrowser'a benzer bir araç yazdım ve BSAction'ın tüm alt sınıflarına baktım. Görünüşe göre bunların bir listesi var:

Aksiyon listesi

Sahip olduğumuz iki yöntem adı (biri günlükten ve diğeri cihazlardaki program sayacından), bu eylemlerin sistem çevresinde eylemleri geçirmek için başlık altında kullanıldığını gösterir.

Bazı eylemler muhtemelen uygulama temsilcisinin geri aramalarına gönderilirken diğerleri dahili olarak ele alınır.

Burada olan şey, doğru şekilde ele alınmayan bir eylem olması ve sistemin bunu fark etmesidir. Görünüşe göre onu görmememiz gerekiyordu.


Güzel araştırma ama burada ilginç bir şey var, özel Apple API kullanırken tam OP hatası alıyorum. Sanırım özel API'yi kullandığım için muhtemelen Apple mühendisleri için konsol günlüğü alıyorum.
OhadM

1
@Moshe Apple, onlar adına soruşturmanız için size ne kadar ödedi? Ancak bununla ilgilenmeyebilirler. : p
codelearner

"Bunun hakkında bir radar açmak" ne demek?
Paul Masri-Stone

Apple'ın hata raporlama aracıyla bir hata raporu göndermek anlamına gelir.
Moshe

12

AFAIK, yukarıdaki bilgi ekranın anlık görüntüsü sırasında iOS ile ilgilidir (sanırım ev çoklu görev ile ilgili davranış için çift tıklama için). Uygulamamı derinlemesine araştırdım ve herhangi bir yan davranış almıyor gibi görünüyor. Şimdilik güvenle görmezden gelebilirsiniz.

Kendinizi yukarıdaki işlev çağrılarına karşı test etmek için aşağıdaki temel basit kategoriyi kullanabilirsiniz:


1

Bunu anladım, IBAction yöntemi .h veya .m dosyasında beyan edildiğinde ancak onu herhangi bir kontrole bağlamadığınızda gerçekleşecek.

.m örneği:

- (IBAction)click:(id)sender{
}

ancak bu yöntemi film şeridindeki herhangi bir kontrole atanmamış.


Uygulamamda durum böyle değil - Bağlı olmayan IBActions'ım yok ve bu mesajı da alıyorum. Benim uygulamam yine de bir Swift uygulaması.
henrikstroem

1

uygulamamda neden olduğunu bulamadım, ancak en azından bunun günlük bölmenizde görünmesini önlemek istiyorsanız istisnayı yakalayabilirsiniz. Bu bir çözüm değil, ancak yakalamada geçen herhangi bir argümanı inceleyerek bunun neden olduğu konusunda size daha fazla fikir verebilir.

swift 2 versiyonu:

import UIKit

extension UIApplication {
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
        //whatever you want to do in this catch
        print("handleNonLaunchSpecificActions catched")
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.