由于代码签名和Xcode的存档费时,枯燥和有问题的,我一直codesigned,归档和运签署我的开发者ID的MacOS应用程序中使用的命令行工具xcodebuild,codesign等等。通过我自己的脚本。公证看起来将是一个巨大的痛苦。是否可以在脚本中添加公证?
当我在暗模式下构建我的macOS应用程序时,我的一些文本视图(NSTextView)在几乎黑色的背景上呈现黑色文本.在Interface Builder中,在Attributes Inspector中,"Text Color"设置为系统"Default(Text Color)",我认为这是正确的.实际上,在Interface Builder中,根据需要,此文本在暗模式下呈现白色,在光模式下呈现黑色.我搜索了我的代码中的任何行,我可能会在此视图中将文本颜色设置为黑色,但找不到任何行.为什么我的文字总是黑的?
我将以下代码添加到我原本可以正常工作的 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 可能未定义?
我需要在运行时在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) 我正在使用苹果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的框架编程指南》之后,即使它看起来确实过时,我还是认为该框架需要弱链接。做过这个:
-load和-unload调用我试图检测Dropbox忙于在Mac OS X中更新用户Dropbox中的文件.通过在文件上运行stat(1)或stat(2),我看到用户定义的文件标志(st_flags)通常是0x40,但是当Dropbox更新文件时,它们会变为0x00几秒钟.
在我的桌面和其他文件夹中查看,我看到~95%的文件的标志值为0x00,但大约5%的文件的值为0x40.所以它可能不仅仅是Dropbox实现细节.我无法识别任何用于预测哪些文件具有0x40标志的模式.有谁知道这些值是什么意思?谁是定义它们的"用户"?
在Apple 文档中NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:),对于 Swift,第一个参数描述为:
包含 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 中尝试此操作
class Foo {}\nlet mySet: Set<AnyHashable>\nmySet.insert(Foo)\nRun Code Online (Sandbox Code Playgroud)\n\n编译器抱怨:
\n\n参数类型“Foo.Type”不符合预期类型“Hashable”
\n\n或者,更广泛地说,有人知道如何NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:)在 Swift 5 中使用吗?
调试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)
谢谢!
在macOS 10.13中运行我的macOS应用程序,我看到打印到控制台:
Scheduling the NSURLDownload loader is no longer supported.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?