小编Gal*_*her的帖子

Firebase iOS Swift Authentication API_UNAVAILABLE(macCatalyst) 问题

我刚刚使用了与几周前在 iOS/Swift 中使用 Firebase 身份验证的早期应用程序相同的程序。我刚刚在配置应用程序、注册应用程序、下载和执行正确的更新GoogleService-Info.plist等后添加了身份验证代码。

当我运行时,我在线上收到一个错误OIDExternalUserAgentIOSCustomBrowser.h

API_UNAVAILABLE(macCatalyst) // currently 38
Run Code Online (Sandbox Code Playgroud)

陈述它 "expected ;"

几周前,对这段 Google 代码与通过 CocoaPods 工作和加载的代码进行了快速交叉引用,但macCatalyst在该代码中没有提及。

关于发生了什么或建议的解决方法的任何想法?

firebase swift firebase-authentication

10
推荐指数
2
解决办法
4501
查看次数

以编程方式调用 PhotoPicker?

SwiftUI PhotoPicker 非常适合创建要按下的按钮/标签,然后在按下标签时显示照片选择器。但是,我想在按下选择器标签后而不是在条件测试通过后调用照片选择器。

例如,如果用户单击将调用照片选择器的按钮,我想首先检查图像将附加到的记录是否已保存。如果记录已保存,我想启动选择器。如果尚未保存,我会显示一条警报,询问他们是否要保存或取消。如果他们选择保存,我将保存记录,然后我想自动调用照片选择器。

那么我可以以编程方式调用选取器而不是让用户单击它吗?谢谢你的建议!

swiftui photo-picker

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

Xcode 15 Beta 问题 - aueryMetaDataSync 错误和不支持的操作选择器

我正在尝试将 Xcode 15 的第一个 Beta 版与 macOS Ventura 13.4 一起使用。我已经使用 Safari 下载了链接,解压缩,然后打开 iOS_17_beta_Simulator_Runtime.dmg 并将文件“iOS 17.0.simruntime”复制到请求的位置://Library/Developer/CoreSimulator/Profiles/Runtimes/ 有一个安全性首次打开 Xcode 时出现标记,但我关闭了 Xcode,打开了安全首选项并修复了此问题,在再次重新打开 Xcode 之前重新启动了 Mac,只是为了确定。安全问题就消失了。但是,当尝试使用 TextField 运行非常基本的代码(见下图)时,它在 LivePreview 中不起作用,并且在模拟器中运行时,只要我单击文本字段,我就会看到下面的信息(来自调试窗格的元数据) :复制并粘贴)`

queryMetaDataSync 错误:2

