繁体   English   中英

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

[英]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。

有谁知道为什么原因countsources是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM