小编Jan*_*ker的帖子

SFAuthenticationSession/ASWebAuthenticationSession并注销

我打算将应用程序从旧的OAuth流程切换SFSafariViewController到iOS 11的新流程SFAuthenticationSession.登录不是问题,转移到新API花了我几分钟来实现.然而,退出让我感到困惑.

怎么样?

我找不到任何想提供在文档中任何地方注销的选项.使用旧的SFSafariViewController来使cookie无效?不,他们不再共享了SFAuthenticationSession.一旦我重新启动身份验证会话,用户就会自动登录并且没有任何出路.那么如何启用退出?或者我只是忽略了一些完全明显的东西?

更新:我从技术意义上找到了一种"有效的方式",但它对用户来说是疯狂的:在注销页面上打开一个新的SFAuthenticationSession来清除cookie.但这意味着当注销警报视图时再次询问用户他是否想通过该服务登录.如果选择了("登录"),该cookie清算注销页面被打开时,用户必须手动关闭该视图,可以通过完成处理程序捕获,我们知道我们可以再次打开登录查看..显示登录提示退出?我真的不喜欢这个解决方案.

有任何想法吗?我还在忽视一个完全明显的解决方案吗?

更新2:由于到目前为止没有人对这个问题有任何线索,这可能不是一件容易的事.我已经通过他们的报告工具向Apple提出了一个建议,要么澄清如何处理这个问题,要么将其构建到API中(如果不可用).如果我得到答案,将发布.

更新3:在仔细思考问题之后,如果您可以影响OAuth提供程序的登录页面,我们会发现另一种可能的(虽然也没有吸引力)解决方案:使cookie非常短暂.然后可以在不自动登录的情况下打开登录页面.但是这会破坏在应用程序之间共享登录会话的全部目的..并且您需要能够影响登录页面.

更新4:因为iOS 12 SFAuthenticationSession已被弃用并被替换为ASWebAuthenticationSession.但是ASWebAuthenticationSession,在注销方面没有任何改变.它仍然不可能.和以前一样的问题.

oauth ios swift sfauthenticationsession

49
推荐指数
3
解决办法
6295
查看次数

docker-compose 和优雅的芹菜关闭

我一直想知道并寻找解决方案,但我没有找到任何解决方案。

我在用 docker-compose 构建的容器中运行 Celery。我的容器配置如下:

celery:
  build: .
  container_name: cl01
  env_file: ./config/variables.env
  entrypoint:
    - /celery-entrypoint.sh
  volumes:
    - ./django:/django
  depends_on:
    - web
    - db
    - redis
  stop_grace_period: 1m
Run Code Online (Sandbox Code Playgroud)

我的入口点脚本如下所示:

#!/bin/sh
# Wait for django
sleep 10
su -m dockeruser -c "celery -A myapp worker -l INFO"
Run Code Online (Sandbox Code Playgroud)

现在,如果我运行docker-compose stop,我希望有一个温暖的(优雅的)关机,给 Celery 提供的 1 分钟 ( stop_grace_period) 来完成已经开始的任务。然而docker-compose stop似乎直接杀死了芹菜。Celery 还应该记录它被要求正常关闭,但除了突然停止我的任务日志之外,我什么也没看到。

我做错了什么或者我需要改变什么才能让 Celery 优雅地关闭?

编辑:下面关于提供--timeout参数的建议答案docker-compose stop并不能解决我的问题。

django celery docker docker-compose

5
推荐指数
2
解决办法
1978
查看次数

带有 SSH 主机别名的 git clone

我目前需要完成以下任务:我们的 CI 服务器需要使用与主项目存储库不同的 SSH(部署/签出)密钥从 GitHub 访问第二个存储库(GitHub 部署密钥仅是单个存储库。两个存储库 => 两个同一主机的 SSH 密钥。因此使用别名的想法)。然而,我们目前面临一些问题,我很确定我只是遗漏了一个细节。

假设我们的 git repo url 如下:

git@gitub.com:myorg/somerepo.git
Run Code Online (Sandbox Code Playgroud)

我们将其更改为:

git@gitub-second-account:myorg/somerepo.git
Run Code Online (Sandbox Code Playgroud)

然后我调整了 my.ssh/config以使用引入的主机别名github-second-account并将其映射回github.com

# Default GitHub user
Host github.com
 HostName github.com
 AddKeysToAgent yes
 IdentityFile ~/.ssh/id_rsa

# Second account alias
Host gitub-second-account
 HostName github.com
 IdentityFile ~/.ssh/second_id_rsa
Run Code Online (Sandbox Code Playgroud)

我测试了我的设置并运行了以下命令:

ssh -T git@github-second-account
Run Code Online (Sandbox Code Playgroud)

GitHub 表示一切正常,身份验证成功。伟大的。(通过-vvv使用正确的 SSH 密钥进行验证。)但现在我继续执行以下操作:

git clone git@gitub-second-account:myorg/somerepo.git
Run Code Online (Sandbox Code Playgroud)

并得到一个错误:

ssh: Could not resolve hostname gitub-second-account: nodename nor servname provided, or not known
fatal: Could not read …
Run Code Online (Sandbox Code Playgroud)

git ssh continuous-integration github

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

iOS 16 NavigationBar 设置大标题并隐藏内联标题

