Apakah mungkin untuk menonaktifkan jaringan di iOS Simulator?

430

Saya mencoba men-debug beberapa perilaku tidak konsisten yang saya lihat dalam aplikasi yang mendapatkan data utamanya dari internet. Saya tidak melihat masalah dalam simulator, hanya pada perangkat, jadi saya ingin mereproduksi lingkungan jaringan dan konektivitas dalam simulator.

Apakah ada cara menonaktifkan jaringan di simulator?

(Saya terhubung ke Mac untuk kode jarak jauh, tidak ada pilihan lain sekarang, jadi menonaktifkan jaringan OS bukan pilihan).

Paul Hammond
sumber
Saya pikir Anda juga dapat menggunakan CharlesProxy untuk menjalankan tes serupa
Honey

Jawaban:

273

Saya rasa tidak — simulator berbagi apa pun koneksi jaringan yang digunakan OS. Saya mengajukan laporan bug Radar tentang simulasi kondisi jaringan beberapa waktu lalu; Anda mungkin mempertimbangkan untuk melakukan hal yang sama.

Noah Witherspoon
sumber
52
Tidak yakin apakah ini menanggapi bug radar ini, tetapi Alat Pengembang sekarang menyertakan alat Network Link Conditioner .
samvermette
7
Network Link Conditioner memungkinkan Anda menentukan persentase paket yang akan dihapus, tetapi sejauh yang saya lihat sayangnya tidak ada cara untuk menonaktifkan semua konektivitas.
modocache
11
Saat ini Network Link Conditioner memungkinkan untuk mengatur paket loss 100%, dan sepertinya berfungsi.
Gabriele Petronella
4
Karena Simulator berbagi koneksi jaringan mesin host, Anda dapat mematikan internet di mesin host Anda untuk mensimulasikan "jaringan dinonaktifkan". Tidak ideal tetapi berhasil.
Adil Hussain
5
Tunggu, Network Link Conditioner berlaku untuk seluruh mesin host, bukan hanya simulator. Bagaimana ini berguna? Saya bisa mencabut ethernet saya jika saya menginginkannya.
sudo
1735

Gunakan sangkar Faraday sederhana untuk memblokir atau membatasi level sinyal RF eksternal.

Anda bisa membuatnya sendiri dengan aluminium foil. Bukaan harus lebih kecil dari panjang gelombang layanan data Anda jika itu yang ingin Anda blokir.

800 Mhz memiliki panjang gelombang 37 cm (14 "), 1900 Mhz memiliki panjang gelombang 16 cm (6").

Ini berfungsi lebih baik dengan perangkat yang sebenarnya daripada dengan simulator karena Mac sulit untuk bekerja ketika di dalam kandang Faraday ;-)

masukkan deskripsi gambar di sini

program
sumber
179
Hanya saran singkat, jika Anda membuat kandang Faraday berjalan dengan meja di dalam, Mac akan jauh lebih mudah untuk digunakan.
Kevin Laity
86
jawaban Anda menarik meskipun ia meminta simulator
vignesh kumar
76
Karena pertanyaannya adalah tentang simulator, saya pikir saya hanya akan membuat satu di Photoshop dan mengaturnya sebagai latar belakang desktop saya. Itu mungkin akan berhasil, bukan?
Timothy Lee Russell
8
'Trik' ini telah digunakan secara nyata oleh para profesional :) Dulu ketika saya bekerja pada ponsel pintar gen pertama yang kami gunakan untuk menggunakan kaleng biskuit yang kuat. Tidak semua merek berfungsi, tetapi merek yang sempurna.
Will
11
harus diterima sebagai jawaban yang benar! (Saya lebih suka menggunakan kotak timah hitam untuk iKryptonite)
gaussblurinc
309

Iya. Di Xcode, Anda dapat membuka Xcodeitem menu -> Open Developer Tools-> More Developer Toolsdan mengunduh " Alat Tambahan untuk Xcode ", yang akan memiliki Network Link Conditioner.

