如何让Mac OS X防火墙永久允许我的iOS应用?
我正在编写一个iOS应用程序,它可以充当telnet服务器。当然,它一开始就开始监听连接 当我在模拟器中运行应用程序时,Mac OS X(我正好在10.7.3上)会提示我允许或拒绝我的应用程序接受传入的网络连接。这是Mac OS X用于所有未签名的网络应用程序的标准防火墙消息 我对每天点击“允许”50次或更多次感到厌倦,因此我寻求一种方法,将我的应用程序永久添加到防火墙的允许应用程序列表中 我试过以下方法如何让Mac OS X防火墙永久允许我的iOS应用?,ios,macos,firewall,Ios,Macos,Firewall,我正在编写一个iOS应用程序,它可以充当telnet服务器。当然,它一开始就开始监听连接 当我在模拟器中运行应用程序时,Mac OS X(我正好在10.7.3上)会提示我允许或拒绝我的应用程序接受传入的网络连接。这是Mac OS X用于所有未签名的网络应用程序的标准防火墙消息 我对每天点击“允许”50次或更多次感到厌倦,因此我寻求一种方法,将我的应用程序永久添加到防火墙的允许应用程序列表中 我试过以下方法 在我的应用程序运行时打开活动监视器 选择我的应用程序。单击“检查” 转到“打开文件和端口”
您有什么建议?我认为最好的解决方案可能是编写将应用程序发送到防火墙的脚本 如果我没记错的话,最新的OSX防火墙实际上很聪明,能够识别应用程序和允许的二进制文件的指纹。这就防止了将恶意软件命名为“system32.exe”&c以逃避防火墙的惊人有效策略。如果是这样的话,你的应用程序将(正确地)被阻止,因为它不是相同的二进制文件
因此,尝试编写防火墙允许过程的脚本,并将其纳入构建过程。在涉猎了一段时间后,我发现手动将可执行文件本身添加到防火墙“允许”列表中可以得到所需的结果。您不添加.app,而是在.app的Contents文件夹中添加“Unix”可执行文件。我相信我以前尝试过这个文件,但没有成功,但目前它正在工作。我从未幸运地将可执行文件手动添加到防火墙的允许列表中。下面是一个使用自动鼠标点击的解决方案:
/usr/local/bin
Allow
按钮的屏幕坐标⌘⇧4.(在我的示例中,它们是x:750,y:600。)w:
是以毫秒为单位的等待时间):
(如果不将click
移动到同一位置(m:+0,+0
部分)并使用c:>在同一位置再次单击,我将无法让click
工作。
)首选项/行为
并添加上述脚本。
我不知道这是否是正确的方法,但对我来说是有效的
因此,我们要抑制以下对话框 是否希望应用程序“NNN.app”接受传入的网络 联系 每次激活Xcode iOS模拟器时都会显示这些信息。 我相信现在有一个解决办法。我的答案基于博客 只需在终端窗口中运行以下命令:
#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。您是否尝试将模拟器添加到允许传入连接的列表中?@lnafziger:添加模拟器不起作用。应用程序已用完进程。@blahdiblah我认为无法编写脚本。防火墙没有提供AppleScript库,shell脚本也没有用处。这是我见过的防火墙规则中最复杂的解决方法。我佩服你的坚韧不拔,但这是对我享受OSX的又一次打击……我想知道你还做了些什么使它起作用,因为这个解决方案对我不起作用:-\Thank@Ishahahak,它有帮助。但奇怪的是,苹果不信任自己的防火墙软件。这对我来说很有效,但手动将可执行文件(我的例子是Electron)添加到安全和防火墙面板却没有。每次登录Mac时,我都必须运行这些命令。因此,我最终使用Lingon X(www.peterborgapps.com/Lingon)在以root身份登录时从shell脚本中执行这些命令,因此从脚本的第一行和最后一行中删除了“sudo”前缀。似乎从Catalina和Big Sur开始,此解决方案不再有效。脚本为脚本中间的两行提供了一个“您指定的文件路径无效”。这看起来与此处提到的问题相同:
#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