iOS 10: "[Aplikasi] jika kita berada dalam penangan pra-komit yang sebenarnya, kita tidak dapat benar-benar menambahkan pagar baru karena pembatasan CA"

389

Saya kadang-kadang mendapatkan pesan ini di log Xcode 8b3 ketika menjalankan aplikasi saya, semuanya sepertinya berfungsi, tapi saya ingin tahu dari mana ini berasal. Google tidak membantu sama sekali.

swalkner
sumber
2
Apakah Anda memanggil metode delegasi UINavigationController: fun navigationController (navigationController: UINavigationController, willShowViewController viewController: UIViewController, animasi: Bool) {}?
Norman G
2
willShowViewController tidak pernah dipanggil, tidak ...
swalkner
Saya mendapatkan yang sama. Saya menggunakan SpriteKit dan SceneKit dan mencurigai mereka!
Howard Lovatt
3
Adakah yang mengajukan laporan bug? Saya akan.
David DelMonte
1
Silakan lihat balasan ini. stackoverflow.com/a/39997761/6602495
Sneha

Jawaban:

285

di Xcode Anda:

  • Klik nama skema aktif Anda tepat di sebelah tombol Stop
  • Klik pada Edit Skema ....
  • di Jalankan (Debug) pilih tab Argumen
  • dalam Variabel Lingkungan klik +
  • tambah variabel: OS_ACTIVITY_MODE = nonaktifkan

tangkapan layar

Ed.
sumber
4
Terima kasih atas info tambahannya
amergin
26
Perlu diketahui bahwa saya secara acak tidak mendapatkan output NSLog ke Konsol dan menghapus ini lagi untuk memperbaikinya. Ini lebih dari pemrograman 'kelas tinggi' yang kita alami oleh preman di apel.
amergin
37
Untuk apa nilainya, saya mendapatkan pesan ini setiap kali perubahan orientasi dibuat dan saya DO menonaktifkan variabel lingkungan OS_ACTIVITY_MODE.
user2698617
5
Catatan: Menambahkan ini, Anda tidak akan melihat NSLogs di konsol juga.
niravdesai21
4
Bukankah ini seperti mematikan alarm kebakaran?
ScottyBlades
191

Itu berasal dari +[UIWindow _synchronizeDrawingAcrossProcessesOverPort:withPreCommitHandler:]via os_log API. Itu tidak tergantung dari komponen / kerangka kerja lain yang Anda gunakan (hanya dari UIKit) - ia mereproduksi dalam proyek aplikasi tampilan tunggal yang bersih pada perubahan orientasi antarmuka.

Metode ini terdiri dari 2 bagian:

  1. menambahkan passommit handler yang lulus ke daftar handler;
  2. melakukan beberapa pekerjaan, itu tergantung pada keadaan mesin negara saat ini.

Ketika bagian kedua gagal (sepertinya transisi dilarang), ia mencetak pesan di atas ke log kesalahan. Namun, saya pikir masalah ini tidak fatal: ada 2 tambahan kasus dalam metode ini, yang akan menyebabkan crash pada debug.

Tampaknya radar adalah yang terbaik yang bisa kita lakukan.

Roman Ermolov
sumber
1
Dapatkah Anda, tolong, menguraikan alat-alat, yang Anda gunakan untuk debugging untuk mendapatkan nama metode pribadi ini dan strukturnya?
Oleksandr Karaberov
9
@AlexanderKaraberov Anda dapat menggunakan Hopper Disassembler untuk menemukan teks peringatan dalam kerangka kerja biner dan referensi ke teks ini dari metode pribadi.
k06a
Saya juga mendapatkan ini ketika keyboard masuk dan saya memiliki controller berlangganan untuk merespons dengan mengubah ukuran pandangannya.
yo.ian.g
82

Coba letakkan yang berikut di dalam environment variablesuntuk skema di bawahrun(debug)

OS_ACTIVITY_MODE = disable
Nick Peachey
sumber
Saya mendapatkan ini di simulator ketika memutar iPhone 7 menggunakan perangkat keras-> memutar item menu. Variabel lingkungan ini membuat pesan palsu hilang.
George D Girton
1
Jawaban dari @Foo di bawah berguna karena berisi rincian cara.
Kevin Owens
1
Itu juga tidak mencetak log peringatan kendala
chirag shah
36
OP bertanya dari mana pesan itu berasal. Hanya mengatakan bagaimana cara diam itu bukanlah jawaban yang tepat.
iCaramba
6
Jawaban "IOS_ACTIVITY_MODE = disable" mematikan SEMUA pendataan! Cukup tutup tampilan logging jika Anda tidak ingin melihat log. Jawaban yang benar-benar konyol, luar biasa karena memiliki begitu banyak suara! Tidak melakukan apa pun untuk mengatasi pesan yang sebenarnya. Aplikasi kami yang banyak menggunakan data inti berfungsi dengan baik, pesan ini dan lainnya mulai muncul setelah salah satu pembaruan Xcode terakhir. Sedih karena Apple tidak dapat menyelesaikan masalah seperti ini.
John
13

Kita dapat membisukannya dengan cara ini (perangkat dan simulator membutuhkan nilai yang berbeda):

Tambahkan Nama OS_ACTIVITY_MODEdan Nilai ${DEBUG_ACTIVITY_MODE}dan periksa (dalam Produk -> Skema -> Edit Skema -> Jalankan -> Argumen -> Lingkungan).

masukkan deskripsi gambar di sini

Tambahkan Pengaturan Buatan Pengguna DEBUG_ACTIVITY_MODE, lalu tambahkan Any iOS Simulator SDKuntuk Debugdan atur nilainya ke disable(dalam Proyek -> Bangun pengaturan -> + -> Pengaturan Buatan Pengguna)

masukkan deskripsi gambar di sini

Igor
sumber
Tidak berfungsi untuk saya: Saya juga melihat ini di konsol, meskipun sudah menonaktifkan mode aktivitas debug seperti yang disarankan di atas.
Johan
-1

Untuk memperbaikinya, saya menghapus aplikasi dari Simulator.

Saya juga menjalankan Bersih dulu.

Saya tidak berpikir apa pun yang terkait dengan orientasi memicu itu. Hal terbesar yang berubah sebelum gejala ini dimulai adalah bahwa kerangka kerja Swift mulai memanggil NSLogutas pekerja alih-alih utas utama.

Jeff
sumber
1
Melakukan pembersihan bekerja dengan baik pada awalnya bagi saya ketika saya menjalankannya di simulator tanpa memutarnya, tetapi kemudian segera setelah saya uji lagi dengan perintah rotasi, ia melaporkan kesalahan yang sama.
cheznead
Saya menggunakan gerakan pan dan hanya mendapatkan kesalahan ini saat mengubah orientasi.
Jeremy Andrews
-8
OS_ACTIVITY_MODE = disable

Ini juga akan menonaktifkan kemampuan untuk debug di perangkat nyata (tidak ada output konsol dari perangkat nyata sejak saat itu).

baik
sumber
6
Anda baru saja menyalin jawaban sebelumnya (dengan kurang detail)
Ashley Mills
2
sebenarnya TL; DR membantu.
Juan Je García