Dengan menggunakan alat ini, Anda dapat mensimulasikan berbagai skenario jaringan (seperti kehilangan 100%, 3G, DNS latensi tinggi, dan banyak lagi) dan Anda juga dapat membuat yang khusus.

Valluri yang lebat
sumber
7
jika Anda berada di situs pengembang, itu ada dalam paket HARDWARE IO TOOLS FOR XCODE.
cair
156
Entah bagaimana saya lebih suka ide membungkus perangkat saya di foil.
Michael Robinson
14
Sejak Xcode 8, Network Link Conditioner ada dalam paket " Alat Tambahan untuk Xcode ".
ElegyD
6
Juga, kehilangan 100% membatasi koneksi host, jadi, bukan solusi yang praktis. Jika Anda siap untuk mengembangkan tanpa internet maka cukup menarik steker pada mesin pengembang Anda lebih baik daripada solusi ini.
Jannie Theunissen
7
Itu mempengaruhi semua mac. Saya ingin keluar dari koneksi internet hanya untuk simulator, karena saya menggunakan mac dari jarak jauh ...
JCarlosR
48

Satu-satunya cara untuk menonaktifkan jaringan pada simulator iOS yang saya tahu adalah menggunakan alat seperti Little Snitch atau Hands Off . Dengan mereka Anda dapat menolak / memblokir koneksi jaringan keluar dan masuk. Anda dapat mengaturnya sehingga hanya memblokir koneksi dari aplikasi simulator. Bekerja seperti firewall.

Felix
sumber
11
tetapi itu tidak akan membuat simulator berperilaku seperti Anda sedang luring. Itu hanya akan membuat server Anda tidak tersedia, yang merupakan hal yang sangat berbeda.
Blitz
1
sebenarnya, LordT, itu mungkin cukup untuk keadaan khusus yang saya miliki ...!
Paul Hammond
phix23 - apakah Anda memiliki preferensi di antara dua alat yang disarankan?
Paul Hammond
Tidak, belum. Saya hanya mencoba Hands off, karena memiliki lebih banyak fitur.
Felix
2
+1: Saya telah menggunakan Little Snitch untuk tujuan ini, menguji untuk memastikan aplikasi Simulasi berfungsi jika koneksi jaringan terputus.
hotpaw2
18

Matikan saja WiFi Anda di Mac OSX, ini manjur!

Benpalmer
sumber
1
Tidak membantu OP yang secara khusus menyatakan bahwa ini bukan pilihan, tetapi ini adalah solusi sederhana yang sempurna bagi saya.
Johno
14

Unduh paket alat tambahan (Network Link Conditioner)

Deskripsi

Contoh di Sierra: masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Nik Kov
sumber
9
Ini juga mencekik koneksi host, sehingga tidak lebih baik daripada menarik steker pada mesin pengembang Anda - tidak ada kolaborasi atau referensi internet. Jadi, bukan solusi praktis.
Jannie Theunissen
11

Hanya memperbarui jawaban ke tanggal saat ini. Karena Xcode 4 (?) Ada panel preferensi yang /Applications/Utilitiesdipanggil Network Link Conditioner. Entah Anda menggunakan salah satu profil yang ada atau Anda membuat profil khusus Anda sendiri dengan 0 Kbps Atas / Downlink dan 100% turun.


sumber
1
Hanya ingin menambahkan, bahwa jika Anda membuat pengaturan jaringan kustom dengan 0 bandwidth, secara otomatis menganggapnya sebagai maksimum. Sangat penting untuk meletakkan 100% paket yang hilang.
Denis Kutlubaev
Juga, saya ingin menambahkan, bahwa metode ini menghilangkan internet dari segalanya, tidak hanya simulator. Mungkin lebih mudah untuk mematikan internet sepenuhnya. Namun demikian itu alat yang sangat berguna karena Anda dapat mensimulasikan internet E dan 3G dengan kualitas yang berbeda.
Denis Kutlubaev
Ini tentunya merupakan jawaban terbaik karena Network Link Conditionermerupakan alat resmi Apple, dan ini benar-benar gratis, dibandingkan dengan Little Snitchatau Hands Off.
fatuhoku
Hmm, sepertinya alat ini memang mematikan jaringan untuk semuanya. Saya juga menemukan bahwa itu tidak memicu notifikasi Reachability (saya menggunakan github.com/stefanomondino/STMReactiveReachability ).
fatuhoku
4
HATI-HATI - Perangkat NETWORK LINK CONDITIONER mempengaruhi mesin SELURUH, bukan hanya Simulator iPhone. Jika Anda jauh ke mac Anda untuk dev, seperti saya menggunakan Xamarin Build Host, itu akan mematikan koneksi Anda.
John Kocktoasten
10

