Как отладить исключение DllNotFoundException, созданное симулятором или устройством iPhone, для собственной зависимости?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как отладить исключение DllNotFoundException, созданное симулятором или устройством iPhone, для собственной зависимости?

Сообщение Anonymous »

Я разрабатываю библиотеку .NET, которая должна работать на Android, iOS и настольных ОС. Он отлично работает везде, кроме iOS. Фактически, на iOS он работал для локального развертывания, но Apple Store отклонил приложение на его основе, поскольку собственная зависимость должна находиться в «фреймворке» Apple.
Поэтому я сделал провел кучу исследований, узнал о фреймворках и xcframework, а также провел рефакторинг моего nupkg, чтобы включить встроенную зависимость в структуру xcframework. При этом iOS csproj создает и развертывает как сборку .NET, так и ее собственную зависимость с приложением, но теперь приложение выдает DllNotFoundException при попытке загрузить эту собственную зависимость.
В окне вывода отладки Visual Studio о проблеме указано только следующее:

Код: Выделить всё

**System.DllNotFoundException:** 'nerdbank_qrcodes'
Как мне отладить это?
Или, альтернативно, что я делаю не так? Вот макет моего nupkg:

Код: Выделить всё

D:\PACKAGES\NUGET\NERDBANK.QRCODES\0.2.55-BETA-G209A879921
|   .nupkg.metadata
|   nerdbank.qrcodes.0.2.55-beta-g209a879921.nupkg
|   nerdbank.qrcodes.0.2.55-beta-g209a879921.nupkg.sha512
|   nerdbank.qrcodes.nuspec
|   README.md
|   THIRD_PARTY_DEPENDENCIES.txt
|   THIRD_PARTY_LICENSES.yml
|
+---lib
|   +---net8.0
|   |       Nerdbank.QRCodes.dll
|   |       Nerdbank.QRCodes.xml
|   |
|   +---net8.0-ios17.5
|   |   |   Nerdbank.QRCodes.dll
|   |   |   Nerdbank.QRCodes.xml
|   |   |
|   |   \---Nerdbank.QRCodes.resources
|   |       |   manifest
|   |       |
|   |       \---nerdbank_qrcodes.xcframework
|   |           |   Info.plist
|   |           |
|   |           +---ios-arm64
|   |           |   \---nerdbank_qrcodes.framework
|   |           |           Info.plist
|   |           |           nerdbank_qrcodes
|   |           |
|   |           \---ios-arm64_x86_64-simulator
|   |               \---nerdbank_qrcodes.framework
|   |                       Info.plist
|   |                       nerdbank_qrcodes
|   |
|   \---net8.0-windows7.0
|           Nerdbank.QRCodes.dll
|           Nerdbank.QRCodes.xml
|
\---runtimes
+---android-arm64
|   \---native
|           libnerdbank_qrcodes.so
|
+---android-x64
|   \---native
|           libnerdbank_qrcodes.so
|
+---linux-arm64
|   \---native
|           libnerdbank_qrcodes.so
|
+---linux-x64
|   \---native
|           libnerdbank_qrcodes.so
|
+---osx-arm64
|   \---native
|           libnerdbank_qrcodes.dylib
|
+---osx-x64
|   \---native
|           libnerdbank_qrcodes.dylib
|
+---win-arm64
|   \---native
|           nerdbank_qrcodes.dll
|
\---win-x64
\---native
nerdbank_qrcodes.dll
Внутренние библиотеки DLL фреймворка специально подготовлены с использованием Lipo и install_name_tool и chmod следующим образом:

Код: Выделить всё

# copy Info.plist and the binary into the appropriate .framework directory structure
# so that when NativeBindings.targets references it with ResolvedFileToPublish, it will be treated appropriately.
$RustTargetBaseDir = "$repoRoot/src/nerdbank-qrcodes/target"
$RustDylibFileName = "libnerdbank_qrcodes.dylib"
$DeviceRustOutput = "$RustTargetBaseDir/aarch64-apple-ios/$Configuration/$RustDylibFileName"
$SimulatorX64RustOutput = "$RustTargetBaseDir/x86_64-apple-ios/$Configuration/$RustDylibFileName"
$SimulatorArm64RustOutput = "$RustTargetBaseDir/aarch64-apple-ios-sim/$Configuration/$RustDylibFileName"

$DeviceFrameworkDir = "$repoRoot/bin/$Configuration/device/nerdbank_qrcodes.framework"
$SimulatorFrameworkDir = "$repoRoot/bin/$Configuration/simulator/nerdbank_qrcodes.framework"
New-Item -Path $DeviceFrameworkDir,$SimulatorFrameworkDir -ItemType Directory -Force | Out-Null

Write-Host "Preparing Apple iOS and iOS-simulator frameworks"

Copy-Item $IntermediatePlistPath "$DeviceFrameworkDir/Info.plist"
Copy-Item $IntermediatePlistPath "$SimulatorFrameworkDir/Info.plist"
Write-Host "Created Info.plist with version $version"

if ($IsMacOS) {
# Rename the binary that contains the arm64 architecture for device.
lipo -create -output $DeviceFrameworkDir/nerdbank_qrcodes $DeviceRustOutput
install_name_tool -id "@rpath/nerdbank_qrcodes.framework/nerdbank_qrcodes"  "$DeviceFrameworkDir/nerdbank_qrcodes"
chmod +x "$DeviceFrameworkDir/nerdbank_qrcodes"

# Create a universal binary that contains both arm64 and x64 architectures for simulator.
lipo -create -output $SimulatorFrameworkDir/nerdbank_qrcodes $SimulatorX64RustOutput $SimulatorArm64RustOutput
install_name_tool -id "@rpath/nerdbank_qrcodes.framework/nerdbank_qrcodes" "$SimulatorFrameworkDir/nerdbank_qrcodes"
chmod +x "$SimulatorFrameworkDir/nerdbank_qrcodes"
}
Полный контекст

Подробнее здесь: https://stackoverflow.com/questions/790 ... -device-fo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»