Невозможно получить закладку app-scoped для файла - песочница OS X

Я чистил сеть, а Apple помогал в каком-то совете по этому поводу и быстро подходил. Интересно, сталкивается ли кто-нибудь с подобной ситуацией или может иметь некоторое представление о том, что происходит (или нет).

Я пытаюсь получить закладку app-scoped для файла, который будет вызван в последующем сеансе приложения. Я могу подтвердить, что сам путь правильно добавлен в песочницу после его выбора пользователем, потому что я могу открыть (и повторно открыть) его во время сеанса, когда он будет выбран.

Однако попытка получить закладку с защитой для доступа к ней позже не работает.

Вот что я делаю:

NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
NSError *error = nil;
NSData *bookmarkData = [url
           bookmarkDataWithOptions:(1UL << 11) //NSURLBookmarkCreationWithSecurityScope
           includingResourceValuesForKeys:nil
           relativeToURL:nil
           error:&error];
[url release];

Я пробовал это как с url, сгенерированным из строки path, так и просто тестируя его, например, с помощью NSSavePanel url. (Строка path по старым причинам является той, которую я хотел бы использовать.)

Мне нужно использовать значение для bookmarkDataWithOptions вместо константы, потому что из-за какого-то другого унаследованного кода я вынужден скомпилировать с 10.6 SDK, где NSURLBookmarkCreationWithSecurityScope недоступно.

Я могу подтвердить, что путь указывает на указанный файл как "/Users/me/Documents/document.ext" и что NSURL кажется правильно инициализирован (или хотя бы отражает тот же путь).

Приложение включает в себя право com.apple.security.files.bookmarks.app-scope.

В любом случае, это не сработает. Этот код приводит к как a bookmarkData 0x0, так и error 0x0, а консоль показывает: ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.

Если я изменил relativeToURL на url вместо nil и изменил право на com.apple.security.files.bookmarks.document-scope, то он, кажется, работает правильно, то есть bookmarkData по крайней мере получит ненулевое значение и ошибка не регистрируется. Но я уверен, что не то, что я хочу (т.е. Закладки с областью документа).

Есть ли что-то очевидное, что я делаю неправильно?

Ответ 1

К моему вечному стыду, это была моя ошибка.

Как-то при перемещении проекта на другую машину для тестирования и отладки, код-подписание для сборки разработки было отключено.

По-видимому, это приводит к тому, что вещи (почти) бесшумно терпят неудачу, без кода ошибки и только загадочное сообщение в консоли, и никаких других указаний на то, что что-то еще не работает должным образом.

Оставив это здесь, если кто-то ошибочно сделает то же самое.

Ответ 2

Привет 2019 и дальше гуглеры. Я столкнулся с той же проблемой и исправил ее, переделав сертификаты разработки. Просто снимите флажок "Автоматически управлять подписью" и перепроверьте (возможно, переключитесь на другую команду и переключитесь обратно).