Код подписи для пакета приложений OS X

Я переношу приложение .NET в OS X, используя Mono Framework. Приложение работает нормально, и у нас все сделано, кроме упаковки. Я упаковываю автономную сборку Mono внутри пакета, чтобы избежать зависимостей, и использую этот инструмент для работы: https://github.com/OutOfOrder/MonoKickstart

Структура пакета, которую мы используем, выглядит следующим образом:

OurApp.app
  \-Contents
      +-Info.plist
      +-MacOS
      |   +-osx   - native libraries for osx
      |   +-mono  - mono config files
      |   \ ...  - the OS X kickstart binaries, the .exe file, C# .dlls
      \-Resources/
          \-icon.icns

Пакет работает нормально, когда функция Gatekeeper OS X отключена, но при попытке подписать его, чтобы он работал всегда, я сталкиваюсь с проблемами...

$ codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --deep --verbose OurApp.app
OurApp.app: bundle format unrecognized, invalid, or unsuitable
In subcomponent: OurApp.app/Contents/MacOS/mono/4.0

Хорошо, я временно удалю каталог mono, чтобы посмотреть, продолжится ли он тогда:

$ codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --deep --verbose OurApp.app
OurApp.app: signed bundle with Mach-O universal (i386) [org.ourcompany.ourapp]

Успех! Или я так думаю, но когда я пытаюсь запустить приложение, оно все еще говорит, что оно все еще заблокировано привратником. И когда я бегу

spctl -a -v OurApp.app
OurApp.app/: rejected

Так что дает? В нем говорится, что он подписал пакет, и с помощью параметра --deep он должен был подписать все библиотеки и тому подобное, если я правильно понял. Что я должен сделать, чтобы это сработало?

Обновлять:

Пробовал подписывать файлы по одному этим.

 codesign -s "3rd Party Mac Developer Application: Our Certificate" --force --verbose OurAppExecutable.bin

Но он отказался это делать из-за «подкомпонентов» (даже если я не использую --deep).

Наконец-то я смог подписать его, переместив все остальное, кроме фактического двоичного файла, в папку «Ресурсы», а затем подписал двоичный файл, а затем пакет приложений.

Но тем не менее, он говорит:

spctl -a -v OurApp.app
OurApp.app/: rejected
source=No Matching Rule

Любые дополнительные идеи?


person GolDDranks    schedule 12.02.2014    source источник


Ответы (2)


Я не уверен, должен ли --deep работать или нет, но это не то, что мы используем в Xamarin Studio при кодировании проектов Xamarin.Mac. Что мы делаем, так это кодируем каждую нативную библиотеку отдельно, а затем кодируем сам пакет приложений.

Надеюсь, это поможет.

Обновление: это может быть проблемой:

OurApp.app: bundle format unrecognized, invalid, or unsuitable
In subcomponent: OurApp.app/Contents/MacOS/mono/4.0

Проблема может заключаться в том, что MonoKickStart не генерирует правильные исполняемые файлы Mac?

person jstedfast    schedule 13.02.2014
comment
Попробую подписать каждую нативную библиотеку отдельно и посмотрим, сработает ли это. Я предполагаю, что вам не нужно подписывать exe и dll, потому что с точки зрения OS X они, по сути, просто файлы данных для моно, верно? Кстати. MonoKickstart не создает пакеты приложений, а только исполняемые двоичные файлы в стиле Unix. Мы изготовили упаковку вручную. - person GolDDranks; 14.02.2014
comment
Правильно, вам не нужно подписывать файлы .exe или .dll. - person jstedfast; 14.02.2014
comment
Ладно, пробовал подписывать файлы отдельно, но без особого успеха... Следите за обновлением в основном посте. - person GolDDranks; 18.02.2014

Я получил это, чтобы работать потом. Хитрость заключалась в том, чтобы сохранить только один исполняемый файл в каталоге MacOS, а все остальное — в каталоге ресурсов. Таким образом, нам не нужно было подписывать все остальные вещи.

Еще одна ошибка - не источник этой проблемы, а другая - заключалась в том, что мы пытались подписать неверным сертификатом. «Стороннее приложение для разработчиков Mac», по-видимому, используется для отправки в App Store. Название вводит в заблуждение, поэтому его легко перепутать. Дополнительная информация: Разница между "Разработчик Mac" и "3rd Приложение для разработчиков Party Mac”

person GolDDranks    schedule 20.04.2014
comment
Теперь ваши исполняемые файлы подписаны как файлы данных. См. техническое примечание 2206: developer.apple.com/library/prerelease/mac/technotes/tn2206/ - person esmirnov; 27.08.2014