小编Jer*_*ock的帖子

macOS:在脚本中公证?

由于代码签名和Xcode的存档费时,枯燥和有问题的,我一直codesigned,归档和运签署我的开发者ID的MacOS应用程序中使用的命令行工具xcodebuildcodesign等等。通过我自己的脚本。公证看起来将是一个巨大的痛苦。是否可以在脚本中添加公证?

macos notarize

12
推荐指数
2
解决办法
1163
查看次数

在黑暗模式下,NSTextView在几乎黑色的黑色上绘制黑色

当我在暗模式下构建我的macOS应用程序时,我的一些文本视图(NSTextView)在几乎黑色的背景上呈现黑色文本.在Interface Builder中,在Attributes Inspector中,"Text Color"设置为系统"Default(Text Color)",我认为这是正确的.实际上,在Interface Builder中,根据需要,此文本在暗模式下呈现白色,在光模式下呈现黑色.我搜索了我的代码中的任何行,我可能会在此视图中将文本颜色设置为黑色,但找不到任何行.为什么我的文字总是黑的?

cocoa nstextview macos-darkmode

11
推荐指数
3
解决办法
1656
查看次数

Chrome 扩展:chrome.storage 未定义

我将以下代码添加到我原本可以正常工作的 Google Chrome 扩展程序中……

var storage = chrome.storage ;
console.log("storage is " + storage) ;
var bookmarks = chrome.bookmarks ;
console.log("bookmarks is " + bookmarks) ;
Run Code Online (Sandbox Code Playgroud)

运行后,控制台说

storage is undefined
bookmarks is [object Object] 
Run Code Online (Sandbox Code Playgroud)

换句话说,书签可以正常工作,但在操作中缺少存储。我的清单同时要求...

{
   ...
   "permissions": [ "bookmarks", "tabs", "storage" ],
}
Run Code Online (Sandbox Code Playgroud)

以防万一,此扩展程序在 Mac OS X 上作为外部扩展程序安装。为确保正确更新,我将上述代码从安装到 ~/Library/Application Support/Google/Chrome/Default/Extensions 的文件中复制. 当然,我已经重新启动了 Chrome。

为什么 chrome.storage 可能未定义?

google-chrome-extension

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

函数指针赋值在C中有效但不在C++中

我需要在运行时在Mac OS X中动态链接到库函数.在Apple的示例之后,我声明了一个函数指针并为其指定了dlsym()的结果.以下示例成功编译为普通C(.c)文件.但我需要在C++文件中使用它,如果我将此示例编译为C++文件(.cpp),则clang编译器会告诉我

无法使用'void '类型的右值初始化'void()(char*)' 类型的变量

为什么它在简单的'C'中工作,我该如何解决这个问题?

#include <dlfcn.h>

void Test() {
    // Load the library which defines myFunc
    void* lib_handle = dlopen("myLib.dylib", RTLD_LOCAL|RTLD_LAZY);

    // The following line is an error if compiled as C++
    void (*myFunc)(char*) = dlsym(lib_handle, "myFunc");

    myFunc("Hello");

    dlclose(lib_handle) ;
}
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers dynamic-linking

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

macOS:根据可用性在运行时加载一个或其他系统框架

我正在使用苹果Safari框架的macOS工具上工作。在macOS 10.13中运行时,该工具链接到并从中加载

/System/Library/PrivateFrameworks/Safari.framework
Run Code Online (Sandbox Code Playgroud)

一切正常。但是在macOS 10.12.6中运行时,缺少某些行为。基于对DTrace的一些调查,我认为这是因为我的工具需要加载最新的暂存框架,而不是在这里:

/System/Library/StagedFrameworks/Safari/Safari.framework
Run Code Online (Sandbox Code Playgroud)

这显然是Safari所做的,因为如果我使用lldb附加到Safari并运行image list,则在10.13中,该列表仅包含前一个路径,而在10.12.6中,则仅包含后一个路径。

我尝试了以下方法:

NSBundle* stagedBundle = [NSBundle bundleWithPath:@"/System/Library/StagedFrameworks/Safari/Safari.framework"];
Run Code Online (Sandbox Code Playgroud)

