2012-03-23 11 views
25

Piszę aplikację na iOS, która działa między innymi jako serwer telnet. Oczywiście, zaczyna nasłuchiwać połączeń od razu po uruchomieniu.Jak uzyskać zaporę Mac OS X Firewall, aby na stałe zezwalała na moją aplikację na iOS?

Kiedy uruchomić aplikację w symulatorze, Mac OS X (I stało się na 10.7.3) podpowiada mi, aby umożliwić lub zablokować mój wniosek, aby zaakceptować przychodzące połączenia sieciowe. Jest to standardowy komunikat Firewall, którego Mac OS X używa dla wszystkich niepodpisanych aplikacji sieciowych.

I znużeni klikając „Zezwól” pięćdziesiąt lub więcej razy dziennie, a więc szukać sposobu na stałe dodawanie moje aplikację do listy zapory dozwolonych aplikacji.

Próbowałem następujące.

  1. Monitor aktywności otwartej, gdy działa moja aplikacja.
  2. Wybierz moją aplikację. Kliknij "Sprawdź".
  3. Przejdź do zakładki Otwórz pliki i porty. Jednym z pierwszych wierszy jest dokładna ścieżka do mojej aplikacji. Skopiuj i wklej tę ścieżkę.
  4. Otwórz zaporę ... Ustawienia zaawansowane.
  5. Kliknij przycisk + (dodaj).
  6. Przejdź do ścieżki aplikacji i wybierz ją, dodając ją do listy aplikacji, dla których dozwolone są połączenia przychodzące.

W ostatnim kroku istnieje istotna decyzja. Możesz dodać pakiet aplikacji .app lub pokazać zawartość tego pakietu i dodać "plik wykonywalny Uniksa" wewnątrz. Próbowałem obu podejść.

ciekawe, zapora będzie w rzeczywistości zatrzymać ostrzeżenia o app- na chwilę. Po kilku uruchomieniach - nie jest dla mnie jasne, jakie zdarzenie faktycznie powoduje tę zmianę, ale zdarza się to w ciągu około pół godziny, ogólnie rzecz biorąc - Zapora sieciowa ponownie ostrzega o aplikacji.

Jak ustawić zaporę tak, aby na stałe zezwalała na moją aplikację na iOS?

Oczywiście mogłem obejść ten problem wyłączając zaporę Mac OS X. Mogłabym także uniknąć ponownego rozszczepienia stopy przez odcięcie jej. Żadne z tych działań nie poleca się mnie.

Co byś zasugerował?

+0

Czy próbowałeś dodać ** symulator ** do listy, która zezwala na połączenia przychodzące? – lnafziger

+1

Podpisz aplikację :) – EricM

+0

@lnafziger: Dodawanie symulatora nie działa. Aplikacja kończy proces. – vocaro

Odpowiedz

12

Po dabbling z tym od jakiegoś czasu, stwierdziliśmy, że ręczne dodawanie samego pliku wykonywalnego do Zapory „Zezwól” lista daje pożądanego rezultatu. Nie dodaje się pliku .app, lecz raczej plik wykonywalny "Unix" wewnątrz folderu .app.Wierzyłem, że próbowałem tego pliku wcześniej bez powodzenia, ale obecnie działa.

+3

Zastanawiam się, co jeszcze zrobiłeś, aby działało, ponieważ to rozwiązanie nie działa dla mnie: - \ – Brian

3

Myślę, że najlepszym rozwiązaniem może być napisanie skryptu do aplikacji do zapory sieciowej.

Jeśli dobrze pamiętam, ostatni firewall OSX jest rzeczywiście mądry o aplikacjach i identyfikacji odcisków palców dozwolony binarnych. Zapobiega to zaskakująco skutecznej taktyce nazywania twojego złośliwego oprogramowania "system32.exe", aby ominąć zaporę sieciową. W takim przypadku Twoja aplikacja zostanie (poprawnie) zablokowana, ponieważ nie jest to ta sama wersja binarna, która była w porządku, i nie ma na to żadnego sposobu.

Spróbuj więc skryptować zaporę zezwalającą na proces i włącz ją do procesu budowania.

+2

+1 za zaskakująco skuteczny – nycynik

+0

@blahdiblah Nie wierzę, że można to zakodować. Zapora sieciowa nie oferuje żadnej biblioteki AppleScript, a także nie używa skryptu powłoki. – OldPeculier

1

Nigdy nie miałem szczęścia z ręcznym dodaniem pliku wykonywalnego do dozwolonej listy zapory. Oto rozwiązanie za pomocą kliknięcia myszyzautomatyzowany:

  1. Pobierz CLIclick. (Dziękuję Carsten.)
  2. Umieść go w odpowiednim miejscu, na przykład /usr/local/bin.
  3. Pobierz współrzędne ekranu przycisk za Allow użyciu . (W moim przykładzie, to X: 750, Y: 600)
  4. Utwórz skrypt z tej zawartości (the w: jest czas oczekiwania w ms):

    /usr/local/bin/cliclick c:750,600 w:1500 m:+0,+0 c:. 
    

    (nie mogłem dostać CLIclick pracować bez „ruchome” go w tym samym miejscu (m:+0,+0 część) i kliknąć ponownie w tym samym miejscu z c:..)

  5. Otwarte Xcode na Preferences/Behaviors i dodać powyższy skrypt. enter image description here
  6. Ciesz się!
+0

To jest najbardziej skomplikowane rozwiązanie, jakie kiedykolwiek widziałem dla reguły zapory ogniowej. Podziwiam twoją nieustępliwość, ale to kolejny cios dla mojej przyjemności z OSX ... – trojjer

-1

Nie wiem, czy to jest właściwa droga, ale dla mnie działało.

  1. wyłączyć zaporę
  2. połączyć się z aplikacji iPhone do komputera Mac
  3. sprawdzić, czy wszystko w połączeniu pracy
  4. włączyć zaporę
12

Dlatego chcemy tłumić następujące okno dialogowe

Czy chcesz, aby aplikacja "NNN. app ", aby zaakceptować połączenia przychodzące z sieci ?

, które pojawiają się przy każdej aktywacji symulatora Xcode iOS . Uważam, że istnieje teraz rozwiązanie. Opierając moją odpowiedź na blogu this.

Wystarczy uruchomić następujące polecenia w oknie terminala:

#temporarily shut firewall off: 
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off 

#put Xcode as an exception: 
/usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Xcode.app/Contents/MacOS/Xcode 

#put iOS Simulator as an exception: 
/usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator 

#re-enable firewall: 
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on 

Dla mnie to zadziałało. Należy pamiętać, że adres symulatora jest zgodny z Xcode 8.

+0

Dzięki @ishahak, pomogło. Wciąż dziwne, że Apple nie ufa własnemu oprogramowaniu w zaporze ogniowej. – Ivan

+0

To działało dla mnie, gdy ręczne dodanie pliku wykonywalnego (Electron, w moim przypadku) do panelu Security & Firewall nie było możliwe. – zigg

+1

Musiałem uruchamiać te polecenia za każdym razem, gdy logowałem się na moim Macu. Więc skończyłem używając Lingon X (www.peterborgapps.com/lingon), aby wykonać te polecenia ze skryptu powłoki przy logowaniu się jako root, więc usunięto prefiks "sudo" z pierwszej i ostatniej linii skryptu. – lifjoy