У меня есть приложение Какао, которое обычно запускается в полном 64-битном режиме на любом Mac, поддерживающем эту архитектуру.
Теперь у меня есть внешний API, который доступен только как 32-битный плагин длязагрузиться в основную программу.Этот API предназначен для сторонних устройств ввода, которые когда-либо будут покупать только небольшой процент моих пользователей, но это важно для этого небольшого процента.
Моя проблема в том, что программа может использовать этот API, только если выполняетсяв 32-битном режиме.Разумеется, проще всего сделать следующее:
Сценарий 1: попросить пользователя запустить программу в 32-разрядном режиме, изменив ее информацию в диалоговом окне «Получение информации» в Finder.
Это легко сделать, но вряд ли изящно ..
Сценарий 2: всегда работать в 32-битном режиме, что позволяет избежать проблемы
Вряд ли я хочусделать либо .. штрафовать 98% пользователей за экзотическую особенность.
Сценарий 3: автоматически изменять атрибуты запуска приложения, чтобы оно запускалось в 32-разрядном режиме при следующем запускеи каждый раз после этого
или
Сценарий 4: во время запуска определите, какая архитектура используется, затем перезапустите в 32-битном режиме, если необходимо
В сценариях 3 и 4 проблема заключается в том, что очень мало задокументировано о том, как это сделать, и это может привести меня к проблемам с рекомендациями Mac App Store.
Пока что яустановлено:
- , что с помощьюИнструмент командной строки «arch» позволит мне перезапустить мой исполняемый файл в 32-битном режиме
- Сценарии Finder не позволят мне изменить флаг «Запуск в 32-битном режиме»
- флагуправляется API Launch Services (http://blog.timac.org/?p=490)
- НО я не нашел никакого интерфейса для программного изменения флага в Launch Services API
Пока я вижу толькоэти опции, ни одна из которых не кажется особенно полезной:
- перезапускают приложение, используя NSTask и инструмент командной строки "arch"
- , записывают непосредственно в com.apple.LaunchServices.plist
- изолирует 32-битный плагин в свой собственный 32-битный процесс и использует IPC
Решение 1 может привести к проблемам с отправкой MAS.Решение 2 почти наверняка сделало бы это на каком-то этапе ... только решение 3 было бы идеально с точки зрения пользователя, но добавило бы огромную сложность для минимальной отдачи.
Любые советы о том, как сделать это "чисто""и при разумных усилиях будет высоко ценится!