Karena Xcode tidak menyediakan fitur seperti itu, Anda pasti akan menggunakan beberapa aplikasi / alat pihak ketiga. Mematikan jaringan MAC juga akan membantu mematikan jaringan iOS Simulator.

Anda dapat mematikan internet MAC Anda dari " System Preferences..."> " Network" dan mematikan sumber jaringan yang diinginkan.

Untuk mematikan sumber internet MAC Ethernet Anda: Sumber Jaringan EtherNet

Untuk mematikan sumber internet WiFi MAC Anda (jika MAC Anda ada di Wifi Internet): masukkan deskripsi gambar di sini

Ali
sumber
7

Anda dapat membatasi koneksi internet dengan aplikasi pihak ke-3 seperti

Charles: http://www.charlesproxy.com/

Tekan perintah + shift + T pada Mac untuk mengatur pembatasan.

mabounassif
sumber
6

Satu ide atau tambalan yang mungkin gila:

Hanya beralih bendera jangkauan jaringan

Ini adalah kode yang saya gunakan untuk mengaktifkan runtime flag saya dengan memicu 'Simulator Memory Warning' dan yang SEPENUHNYA AMAN, hanya pastikan kode berada di Mode DEBUG saja

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}
Darshit Shah
sumber
1
Saya memiliki kelas global dengan fungsi statis memeriksa koneksi internet. Kembali falseadalah ide bagus. Tidak ada pemasangan, dan saya dapat terus bekerja dari jarak jauh! Terima kasih.
JCarlosR
Di mana ini isInternetAvailabledidefinisikan ?!
CSawy
@CSawy Benderanya yang mengirim status koneksi internet saat ini di kelas jangkauan.
Darshit Shah
3

Anda dapat menggunakan Little Snitch untuk memotong lalu lintas jaringan ke setiap proses individual, termasuk yang berjalan pada simulator iOS. Dengan begitu Anda dapat menjaga koneksi internet dan memutuskan koneksi aplikasi yang sedang berjalan.

Eran Goldin
sumber
3

Dengan Xcode 8.3 dan iOS 10.3:

XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Turn off wifi")
XCUIDevice.shared().press(XCUIDeviceButton.home)

Pastikan untuk memasukkan @available(iOS 10.3, *) di bagian atas file test suite Anda.

Atau Anda bisa "Aktifkan Mode Pesawat" jika Anda mau.

Setelah Siri mematikan wifi atau menyalakan Mode Pesawat, Anda harus mengabaikan dialog Siri yang mengatakan bahwa Siri membutuhkan internet. Ini dilakukan dengan menekan tombol beranda, yang menolak dialog dan kembali ke aplikasi Anda.

pemilik merek
sumber
Ini mungkin tidak berfungsi di iOS11GM. Saya tidak dapat menemukan pengaturan Wifi di simulator.
Bill Chan
2
Menggunakan Siri bukan satu-satunya pilihan dengan Xcode 9 sekarang memungkinkan untuk mengaktifkan beberapa aplikasi. Mengaktifkan aplikasi Pengaturan iOS untuk mematikan wifi sekarang juga berfungsi.
brandenbyers
3

Ada dua cara untuk menonaktifkan internet iOS Simulator:

  • Cabut koneksi jaringan Anda
  • Matikan Wi-Fi

Ini cara paling sederhana

Daniel Beltrami
sumber
3

Jika aplikasi Anda terhubung ke domain tertentu, Anda bisa menambahkannya ke /etc/hostsfile Anda dan rutekan ke IP yang tidak ada di jaringan lokal Anda ... Untuk aplikasi itu akan sama seperti jika tidak ada koneksi internet atau server tidak dapat dijangkau.