在检查 iOS 16 上的应用程序错误时,我们发现导航栏上的行为发生了变化,即使在非 14 Pro 型号上也是如此。有多个问题,我们想知道如何解决它们。所有问题都没有更改代码。只需在 iOS 16 上运行该应用程序即可。

  1. 在某些视图上,iOS 将标题样式更改为“大”。它曾经是并且应该是内联的。
  2. 在某些视图上,标题会在推送动画期间内联显示,但一旦动画完成,标题样式就会更改为大。这会导致 UI 跳转。在其他视图中,标题完全消失。
  3. 在某些视图中,标题是正确内联的,但是当显示工作表并关闭时,它会导致标题从导航栏中完全消失。

我们使用 UIHostingControllers 来包装所有 SwiftUI 视图。也许这里有一些问题。

swift swiftui uihostingcontroller ios16

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

.xcstrings 目录中的换行符

我正在尝试向新 Xcode 15 字符串目录(又名 xcstrings)中的字符串添加换行符。我什么也没想,就在\n想要换行的地方添加了平常的内容。

但在我的 SwiftUI 视图中,我可以看到实际转义的内容\n,并且文本不会换行。因此,文本“lorem ipsum\ndolor”将作为“lorem ipsum\ndolor”呈现给用户。

如何在不使用目录中的多个独立字符串的情况下创建带有有意换行符的文本?

xcode localization xcode15 xcstrings

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

在 iOS 上通过蓝牙进行类似 TLS 的加密?

所以,这可能是一个非常特殊的情况,但我希望有人能在这里帮助我。

我需要通过蓝牙与外围设备通话。我们还控制固件的设备。现在的问题是:我们需要确保没有人可以窃听,因为要发送的信息是保密的。这意味着我们需要加密通信。

据我所知,蓝牙 LE 4.2 支持加密,但我们必须能够支持比 6s 更旧的 iPhone。这意味着:没有 BLE 4.2,也没有内置加密。

换句话说:我们需要自己构建加密。外围开发人员和我一致同意使用 TLS 握手来传达密钥交换,以减少我们可能破坏的事情的数量。

最近几天我一直在寻找解决方案以及如何解决这个问题。然而,这似乎是一个非常具体的案例,并没有很多人解决。我能找到的所有库都依赖于套接字。我能找到的关于 iOS 套接字的所有信息都是 IP 网络,而不是蓝牙。

有没有人有这种蓝牙通信的经验?或者其他一些建议?也许我忽略了一些明显的解决方案?

谢谢 :)

sockets encryption bluetooth ios tls1.2

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

防止快速通道扫描隐藏模拟器

自从最近更新 fastlane 以来,它会阻止模拟器打开可见窗口。仍然可以听到敲击键盘按钮的声音,并且会执行 UI 测试,但模拟器窗口本身并未打开。

这在大多数情况下是可以的,但是现在我需要深入挖掘并看看发生了什么,因为 fastlane 以某种方式执行与 Xcode 略有不同的测试,导致我们的 CI 服务器发疯。(Xcode = 所有测试都顺利运行。fastlane = 所有 UI 测试都失败了,无论是在本地还是在 CI 服务器上。)

那么:有没有办法,一些参数或环境变量,告诉扫描打开那个窗口,以便能够看到发生了什么?

(是的,我可以使用快照在特定点生成屏幕截图,但是当想要了解到底发生了什么时,这还不够。)

希望有人可以帮助:)

找到了解决办法:

scan应该使用已经打开的模拟器,但是在运行scan模拟器时我收到了错误消息。更新2.68.0为我做了诀窍。

xcode ios fastlane

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

SwiftLint 安装步骤在 GitHub Actions 上失败

最近 GitHub Actions 发生了一些变化,我们不确定发生了什么或如何解决它。我们正在测试和构建 iOS 应用程序,并使用 SwiftLint 进行自动 PR 检查。

几个月来,我们的工作配置一直运转良好,但大约 1.5 周前,事情开始变得不稳定。有时它贯穿,有时则不贯穿。

我们的文件中曾经有这样的内容run-tests.yml

  - name: Install SwiftLint
    run: brew install swiftlint
Run Code Online (Sandbox Code Playgroud)

9 天前,测试在这一步突然开始失败。以下是来自 GitHub Actions 的日志:

==> 浇注 swiftlint-0.42.0.catalina.bottle.tar.gz

错误:该brew link步骤未成功完成 已构建公式,但未符号链接到 /usr/local 无法符号链接 bin/swiftlint 目标 /usr/local/bin/swiftlint 已存在。您可能想删除它: rm '/usr/local/bin/swiftlint'

要强制链接并覆盖所有冲突的文件:brew link --overwrite swiftlint

列出要删除的所有文件:brew link --overwrite --dry-run swiftlint

可能的冲突文件是:/usr/local/bin/swiftlint

==> 摘要 /usr/local/Cellar/swiftlint/0.42.0:6 个文件,12.2MB 错误:进程已完成,退出代码为 1。

经过一些研究,查看错误消息并看到其他作业成功运行(意味着 SwiftLint 可以正确安装),我们决定设置一个故障保护:尝试链接现有的 SwiftLint,如果失败,只需安装它:

  - name: Link SwiftLint or install it
    run: brew link --overwrite swiftlint || brew install …
Run Code Online (Sandbox Code Playgroud)

continuous-integration homebrew swift swiftlint github-actions

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