Как связать множество dylibs (при сохранении структуры каталогов) в исполняемом файле macOS .app с файлом nuget .targets?

В настоящее время я пытаюсь упаковать ~ 350 собственных dylib C в один nuget для macOS. Файл .targets должен объединять dylib в окончательном mac .app, сохраняя при этом определенную архитектуру папок этих dylib.

Если это уместно, большинство dylib — это Mach-0 64-bit bundle x86_64, поэтому я считаю, что NativeReference не работает. Это верное предположение?

Пара, которую мне нужно загрузить со средой выполнения Objc из C # для P/Invoke, это Mach-0 64-bit dynamically linked shared library x86_64 (они будут обрабатывать пакеты и ожидать, что они будут в определенном относительном месте).

Моя попытка здесь https://github.com/mfkl/libvlc-nuget/pull/5/files. Не стесняйтесь игнорировать подключаемый модуль MSBuild выбор вишни.

Я не могу заставить все dylib быть внутри пакета Mac .app и создавать там папки.

Изменить: добавление дополнительной информации.

Пробовал NativeReference, Content, EmbeddedResource и BundleResource. Файлы либо не включаются, либо попадают в bin/debug рядом с пакетом .app, что поправляет меня, если я ошибаюсь, это не то, что вам нужно при отправке библиотеки. Не знаете, что использовать или если пути неверны, но отзывы от MSBuild в VS, похоже, отсутствуют по этому поводу.

Любая помощь очень ценится.


person mfkl    schedule 11.06.2018    source источник
comment
Можете ли вы уточнить, что я не могу получить dylibs внутри пакета mac .app? Каково текущее поведение сейчас?   -  person l'L'l    schedule 11.06.2018
comment
Только что сделал так. Дайте мне знать, достаточно ли информации   -  person mfkl    schedule 11.06.2018


Ответы (1)


Без отладки вашей сборки трудно сказать (поскольку я не вижу прикрепленного журнала сборки), но я уверен, что вы добавляете элементы NativeReference в свой проект слишком поздно, чтобы mmp мог их увидеть.

Теоретически возможно динамически создать проект NativeReference для обработки вашим проектом Xamarin.Mac, но это должно произойти до _CompileToNative, когда мы обрабатываем эти элементы. Возможно, это даже должно произойти до CoreCompile, я не уверен.

Но да, как правило, вы хотите использовать NativeReference, чтобы ваши элементы были добавлены в окончательный пакет. В зависимости от ваших библиотек, возможно, потребуется добавить игры install_name_tool, чтобы исправить относительные пути зависимостей. MMP (инструмент упаковки) знает, как справиться с некоторыми из них, если вы используете NativeReference.

Если вам нужно выполнить настройку после сборки, вы можете использовать маршрут, показанный в образце MSBuild (CreateAppBundleDependsOn). https://github.com/xamarin/mac-samples/blob/master/UseMSBuildToCopyFilesToBundleExample/UseMSBuildToCopyFilesToBundleExample/CustomBuildActions.targets

person Chris Hamons    schedule 25.06.2018
comment
Спасибо за ответ Крис. Мне удалось связать dylibs, но я все еще не могу их загрузить. Нажатие could not find the runtime library libxammac.dylib при вызове p/invoke. - person mfkl; 06.07.2018