2016-01-06 4 views
0

Я создаю проект для приложения os x с xpcservices, который запускается loginItems. это означает, что услуга основана в приложении в пути: {APP_NAME}.app/Contents/Library/LoginItems и кто несет ответственность за запуск службы является основным приложением:XPCServices, не обновляющий код

NSXPCConnection *connection = [[NSXPCConnection alloc] initWithLoginItemName:@"{SERVICE_NAME}.app" error:&error]; 

Я использовал класс: NSXPCConnection + LoginItem.h из примера DOCS яблока : https://developer.apple.com/library/mac/samplecode/AppSandboxLoginItemXPCDemo/Listings/iDecide_NSXPCConnection_LoginItem_h.html

Q: Почему при обновлении кода службы (даже просто журналы) это не изменилось?

вы должны знать:

Я удалил все файлы, связанные с этим проекты и службы (я не использовал LaunchAgents или LaunchDaemons папки)

Я удалить службу по: launchctl remove {SERVICE_LABLE}

Я использовал консоль приложение для просмотра разницы между той версией, что я бегом

Я даже купил «cleanM yMac3.app "и перезагрузился, и все же я запускаю приложение Xcode и все еще показываю журналы из предыдущей версии.

Я искал файл в системе, связанной с именем службы, и я нахожу несколько папок, созданных и я удалил их:

  1. ~/Library/Group Контейнеры/{SERVICE_NAME}
  2. ~/Библиотека/Контейнеры/{SERVICE_NAME}
  3. ~/Library/кэши/{SERVICE_NAME}
  4. ~/Library/Application State Сохраненный/{SERVICE_NAME}

Я не работаю песочница

ответ

0

Вы ссылаетесь на услугу (обслуживание XPC) правильно?

т.е. (как на примере яблок)

`NSXPCConnection *connection = [[NSXPCConnection alloc] initWithLoginItemName:@"XYZABC1234.com.example.iDecideHelper.app" error:&error];` 

Кроме того, как этот пример довольно старый, если вы траверс требования XPC вы заметите, что некоторые изменения должны быть сделаны:

  1. И содержащийся проект (приложение iOS или OSX), так и приложение XPC. Приложение должно быть изолировано.
  2. В идеале службу XPC следует называть как: com.theMainApp.identifier.com.whateverServiceName.

Итак, в примере Apple вы указали идентификатор IDecideHelpers: com.example.iDecide.WhateverServiceName. iDecide (основное приложение) будет com.example.iDecide

+0

Я не работаю с песочницей, и это работает, когда я изменил идентификатор, как и сказал, но через некоторое время он все еще не работает. –

+0

Тогда только другие способы связаны с API xpc_main api (API на основе Cxx), а другой - документально описанным в руководстве по программированию Daemons ... NSHipster (просто быстро просмотрел быстрые ответы) как довольно полное объяснение Api's и их uses.http: //nshipster.com/inter-process-communication/ <- это ссылка на примеры mach_port, которые у них есть. Помимо этого, код Apple должен быть достаточным. И с 2.1 я писал XPC-сервисы (и службы XPCConnection) в swift (с некоторой помощью заголовка). Работает отлично :) –