[英]Grab audioCDPlaylist via ScriptingBridge does not work with macOS Mojave Beta
我有一个从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 ...
}
执行上面的代码,Line.8的NSLog, sources
count
为0.因此for
Line.12的循环不起作用。 然后结果[aPlaylist get]
为null。
有谁知道为什么原因count
的sources
是0?
Plase让我知道如何在Mojave Beta上运行我的ScriptingBridge代码...
Mojave加强了数据安全性和隐私,包括脚本编写。 参见WWDC 2018会话702 。
当您的应用第一次尝试控制iTunes时,Mojave会提示您确认允许该操作。 它会记住你的选择,所以它不会再问。
我想你必须拒绝一次许可。 之后,它总是阻止您的应用程序控制iTunes。
由于开发人员需要在显示此提示时测试其应用程序的行为,当拒绝权限以及授予权限时,Apple会包含一个命令行实用程序tccutil
,以重置记住的用户选择。 重置有关哪些应用程序可能控制其他应用程序的权限的命令是tccutil reset AppleEvents
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.