OSX Yosemite: у Launch Services есть путь сборки к приложению, а не путь выполнения
Я думаю, что это проблема, специфичная для Йосемити, потому что у меня не было проблем в Mavericks (или Mountain Lion до этого)...
У меня есть приложение, которое я написал, которое регистрирует вспомогательное приложение для запуска при запуске, используя SMLoginItemSetEnabled. У меня нет проблем здесь; это отлично работает
SMLoginItemSetEnabled работает, беря идентификатор пакета (например, com.MyCompany.MyApp), находя путь к этому пакету через Launch Services и запуская его при запуске.
Проблема в том, что когда я "архивирую" свой проект, выходные данные сборки архива автоматически регистрируются как путь к пакету в Launch Services. На Yosemite, даже если я скопирую этот пакет в /Applications и запуском его, Launch Services все равно будет указывать путь сборки. Поскольку мое приложение находится в "песочнице", OSX откажется запускать помощника во время загрузки.
Например:
$ osascript -e 'tell application "Finder" to set targetAppPath to (application file id "com.MyCompany.MyApp") as string'
Macintosh HD:Users:myuser:Library:Developer:Xcode:Archives:2014-10-30:MyApp 10-30-14, 9.57 AM.xcarchive:Products:Applications:MyApp.app
$ osascript -e 'tell application "Finder" to set targetAppPath to (application file id "com.MyCompany.MyAppHelper") as string'
Macintosh HD:Users:myuser:Library:Developer:Xcode:Archives:2014-10-30:MyApp 10-30-14, 9.57 AM.xcarchive:Products:Applications:MyApp.app:Contents:Library:LoginItems:MyAppHelper.app
Несмотря на то, что я скопировал пакет в /Applications и в настоящее время запускаю его из этого места, службы запуска все еще указывают на путь сборки.
В Mavericks и Mountain Lion я столкнулся с подобной проблемой, если последний раз, когда я запускал приложение, находился в режиме отладки с помощью кнопки "play" в xcode, потому что у Launch Services был путь, указывающий на каталог отладочной сборки. Но как только я собрал архив, скопировал его в /Applications и запустил оттуда, все было хорошо. Похоже, что Yosemite обновит базу данных Launch Services только в том случае, если изменилась версия пакета, а этого не происходит просто путем копирования пакета из одного места в другое.
У кого-нибудь есть какие-либо идеи? Есть ли способ заставить Launch Services обновить путь к пакету, либо в коде, либо через командную строку?