小编Try*_*gve的帖子

CGDirectDisplayID,多个GPU,不推荐使用CGDisplayIOServicePort并唯一标识显示

我需要唯一地识别显示器,以达到显示器确实在特征上不同的程度.因此,插入同一物理端口的相同型号的显示器不会被视为不同,但基本上其他一切都将被视为不同.

当系统GPU更改时,CGDirectDisplayID也会更改,但不会以文档的方式更改.实验表明,根据使用的GPU,相同的屏幕ID将相差2.

CGDisplayID更改问题

解决此问题的方法是获取显示的IO注册表字符串:

io_service_t  servicePort = CGDisplayIOServicePort (cgDisplayID);
io_service_t  root = IODisplayForFramebuffer (servicePort, kNilOptions);
NSDictionary* ioRegistryDict = nil;
NSString*     displayKey = nil;

IORegistryEntryCreateCFProperties (root, (CFMutableDictionaryRef *)&ioRegistryDict, kCFAllocatorDefault, kNilOptions);

if (ioRegistryDict)
    displayKey = [ioRegistryDict objectForKey:@"IODisplayPrefsKey"];
Run Code Online (Sandbox Code Playgroud)

这很有效,除了10.9之外,不推荐使用CGDisplayIOServicePort.

鉴于所有这些,以及Apple建议不要缓存NSScreens(无论如何都不能真正用于此目的),可靠地识别屏幕的最佳方法是什么,以便我可以告诉(例如)家中的屏幕之间的区别一个在工作?

我不想依赖屏幕分辨率,因为不应将用户更改分辨率视为不同的显示.也不应该将不同GPU上的相同屏幕视为不同.

第二个目标是找到一种给定CGDirectDisplayID的方法,如果发生GPU切换,如何确定同一屏幕的CGDirectDisplayID是什么?这至少允许我通过CGDirectDisplayID跟踪显示,只要我可以匹配来自两个GPU控制器的两个结果.

macos xcode gpu retina-display

8
推荐指数
1
解决办法
931
查看次数

我需要公证应用程序和 dmg 图像吗?

我有一个应用程序,它经过签名、公证和装订,然后存档到一个 zip 文件中,该文件用作我的 Sparkle 更新程序的对象。

我还将它分发给新用户的 DMG 图像(并且是我网站上的主要下载)。我可以将经过公证/装订的应用程序放在 DMG 上,还是需要对 DMG 文件进行单独的公证和装订过程?

macos notarize

7
推荐指数
3
解决办法
2696
查看次数

调试系统Pref窗格w/10.11和系统完整性保护

我的一个项目是系统偏好窗格.使用10.11,Xcode的调试器无法对其进行调试,因为我收到"由于系统完整性保护而无法连接到系统偏好设置".

如何在10.11下调试我的prefpane,就像我在每个操作系统中回到10.3一样?

debugging macos xcode osx-elcapitan

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

URLByResolvingBookmarkData极慢......解决方案?

我有一个类似项目的应用程序,需要跟踪几千个资源文件.磁盘上的每个文件都代表我的应用程序中的"MyElement"对象.当我使用路径跟踪文件的位置时,性能非常好......一个引用4,000个文件的项目文件在大约1.5秒内打开.

但是,如果我使用书签,虽然我获得了很多(文件可以移动而不会破坏我对它们的引用),但性能非常糟糕.

打开相同的项目,我必须使用URLByResolvingBookmarkData来获取文件的路径,大约需要25秒.

分析应用程序确实显示在URLByResolvingBookmarkData中花费的时间很长...主要是在名为volumePropertyProviderPrepareValues的OS函数中.

我已经开始使用书签,但也在缓存路径.但是,当我打开项目时,需要很长时间才能检查每个书签并验证我的缓存路径是否仍然是最新的.

在这种情况下,有没有办法提高书签的性能?

他们创建时:

NSData*  bookmarkData = [fileURL bookmarkDataWithOptions:NSURLBookmarkCreationMinimalBookmark includingResourceValuesForKeys:nil relativeToURL:nil error:&inError];
Run Code Online (Sandbox Code Playgroud)

alias bookmarks objective-c nsurl

5
推荐指数
0
解决办法
178
查看次数

Apple 发行版与“第三方”证书

我在 Mac App Store 中分发了一个 Mac 应用程序。

以前,我会使用我的“3rd Party Mac Developer Application”证书对编译的应用程序进行签名,然后在命令中productbuild它将创建一个.pkg并使用我的“3rd Party Mac Developer Installer”证书对其进行签名。

  1. 这两个现在都被“Apple Distribution”证书取代了吗?
  2. 我是否还需要“Mac Installer Distribution”证书来签署 .pkg?

macos codesign mac-app-store

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

dispatch_async和retain(非ARC)

在非ARC应用程序中,我有一个NSOperation子类,它由一个委托排队,看起来像:

// note that the delegate and element properties are retained

-(id)initWithDelegate:(id<SomeDelegate>)inDelegate element:(SomeElement *)inElement
{
    if (self = [super init])
    {
        [self setDelegate:inDelegate];
        [self setElement:inElement];
    }
}

-(void)dealloc
{
    [_delegate release];
    [_element release];
    [super dealloc];
}

-(void)main
{
    // do stuff

    dispatch_async(dispatch_get_main_queue(), ^{
         [[self delegate] doSomething:[self element]];
    });
}
Run Code Online (Sandbox Code Playgroud)

由于[[self delegate] doSomething:[self element]]将在我的NSOperation对象可能被解除分配后被调用,在将此操作添加到队列之前,是否需要确保在委托中保留"element"?元素对象保留在应用程序的其他位置,但可能会在那里释放.我需要确保当我的代表从NSOperation收回它时,它仍然是一个有效的对象.

只是想知道在dispatch_async中调用它的行为是否会保留传递给它的参数.我当然可以使用NSInvocation和performSelectorOnMainThread来保留它.

objective-c retain nsoperation dispatch-async

0
推荐指数
1
解决办法
321
查看次数