问题标签 [xamarin-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
33 浏览

ios - 当我们在 Xamarin 绑定项目中使用第三方库时,无法运行 Xamarin.iOS 应用

我们正在开发一个 Xamarin.iOS 项目,该项目使用 MSAL 库进行身份验证。除了以下一项外,MSAL 中一切正常。

在随后的登录过程中,用户凭据不会被清除。它甚至无需输入密码即可自动登录应用程序。有关该问题的更多信息,请参阅以下链接。

MSAL 注销似乎没有清除缓存

在与 Microsoft 沟通后,我们了解到此功能仅适用于 Native MSAL 库。为了纠正这个问题,我们计划创建一个绑定项目(它将包含与 MSAL 相关的所有样板代码)并在我们的 Xamarin.iOS 应用程序中使用它。这样我们的应用程序就可以通过绑定项目与 MSAL 通信,并在注销时完全清除缓存。但是当我们在静态项目(iOS 框架应用程序)中包含 MSAL 库时,我们的应用程序没有与绑定项目一起运行。它在尝试运行我们的应用程序时没有显示任何错误或异常,它只是在编译完成后停止而没有任何日志。

我们为创建绑定项目所遵循的步骤。

  1. 在 Xcode 中创建一个框架应用程序。 在此处输入图像描述

  2. 使用以下示例代码添加一个 swift 文件。 在此处输入图像描述

  3. 排除 arm64 架构,因为在创建 fat 文件时发现相同的架构异常。 在此处输入图像描述

  4. 通过 swift 依赖项将 MSAL 库添加到我们的框架项目中。 在此处输入图像描述 在此处输入图像描述

  5. 完成上述步骤后,按照以下命令为给定的 Xcode 项目(框架)构建胖库。

为模拟器和设备构建 iOS 框架

对于iphonesimulator14.2

适用于 iphoneos14.2

复制一个构建作为胖框架。

将来自另一个构建的模块与胖框架模块结合起来。

将 iphoneos + iphonesimulator 配置组合为胖库。

验证创建的 fat 文件。

生成绑定 API 定义和结构。

或者,我们可以使用下面的脚本来生成 fat 文件。

https://github.com/xamcat/xamarin-binding-swift-framework/blob/master/Swift/Scripts/build.fat.sh#L3-L14

创建 Xamarin.iOS 和绑定项目,如下所示。

  1. 将 MSAL_FRAMEWORK 和 MSAL 框架添加到本机引用
  2. 将 ApiDefinitions.cs 添加到 Binding 项目并从构建操作中选择 ObjcBindingApiDefinition。
  3. 将绑定项目引用添加到 Xamarin.iOS 项目。
  4. 在需要的地方导入Binding项目
  5. 调用 API

在此处输入图像描述 在此处输入图像描述

通过检查 MSAL_FRAMEWORK.framework 和 MSAL.framework 来启用Smart Link选项。请参阅下面的屏幕截图。 在此处输入图像描述

编译并运行应用程序。编译解决方案时没有问题,但是当我们运行应用程序时,它只是显示为等待调试器连接到...并在没有任何提示的情况下停止。

在此处输入图像描述

注意:我们可以通过从 Native References 中删除 MSAL.framework 并从 Swift 中删除框架应用程序中的依赖项的 MSAL 库来运行应用程序。

提前致谢。