İOS Simulator'da ağı devre dışı bırakmak mümkün mü?


430

Ben birincil verileri internetten alır bir uygulamada gördüğüm bazı tutarsız davranış hata ayıklama çalışıyorum. Simülatördeki sorunları görmüyorum, sadece cihazda, bu yüzden simülatördeki ağ ve bağlantı ortamını yeniden oluşturmak istiyorum.

Simülatördeki ağı devre dışı bırakmanın herhangi bir yolu var mı?

(Mac'e uzaktan kodlama yapıyorum, şu anda başka seçenek yok, bu yüzden işletim sistemi ağını devre dışı bırakmak bir seçenek değil).


Benzer testleri çalıştırmak için CharlesProxy'yi de kullanabileceğinizi düşünüyorum
Honey

Yanıtlar:


273

Korkmuyorum — simülatör işletim sisteminin kullandığı ağ bağlantısını paylaşıyor. Bir süre önce ağ koşullarının simülasyonu hakkında bir Radar hata raporu hazırladım ; siz de aynısını yapmayı düşünebilirsiniz.


52
Bu radar hatasına yanıt verdiğinden emin değilsiniz, ancak Geliştirici Araçları artık bir Ağ Bağlantısı Düzenleyici aracı içeriyor .
samvermette

7
Network Link Conditioner, bırakılacak paketlerin yüzdesini belirtmenize izin verir, ancak gördüğüm kadarıyla maalesef tüm bağlantıyı devre dışı bırakmanın bir yolu yoktur.
modocache

11
Şu anda Ağ Bağlantı Kremi% 100 paket kaybı ayarlamaya izin veriyor ve işe yarıyor gibi görünüyor.
Gabriele Petronella

4
Simülatör ana makinenin ağ bağlantısını paylaştığından, "ağ devre dışı" simülasyonunu yapmak için ana makinenizdeki interneti kapatabilirsiniz. İdeal değil ama işe yarıyor.
Adil Hussain

5
Bekleyin, Ağ Bağlantısı Kremi sadece simülatör için değil, tüm ana makine için geçerlidir. Bu nasıl faydalı? İstersem ethernet'imi fişten çekebilirim.
sudo

1734

Harici RF sinyal seviyesini engellemek veya sınırlamak için basit bir Faraday kafesi kullanın.

Alüminyum folyo ile kendiniz yapabilirsiniz. Engellemek istediğiniz buysa, açıklıklar veri hizmetinizin dalga boyundan daha küçük olmalıdır .

800 Mhz 37 cm (14 ") dalga boyuna, 1900 Mhz 16 cm (6") dalga boyuna sahiptir.

Mac'in Faraday kafesinin içinde çalışılması zor olduğundan, bu gerçek bir cihazla simülatörden daha iyi çalışır ;-)

resim açıklamasını buraya girin


179
Sadece hızlı bir öneri, içinde bir masa bulunan bir Faraday kafesi oluşturursanız, Mac ile çalışmak çok daha kolay olacaktır.
Kevin Laity

86
o simülatör istedi rağmen cevabınız ilginç
vignesh kumar

76
Soru simülatör hakkında olduğundan, Photoshop'ta bunlardan birini yapacağım ve masaüstü arka planım olarak ayarlayacağım. Muhtemelen işe yarayacak, değil mi?
Timothy Lee Russell

8
Bu 'hile' profesyoneller tarafından gerçek olarak kullanılmıştır :) Geri ilk bisküvi teneke kutularını kullandığımız ilk nesil akıllı telefonlar üzerinde çalıştım. Tüm markalar işe yaramadı, ancak başarılı olanlar mükemmeldi.
Will

11
doğru cevap olarak kabul edilmelidir! (IKryptonite için plumbum kutusu kullanmayı tercih ederim)
gaussblurinc

309

Evet. Xcode'da Xcode-> Open Developer Tools-> menü öğesine gidebilir ve Ağ Bağlantısı Düzenleyicisi'ne sahip olacak " Xcode için Ek AraçlarMore Developer Tools " ı indirebilirsiniz .

