Шаг 1:
Создайте такую структуру папок:
App/ (.NET 8.0, MAUI)
│ App.csproj
│ ...
App.Binding/ (iOS/MacCatalyst Binding Library)
│ ApiDefinition.cs
│ App.Binding.csproj
│ StructsAndEnums.cs
App.Frameworks/ (created by hand)
└───FAT
└───Frameworks
Шаг 2:
Скопируйте .framework
(s) в каталог App.Frameworks/FAT/
и App.Frameworks/Frameworks/
.
Шаг 3:
Создайте структуру FAT из этих структур. Обратите внимание, что вы можете добавить более одной платформы в структуру FAT, если они предназначены для разных архитектур.
lipo -create -output App.Frameworks/FAT/[Name].framework/[Name] App.Frameworks/Frameworks/[Name].framework/[Name] ...
Шаг 4:
Используйте Sharpie, чтобы сгенерировать ApiDefinition.cs
и StructsAndEnums.cs
.
Примечания:
#import <MyFramework/MyFrameworkExt.h>
до #import "MyFrameworkExt.h"
(в этом случае оба заголовка будут находиться в одном каталоге)sharpie bind --sdk=iphoneos16.2 --output = "ApiDefinition" --namespace = "App.Binding" --scope = "App.Frameworks/FAT/[Name].framework/Headers/" "App.Frameworks/FAT/[Name].framework/Headers/[Name].h"
Шаг 5:
Скопируйте части вновь созданных файлов, найденных в каталоге ApiDefinitions
, которые понадобятся вам для привязок, в следующие файлы:
App.Binding/ApiDefinition.cs
App.Binding/EnumsAndStructs.cs
Шаг 6:
Удалите любой атрибут [Verify] из файлов в привязке, поскольку они будут вызывать ошибки, и удалите директиву using
в самом верху файла App.Bindings/ApiDefinition.cs
, которая относится к платформе, которую вы связываете.
Шаг 7:
Примечания:
<Frameworks>
и измените их под свои нужды.Обновите свой App.Binding/App.Binding.csproj
, добавив следующее:
<ItemGroup>
<NativeReference Include = "..\Frameworks\FAT\[Name].framework">
<Kind>Framework</Kind>
<Frameworks>Foundation UIKit [Name]</Frameworks>
<LinkerFlags>-L "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/" -L "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos" -Wl,-rpath -Wl,@executable_path/Frameworks</LinkerFlags>
</NativeReference>
</ItemGroup>
Шаг 8:
Обновите файл App/App.csproj
, чтобы загрузить проект привязки.
Примечания:
using
в других файлах.<ItemGroup>
<ProjectReference Include = "..\App.Binding\App.Binding.csproj"/>
</ItemGroup>
Надеюсь, это поможет вам, и я не пропустил ни одного шага. Если у вас есть какие-либо вопросы, просто дайте мне знать!
БР, Нико
Вот как я заставил это работать. Создайте ссылку на .csproj, создайте его вручную, выгрузите проект привязки, сохраняя при этом ссылку на .csproj. Звучит странно, но похоже, что сборка во время разработки не включает сгенерированные источники привязки.
Когда вы говорите «собрать вручную», вы имеете в виду из командной строки или щелчок правой кнопкой мыши по конкретному проекту в обозревателе решений и нажатие «Перестроить»?
ОБНОВЛЯТЬ. Это безумие. Я только что собрал CSPROJ (как вы сказали), затем выгрузил его, и все заработало?????
Обычно я просто использую контекстное меню проекта и выбираю сборку/перестройку. Так у тебя всё заработало? :D
Да, но он кажется таким хрупким. Большое спасибо за вашу помощь. Ты действительно старался изо всех сил. Очень признателен
Мне кажется это не правильно, но в итоге в обычной сборке все точно так же. Это просто вопрос времени проектирования. Надеюсь, это будет исправлено в ближайшее время. И конечно, в любое время!
«Некоторые IDE требуют создать привязку вручную, а затем выгрузить проект привязки, чтобы отобразить завершение кода и принять директиву using в других файлах». Я думаю, мы это видим. Библиотека привязки собирается, и я вижу общедоступные типы через обозреватель объектов, но они не могут быть скомпилированы, и оператор using не работает. В Xamarin Forms мы ссылались только на DLL. Вы предлагаете вместо этого ссылаться на CSPROJ?