将 SwiftUI 项目转换为 Catalyst 后,我在控制台上收到以下奇怪的错误消息:
[API] 无法将处理程序从 3 添加到 3 - 删除
当视图滚动时,即使在发布模式下,也会发生这种情况,而且发生的次数很多,可能是每一帧。似乎整个日志记录都会减慢应用程序的速度。
抱歉,我说得太不具体了,我只是不知道从哪里开始。(当然除了提交错误)
有人有类似的经历吗?何时何地?也许有解决方法吗?
苹果论坛上有一个帖子,根本没有解决问题:
https://developer.apple.com/forums/thread/719267
我在这里和谷歌都没有找到任何东西。
Xcode 是 14.2 macOS 13.2.1
默认情况下,Mac Catalyst 创建一个标题为“帮助”的菜单,该菜单应该包含应用程序的帮助。但是,我没有找到有关如何实施帮助的文档。对于标准 Mac 应用程序,您可以使用帮助手册。但是,没有提及如何使用 Mac Catalyst 的帮助手册。我试图将 HelpBookDirectoryName 添加到 info.plist 但这不起作用。有没有办法让帮助书与 Mac Catalyst 一起使用?
我有一个在 iOS 上运行良好的应用程序,但是当使用催化剂运行时,如果我在 macOS 上滑动到另一个虚拟桌面,然后返回大约 10 次,它会间歇性地让我崩溃。它主要发生在 UICollectionViewController 上
这是回溯:
(lldb) bt
* thread #5, queue = 'com.apple.xpc.activity.com.apple.cloudkit.scheduler.com.apple.coredata.cloudkit.activity.export', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
* frame #0: 0x00007fff68c373ae libxpc.dylib`___xpc_activity_dispatch_block_invoke.107.cold.3 + 19
frame #1: 0x00007fff68c1ecdb libxpc.dylib`___xpc_activity_dispatch_block_invoke.107 + 746
frame #2: 0x00000001010377b3 libdispatch.dylib`_dispatch_call_block_and_release + 12
frame #3: 0x000000010103878f libdispatch.dylib`_dispatch_client_callout + 8
frame #4: 0x000000010103fd31 libdispatch.dylib`_dispatch_lane_serial_drain + 777
frame #5: 0x0000000101040ae8 libdispatch.dylib`_dispatch_lane_invoke + 438
frame #6: 0x000000010104df2e libdispatch.dylib`_dispatch_workloop_worker_thread + 681
frame #7: 0x00000001010c4053 libsystem_pthread.dylib`_pthread_wqthread + 290
frame #8: 0x00000001010c3eb3 libsystem_pthread.dylib`start_wqthread + 15
(lldb) …Run Code Online (Sandbox Code Playgroud) NSOpenPanel 在“UIKit for Mac”平台上不可用:https : //developer.apple.com/documentation/appkit/nsopenpanel
如果 Apple 不提供内置方式,我猜有人会基于 SwiftUI 和FileManager创建一个库,该库显示选择文件的对话框。
我正在尝试使用新的 Mac Catalyst 在我的 Mac 上构建我的 iOS/iPadOS 项目。当我在 iPhone 模拟器上构建它时一切正常,但是当我在 Mac 上构建它时,出现此错误。
in /Users/nevin/Documents/[projectName]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics(CLSInternalReport.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, file '/Users/nevin/Documents/[projectName]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics' for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
多个 Pod 会发生这种情况,因此,例如,如果我删除 Crashlytics,另一个 Pod 会出现类似的错误。有人知道这是 Crashlytics 需要解决的问题还是我可以在我的项目中解决的问题?
所以我一直在干预将一个小型 SwiftUI iPad 应用程序“移动”到 Mac,并且我在使用UIDocumentPickerViewController. 我已经包裹UIDocumentPickerViewController在一个UIViewControllerRepresentable像这样:
struct DocumentPickerView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let documentPicker = UIDocumentPickerViewController(documentTypes: [(kUTTypeImage as String)], in: .import)
return documentPicker
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样显示它:
struct ContentView: View {
@State var shows = false
var body: some View {
Button(action: { self.shows.toggle() }) {
Text("Select File")
}
.sheet(isPresented: self.$shows) {
DocumentPickerView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当在 Mac 上时,UIDocumentPickerViewController …
我正在使用 Mac Catalyst 将我的 iPad 应用程序调整到 Mac,并且在使用 datePicker 时遇到了问题(它有一段datePickerMode时间)。在 iPad 上 datePicker 是一个轮子,每当用户在日期选择器上滚动时,就会触发 dateChanged 操作。但在 Mac 上,日期选择器不是滚动条,而是一种文本输入。我可以在 Mac 上键入和更改所有时间值,但在按下返回键之前不会触发 dateChanged 操作。
我想在用户进入某个时间时触发 dateChange 操作。我怎样才能做到这一点?我尝试向 datePicker 添加不同的目标,但没有任何效果。
我实际上更喜欢在 Mac 上使用日期滚动条,所以如果有人知道如何做到这一点,我将不胜感激(我在互联网上四处寻找,但一无所获)!
这是我的代码:
class DateVC: UIViewController {
@IBOutlet weak var datePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
//Just show the time
datePicker.datePickerMode = .time
}
//Action connected to datePicker. This is not called until I press enter on Mac
@IBAction func datePickerChanged(_ sender: Any) {
//do actions
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Mac Catalyst 移植 iPad 应用程序。我正在尝试在新窗口中打开一个视图控制器。
如果我严格使用 AppKit,我可以像这篇文章中描述的那样做一些事情。但是,由于我使用的是 UIKit,因此没有showWindow()可用的方法。
这篇文章指出,这可以通过在项目的新包中添加 AppKit 来实现(我这样做了),但是它没有解释如何实际呈现新窗口的具体细节。它读...
你不能完全做的另一件事是
NSWindow用 UIKit 视图层次结构生成一个新的。然而,你的 UIKit 代码有能力产生一个新的窗口场景,你的 AppKit 代码有能力获取它所呈现的结果 NSWindow 并劫持它来做任何你想做的事情,所以从这个意义上说你可以产生 UIKit 窗口用于辅助调色板和各种其他功能。
任何人都知道如何实现本文中解释的内容?
TL;DR:如何使用 Mac Catalyst打开UIViewController一个新的单独文件NSWindow?
我正在尝试使用 Mac Catalyst 在 Mac OS 平台上运行我的 VPN iOS 应用程序。
我的代码适用于 iOS 应用程序,但不知何故它不适用于 Mac OS。
VPN 未连接。但似乎可以在 Mac Catalina 上的系统偏好设置中的网络中使用。
它还包含我们的 VPN 连接信息,例如服务器名称、密码。这些都对。在钥匙串中,我会看到 psk 和密码。据我所知,psk 是一个共享密钥。但是如果我点击从网络部分连接,我会遇到没有提供共享密钥的错误。但实际上它存储在钥匙串访问中。
我的连接类型是 IPSec。
在 Xcode 中点击连接 VPN 按钮后,我会看到
复制内容失败,返回 SecKeychainItemCopyContent 无法检索此项目的内容错误<在控制台中
我把我的连接部分放在这里。但为了提醒我的代码在 iOS 应用程序上没有任何错误。相同的代码也不适用于 Mac OS。那就是问题所在。
任何帮助都会很棒!
public func connectIKEv2(config: Configuration, onError: @escaping (String)->Void) {
let p = NEVPNProtocolIPSec()
if config.pskEnabled {
p.authenticationMethod = NEVPNIKEAuthenticationMethod.sharedSecret
} else {
p.authenticationMethod = NEVPNIKEAuthenticationMethod.none
}
p.serverAddress = config.server
p.disconnectOnSleep = false
p.username = config.account
p.passwordReference = config.getPasswordRef()
p.sharedSecretReference …Run Code Online (Sandbox Code Playgroud) 我有一个允许多选的tableview。我已经在 viewDidLoad 中将 allowedMultipleSelection 和 allowedMultipleSelectionDuringEditing 设置为 true ,这在 iOS 和 iPadOS 上都可以完美运行。我决定今天试用 Catalyst,该应用程序看起来不错,只是我无法在此视图中选择多行。有任何想法吗?这是下面的代码。提前谢谢了。
//允许多选
override func viewDidLoad()
{
super.viewDidLoad()
self.tableView.allowsMultipleSelection = true
self.tableView.allowsMultipleSelectionDuringEditing = true
.....
}
Run Code Online (Sandbox Code Playgroud)
//限制选择为7行
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
if let selectedItems = tableView.indexPathsForSelectedRows {
if selectedItems.count > 6 {
return nil
}
}
return indexPath
}
@IBAction func doneButtonTapped(_ sender: UIBarButtonItem) {
...
let selectedIndexPaths = tableView.indexPathsForSelectedRows
if !selectedIndexPaths!.isEmpty {
for index in selectedIndexPaths! {
let selectedProcedure = …Run Code Online (Sandbox Code Playgroud) mac-catalyst ×10
swift ×8
macos ×6
ios ×5
swiftui ×3
appkit ×1
cloudkit ×1
datepicker ×1
keychain ×1
uikit ×1
uikitformac ×1
vpn ×1
xcode ×1