标签: macos-mojave

如何在 MacOS Sierra/High Sierra 中使用 python 获取用户设置的计算机名称

以下问题已部分回答,请参阅下面的解决方案部分。所以我发布这个部分是为了帮助其他人,而且因为我的解决方案还没有真正解决问题。

所以,问题是为什么以下技术(使用 python 的平台和套接字库)给出的主机名根据您连接的路由器给出不同的主机名,以及为什么它也不同于计算机名和本地主机名。顺便说一下,这也是非常特定于 mac 的。

首先,我使用的是配备 High Sierra 10.13.6 的 MacBook pro 2015 型号。我使用终端并执行以下操作:

import platform
platform.node()
Run Code Online (Sandbox Code Playgroud)

根据分配给 MacBook 的 IP 地址,这给了我类似“192-168-1-4.tpgi.com.au”的信息。不同的路由器给出不同的结果。我也得到了类似的结果

import socket
socket.gethostname()
Run Code Online (Sandbox Code Playgroud)

它再次返回类似于“192-168-1-4.tpgi.com.au”的内容。

其次,我承认回答类似问题的文章 4271740/how-can-i-use-python-to-get-the-system-hostname

但是,这个问题略有不同,毕竟就我的应用程序的用户而言,主机名应该是他们在系统设置中可以看到的,实际上是不同的。如果我运行:

sudo scutil --get LocalHostName
Run Code Online (Sandbox Code Playgroud)

我得到系统设置中显示的名称(在共享下,它相当混乱地显示了计算机名称和本地主机名,它们也可以不同)。本地主机名与限定语句一起显示:

您本地网络上的计算机可以通过以下网址访问您的计算机:foo.local

所有这一切都是一个问题的原因是我的应用程序使用了主机名,这与 mac 上的本地主机名和计算机名不同。该主机名随后会出现在我们的用户界面中,当然,当其格式为“192-168-1-4.tpgi.com.au”时,它对识别用户的计算机没有帮助。用户很可能希望看到他们的计算机名称,因为这是可见的。在 Mac 上,主机名是不可见的,它可以通过命令设置或获取,但如果遇到这个问题,我们的用户自然不会想到它。

解决方案

所以问题与我相信如何开箱即用地设置 macs 相关。在mac上可以通过终端中使用以下命令来查询主机名:

hostname
192-168-1-4.tpgi.com.au
Run Code Online (Sandbox Code Playgroud)

这将返回实际用于解析 IP 地址的主机名。正如我上面提到的,这与计算机名称不匹配,这在使用我们的应用程序时往往会引起混淆。当我运行以下查询时,我发现了这一点。

sudo scutil --get HostName
HostName: not set
Run Code Online (Sandbox Code Playgroud)

所以我使用以下命令将主机名设置为我为机器识别的名称,如下所示

sudo scutil --set HostName foo
Run Code Online (Sandbox Code Playgroud)

现在,当我运行以下命令时,我得到了我和其他技术含量较低的用户所期望的结果。

import socket
socket.gethostname()
foo

import platform
platform.node()
foo
Run Code Online (Sandbox Code Playgroud)

最后只是为了更好的衡量,从我跑的终端

hostname
foo
Run Code Online (Sandbox Code Playgroud)

结论

好的,虽然我已经写了我找到了一个解决方案,但它并不是我真正需要的解决方案,问题是我需要显示用户设置的计算机名称,而不是主机名。由于我使用的是 …

python hostname computer-name macos-high-sierra macos-mojave

6
推荐指数
1
解决办法
2459
查看次数

升级到 macOS Mojave,现在在 rails 控制台中出现错误

两天前升级到莫哈韦沙漠。Rails 服务器正在运行,但是当我尝试运行 activerecord 内容时,出现错误。当我尝试运行“Account.last”或“Account.new”或其他任何东西时,它会将我踢出去并出现以下错误

objc[38551]: +[__NSPlaceholderDictionary initialize] may have been in 
progress in another thread when fork() was called.
objc[38551]: +[__NSPlaceholderDictionary initialize] may have been in 
progress in another thread when fork() was called. We cannot safely 
call it or ignore it in the fork() child process. Crashing instead. Set 
a breakpoint on objc_initializeAfterForkError to debug.
Run Code Online (Sandbox Code Playgroud)

红宝石 2.3.4

导轨 5.1.6

卸载了一些 gems 并尝试但同样的错误。这两天快死了 而且我不仅仅是升级后面临这个问题的人。

macos fork ruby-on-rails macos-mojave

6
推荐指数
2
解决办法
2097
查看次数

