我知道 NSWindow 在 Mac Catalyst 中并未正式可用,但我已经看到了一些通过NSClassFromString和访问它的帖子和成功案例valueForKeyPath。然而,我从来没能让它发挥作用,因为它总是返回零。
guard let nsWindows = NSClassFromString("NSApplication")?.value(forKeyPath: "sharedApplication.windows") as? [AnyObject] else {
return nil
}
Run Code Online (Sandbox Code Playgroud)
也曾在目标c中尝试过
NSArray *const nsWindows = [NSClassFromString(@"NSApplication") valueForKeyPath:@"sharedApplication.windows"];
Run Code Online (Sandbox Code Playgroud)
但每次都是相同的结果 - 零。
是否有一个技巧可以让它发挥作用,或者这种方式作为访问它的潜在方式已被关闭?成功获取NSApplication实例。但 windows 属性始终为零。
它只是我的应用程序,还是所有使用 Catalyst 制作的 Mac 应用程序都不会经历生命周期变化(启动或退出时除外)?
启动时,将UIWindowSceneDelegate调用方法sceneWillEnterForeground:和sceneDidBecomeActive:。当退出sceneWillResignActive和sceneDidEnterBackground被调用。
但是,当应用程序保持打开状态并且我更改为一个新应用程序时,或者让我的计算机休眠,或者执行其他正常的人类使用模式时,这些都不会发生,我希望强制应用程序进入后台状态。我留下的印象是,只要用户不退出,应用程序就永远不会离开前台状态。这样对吗?
如果我实现了对自动或突然终止的支持(详见此处),应用程序是否会更频繁地进入/退出应用程序状态?
我有什么误解吗?
感谢您的任何帮助。
(注意:我构建了一个记录应用程序转换的系统——而不是“场景”转换——以便无需在 Xcode 中运行应用程序即可进行测试。)
我目前从 Xcode 11.5 收到一个奇怪的警告(我使用的是发行版):
Mac Catalyst 部署目标“IPHONEOS_DEPLOYMENT_TARGET”设置为 13.5,但支持的部署目标版本范围为 13.1 到 13.4.99。
我进行了网络搜索,但没有看到任何人提到此消息。
现在,我可以将我的部署设置回 iOS 13.0(我没有在我的项目中使用 iOS 13.5 中的任何特殊功能),但是想知道为什么会发出这个特殊警告?当然,Apple 还没有决定停止对 Mac Catalyst 的支持,是吗?
我正在为自由项目 \xe2\x80\x94 启用 Catalyst 支持,我立即注意到的一件事是 MacOS 与 iOS 上滚动视图的不同行为。我希望能够像通常在 iOS 模拟器中一样单击并拖动UIScrollViews 或UITableViews,但我只能使用鼠标滚轮(或触控板上的两个手指手势)滚动这些视图。
有什么方法可以模仿UIPanGestureRecognizeriOS 上的行为UIScrollView或UITableView在 MacOS 上使用“单击 + 拖动”手势吗?
谢谢 :)
\n我正在尝试使用.quickLookPreviewiOS 14、macOS 11 macCatalyst 14 中引入的视图修改器,但Value of type 'some View' has no member 'quickLookPreview'每次尝试在 macOS 或 mac Catalyst 目标上使用该修改器时都会收到此错误。在 iOS 上,这工作得很好。在 Mac 上呈现此修改器的正确方法是什么?
import SwiftUI
import QuickLook
struct ContentView: View {
@State var documentUrl: URL?
var body: some View {
NavigationView {
ZStack {
Button("Press Me", action: {
documentUrl = URL(fileURLWithPath: "somelocalfileURLPath")
})
}
.navigationTitle("Open File")
.quickLookPreview($documentUrl)
}
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode 13.1 MacOS 12.1
我有一个使用 SwiftUI 构建的 Mac Catalyst 应用程序,但我似乎无法向尾随导航栏添加按钮?
我也不确定这个 navigationBar 是在哪里定义的,是否可以删除?它似乎只出现在文图拉。
struct AppSidebarNavigation: View {
enum NavigationItem {
case home
}
@State private var selection: NavigationItem? = .home
init() {
#if !targetEnvironment(macCatalyst)
UITableView.appearance().backgroundColor = UIColor(named: "White")
UITableViewCell.appearance().selectionStyle = .none
UITableView.appearance().allowsSelection = false
#endif
}
var body: some View {
NavigationView {
sidebar
.navigationTitle("")
.navigationBarTitleDisplayMode(.inline)
// Main View
HomeView()
.navigationTitle("")
.edgesIgnoringSafeArea(.top)
.navigationBarHidden(isMac ? false : true)
.navigationBarBackButtonHidden(isMac ? false : true)
}
.accentColor(Color("Black"))
.navigationViewStyle(.columns)
}
}
Run Code Online (Sandbox Code Playgroud)
HomeView 我有以下视图。
#if targetEnvironment(macCatalyst)
.navigationBarItems(trailing:
NavButtons
) …Run Code Online (Sandbox Code Playgroud) 我无法在 Mac 上的 Mac-Catalyst 应用程序中从钥匙串写入/读取,它分别返回错误 34018 和 25300。有没有办法让 Keychain 在 Mac 上的 Catalyst 应用程序中工作?
Xcode:11.0,MacOS:10.15
这是一个示例代码,它适用于 iOS,但不适用于 Mac。该代码打印“My secretive bee”以表明我们已成功将此文本写入 Keychain 并从中读取。
override func viewDidLoad() {
super.viewDidLoad()
let itemKey = "My key"
let itemValue = "My secretive bee "
deleteFromKeychain(itemKey: itemKey)
addToKeychain(itemKey: itemKey, itemValue: itemValue)
readFromKeychain(itemKey: itemKey)
}
func deleteFromKeychain(itemKey: String) {
let queryDelete: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject,
]
let resultCodeDelete = SecItemDelete(queryDelete as CFDictionary)
if resultCodeDelete != noErr { …Run Code Online (Sandbox Code Playgroud) 我正在使用 MacCatalyst 将 iOS/iPadOS 应用程序移植到 MacOS。该应用程序以所有方式使用 CloudKit 和函数,除了一个:当从另一台设备提交 CloudKit 更新时,不会在 MacOS 版本上调用UIApplicationDelegate方法 。didReceiveRemoteNotification
在应用程序中起作用的事情:
CKDatabaseOperation向 CloudKit提交包括更新和订阅在内的 sUIApplicationDelegate方法在调用时didRegisterForRemoteNotificationsWithDeviceToken触发并UIApplication.isRegisteredForRemoteNotifications返回 trueUIApplication.registerForRemoteNotificationsCKSubscription.NotificationInfo调用在 MacOS 中正确显示的警报通知UNUserNotificationCenterDelegate方法,willPresent当调用警报通知并且应用程序在前台时didReceiveRemoteNotification 在 iOS 和 iPad(物理设备)上有没有人在使用 MacCatalyst 时调用过UIApplicationDelegate方法didReceiveRemoteNotification?
更新:应用程序最终didReceiveRemoteNotification在发送更新 30 分钟后触发该方法,但在其他更新中,该方法即使在数小时后也不会触发。有任何想法吗?
onDrag使用SwiftUI进行拖放onDrop在 iOS 设备上效果非常好。然而,对于 macOS,我什至根本无法拖动视图。
对于 iOS 来说它可以工作,对于 macOS 则不行,这看起来很奇怪。该应用程序是使用 Catalyst 制作的,目标为 iOS 13.4。
即使对于一些基本的东西,它也适用于其中一个而不是另一个:
struct ContentView: View {
var body: some View {
Text("Hello World!")
.onDrag { NSItemProvider(object: "Hello 2" as NSString) }
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?这是一个错误吗?
我有一个 XCode 项目,其中包含一个 iPhone/iPad 应用程序,我使用 Mac Catalyst 成功将其移植到 Mac 上。当我尝试启动单元测试(用 XCTest 编写)时。我收到以下错误:
\nThe file \xe2\x80\x9cMyApp.app\xe2\x80\x9d couldn\xe2\x80\x99t be opened because there is no such file.\nNSFilePath = "/Users/myname/Library/Developer/Xcode/DerivedData/MyApp-.../Build/Products/Debug/MyApp.app";\nRun Code Online (Sandbox Code Playgroud)\n我手动检查了这条路径,确实不存在。但是存在文件夹
\n.../Products/Debug-maccatalyst\n.../Products/Debug-iphoneos\nRun Code Online (Sandbox Code Playgroud)\n然后我修改了Test HostMyAppTests 的构建设置以匹配 Maccalyst 文件夹并收到以下错误:
could not compute relative build path for TEST_HOST: PlugIns folder relative to $(TEST_HOST) \nis not a descendant of $(TARGET_BUILD_DIR) (/Users/myname/Library/Developer/Xcode/DerivedData/MyApp-.../\nBuild/Products/Debug-maccatalyst-maccatalyst/MyApp.app/Contents/MacOS/MyApp/../../PlugIns !<= \n/Users/myname/Library/Developer/Xcode/DerivedData/MyApp-.../Build/Products/Debug-maccatalyst)\nRun Code Online (Sandbox Code Playgroud)\n我需要更改哪些内容才能使单元测试在 mac Catalyst 上运行?
\nmac-catalyst ×10
macos ×7
ios ×6
swift ×5
xcode ×4
swiftui ×3
objective-c ×2
xcode11 ×2
cloudkit ×1
quicklook ×1
viewmodifier ×1