sudo nano /etc/hosts

tambahkan baris berikut:

192.168.1.123   example.com

atau gunakan 127.0.0.1jika Anda tidak menjalankan server web pada mesin lokal Anda.

Dion
sumber
1

Solusi sederhana adalah membuat Mode Pesawat untuk Mac Anda. Berikut ini cara melakukannya:

  • masuk ke Jaringan di Preferensi Sistem
  • klik pada menu dropdown Lokasi
  • klik pada ikon plus untuk menambahkan lokasi baru
  • beri nama lokasi baru 'Mode Pesawat' atau serupa, dan klik 'Selesai'
  • pilih lokasi yang baru saja Anda buat dari menu tarik-turun Lokasi
  • klik pada setiap antarmuka jaringan yang tersedia dalam daftar di sebelah kiri jendela pada gilirannya, nonaktifkan masing-masing
  • klik pada menu Configure iPv4, dan pilih Off
  • untuk Wi-Fi, cukup klik tombol Matikan Wi-Fi
  • klik Terapkan, dan lokasi ini akan memblokir semua aktivitas jaringan

Ketika Anda ingin menghidupkan kembali jaringan, cukup pilih Otomatis dari menu dropdown Lokasi, dan klik Terapkan

ut9081
sumber
1

Saya sarankan Anda menggunakan aplikasi Proxy Charles di Mac

Ini memungkinkan Anda menggunakan Bandwidth Throttlefitur yang dibuat hanya untuk menyesuaikan koneksi jaringan

Star / Stop Throttling ⌘ command+ T
Pengaturan Throttle ... ⌘ command+ T+⇧ shift

yoAlex5
sumber
0

Anda bisa menonaktifkan jaringan host saja!

wshcdr
sumber
7
Sangat tidak nyaman untuk tidak dapat melihat StackOverflow ketika men-debug masalah koneksi aplikasi Anda!
fatuhoku
Baca baris terakhir dari pertanyaan: "(Saya terhubung ke Mac dari jarak jauh ke kode, tidak ada pilihan lain saat ini, jadi menonaktifkan jaringan OS bukan pilihan)." Selain itu, saran Anda sudah diberikan dua tahun lalu, oleh Benpalmer.
ToolmakerSteve
0

Jika Anda memiliki setidaknya 2 jaringan wifi untuk terhubung adalah cara yang sangat sederhana adalah dengan menggunakan bug di simulator iOS:

  1. keluar dari simulator (cmd-q) jika terbuka
  2. sambungkan Mac Anda ke satu wifi (mungkin tidak terhubung ke internet, tidak masalah)
  3. luncurkan simulator (menu: xCode-> Buka Developer Tool-> iOs Simulator) dan tunggu selagi dimuat
  4. beralih jaringan wifi ke yang lain
  5. keuntungan

Bugnya adalah bahwa simulator mencoba menggunakan jaringan (IP?) Yang belum terhubung.

Sampai Anda meluncurkan ulang simulator - ia tidak akan memiliki internet (bahkan jika jaringan wifi pertama yang Anda sambungkan memiliki koneksi internet), sehingga Anda dapat menjalankan (cmd-R) dan menghentikan (cmd-) proyek untuk menggunakan simulator tanpa koneksi, tetapi Mac Anda akan terhubung.

Kemudian, jika Anda perlu menjalankan simulator yang terhubung - cukup keluar dan luncurkan.

iGore
sumber
0

Anda dapat menggunakan kondisioner tautan jaringan di Mac Anda. Anda dapat mengunduhnya dari situs web pengembang apel. Itu harus tersedia di mana kita mendapatkan versi Xcode dan iOS yang lebih lama. Dengan kondisioner jaringan ini Anda dapat mengubah kekuatan jaringan dari wifi menjadi tidak ada jaringan.

Juga ketika Anda menginstal kondisioner jaringan itu akan diinstal dalam preferensi sistem.

Astha Trivedi
sumber