我正在尝试在 iOS 上编译我的 Xamarin Forms Android 应用程序。但是我一直遇到错误:
[db] _LSSchemaConfigureForStore failed with error Error Domain=NSOSStatusErrorDomain Code=-10817 "(null)" UserInfo={_LSFunction=_LSSchemaConfigureForStore, ExpectedSimulatorHash={length = 32, bytes = 0x35effaa3 2bab3fa8 68f8c96b cd17d15e ... 9bf8f6b7 fd486754 }, _LSLine=405, WrongSimulatorHash={length = 32, bytes = 0xe14e0f7b 39a9580e 8e4762c4 846107dc ... 21618def 3c69a5ae }}
[db] Failed to initialize client context with error Error Domain=NSOSStatusErrorDomain Code=-10817 "(null)" UserInfo={_LSFunction=_LSSchemaConfigureForStore, ExpectedSimulatorHash={length = 32, bytes = 0x35effaa3 2bab3fa8 68f8c96b cd17d15e ... 9bf8f6b7 fd486754 }, _LSLine=405, WrongSimulatorHash={length = 32, bytes = 0xe14e0f7b 39a9580e 8e4762c4 846107dc …当用户缩放页面时,我一直坚持在确定iOS上的页面宽度和高度这样简单的任务.
问题是一些网站有奇怪的布局,看起来像这样:
这是一个未缩放的页面,它的分辨率为1164x1811像素,这是正确的.我从window.innerWidth和获得了这些值window.innerHeight.突出显示的区域是一个主体元素,它的分辨率为1024x1594像素,这很重要.
接下来我使用双指缩放来缩放页面,这就是它的外观:
现在,当我试图让页面大小,我从1024x1594像素window.innerWidth,并window.innerHeight分别.这些值与体型完全相同.
所以问题是如何使用缩放来获得正确的页面大小.
我也在Chrome中测试了这个特殊情况,并得到了正确的结果:无论是缩放,它总是1164x1811像素.
我正在设计一个与域名相关联的新应用程序的登录,即与SPA的对应物.显然我想用
我已阅读有关自动填充的文档以及观看WWDC视频.另外,我查看了有关共享Web凭据的文章,我认为该文章比新的,重新设计的自动填充更早.文章建议:
不要将共享Web凭据用作安全用户凭据的主存储.而是将用户的凭据保存在钥匙串中,并且只有在您无法在钥匙串中找到登录凭据时才使用共享的Web凭据.
这让我有点奇怪,因为它 - 意味着我必须涵盖更多可能的不一致,即以某种方式与共享的Web凭据同步密钥链(如果我在密钥链中有凭据以及共享的Web凭据,但它们是不同的?) - 如果我的用户用户卸载我的应用程序,可能会在钥匙串中留下"垃圾"(我自然希望他们不会这样做,但让我们现实,有些人会这样做)
特别是最后一点在过去一直困扰着我(在共享Web凭据和自动填充之前,或者当我的应用程序没有关联的域时).与macOS不同,iOS帐户和密码功能(在"设置"应用程序中)不会列出所有密码,只会列出Safari使用的密码(即共享的Web凭据),对吗?MacOS上的Keychain Access提供了一种查看和管理所有凭证的方法,甚至是那些未通过iCloud同步的凭证.
我理解为什么在iOS上没有提供相同的功能,但它也意味着我的应用程序保存(本地)到"其"钥匙串"部分"的那些密码只有在我的应用程序中为此提供UI时才能进行管理.如果用户在使用之前卸载应用程序,该项目将保留在钥匙串中,至少在几年前我尝试过时就是这样.
我现在的主要问题是,忽视文章的建议并仅依靠共享的Web凭据进行密码存储会不会更容易?这是他们可以在"设置"中编辑的部分(如果需要的话),它也将反映在网站上完成的任何密码更改.我会像这样设计我的应用程序:
这种设置可以避免在钥匙串和共享网络存储中使用不同项目的任何问题,并且它会立即将在网页中完成的更新传播到应用程序(这也是我对我的应用程序的意图).有没有什么可以阻止这个应用程序流动?
(注意:我在苹果开发人员论坛上问了同样的问题,所以如果你看到它也不要混淆.我会更新任何可能的答案从那里到现在,反之亦然.)
编辑以解决@Aaron的回答:
非常感谢您的信息.您的回答帮助我意识到我误解了共享Web凭据的一些内容:我认为对于具有关联域的应用程序,您可以在没有用户交互的情况下访问凭据(可能是初始授权之后).就像您可以在应用程序请求凭据时在macOS上设置复选框.我现在意识到这是错误的,在iOS上你总是需要与用户核实,谢谢.
为了完整起见,我还想指出你说的其他一些事情:
再次,非常感谢你的回答,现在我可以关闭一个开放的待办事项.:)还要感谢@HamZa给予奖励!
好吧,这无疑是一个最佳实践问题,但我想要做对,所以希望有人可以启发我:
场景是非常标准的,但有一个转折点:我在我编写的框架中有一个类,它直接继承自NSObject.它有一个指定的初始化程序,有很多参数,其中大部分都是nonnull.由于东西是框架的一部分,我明确地使用NS_DESIGNATED_INITIALIZER宏(我不总是在较小的个人应用程序中做).问题是这导致XCode警告我也覆盖init,即超类的指定初始化程序.但另外它要求我从它调用我指定的initalizer,这是我不能做的,因为我的参数缺乏有意义的默认值.我真的不想在"小"中抛出异常init,我更愿意回归nil.
为了摆脱警告,我init在我班级的扩展中添加了第二个指定的initalizer,如下所示:
@interface MyClassName ()
// some other stuff not relevant`
-(nullable instancetype)init NS_DESIGNATED_INITIALIZER;
@end
现在我可以安全地使用我想要return nil;的覆盖init方法.这意味着我的文档(我正在使用appledoc)和扩展XCode的代码完成不会告诉某人使用我的框架init实际上也是一个指定的初始化程序(因此他们不会意外地使用它),但它仍然存在(在例如,单元测试可以派上用场).
我的问题是:除了实际在生产中使用它的人之外,还有任何危险吗,之后快乐地发送消息给nil而没有意识到?这是少数几个在init中抛出异常的情况之一吗?
我必须在钥匙串中保存一个字符串(密码),但原始字符串:
因此,该字符串必须位于应用程序中的某个位置(硬编码?)。
我很确定您无法在安装后为应用程序准备钥匙串的数据,就像您可以将 plist 添加到应用程序包一样,以便在应用程序运行时可以立即加载它(即使它是第一次启动)。
我读过数据保护:它允许处理敏感数据的应用程序利用某些设备上可用的加密。这是要走的路吗?即:我将数据存储到文本文件中,然后保护文件,然后从文件中检索数据,然后将其保存到钥匙串中?
任何提示表示赞赏。
ios ×5
keychain ×2
apple-m1 ×1
html ×1
javascript ×1
macos ×1
objective-c ×1
passwords ×1
safari ×1
shared ×1
viewport ×1
xamarin ×1
xamarin.ios ×1
xcode ×1