如何将现有 iOS 应用升级到 Xamarin Forms 应用

Posted

技术标签:

【中文标题】如何将现有 iOS 应用升级到 Xamarin Forms 应用【英文标题】:How To Upgrade Existing iOS App to a Xamarin Forms App 【发布时间】:2019-12-31 23:16:02 【问题描述】:

目前,我有一个用 Swift 编写的 ios 应用程序,它将被替换为 通过 Xamarin Forms 的新版本。我无法访问旧的 (Swift) Keychain,其中ItemNotFound 是唯一返回的请求代码。 两个应用都使用相同的 Bundle ID。

这是我正在使用的代码:

byte[] _LegacyGetKeychainItem<T>(string key)

    using (var record = ExistingRecordForKey(key))
    using (var match = SecKeyChain.QueryAsData(record, false, out var resultCode))
    
        if (resultCode == SecStatusCode.Success)
        
            return match.ToArray();
        
    

    throw new InvalidOperationException(string.Format("GetKeychainItem: data was null for key: 0", key));


SecRecord ExistingRecordForKey(string key)

    return new SecRecord(SecKind.GenericPassword)
    
        Service = SEC_SERVICE, // Same as Bundle ID
        Account = key
    ;

【问题讨论】:

为什么这个标签是android?您是否删除了旧应用程序?或者您是否在旧应用程序之上安装了具有相同捆绑 ID 的新应用程序?您使用什么代码来访问钥匙串?您遇到了哪些错误或异常? 这里有一篇文章,也许有帮助。riptutorial.com/xamarin-ios/example/8337/using-keychain @Jason 我更新了问题,删除了 android 标签并添加了一些我的代码 @igorgue:你检查 Entitlements.plist 是否启用钥匙串? @CharithJ 是的,他们是一样的...... 【参考方案1】:

检查 Entitlements.plist 是否设置了 Enable Keychain

<dict>
    <key>keychain-access-groups</key>
    <array>
        <string>BUNDLE_ID</string>
    </array>
</dict>

如果它已经存在。检查您项目的 iOS Bundle Signing(项目 => iOS Bundle Signing)。

您可能必须将“自定义权利”设置为“Entitlement.plist”,因为“自定义权利”的默认设置对于模拟器来说是空的。看看this 和this 的答案。

【讨论】:

以上是关于如何将现有 iOS 应用升级到 Xamarin Forms 应用的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.IOS 导入现有情节提要

将 iOS 应用组迁移到另一个开发者帐户

在现有 Xamarin Forms 项目中添加新的 Android 项目[IOS]

无法在 Xamarin iOS 应用程序中将文本共享到电子邮件或短信中

Xamarin.iOS:如何将 NavigationBar 添加到视图

Xamarin - 如何查看 iOS 模拟器应用程序日志