类型:错误 | 时间戳: 2023_06_07 10:22:41.3230-04:00 | 库:DataDeliveryServices | 子系统:com.apple.DataDeliveryServices | 类别: 查询 | TID:0x3659 不支持的操作选择器 setShiftStatesNeededInDestination:autoShifted:shiftLocked:类型:错误 | 时间戳: 2023_06_07 10:22:41.4790-04:00 | 库:UIKitCore | 子系统:com.apple.UIKit | 类别: UIKeyboardImpl | TID:0x3478`

该代码在 Xcode 的早期版本上运行良好。有人对如何解决这个问题有建议吗?还有其他人看到这种行为吗?谢谢! 在此输入图像描述

beta debugging xcode ios swiftui

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

理解Swift中元组数组的语法

我试图理解Swift中元组数组的语法:

如果我创建一个元组:

var gameScore: (points: Int, player: String)
Run Code Online (Sandbox Code Playgroud)

我可以分配这样的值:

gameScore = (1700, "Lisa")
Run Code Online (Sandbox Code Playgroud)

并创建一个这个元组的数组:

var gameScores = [gameScore]
Run Code Online (Sandbox Code Playgroud)

我可以这样追加到数组:

gameScores.append((1650, "Bart"))
Run Code Online (Sandbox Code Playgroud)

这样:

gameScore = (1600, "Maggie")
gameScores += [gameScore]
Run Code Online (Sandbox Code Playgroud)

但不是这样的:

gameScores += [(1600, "Maggie")]
Run Code Online (Sandbox Code Playgroud)

游乐场错误是:

游乐场执行失败:错误:元组Playground.playground:38:1:错误:无法将类型'[(points:Int,player:String)]'的值转换为预期的参数类型'inout _'gameScores + = [(1600, "劣质煤")]

但是,这种方式有效:

gameScores += [(points: 1600, player: "Maggie")]
Run Code Online (Sandbox Code Playgroud)

是的 - 我上面的代码可以使用,但是我想弄清楚我在错误的语法中没有理解的东西.元素不需要为.append()方法命名,但需要为它们命名+= [()].

arrays syntax tuples swift

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

更改Xcode 10 Playgrounds变量初始化更改?Xcode 10 Playgrounds是翻译吗?

我注意到Xcode 10中的Playgrounds不再允许使用已声明但未初始化的变量.例如:虽然这段代码可以在Xcode 9游乐场中运行,但在Xcode 10游乐场(至少在Beta 1中),它会崩溃:

var myValue: Int
//...
myValue = 100

print (myValue)

// Xcode 9 prints 100
// Xcode 10 reports an error: variables currently must have an initial value when entered at the top level of the REPL
Run Code Online (Sandbox Code Playgroud)
  1. 这是新行为,还是当前Xcode 10 beta中的一个错误?

  2. 我曾经将早期的Xcode Playgrounds称为翻译,但是仍然会考虑将Xcode 10游乐场作为翻译(并且总是正确的)?Apple将装订线中的"运行"按钮称为"编译"代码.

谢谢!

xcode read-eval-print-loop swift-playground

4
推荐指数
1
解决办法
2284
查看次数

appManager首次运行时执行locationManager(_:更改授权:)

每当应用程序首次运行时,是否会调用位置管理器(_:执行更改授权:),即使已经调用了位置管理器方法requestWhenInUseAuthorization()或startUpdatingLocation()?我正试图通过点击我在下面的@IBAction中调用的按钮来报告位置:

@IBAction func findOutPressed(_ sender: UIButton) {
    getLocation()
}
Run Code Online (Sandbox Code Playgroud)

我的CoreLocation代码位于以下扩展中:

extension ViewController: CLLocationManagerDelegate {
    
    // Called from findOutPressed to get location when button is clicked
    func getLocation() {
        let status = CLLocationManager.authorizationStatus()
        handleLocationAuthorizationStatus(status: status)
    }
    
    // Respond to the result of the location manager authorization status
    func handleLocationAuthorizationStatus(status: CLAuthorizationStatus) {
        switch status {
        case .notDetermined:
            locationManager.requestWhenInUseAuthorization()
        case .authorizedWhenInUse, .authorizedAlways:
            locationManager.startUpdatingLocation()
        case .denied:
            print("I'm sorry - I can't show location. User has not authorized it")
        case .restricted:
            print("Access denied - likely …
Run Code Online (Sandbox Code Playgroud)

core-location uiapplicationdelegate cllocationmanager ios swift

3
推荐指数
1
解决办法
2801
查看次数

停止无限旋转图像的正确方法?以及如何实现removeAllAnimations?

我想将按钮用作切换按钮-单击一次即可无限旋转图片。再次单击,图像停止,再次单击,重新启动。

我发现此答案有助于使动画继续进行: 在Swift中将视图无限地旋转360度?

但是,我不清楚如何停止事情。我已经实现了下面的代码,而且似乎可以正常工作,但是很好奇这是否是停止动画的正确方法,或者是否还有其他首选方法。另外-我的旋转持续进行到完成为止,但是我想知道是否可以在按下按钮时冻结该位置的旋转(我在下面的第二次尝试中尝试了.removeAllAnimations(),但似乎在所有。

    @IBOutlet weak var imageView: UIImageView!
    var stopRotation = true

    func rotateView(targetView: UIView, duration: Double = 1.0) {
        if !stopRotation {
            UIView.animate(withDuration: duration, delay: 0.0, options: .curveLinear, animations: {
                targetView.transform = targetView.transform.rotated(by: CGFloat(Double.pi))
            }) { finished in
                self.rotateView(targetView: targetView, duration: duration)
            }
        }
    }
    
    @IBAction func spinPressed(_ sender: UIButton) {
        stopRotation = !stopRotation
        if !stopRotation {
            rotateView(targetView: imageView)
        }
    }
Run Code Online (Sandbox Code Playgroud)

这确实有效。我还想知道是否有可能停止动画的自旋。设置方式是,动画在停止之前会完整旋转180度。我也尝试过在spinPressed动作中添加removeAnimation,并摆脱了rotateView内部的stopRotation检查,但这似乎不起作用–旋转会继续,并且如果再次按下spinPressed只会变得更快(请参见下文):

    @IBOutlet weak var imageView: UIImageView!
    var stopRotation = true
    
    func rotateView(targetView: UIView, duration: Double = 1.0) …
Run Code Online (Sandbox Code Playgroud)

animation rotation continuous swift

3
推荐指数
1
解决办法
566
查看次数

Swift 和 Cloud Firestore 事务 - getDocuments?

Cloud Firestore 中的事务支持使用 transaction.getDocument 获取文档,但即使有 .getDocuments 方法,似乎也没有用于获取与事务一起使用的多个文档的 .getDocuments。

我有一个使用 Cloud Firestore 数据库的类似 Yelp 的应用程序,其结构如下: - 需要评分的地方称为点。- 每个点在点集合中都有一个文档(由唯一的文档 ID 标识)。- 每个地点都可以有一个评论集合,其中包含该地点的所有评论。- 每条评论都由其自己唯一的文档 ID 标识,并且每条评论文档都包含对该点的评级。

下面是我的 Cloud Firestore 设置和一些数据的图像。 在此处输入图片说明

我尝试创建一个事务来获取一个点中所有评论的数据,希望我可以对平均评论进行更新计算并将其保存回现场文档的属性。我试过使用:

let db = Firestore.firestore()
db.runTransaction({ (transaction, errorPointer) -> Any? in
    let ref = db.collection("spots").document(self.documentID).collection("reviews")
    guard let document = try? transaction.getDocuments(ref) else {
        print("*** ERROR trying to get document for ref = \(ref)")
        return nil
    }
Run Code Online (Sandbox Code Playgroud)

Xcode 声明:“事务”类型的值没有成员“getDocuments”。有一个 getDocument,可以使用它来获取单个文档(请参阅https://firebase.google.com/docs/firestore/manage-data/transactions)。

是否有可能在事务中获取文档集合?我想这样做是因为我评分的每个地方(点)都有一个平均评分,每当其中一个评分发生变化时,我想调用一个函数: - 开始交易(完成) - 读取所有该地点的当前评论(无法开始工作) - 计算新的 averageRating - 使用新的 averageRating …

firebase swift google-cloud-firestore

2
推荐指数
1
解决办法
1083
查看次数

Swift/iOS FirebaseGoogleSignIn OAuth 客户端 ID 未找到

使用 Swift/iOS 和 FirebsaeAuthUI 和 FirebaseGoogleAuthUI。代码和设置与我在之前的应用程序中使用的方法相同。我现在有一台运行 BigSur 的 M1 Mac,当我执行代码时,它会运行,但单击 FirebaseAuthUI 中的“使用 Google 登录”默认值会返回错误:线程 1:“未找到 OAuth 客户端 ID。请确保 Google Sign -在 Firebase 控制台中启用了登录。启用 Google 登录后,您可能需要下载新的 GoogleService-Info.plist 文件。”

返回到 Firebase 控制台,Google(单独)已启用为登录提供商,并且我已经为该登录提供商设置了项目支持电子邮件,就像我之前所做的那样。

我确实注意到最新版本的 FirebaseUI 需要更改导入:旧代码具有:

import FirebaseUI
Run Code Online (Sandbox Code Playgroud)

现在似乎需要

import FirebaseAuthUI
import FirebaseGoogleAuthUI
Run Code Online (Sandbox Code Playgroud)

(截至 2021 年 10 月 1 日,相关文档尚未在线更新,但通过 GitHub 进行的一些挖掘和查询让我得到了上面的更新信息)。同样,通过这些更改,事情确实可以编译(尽管我需要在 iPhone 上运行,因为 M1 Mac 似乎无法在模拟器中运行 FirebaseGoogleAuthUI)。然而,单击“使用 Google 登录”时会崩溃,并显示错误:“未找到 OAuth 客户端 ID。请确保在 Firebase 控制台中启用了 Google 登录。启用后,您可能需要下载新的 GoogleService-Info.plist 文件Google 登录” 除了在 Firebase 控制台中为 Google 设置身份验证登录提供程序之外,我从未被要求执行任何其他 OAuth 工作。有什么变化需要我也解决吗?谢谢你的帮助!

oauth ios firebase swift firebase-authentication

2
推荐指数
1
解决办法
1295
查看次数