如何让Mac OS X防火墙永久允许我的iOS应用程序?

我正在编写一个iOS应用程序,其中包括一个telnet服务器。 当然,它一开始就开始聆听连接。

当我在模拟器中运行应用程序时,Mac OS X(我碰巧在10.7.3)提示我允许或拒绝我的应用程序接受传入的networking连接。 这是Mac OS X用于所有未签名的联网应用程序的标准防火墙消息。

我厌倦了每天点击“允许”五十次或更多次,所以我寻求一种将我的应用永久添加到防火墙允许的应用列表的方式。

我试过以下。

  1. 打开活动监视器,而我的应用程序运行。
  2. select我的应用程序 点击“检查”。
  3. 转到打开文件和端口选项卡。 第一条线之一是我的应用程序的确切path。 复制并粘贴此path。
  4. 打开防火墙…高级设置。
  5. 点击+(添加)button。
  6. 浏览到应用程序path并select它,从而将其添加到允许传入连接的应用程序列表中。

最后一步有一个重要的决定。 您可以添加.app应用程序包,或在该包上显示内容,并在其中添加“Unix可执行文件”。 我已经尝试了两种方法。

有趣的是,防火墙实际上会停止警告你关于应用程序的一段时间。 然而,经过几次运行,我不清楚哪个事件实际上导致了这个变化,但是对于我来说大概在半小时之内发生,一般来说,防火墙会再次发出警告。

如何设置防火墙永久允许我的iOS应用程序?

当然,我可以通过禁用Mac OS X防火墙来绕过这个问题。 我也可以避免再一次把它砍下来,让我的脚分裂。 这些行动都不推荐给我。

你会build议什么?

经过一段时间的讨论后,我发现手动将可执行文件本身添加到防火墙的“允许”列表中可以得到所需的结果。 您不要添加.app,而是添加.app内容文件夹中的“Unix”可执行文件。 我相信我之前尝试过这个文件没有成功,但目前它的工作。

所以我们要压制下面的对话框

你想让应用程序“NNN.app”接受传入的networking连接吗?

它出现在Xcode iOS模拟器的每次激活中。 我相信现在有一个解决scheme。 基于我的答案在这个博客。

只需在terminal窗口中运行以下命令:

#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 

对我来说,它的工作。 请注意模拟器地址是根据Xcode 8。

我认为最好的解决scheme可能是编写好你的应用程序到防火墙的过程。

如果我记得正确的话,最新的OSX防火墙实际上是聪明的识别应用程序和指纹允许的二进制文件。 这可以防止只是命名您的恶意软件“system32.exe”&c来逃避防火墙的出乎意料的有效策略。 如果是这样的话,你的应用程序将被(正确)阻止,因为它不是相同的二进制文件,而且没有任何方法。

因此,请尝试对允许进程的防火墙进行脚本编写,并将其纳入构build过程。

我从来没有运气手动将可执行文件添加到防火墙的允许列表。 这是一个使用自动鼠标点击的解决scheme:

  1. 下载CLIclick 。 (谢谢Carsten。)
  2. 把它放在合适的位置,比如/usr/local/bin
  3. 使用⌘⇧4获取Allowbutton的屏幕坐标。 (在我的例子中,这些是x:750,y:600)
  4. 用这个内容创build一个脚本( w:等待时间,以ms为单位):

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

    (如果不将“移动”到同一位置( m:+0,+0部分)并再次点击与c:. .相同的位置,我无法使CLIclick工作。

  5. 打开Xcode的Preferences / Behaviors并添加上面的脚本。 在这里输入图像说明
  6. 请享用!

我不知道这是否是正确的方式,但对我来说,工作。

  1. closures防火墙
  2. 连接到iPhone应用程序到您的Mac
  3. 检查连接是否正常工作
  4. 打开防火墙