将 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