Как установить художественное произведение к песне iTunes, используя NSApplescript в XCode?
Здесь есть несколько похожих вопросов, но ни один из них не связан с NSApplescript.
Я пытаюсь добавить обложку iTunes к выбранной дорожке, мой код:
set newFile to add aFileName as POSIX file to ipod_lib
set current_track to newFile
set jpegFilename to ":temp:artwork.jpg" as string
set data of artwork 1 of current_track to (read (file jpegFilename) as picture)
tell current_track
set name to "Song Name" as string
set artist to "Custom Artist" as string
set album to "Custom Album" as string
set year to "2011" as string
set track number to "1" as number
set track count to "38" as number
end tell
Где aFileName - это путь к mp3. Я тестирую это с помощью Script Debugger 4.5, и он работает нормально, но когда я копирую код в свой проект Xcode и запускаю его, не задает иллюстрацию и другие метаданные. Но если я прокомментирую строку "set data of artwork..", то она устанавливает другие метаданные (имя, исполнитель и т. Д.)
Мой код Xcode:
NSString *scriptote = @"with timeout of 600 seconds\n"
"tell application \"iTunes\"\n"
...
"set newFile to add aFileName as POSIX file to ipod_lib\n"
"set current_track to newFile\n"
"set jpegFilename to \":temp:artwork.jpg\" as string\n"
// If a comment the following line, everything else works, if I left this line, no meta data is set.
"set data of artwork 1 of current_track to (read (file jpegFilename) as picture)\n"
"tell current_track\n"
"set name to \"Song Name\" as string\n"
"set artist to \"Custom Artist\" as string\n"
"set album to \"Custom Album\" as string\n"
"set year to \"2011\" as string\n"
"set track number to \"1\" as number\n"
"set track count to \"38\" as number\n"
"end tell\n"
...
;
if ((ascript = [[NSAppleScript alloc] initWithSource:scriptote])) {
status = [[ascript executeAndReturnError:&errorInfo] stringValue];
if (!errorInfo) {
// do something
NSLog(@"NO Error");
} else {
// process errors
// NSRange errorRange = [[errorInfo objectForKey:@"NSAppleScriptErrorRange"] rangeValue];
NSLog(@"Error\n Error line: ");
}
[ascript release];
}
Я искал в Google в течение многих часов без удачи. Я не хочу использовать фреймворк ScriptBridge, потому что мне нужно будет переводить много сценариев apple, так что это не вариант для меня сейчас.
Любая помощь будет оценена.
1 ответ
Обнаружил проблему, в случае, если кто-то еще достигнет здесь в будущем, проблема была со стилем формата пути HFS.
Я получал путь к своей работе, используя NSSearchPathForDirectoriesInDomains, а затем заменял все @"/" на @":" для форматирования пути в стиле HFS.
Проблема заключается в том, что стилю формата пути HFS нужен полный путь, включая имя тома и NSSearchPathForDirectoriesInDomain, а также любые другие методы NSFileManager возвращают пути, начиная с /Users/...., и мне нужен такой путь: Macintosh HD/Users/...
Чтобы получить полный путь HFS, я использовал следующий код:
// Get an HFS-style reference to a specified file
// (imagePath is an NSString * containing a POSIX-style path to the artwork image file)
NSURL *fileURL = [NSURL fileURLWithPath:imagePath];
NSString *pathFormatted = (NSString *)CFURLCopyFileSystemPath((CFURLRef)fileURL, kCFURLHFSPathStyle);
Это решает проблему, используйте строку pathFormatted, чтобы установить данные обложки, и она должна работать.
Надеюсь, это поможет кому-нибудь когда-нибудь -)