Bu aracı kullanarak farklı ağ senaryolarını (% 100 kayıp, 3G, Yüksek gecikmeli DNS ve daha fazlası gibi) simüle edebilir ve kendi özel senaryolarınızı da oluşturabilirsiniz.


7
Eğer geliştirici sitesinde iseniz bu XCODE İÇİN DONANIM IO ARAÇLARI paketinde.
sıvı

156
Her nasılsa, cihazımı folyoya kapatma fikrini tercih ediyorum.
Michael Robinson

14
Xcode 8'den beri, Ağ Bağlantısı Düzenleyicisi " Xcode için Ek Araçlar " paketindedir.
ElegyD

6
Ayrıca,% 100 kayıp, ana bilgisayarın bağlantısını kısıtlar, pratik bir çözüm değildir. İnternet olmadan gelişmeye hazırsanız, geliştirici makinenizdeki fişi çekmek bu çözümden daha iyidir.
Jannie Theunissen

7
Tüm mac'u etkiliyor. İnternet bağlantısını sadece simülatör için bırakmak istiyorum, çünkü
mac'u

48

İOS simülatöründe ağı devre dışı bırakmanın tek yolu Little Snitch veya Hands Off gibi araçları kullanmaktır . Onlarla, giden ve gelen ağ bağlantılarını reddedebilir / engelleyebilirsiniz. Bunu, yalnızca simülatör uygulamasından bağlantıları engelleyecek şekilde ayarlayabilirsiniz. Güvenlik duvarı gibi çalışır.


11
ancak bu simülatörün çevrimdışıymış gibi davranmasını sağlamaz. Sadece sunucularınızı kullanılamaz hale getirecektir, bu oldukça farklı bir şeydir.
Blitz

1
aslında LordT, sahip olduğum özel durumlar için yeterli olabilir ...!
Paul Hammond

önerilen iki araç arasında bir tercih var mı?
Paul Hammond

Hayır. Sadece Hands off'u denedim, çünkü daha fazla özelliği var.
Felix

2
+1: Küçük Snitch'i tam olarak bu amaçla kullandım, ağ bağlantısı kesilirse Simüle edilmiş bir uygulamanın çalıştığından emin olmak için test yaptım.
hotpaw2

18

Mac OSX'te WiFi'nizi kapatmanız yeterli!


1
Bunun bir seçenek olmadığını özellikle belirten OP'ye yardımcı olmuyor, ancak bu benim için mükemmel bir basit çözüm.
Johno

14

Ek araçlar paketini indirin (Ağ Bağlantısı Kremi)

Açıklama

Sierra'da örnek: resim açıklamasını buraya girin

resim açıklamasını buraya girin


9
Bu aynı zamanda ana bilgisayarın bağlantısını da kısıtlar, bu nedenle geliştirici makinenizdeki fişi çekmekten daha iyi değildir - işbirliği veya internet referansı yoktur. Yani pratik bir çözüm değil.
Jannie Theunissen

11

Sadece mevcut tarihe cevap güncelleme. Xcode 4 yana (?) Bir tercihleri bölmesinde vardır /Applications/Utilitiesdenir Network Link Conditioner. Ya varolan profillerden birini kullanıyorsunuz ya da 0 Kbps Yukarı / Aşağı Bağlantı ve% 100 düşme ile kendi özel profilinizi oluşturuyorsunuz.


1
Sadece 0 bant genişliği ile özel bir ağ ayarı oluşturursanız, bunu otomatik olarak maksimum olarak kabul ettiğini eklemek istersiniz. % 100 paket kaybı koymak önemlidir.
Denis Kutlubaev

Ayrıca, bu yöntemin interneti sadece simülatörden değil, her şeyden kaldırdığını eklemek isterim. Belki de interneti tamamen kapatmak daha da kolay olabilir. Ancak yine de çok kullanışlı bir araç çünkü E ve 3G internet'i farklı kalitede simüle edebilirsiniz.
Denis Kutlubaev

Bu kesinlikle en iyi cevaptır çünkü Network Link Conditionerresmi bir Apple aracıdır ve Little Snitchveya ile karşılaştırıldığında tamamen ücretsizdir Hands Off.
fatuhoku

Hmm, bu araç her şey için ağı kapatıyor gibi görünüyor. Ayrıca Okunabilirlik bildirimlerini tetiklemediğini de buldum ( github.com/stefanomondino/STMReactiveReachability kullandım ).
fatuhoku

4
UYARI - AĞ BAĞLANTISI KOŞUCU aracı, yalnızca iPhone Simulator'ı değil ENTIRE makinesini etkiler. Xamarin Build Host'u kullandığım gibi, dev için mac'inize uzaktan kumanda ederseniz, bağlantınızı öldürür.
John Kocktoasten

10

Xcode böyle bir özellik sağlamadığından, kesinlikle bazı üçüncü taraf uygulama / araçlarına gideceksiniz. MAC ağını kapatmak da iOS Simulator ağını kapatmaya yardımcı olacaktır.

MAC internetinizi " System Preferences..."> " Network" 'den kapatabilir ve arzu ağ kaynağını kapatabilirsiniz.

Size MAC Ethernet internet kaynağını kapatmak için: EtherNet Ağ Kaynağı

MAC WiFi internet kaynağını kapatmak için (MAC'niz Wifi İnternet'te ise): resim açıklamasını buraya girin



6

Muhtemelen çılgın bir fikir veya yama:

Ağa erişilebilirlik bayrağını değiştirin

Bu, 'Simülatör Bellek Uyarısı' ve TAMAMEN GÜVENLİ'yi tetikleyerek bayrak çalışma zamanımı değiştirmek için kullandığım kod , sadece kodun yalnızca DEBUG Modunda

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}

1
Internet bağlantısı için kontrol statik bir fonksiyonu ile küresel bir sınıf var. Dönüş falseharika bir fikir. Yükleme yok ve uzaktan çalışmaya devam edebilirim! Teşekkür ederim.
JCarlosR

Bu nerede isInternetAvailabletanımlanır ?!
CSawy

@CSawy Ulaşılabilirlik sınıfında internet bağlantısının güncel durumunu gönderen bayrağı.
Darshit Shah

3

İOS simülatöründe çalışanlar da dahil olmak üzere herhangi bir işlemin ağ trafiğini kesmek için Little Snitch'i kullanabilirsiniz . Bu şekilde internet bağlantınızı koruyabilir ve çalışan uygulamanızın bağlantısını kesebilirsiniz.


3

Xcode 8.3 ve iOS 10.3 ile:

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

@available(iOS 10.3, *)Test paketi dosyanızın en üstüne eklediğinizden emin olun .

İsterseniz alternatif olarak "Uçak Modunu Aç" ı da seçebilirsiniz.

Siri wifi'yi kapattıktan veya Uçak Modu'nu açtıktan sonra, Siri'nin internete ihtiyaç duyduğunu söyleyen Siri diyalogunu kapatmanız gerekecektir. Bu, diyaloğu kapatan ve uygulamanıza geri dönen ana sayfa düğmesine basılarak gerçekleştirilir.


İOS11GM'de çalışmayabilir. Wifi ayarını simülatörde bulamıyorum.
Bill Chan

2
Xcode 9'da Siri kullanmak tek seçenek değil, birden fazla uygulamayı etkinleştirmek mümkün. WiFi ayarlarını açmak için iOS Ayarları uygulamasını etkinleştirmek de artık çalışıyor.
brandenbyers

3

IOS Simulator interneti devre dışı bırakmanın iki yolu vardır :

  • Ağ bağlantınızı çıkarın
  • Kablosuz bağlantıyı kapatma

Bu en basit yol


3

