小编Kev*_*ers的帖子

将“Sign In with Apple”重置为初始创建帐户状态

我正在使用 Apple 实现登录,基本上一切正常,我不需要帮助。但是,在测试我的实现时,我想重置回我第一次使用 Apple 登录之前,它会询问您是否要创建一个帐户,并询问您的姓名和电子邮件地址。像这样:

在此处输入图片说明

在您第一次登录然后再次登录后,它只会询问您是否要使用您的 Apple ID 登录,但会跳过requestedScopes. 那么,我怎样才能回到它要求提供requestedScopes信息(例如姓名和电子邮件)的第一个状态?

重新安装应用程序没有帮助。

ios

8
推荐指数
1
解决办法
1481
查看次数

SwiftUI 画布预览编译错误:体系结构 x86_64 的未定义符号

我有一个使用 Firebase 的 Firestore 和 Auth 的项目。当我创建 SwiftUI 视图时,预览画布不起作用。我收到以下错误。

Compiling failed: linker command failed with exit code 1 (use -v to see invocation)

failedToBuildDylib: ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/SharedFrameworks-iphonesimulator'
Undefined symbols for architecture x86_64:
  "___asan_alloca_poison", referenced from:
      +[GDTFLLUploader gzippedData:] in GoogleDataTransportCCTSupport(GDTFLLUploader.o)
  "___asan_allocas_unpoison", referenced from:
      +[GDTFLLUploader gzippedData:] in GoogleDataTransportCCTSupport(GDTFLLUploader.o)
  "___asan_handle_no_return", referenced from:
      -[FIRAuthCredential init] in FirebaseAuth(FIRAuthCredential.o)
      -[FIRAuthCredential prepareVerifyAssertionRequest:] in FirebaseAuth(FIRAuthCredential.o)
      -[FIREmailAuthProvider init] in FirebaseAuth(FIREmailAuthProvider.o)
      -[FIRCollectionReference initWithQuery:] in FirebaseFirestore(FIRCollectionReference.o)
Run Code Online (Sandbox Code Playgroud)

即使在最基本的“Hello World”视图中也会发生这种情况,我不导入与 Firebase 相关的任何内容。

我可以对此做些什么,或者我可以在整个项目中不使用预览画布吗?

xcode swiftui

8
推荐指数
3
解决办法
1499
查看次数

SwiftUI NavigationLink 从不释放内存

以最基本的示例应用程序为例,其中有两个屏幕NavigationView

import SwiftUI

struct ContentView: View {
  var body: some View {
    NavigationView {
      List {
        NavigationLink(destination: SubView()) {
          Text("Go to screen 2")
        }
      }
      .navigationBarTitle("Screen 1", displayMode: .inline)
    }
  }
}

