gpt4 book ai didi

objective-c - 通过 ScriptingBridge 获取 audioCDPlaylist 不适用于 macOS Mojave Beta

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:58 25 4
gpt4 key购买 nike

我有一个从 iTunes 获取 audioCDPlayList 的应用程序。此应用在 macOS High Sierra 上运行良好,但在 macOS Mojave Beta 3(18A326h)上无法正常运行。

我调查了原因,然后发现了以下奇怪的行为:

GetAudioCDInfoFromiTunes.h

#import <Foundation/Foundation.h>
#import <ScriptingBridge/ScriptingBridge.h>
#import "iTunes.h"

@interface GetAudioCDInfoFromiTunes : NSObject

- (NSMutableDictionary *)getAudioCDInfoFromiTunes;

@end

GetAudioCDInfoFromiTunes.m

- (NSMutableDictionary *)getAudioCDInfoFromiTunes {

// Declear iTunes scripting bridge variable
iTunesApplication *iTunesApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];

SBElementArray *sources = [iTunesApp sources];
NSLog(@"sources=%@", sources);
NSLog(@"count=%ld", [sources count]);

iTunesPlaylist *aAudioCDPlayList = nil;

for (iTunesSource *src in sources) {

NSLog(@"src=%@", src);

SBElementArray *playlists = [src audioCDPlaylists];

NSLog(@"playlists=%@", playlists);

for (iTunesPlaylist *aPlaylist in playlists) {

NSLog(@"aplaylist=%@", aPlaylist);

if ([aPlaylist isKindOfClass:[NSClassFromString(@"ITunesAudioCDPlaylist") class]]) {

aAudioCDPlayList = [aPlaylist get];

break;
}
}
}

... SNIP ...

}

执行上面的代码,第8行的NSLog,sourcescount为0,因此第12行的for循环不工作。那么结果[aPlaylist get]为null。

有谁知道sourcescount为0的原因吗?

请告诉我如何在 Mojave Beta 上运行我的 ScriptingBridge 代码...

最佳答案

Mojave 加强了数据安全和隐私,其中包括脚本。参见 WWDC 2018 session 702 .

当您的应用第一次尝试控制 iTunes 时,Mojave 会提示您确认是否允许。它会记住您的选择,因此不会再次询问。

我猜你一定拒绝过一次。之后,它总是阻止您的应用程序控制 iTunes。

由于开发人员需要在显示此提示、拒绝权限和授予权限时测试其应用程序的行为,Apple 提供了一个命令行实用程序 tccutil 来重置记住的用户选择。重置有关哪些应用可以控制其他应用的权限的命令是 tccutil reset AppleEvents

关于objective-c - 通过 ScriptingBridge 获取 audioCDPlaylist 不适用于 macOS Mojave Beta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com