Uygulamanız belirli bir alana bağlanıyorsa, onu /etc/hostsdosyanıza ekleyebilir ve yerel ağınızdaki mevcut olmayan bir IP'ye yönlendirebilirsiniz ... Uygulama için internet bağlantısı yokmuş gibi aynı olacaktır veya sunucuya ulaşılamıyor.

sudo nano /etc/hosts

aşağıdaki satırı ekleyin:

192.168.1.123   example.com

veya 127.0.0.1yerel makinenizde bir web sunucusu çalıştırmıyorsanız kullanın .



1

Basit bir çözüm, Mac'iniz için bir Uçak Modu oluşturmaktır. Bunu nasıl yapacağınız aşağıda açıklanmıştır:

  • Sistem Tercihleri'nde Ağ'a gidin
  • Konum açılır menüsünü tıklayın
  • yeni bir konum eklemek için artı simgesine tıklayın
  • yeni konuma 'Uçak Modu' veya benzeri bir ad verin ve 'Bitti'yi tıklayın
  • Konum açılır menüsünden az önce oluşturduğunuz konumu seçin
  • pencerenin solundaki listede bulunan her bir ağ arayüzüne tıklayın, her birini devre dışı bırakın
  • iPv4'ü Yapılandır menüsünü tıklayın ve Kapalı'yı seçin
  • Wi-Fi için, Wi-Fi'yi Kapat düğmesine tıklayın
  • Uygula'yı tıkladığınızda bu konum tüm ağ etkinliğini engeller

Ağ bağlantısını tekrar açmak istediğinizde, Konum açılır menüsünden Otomatik'i seçmeniz ve Uygula'yı tıklamanız yeterlidir.


1

Mac'te Charles Proxy uygulamasını kullanmanızı öneririm

Yalnızca Bandwidth Throttleağ bağlantısını ayarlamak için oluşturulan özelliği kullanmanızı sağlar

Star / Stop Throttling ⌘ command+ T
Gaz Kelebeği Ayarları ... ⌘ command+ T+⇧ shift


0

bunun yerine ana bilgisayarın ağını devre dışı bırakabilirsiniz!


7
Uygulamanızın bağlantı sorunlarında hata ayıklarken StackOverflow'u görememek elverişsiz!
fatuhoku

Sorunun son satırını okuyun: "(Mac'e uzaktan kod bağlamak için bağlanıyorum, şu anda başka seçenek yok, bu yüzden işletim sistemi ağını devre dışı bırakmak bir seçenek değil)." Ayrıca, öneriniz iki yıl önce benpalmer tarafından verildi.
ToolmakerSteve

0

Bağlanmak için en az 2 wifi ağınız varsa, iOS simülatöründe bir hata kullanmak çok basit bir yoldur:

  1. açıksa simülatörden (cmd-q) çıkın
  2. Mac'inizi bir wifi'ye bağlayın (internete bağlı olmayabilir, önemli değil)
  3. simülatörü başlat (menü: xCode-> Geliştirici Aracını Aç-> iOs Simulator) ve yüklenirken bekleyin
  4. wifi ağını diğerine geçir
  5. kâr

Hata simülatörün zaten bağlı olmayan bir ağı (IP?) Kullanmaya çalışmasıdır.

Simülatörün yeniden başlatılmasına kadar - internete sahip olmayacak (bağlandığınız ilk wifi ağının internet bağlantısı olsa bile), böylece simülatörü bağlantısız kullanmak için (cmd-R) çalışmasını durdurabilirsiniz (cmd-.), ancak Mac'iniz bağlanacak.

Sonra, simülatörü bağlı çalıştırmanız gerekiyorsa - sadece çıkın ve başlatın.


0

Mac'inizdeki ağ bağlantısı düzenleyicisini kullanabilirsiniz. Apple geliştirici web sitesinden indirebilirsiniz. Xcode ve iOS'un eski sürümlerini aldığımız yerde mevcut olmalıdır. Bu ağ kremi ile ağın gücünü wifi'den ağa değiştirebilirsiniz.

Ayrıca ağ koşullandırıcıyı kurduğunuzda sistem tercihlerine de yüklenir.

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.