在10.13中返回nil,因为此时没有这样的目录。但是,在10.12.6中,我得到了stagedBundle,然后:

NSBundle* privateBundle = [NSBundle bundleForClass:[BookmarksController class]];
[privateBundle unload];
[stagedBundle load];
Run Code Online (Sandbox Code Playgroud)

卸载和加载显然有效,因为如果我记录-description了这两个捆绑包,则在运行该代码之前,将(加载)私有捆绑包,并且(尚未加载)登台的捆绑包,但是在运行该代码之后,根据需要交换了这些状态。

但这是无效的。(1)如果我再次调用-bundleForClass:,传递一个已知在两个框架中都存在的类,它将给我Private捆绑包。(2)如果我调用-respondsToSelector:,传递已知仅存在于暂存框架中的选择器,则不会。

我尝试_CFBundleFlushBundleCaches()此处的建议致电,但这没有帮助。

我也尝试过更改目标的FRAMEWORK_SEARCH_PATHS,并在Mac上安装Staged框架并链接到它,但是由于这篇文章已经太久了,我只能说这导致的热量多于光。

在这种情况下,如何有选择地加载框架?

更新

我尝试了另一种方法。在重新阅读了《 Apple的框架编程指南》之后,即使它看起来确实过时,我还是认为该框架需要弱链接。做过这个:

  • 在代码中,删除了那些NSBundle -load-unload调用
  • 在我工具的目标中
    • Build Phases > …

macos cocoa frameworks dyld nsbundle

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

什么是文件Mac OS X的st_flags(用户定义的标志)?

我试图检测Dropbox忙于在Mac OS X中更新用户Dropbox中的文件.通过在文件上运行stat(1)或stat(2),我看到用户定义的文件标志(st_flags)通常是0x40,但是当Dropbox更新文件时,它们会变为0x00几秒钟.

在我的桌面和其他文件夹中查看,我看到~95%的文件的标志值为0x00,但大约5%的文件的值为0x40.所以它可能不仅仅是Dropbox实现细节.我无法识别任何用于预测哪些文件具有0x40标志的模式.有谁知道这些值是什么意思?谁是定义它们的"用户"?

macos flags dropbox stat

5
推荐指数
2
解决办法
1282
查看次数

Swift 5:如何创建包含类类型的集合(对于 NSXPCInterface)

Apple 文档NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:),对于 Swift,第一个参数描述为:

\n\n

包含 Class 对象 \xe2\x80\x94 的 NSSet,例如 [MyObject class]

\n\n

嗯,看起来好像有人忽略了将其从 Objective-C 更新到 Swift。对于 Swift 我认为它应该是这样的

\n\n

包含类类型的集合

\n\n

(请有人纠正我的措辞。)但是如何制作包含类类型的 Set 呢? 编译器不允许我声明Set其成员类型不符合的成员Hashable。这是有道理的,因为需要哈希来保持成员之间的唯一性。但 Swift 中的类类型似乎不可散列。在任何 Swift 文件或游乐场\xe2\x80\xa6 中尝试此操作

\n\n
class Foo {}\nlet mySet: Set<AnyHashable>\nmySet.insert(Foo)\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译器抱怨:

\n\n

参数类型“Foo.Type”不符合预期类型“Hashable”

\n\n

或者,更广泛地说,有人知道如何NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:)在 Swift 5 中使用吗?

\n

hashable swift

5
推荐指数
1
解决办法
970
查看次数

Swift 3和lldb:给定十六进制地址的UIView打印框架

调试iOS目标,Swift 3,Xcode 8.2,lldb-360.1.68

我想打印frame一个我在较早的断点处获取的地址的UIView。这是我最好的镜头,令人失望的结果:

(lldb) expr -l objc -O -- NSStringFromRect((CGRect)([(UIView*)0x7a241b30 frame]))
error: use of undeclared identifier 'CGRect'
Run Code Online (Sandbox Code Playgroud)

谢谢!

uiview ios lldb swift

3
推荐指数
1
解决办法
870
查看次数

macOS 10.13:"不再支持安排NSURLDownload加载程序."

在macOS 10.13中运行我的macOS应用程序,我看到打印到控制台:

Scheduling the NSURLDownload loader is no longer supported.
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

cocoa macos-high-sierra

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