struct SubView: View {
  var body: some View {
    Text("Hello, World!")
      .navigationBarTitle("Screen 2", displayMode: .inline)
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您转到屏幕 2 并按后退按钮返回屏幕 1,SubView则永远不会释放。如果你来回多次,就会有多个SubView活着的实例。这感觉像是一个巨大的问题/内存泄漏,默认情况下它的行为看起来很奇怪。有解决方法吗?

instruments ios swiftui

8
推荐指数
0
解决办法
446
查看次数

组合:不能将 `.assign` 与结构一起使用 - 为什么?

在尝试使用Combine 分配值时,我看到了一些我不太理解的结构与类行为。

代码:

import Foundation
import Combine

struct Passengers {
  var women = 0
  var men = 0
}

class Controller {
  @Published var passengers = Passengers()
  var cancellables = Set<AnyCancellable>()
  let minusButtonTapPublisher: AnyPublisher<Void, Never>

  init() {
    // Of course the real code has a real publisher for button taps :)
    minusButtonTapPublisher = Empty<Void, Never>().eraseToAnyPublisher()

    // Works fine:
    minusButtonTapPublisher
      .map { self.passengers.women - 1 }
      .sink { [weak self] value in
        self?.passengers.women = value
      }.store(in: &cancellables)

    // Doesn't work:
    minusButtonTapPublisher …
Run Code Online (Sandbox Code Playgroud)

swift combine

8
推荐指数
2
解决办法
1364
查看次数

SwiftUI 表单选择器只显示一次

我正在使用 SwiftUI,目前正在使用 Picker 构建表单。

import SwiftUI

struct ContentView: View {
  private let names = ["Bill", "Peter", "Johan", "Kevin"]
  @State private var favoritePerson = "Bill"

  var body: some View {
    NavigationView {
      Form {
        Picker("Favorite person", selection: $favoritePerson) {
          ForEach(names, id: \.self) { name in
            Text(name)
          }
        }
      }
      .navigationBarTitle("Form", displayMode: .inline)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

第一次点击“最喜欢的人”行时,选择器显示正常,点击其中一个名字会将您带回表单。但是第二次点击表单行不会做任何事情:您没有转到选择器,该行保持突出显示但没有任何反应。如果这是 SwiftUI 错误,是否有已知的解决方法?(我已经需要使用一个小的导航栏标题来解决 Picker UI 错误,否则它的内容在显示时会向上移动??)

swiftui swiftui-form

7
推荐指数
1
解决办法
1092
查看次数

UICollectionViewCell - 当单元格内容更改时,单元格高度会发生变化

我有一个非常简单的UICollectionView,使用 iOS 13 的UICollectionViewCompositionalLayout. 单元格有一个垂直的UIStackView,当您按下“切换详细信息”按钮时,我只需更改isHidden的值detailsView。当单元格通知视图控制器它需要执行时collectionView.collectionViewLayout.invalidateLayout(),一切基本上都正常:详细信息视图会打开和关闭。但它并没有动画化,所以看起来有点刺耳。

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

class ViewController: UIViewController {
  @IBOutlet private var collectionView: UICollectionView!

  override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.collectionViewLayout = createLayout()
  }

  private func createLayout() -> UICollectionViewLayout {
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .estimated(200))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)

    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .estimated(200))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])

    let section = NSCollectionLayoutSection(group: group)
    section.contentInsets = .init(top: 16, leading: 16, bottom: 16, …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewcell

7
推荐指数
1
解决办法
2136
查看次数

WebAuthn:如何摆脱用户名要求?

我正在考虑向我的网络应用程序添加对 WebAuthn / 密钥的支持,但事实上,您需要单独的注册和登录流程,并且仍然需要用户名,这对我来说几乎是不可能的。我真的想知道我是否在这里遗漏了一些东西,或者是否可以以某种方式使其对用户不可见。

例如,我目前提供通过电子邮件登录:用户只需输入他们的电子邮件地址,然后就会收到登录链接。无论他们是否是现有用户;如果是新的电子邮件地址,我可以简单地创建一个新帐户。对于用户来说,这是完全不可见的,他们不必在“注册”和“登录”按钮之间进行选择,他们不必尝试记住他们是否已经拥有帐户。只需输入您的电子邮件地址即可。

我还提供“使用 Apple 登录”,其流程相同:我在 Apple 的令牌中获取唯一的 Apple 用户 ID(主题),检查数据库中是否有具有此 ID 的用户,然后登录该用户。如果没有,我创建一个新用户,存储该 ID,然后登录。用户再也不必在“注册”和“登录”之间进行选择,他们根本不需要输入任何个人信息。

但使用 WebAuthn,您必须使用用户名创建或获取凭据。因此,我必须在网站上显示用户名输入字段,将其发送到服务器,服务器检查该用户是否存在,并基于该用户可以创建或获取凭据。但用户名很糟糕,一旦你有足够的用户,每个人都必须选择一个唯一的用户名,这总是令人沮丧的。因此,我可以要求提供电子邮件地址,但我想存储尽可能少的个人身份信息(是的,我提供通过电子邮件登录的方法,但这就是为什么我想提供 WebAuthn 作为替代选项)。

那么,如何简化这一过程呢?有没有办法绕过用户名要求,浏览器只需询问身份验证器是否有该网站的公钥,如果没有,则创建它。这样我就可以在网站上提供一个“使用密码登录”按钮,而无需询问用户名(或电子邮件地址)。

webauthn

7
推荐指数
1
解决办法
1658
查看次数

SwiftUI:将环境对象传递到工作表会导致更新问题

如果您想将 传递@EnvironmentObject给以工作表形式呈现的视图,您会注意到每次更新@Published其中的任何属性时都会重新创建该工作表。@EnvironmentObject

演示该问题的最小示例:

import SwiftUI

class Store: ObservableObject {
  @Published var name = "Kevin"
  @Published var age = 38
}

struct ContentView: View {
  @EnvironmentObject private var store: Store
  @State private var showProfile = false

  var body: some View {
    VStack {
      Text("Hello, \(store.name), you're \(store.age) years old")
      Button("Edit profile") {
        self.showProfile = true
      }
    }
    .sheet(isPresented: $showProfile) {
      ProfileView()
        .environmentObject(self.store)
    }
  }
}

struct ProfileView: View {
  @EnvironmentObject private var store: Store
  @ObservedObject private …
Run Code Online (Sandbox Code Playgroud)

swiftui

6
推荐指数
1
解决办法
2385
查看次数

Javascript中的负面lookbehind正则表达式

我希望匹配以@开头的所有字符串,除非它们在@前面还有其他字符.简单的例子:在@one @two and bla@three我想匹配@one@two,但不会 @three.这是为了突出聊天室中的用户名.

这些字符串可以在句子中的任何位置(在开头或中间).

我实际上认为(?![a-zA-Z])@[a-zA-Z]+应该工作,但它仍然匹配@three.

javascript regex

5
推荐指数
1
解决办法
4820
查看次数

SwiftUI 中自定义 UIViewRepresentable UITextView 的框架高度问题

我正在通过 UIViewRepresentable 为 SwiftUI 构建自定义 UITextView。它旨在显示NSAttributedString和处理链接按下。一切正常,但是当我在NavigationView带有内联标题的 a 中显示此视图时,框架高度完全混乱。

import SwiftUI

struct AttributedText: UIViewRepresentable {
  class Coordinator: NSObject, UITextViewDelegate {
    var parent: AttributedText

    init(_ view: AttributedText) {
      parent = view
    }

    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
      parent.linkPressed(URL)
      return false
    }
  }

  let content: NSAttributedString
  @Binding var height: CGFloat
  var linkPressed: (URL) -> Void

  public func makeUIView(context: Context) -> UITextView {
    let textView = UITextView()
    textView.backgroundColor = .clear …
Run Code Online (Sandbox Code Playgroud)

ios swiftui

5
推荐指数
1
解决办法
1150
查看次数