Принудительный запуск приложения Какао в 32-битном режиме программно

У меня есть приложение Какао, которое обычно работает в полном 64-битном режиме на любом Mac, поддерживающем эту архитектуру.

Теперь у меня есть внешний API, который доступен только как 32-битный плагин для загрузки в основную программу. Этот API предназначен для стороннего устройства ввода, которое когда-либо купит лишь небольшой процент моих пользователей, но для этого небольшого процента это важно.

Моя проблема в том, что программа может использовать этот API только в том случае, если выполняется в 32- битовый режим. Самым простым, конечно же, является:

Сценарий 1: попросить пользователя запустить программу в 32-битном режиме, изменив ее информацию через диалоговое окно Get Info Finder.

Это легко сделать, но вряд ли элегантно ..

Сценарий 2: всегда работать в 32-битном режиме, что позволяет избежать проблемы

Вряд ли то, что я хочу сделать… наказание 98% пользователей ради экзотической функции.

Сценарий 3: автоматически изменить атрибуты запуска приложения так, чтобы оно запускалось в 32-битном режиме при следующем запуске и каждый раз после этого

или

Сценарий 4: во время запуска установите, какая архитектура используется, затем перезапустите в 32-битный режим, если необходимо

Сценарии 3 и 4 имеют проблему, заключающуюся в том, что очень мало документировано о том, как это сделать, и это может вызвать у меня проблемы с рекомендациями Mac App Store.

На данный момент я установил :

  • что использование инструмента командной строки "arch" позволит мне перезапустить мой исполняемый файл в 32-битном режиме
  • Сценарий Finder не позволит мне изменить Флаг «Запуск в 32-битном режиме»
  • флаг управляется API служб запуска ( http://blog.timac.org/?p=490 )
  • НО я не Я обнаружил какой-либо интерфейс для программного изменения флага в Launch Services API

Пока я вижу только эти параметры, ни один из которых не кажется особенно замечательным:

  1. перезапустить приложение с помощью NSTask и инструмента командной строки "arch"
  2. писать прямо в com.apple.LaunchServices.plist
  3. , изолировать 32-битный плагин в его собственном 32-битном процессе и использовать IPC

Решение 1 может вызвать у меня проблемы с отправкой MAS. Решение 2 почти наверняка сделает это на каком-то этапе ... только решение 3 было бы идеальным с точки зрения пользователя, но добавило бы огромное количество сложности для минимальной отдачи.

Любые советы о том, как это сделать "чисто" и с помощью разумные усилия были бы весьма признательны!

9
задан Charles 15 August 2011 в 07:37
поделиться