Ошибка при включении автоматического входа в приложение mac os с помощью помощника
Я пытаюсь запустить автозапуск приложения при входе в систему после учебника Tim: http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/
Я выполнил инструкции к письму, но я получаю сообщение об ошибке при повторном подключении к своему компьютеру следующим образом:
Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper[25725]): Could not resolve CFBundleIdentifier specified by service: -10814: com.myApp.macgap.helper
Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
Наброски:
- У меня есть мое основное приложение под названием "myApp" (ID: com.myApp.macgap)
- В этом приложении у меня есть вспомогательное приложение с ID: com.myApp.macgap.helper
- Когда вы запускаете основное приложение и переходите к настройкам, у вас есть возможность включить автоматический вход в систему (чтобы соответствовать правилам соответствия Apple).
- Я выхожу из своего компьютера, заходим в систему и смотрю на консоль, чтобы узнать, что происходит (как я получил код выше)
Еще один момент, который стоит упомянуть, заключается в том, когда я делаю "Показывать содержимое пакета" в приложении и дважды щелкаю по вспомогательному приложению, он запускает основное приложение...
Ответы
Ответ 1
У меня была точно такая же проблема только сейчас, и, ища решение, нашел этот (неотвеченный) вопрос.
По крайней мере, в моем случае эта желаемая функциональность работала нормально, когда я скопировал приложение (экспортированное из Xcode как dev-id, подписанное .app), в новую установку/учетную запись OS X без всяких моих разработок. Конечно, он также должен быть в /Applications, как указано в уроке, упомянутом в вопросе.
Я не уверен, почему эта функция приложения не работала на моей машине разработки. Возможно, проблема может быть связана с какой-то формой конфликта со всеми другими почти идентичными копиями моего приложения, которое у меня есть на диске (у меня есть архив различных версий приложения, а также копии Xcode), все с одинаковыми конечно, идентификатор пакета.
Надеюсь, это помогает так или иначе!
Ответ 2
Все сводится к тому, как работают startd и launchctl, как уже было сказано, регулярный случай использования часто может быть решен путем переустановки приложения и обеспечения того, что приложение находится в папке приложений. Но есть еще один случай, о котором говорит @byb, когда это происходит на вашей машине разработки - это может быть вызвано неправильной конфигурацией запуска.
При запуске SMLoginItemSetEnabled
он регистрирует ваш идентификатор пакета вместе с другой информацией в службе запуска. В какой-то момент позже, когда ваше приложение изменится, будет очищено или что-то еще произойдет с ним, которое будет получено при запуске, launchd может отключить этот конкретный элемент входа. По-видимому, иногда это не происходит гладко, а последовательные вызовы с SMLoginItemSetEnabled
не будут работать, как ожидалось, или приложение agent/helper просто не запустится.
Первое, что нужно попробовать, это просто изменить идентификатор пакета для вашей пусковой установки. Если это решает проблему, попробуйте выяснить, что случилось с оригиналом. Запустите launchctl print-disabled "user/$(id -u)"
, чтобы отобразить отключенные службы и ассоциации элементов входа. Если вывод содержит ваш тревожный идентификатор пакета - вам повезло.
Я не нашел способ удалить отключенные службы по имени с помощью launchctctl и должен был сделать это, вручную отредактировав файлы конфигурации. Поскольку они принадлежат системе, вы не сможете просто щелкнуть и отредактировать, вместо этого запустите Xcode как root и удалите необходимые ссылки.
sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/loginitems.$(id -u).plist"
sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/disabled.$(id -u).plist"
Перезапустите, запустите launchctl print-disabled "user/$(id -u)"
, чтобы подтвердить, что удаленные элементы больше не входят в список. Попробуйте SMLoginItemSetEnabled
снова, надеюсь, теперь он будет работать как ожидалось.
Ответ 3
У меня была такая же проблема, удалив другие экземпляры приложения, кроме одного в /Applications, решила проблему для меня. Чтобы удалить файлы .app, сгенерированные Xcode, вы можете запустить Product- > Clean.
Ответ 4
Я не могу найти дубликат, но нашел, что вы можете удалить эту услугу:
В окне терминала:
launchctl remove com.annoying.service
Ответ 5
Я боролся с этим часами. У меня было много приложений с авто логином, но новый просто не хотел работать.
Странно работал на машине разработки:
1: Build App as normal
2: Move it to Application directory
3. Clean Xcode (CMD+k)!!
4. Enable auto login in the app.
5. Logout Login
Я случайно заметил, что система запустила приложение (он пробует каждые 10 секунд), когда я очищаю Xcode:)
Ответ 6
Как уже было сказано, если на компьютере запускается более одного экземпляра пакета услуг, не может решить, какой из них нужно запустить с помощью идентификатора пакета.
Я бы рекомендовал вам найти все копии вашего сервиса, а затем удалить ненужные.
Для этого вам нужно запустить следующий код Swift (он работает даже в Swift Playground):
import Cocoa
let bundleId = "com.your.bundleId"
let paths = LSCopyApplicationURLsForBundleIdentifier(bundleId as CFString, nil)
print("Available service instances by bundle id: \(paths)")
В моем случае он производит:
Available service instances by bundle id:
Optional(Swift.Unmanaged<__ObjC.CFArray>(_value: <__NSArrayI 0x6000002234a0>(
file:///Applications/MyApp.app/Contents/Library/LoginItems/MyService.app/,
file:///Users/igor/Library/Developer/Xcode/Archives/2017-12-27/MyApp%2027-12-2017,%2016.06.xcarchive/Products/Applications/MyService.app/
)
))
Итак, я легко идентифицировал копию, которую нужно удалить:
file:///Users/igor/Library/Developer/Xcode/Archives/2017-12-27/MyApp%2027-12-2017,%2016.06.xcarchive/Products/Applications/MyService.app/
Надеюсь, что это поможет.
Ответ 7
Предполагая, что вы следуете рецепту Тима Шредера по адресу: http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/:
Что на самом деле закончило работать для меня, было, в Xcode, изменить мой основной номер сборки проекта от 1 до 2. Я также попробовал построить номер 1000, и это тоже хорошо работало.
В Xcode выберите главную цель проекта. Затем выберите вкладку "Общие". Если вы видите, что для вашей сборки установлено значение 1, измените ее на 2, а затем перестройте, перераспределите и посмотрите, разрешит ли это вам проблему.
Вероятно, это была одна из самых жутких ошибок, с которыми я столкнулся.