标签: mac-catalyst

在 Mac Catalyst 中访问 NSWindow

我知道 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 属性始终为零。

macos ios swift mac-catalyst

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

Mac Catalyst 应用程序如何处理生命周期转换?

它只是我的应用程序,还是所有使用 Catalyst 制作的 Mac 应用程序都不会经历生命周期变化(启动或退出时除外)?

启动时,将UIWindowSceneDelegate调用方法sceneWillEnterForeground:sceneDidBecomeActive:。当退出sceneWillResignActivesceneDidEnterBackground被调用。

但是,当应用程序保持打开状态并且我更改为一个新应用程序时,或者让我的计算机休眠,或者执行其他正常的人类使用模式时,这些都不会发生,我希望强制应用程序进入后台状态。我留下的印象是,只要用户不退出,应用程序就永远不会离开前台状态。这样对吗?

如果我实现了对自动或突然终止的支持(详见此处),应用程序是否会更频繁地进入/退出应用程序状态?

我有什么误解吗?

感谢您的任何帮助。

(注意:我构建了一个记录应用程序转换的系统——而不是“场景”转换——以便无需在 Xcode 中运行应用程序即可进行测试。)

macos xcode objective-c swift mac-catalyst

6
推荐指数
2
解决办法
886
查看次数

Mac Catalyst 和 iOS 13.5

我目前从 Xcode 11.5 收到一个奇怪的警告(我使用的是发行版):

Mac Catalyst 部署目标“IPHONEOS_DEPLOYMENT_TARGET”设置为 13.5,但支持的部署目标版本范围为 13.1 到 13.4.99。

我进行了网络搜索,但没有看到任何人提到此消息。

现在,我可以将我的部署设置回 iOS 13.0(我没有在我的项目中使用 iOS 13.5 中的任何特殊功能),但是想知道为什么会发出这个特殊警告?当然,Apple 还没有决定停止对 Mac Catalyst 的支持,是吗?

xcode ios xcode11 mac-catalyst

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

Mac Catalyst - 向 UITableView/UIScrollView 添加单击 + 拖动手势

我正在为自由项目 \xe2\x80\x94 启用 Catalyst 支持,我立即注意到的一件事是 MacOS 与 iOS 上滚动视图的不同行为。我希望能够像通常在 iOS 模拟器中一样单击并拖动UIScrollViews 或UITableViews,但我只能使用鼠标滚轮(或触控板上的两个手指手势)滚动这些视图。

\n

有什么方法可以模仿UIPanGestureRecognizeriOS 上的行为UIScrollViewUITableView在 MacOS 上使用“单击 + 拖动”手势吗?

\n

谢谢 :)

\n

macos xcode objective-c ios mac-catalyst

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

如何在 swiftui 中使用 .quickLookPreview 修饰符

我正在尝试使用.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

macos quicklook swiftui mac-catalyst viewmodifier

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

SwiftUI 和 Mac Catalyst | 添加按钮到尾部导航栏

我有一个使用 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)

ios swift swiftui mac-catalyst

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

如何在 Mac 上的 Mac Catalyst 应用程序中使用钥匙串?

我无法在 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)

macos swift xcode11 mac-catalyst

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

错误检查:CloudKit MacCatalyst didReceiveRemoteNotification

我正在使用 MacCatalyst 将 iOS/iPadOS 应用程序移植到 MacOS。该应用程序以所有方式使用 CloudKit 和函数,除了一个:当从另一台设备提交 CloudKit 更新时,不会在 MacOS 版本上调用UIApplicationDelegate方法 。didReceiveRemoteNotification

在应用程序中起作用的事情:

  • CKDatabaseOperation向 CloudKit提交包括更新和订阅在内的 s
  • 从 CloudKit 手动检索数据库更新
  • UIApplicationDelegate方法在调用时didRegisterForRemoteNotificationsWithDeviceToken触发并UIApplication.isRegisteredForRemoteNotifications返回 trueUIApplication.registerForRemoteNotifications
  • 设置CKSubscription.NotificationInfo调用在 MacOS 中正确显示的警报通知
  • UNUserNotificationCenterDelegate方法,willPresent当调用警报通知并且应用程序在前台时
  • didReceiveRemoteNotification 在 iOS 和 iPad(物理设备)上

有没有人在使用 MacCatalyst 时调用过UIApplicationDelegate方法didReceiveRemoteNotification

更新:应用程序最终didReceiveRemoteNotification在发送更新 30 分钟后触发该方法,但在其他更新中,该方法即使在数小时后也不会触发。有任何想法吗?

macos ios cloudkit mac-catalyst

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

拖放在 macOS 上不起作用,但在 iOS 上起作用(使用 Catalyst)

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)

我究竟做错了什么?这是一个错误吗?

macos ios swift swiftui mac-catalyst

5
推荐指数
0
解决办法
1224
查看次数

在 Mac Catalyst 上启动 XCTest 失败并出现文件未找到错误

我有一个 XCode 项目,其中包含一个 iPhone/iPad 应用程序,我使用 Mac Catalyst 成功将其移植到 Mac 上。当我尝试启动单元测试(用 XCTest 编写)时。我收到以下错误:

\n
The 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";\n
Run Code Online (Sandbox Code Playgroud)\n

我手动检查了这条路径,确实不存在。但是存在文件夹

\n
.../Products/Debug-maccatalyst\n.../Products/Debug-iphoneos\n
Run Code Online (Sandbox Code Playgroud)\n

然后我修改了Test HostMyAppTests 的构建设置以匹配 Maccalyst 文件夹并收到以下错误:

\n
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)\n
Run Code Online (Sandbox Code Playgroud)\n

我需要更改哪些内容才能使单元测试在 mac Catalyst 上运行?

\n

xcode mac-catalyst

5
推荐指数
0
解决办法
108
查看次数