Xamarin Forms仅iOS平台Realm用户登录异常求助
我下载了QuickJournal示例应用,在Realm Cloud中完成账户创建并添加用户后,编写了一段简单的用户登录代码:
Uri authURL = new Uri("$$InstanceUrlHere"); Credentials credentials = Credentials.UsernamePassword(“Ali”, “123”, createUser: false); try { //trying to login using realm default authticaion: username and password var user = await User.LoginAsync(credentials, authURL); await Application.Current.MainPage.DisplayAlert(“Confirmation", "User Identitiy from Realm Login: " + user.Identity, “Ok”); } catch(Exception ex) { await Application.Current.MainPage.DisplayAlert(“Error”, “Error while Trying to login”, “Ok”); System.Diagnostics.Debug.WriteLine("Error while Trying to login: " + ex); }
这段代码在Android模拟器上运行完全正常,但在iOS平台执行LoginAsync步骤时,出现了以下错误:
System.TypeInitializationException: The type initializer for ‘Realms.Sync.SharedRealmHandleExtensions’ threw an exception. ---> System.EntryPointNotFoundException: realm_install_syncsession_callbacks at (wrapper managed-to-native) Realms.Sync.SharedRealmHandleExtensions+NativeMethods.install_syncsession_callbacks(Realms.Sync.SharedRealmHandleExtensions/NativeMethods/RefreshAccessTokenCallbackDelegate,Realms.Sync.SharedRealmHandleExtensions/NativeMethods/SessionErrorCallback,Realms.Sync.SharedRealmHandleExtensions/NativeMethods/SessionProgressCallback,Realms.Sync.SharedRealmHandleExtensions/NativeMethods/SessionWaitCallback) at Realms.Sync.SharedRealmHandleExtensions…cctor () [0x0004e] in <filename unknown>:0
我之前找到过一个类似的问题,但发布时间比较早,没法解决当前的问题。
这个错误通常是iOS项目中Realm原生库链接异常、NuGet包版本不匹配导致的,我给你几个实用的排查修复步骤:
统一Realm NuGet包版本:确保你的Xamarin.Forms主项目、iOS子项目、Android子项目都安装了完全相同版本的Realm和Realm.Sync包。版本不一致是跨平台原生库报错的高频原因,建议在NuGet包管理器里统一更新到最新稳定版,或者手动核对所有项目的版本号。
清理重建iOS项目:Xamarin的构建缓存偶尔会搞乱原生库链接,试试这套操作:
- 右键iOS项目选择「清理」
- 删除iOS项目目录下的
bin和obj文件夹 - 重启Visual Studio/Xamarin Studio
- 重新构建并运行iOS项目
检查iOS项目的原生库引用:
打开iOS项目的.csproj文件,确认是否包含正确的Realm库引用,正常安装NuGet后应该自动生成类似以下的条目:<Reference Include="Realm"> <HintPath>..\packages\Realm.x.y.z\lib\xamarin.ios10\Realm.dll</HintPath> </Reference> <Reference Include="Realm.Sync"> <HintPath>..\packages\Realm.Sync.x.y.z\lib\xamarin.ios10\Realm.Sync.dll</HintPath> </Reference>同时确认
packages.config里的版本号和HintPath中的版本完全一致。调整iOS链接器设置:
链接器可能误删Realm的原生依赖项,进入iOS项目属性→iOS构建→链接器行为,先尝试设置为**「不链接」**(仅做测试,解决问题后再调回「仅链接SDK程序集」),然后重新运行项目。更新Xamarin.iOS和Xcode:确保你的Xamarin.iOS版本和Xcode版本兼容且为较新的稳定版,旧版本的Xamarin.iOS可能和新版Realm库存在兼容性冲突。
如果以上步骤都没解决问题,可以尝试彻底卸载所有Realm相关NuGet包,然后重新安装最新版本,安装时留意是否有错误提示。
内容的提问来源于stack exchange,提问作者Ali123