使用终端和 git 时出现 Xcode 错误

尝试使用 git 时出现此错误:

Mitchells-MacBook-Pro:/ Mitch$ git
dyld: Symbol not found: _OBJC_IVAR_$_NSTextViewIvars.sharedData
  Referenced from: /Applications/Xcode.app/Contents/SharedFrameworks/DVTDocumentation.framework/Versions/A/../../../../SharedFrameworks/DVTKit.framework/Versions/A/DVTKit
  Expected in: /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
 in /Applications/Xcode.app/Contents/SharedFrameworks/DVTDocumentation.framework/Versions/A/../../../../SharedFrameworks/DVTKit.framework/Versions/A/DVTKit
git: error: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly!
git: error: You can set the path to the Xcode folder using /usr/bin/xcode-select -switch
Run Code Online (Sandbox Code Playgroud)

我在 MacOS mojave 上运行。我试图运行命令:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用。任何提示都会很棒。

git macos xcode macos-mojave

6
推荐指数
1
解决办法
3369
查看次数

如何在 macOS Mojave 上启用 PHP Intl 扩展?

我正在尝试在 macOS Mojave 上安装 Magento (2.3.0)。Magento 显示PHP Extension intl.丢失。

我尝试了以下解决方法:

  1. 使用复制 php.ini cp /etc/php.ini.default php.ini
  2. 删除了“;” 前extension=php_intl.dll
  3. 重启阿帕奇 sudo apachectl restart

但是以上都没有解决。

在检查时php -v,我看到以下错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 
'/usr/lib/php/extensions/no-debug-non-zts-20160303/php_intl.dll' - 
dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/php_intl.dll, 
0x0009): dlopen(): file not found: /usr/lib/php/extensions/no-debug- 
non-zts-20160303/php_intl.dll in Unknown on line 0
PHP 7.1.19 (cli) (built: Aug 17 2018 20:10:18) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
Run Code Online (Sandbox Code Playgroud)

/usr/lib/php/extensions/no-debug-non-zts-20160303即只有 …

php macos php-extension macos-mojave

6
推荐指数
1
解决办法
2万
查看次数

应用程序不要求在 MacOS 10.14 Mojave 中访问麦克风的权限

我是开发飞行模拟应用程序的团队的一员。其中一个应用程序也在 MacOS 上运行,需要访问麦克风才能与在线虚拟空中交通管制进行通信。从 MacOS 10.14 开始,麦克风访问不再有效。它曾经在任何以前版本的 MacOS 中都能完美运行。我读过从 10.14 开始,MacOS 会要求用户授予权限,但此对话框从未出现。使用portaudio作为音频库,成功打开音频输入流。没有警告,没有错误,没有任何指向问题的东西。它只是不返回任何音频输入。

我了解到许多其他项目——甚至是商业项目——也有类似的问题。但我不知道他们最终是如何解决这个问题的。我知道应用程序包需要在 Info.plist 中添加一个特定的键

<key>NSMicrophoneUsageDescription</key>
<string>This application needs access to your Microphone virtual ATC.</string>
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。其他人建议添加<key>CFBundleDisplayName</key>解决问题。但它没有。

也许值得注意的是,该应用程序未签名。这是一个业余爱好项目,我不愿意每年为 Apple 的代码签名过程花费 99 美元。这可能是罪魁祸首吗?

欢迎任何建议或想法。

作为临时解决方法,我们告诉用户通过控制台从应用程序包启动二进制文件,从而解决了问题。但我也想为应用程序包本身正确修复它。

privacy microphone portaudio macos-mojave

6
推荐指数
1
解决办法
3746
查看次数

为什么 NSFetchRequest.shouldRefreshRefetchedObjects 不起作用?

我正在尝试在一个上下文中更新和保存托管对象,然后在另一个上下文中访问更新的属性值。的文档shouldRefreshRefetchedObjects

默认情况下,当您获取对象时,它们会保持其当前属性值,即使持久存储中的值已更改。使用参数 YES 调用此方法意味着在执行提取时,将使用持久存储中的当前值更新所提取对象的属性值。与依次对多个对象使用 refreshObject:mergeChanges: (NSManagedObjetContext) 相比,这是确保托管对象属性值与存储一致的更方便的方法。

所以我认为通过将其设置为true我可以在重新获取后获取当前值,而无需手动刷新单个对象。然而,情况似乎并非如此。在 macOS 10.14.5 上,获取请求将根据存储中的属性值选择合适的对象,但内存中的对象仍然具有陈旧的值。

下面是一些示例代码来说明问题。我希望它打印Old New New,但它打印Old Old New

import Foundation
import CoreData

class Entity: NSManagedObject {
    @NSManaged var attribute: String
}

let attribute = NSAttributeDescription()
attribute.name = "attribute"
attribute.attributeType = .stringAttributeType
let entityDescription = NSEntityDescription()
entityDescription.name = "Entity"
entityDescription.properties = [attribute]
entityDescription.managedObjectClassName = Entity.className()
let model = NSManagedObjectModel()
model.entities = [entityDescription]

let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model)
try! coordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, …
Run Code Online (Sandbox Code Playgroud)

macos core-data macos-mojave

6
推荐指数
1
解决办法
261
查看次数

在 MacOS Mojave 10.14 上未创建核心转储文件

我一直在为此痛心疾首,因为我觉得自己好像在绕圈子跑。我在终端会话中尝试了以下命令:

  • ulimit -c unlimited
  • launchctl limit core unlimited
  • launchctl limit core unlimited unlimited
  • sysctl -w kern.coredump=1

在这些命令中的每一个之后,我还尝试运行sleep 100 &后跟killall -SIGSEGV sleeporkillall -SIGABRT sleep并且在这两种情况下我的/cores目录都是完全空的。我环顾四周,发现的文档要么与旧版本的 OSX 相关,要么命令无法生成任何文件。我看到.crash文件正在生成,但我对可以附加lldb到帮助我调试的文件更感兴趣。

任何帮助表示感谢。

macos coredump lldb macos-mojave

6
推荐指数
1
解决办法
445
查看次数

Homebrew 升级丢弃 PHP:dyld:库未加载:/usr/local/opt/libpsl/lib/libpsl.5.dylib

今天我升级了 Homebrew,这导致 PHP 版本(7.2 - 7.3)被删除。每当我尝试重新安装它们时都会显示以下错误:

dyld: Library not loaded: /usr/local/opt/libpsl/lib/libpsl.5.dylib
Referenced from: /usr/local/opt/curl-openssl/bin/curl
Reason: image not found
Error: An exception occurred within a child process:
DownloadError: Failed to download resource "php"
Download failed: https://www.php.net/distributions/php-7.3.9.tar.xz
Run Code Online (Sandbox Code Playgroud)

有什么建议?

php macos homebrew macos-mojave

6
推荐指数
1
解决办法
8067
查看次数

使用 C++17 std::filesystem 是否需要 MacOS 10.15?(Xcode 11.1)

使用 Xcode 11.1,在 MacOS 10.14.6 (Mojave) 上构建,以下几行:

#include <filesystem>
typedef std::filesystem::path my_path;
Run Code Online (Sandbox Code Playgroud)

...生成此编译器错误:

'path' is unavailable: introduced in macOS 10.15
Run Code Online (Sandbox Code Playgroud)

这是否意味着我无法从 10.14 开始为较早版本的 MacOS(10.13、10.14)构建,或者我无法从 10.15 生成可执行文件,该可执行文件可以针对/在早于 10.15 的 MacOS 版本上运行?

xcode c++17 std-filesystem macos-mojave macos-catalina

6
推荐指数
1
解决办法
2192
查看次数

Git 钩子:'.git/hooks/pre-commit':不允许操作

这一切都在 OS X Mojave 上。

我试图阻止自己错误地提交到 master 分支,因为这是我经常做的事情,使用这个 SO answer 中pre-commitGit 钩子,因为我使用 bash 而不是 sh 稍微改变了。但是,每次我尝试运行它时,都会得到以下信息:

fatal: cannot exec '.git/hooks/pre-commit': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

我检查了.git.git/hooks目录的权限。两者都是drwxrwxrwxpre-commit本身的权限是:

-rwxr-xr-x@  1 emeyer  staff    25 Feb  5 11:50 pre-commit
Run Code Online (Sandbox Code Playgroud)

...这与pre-commit.sample我复制到pre-commit然后替换内容的文件相同。我试过了,chmod +w但这并没有解决它。

我决定简化我的测试并替换pre-commit为以下内容:

#!/bin/bash

echo "Test"
Run Code Online (Sandbox Code Playgroud)

我仍然遇到上面提到的Operation not permitted错误。我也在#!/bin/shSO answer's example 中尝试了它;同样的结果。

如果我尝试直接运行脚本,通过./pre-commit从命令行输入,我会得到一个稍微不同的错误:-bash: ./pre-commit: /bin/bash: bad interpreter: Operation not …

git bash githooks macos-mojave

6
推荐指数
1
解决办法
2043
查看次数