标签: mac-catalyst

Mac Catalyst 中的弃用警告,但仅适用于 Objective-C,而不适用于 Swift

我在 Catalina (10.15) 的 GM 版本上使用 Xcode 11。我正在为 Mac Catalyst 构建我的 iOS 应用程序。我的 iOS 应用程序的部署目标是 iOS 11。

我在视图控制器中有一条简单的行,例如:

self.modalInPopover = YES;
Run Code Online (Sandbox Code Playgroud)

在 iOS 中编译干净。当我切换到“我的 Mac”目标时,我收到一个弃用警告:

'modalInPopover' 已弃用:首先在 macCatalyst 13.0 中弃用

好的。我可以切换到 iOS 13 中添加的新方法:

self.modalInPopover = YES;
Run Code Online (Sandbox Code Playgroud)

那应该可以解决它,但我仍然modalInPopoverelse块中使用时收到相同的弃用警告。

奇怪的是,对应的 Swift 代码没有给出任何警告。只有 Objective-C 代码继续发出警告。

if (@available(iOS 13.0, *)) {
    self.modalInPresentation = YES;
} else {
    self.modalInPopover = YES;
}
Run Code Online (Sandbox Code Playgroud)

我什至尝试将其更新@available为:

if (@available(iOS 13.0, macCatalyst 13.0, *)) {
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何事情。

以下灾难解决了问题,但不需要它:

if #available(iOS 13, *) {
    self.isModalInPresentation …
Run Code Online (Sandbox Code Playgroud)

objective-c ios swift xcode11 mac-catalyst

9
推荐指数
1
解决办法
2681
查看次数

是否可以在 Mac Catalyst 中使用全屏?

将游戏移植到 macOS Catalyst,但窗口很小。是否可以全屏启动?

fullscreen uiwindow ios mac-catalyst

9
推荐指数
2
解决办法
2303
查看次数

如何构建包含 Mac Catalyst 的 Fat Framework?

如何构建一个包含构建 Mac Catalyst 应用程序所需架构的胖框架?

frameworks catalyst ios xcode11 mac-catalyst

9
推荐指数
1
解决办法
1865
查看次数

使用 Big Sur 在 SwiftUI Catalyst 中单击问题

我刚刚更新到 Big Sur,现在我的 Catalyst 应用程序出现严重问题。我用类似的代码创建了一个新项目来测试它。行为有点不同,但在这两种情况下都有一点,点击停止工作或至少不再可靠。

以这个示例代码为例:

struct ContentView: View {
        
    private var tabs = ["tab1", "tab2", "tab3"]
    @State private var selectedTab = 0
    
    var body: some View {
        VStack {
            
            self.fakeTabs()
            
            self.tabView()
            
        }
    }
    
    private func fakeTabs() -> some View {
        HStack(spacing: 0) {
            
            // ========================================================
            // Tabs
            // ========================================================
            ForEach(self.tabs, id: \.self) { tab in
                ZStack {
                    // background
                    Rectangle()
                        .fill(self.isSelected(tab: tab) ? Color.blue : Color.green)
                        .border(Color.black, width: 1)
                        .contentShape(Rectangle())
                    // icon
                    HStack(spacing: 15.0) {
                        Image(systemName: "folder")
                            .foregroundColor(.white)
                            .frame(width: …
Run Code Online (Sandbox Code Playgroud)

swiftui mac-catalyst

9
推荐指数
1
解决办法
365
查看次数

点击外部以关闭 Mac Catalys 中模态呈现的视图

我在我的 Mac Catalyst / iOS 应用程序中展示了一个模态视图控制器。iOS 能够向下滑动模态呈现的视图以关闭,或者只需点击呈现的视图外部。

maccatalyst 似乎没有这些功能。据我所知,由于它没有触摸屏,因此不需要滑动手势,但我希望模态呈现视图之外的点击能够起作用。是应该的吗?

人们在 mac Catalyst 中做了什么来驳回他们模态当前的观点?我不确定这是否重要,但当我呈现模态视图时出现以下错误:

2022-07-05 10:00:19.975612-0500 TechHub[15235:105971] [WindowHosting] UIScene property of UINSSceneViewController was accessed before it was set.
2022-07-05 10:00:20.476770-0500 TechHub[15235:105971] Unbalanced calls to begin/end appearance transitions for <TechHub.PopoverNavigationController: 0x11d906800>.
Run Code Online (Sandbox Code Playgroud)

这是我用来预设视图控制器的代码:

let searchQuestionsNavController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SearchQuestionsNavController") as! PopoverNavigationController
self.present(searchQuestionsNavController, animated: true) {
        
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这只是一个简单的呈现功能来显示视图。不确定为什么会出现错误消息。没有指定的模式呈现样式,但当我呈现视图时,似乎默认选择 .pageSheet。

xcode swift mac-catalyst

9
推荐指数
0
解决办法
778
查看次数

Mac Catalyst:AVAudioSession.availableInputs 不返回任何输入

我正在尝试将音频输入移植到 Mac Catalyst。截至目前,我使用的是 xcode13GM、macOS 10.15 Beta 8 (19A558d)、ios13beta8。以下代码不返回任何输入端口。

let audioSession = AVAudioSession.sharedInstance()
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)

var mic : AVAudioSessionPortDescription? = nil
for input in audioSession.availableInputs! {
  if input.portType == AVAudioSession.Port.builtInMic {
    mic = input
  } else {
    print("Not internal mic")
}

// here: 'mic' is nil
Run Code Online (Sandbox Code Playgroud)

我已授予“Hardend Runtime - Audio Input”权利,该应用程序要求获得授予的麦克风权限。

访问 audioSession.availableInputs 时,控制台中会显示以下错误:

[avas] AVAudioSession_MacOS.mm:258:-[AVAudioSession getChannelsFromAU:PortName:PortID:]: 获取 auScope 1768845428 元素 1 的频道布局时出错

这是由于整个内容的测试状态导致的错误还是我遗漏了什么?

谢谢

avaudiosession swift mac-catalyst

8
推荐指数
0
解决办法
474
查看次数

UIMarkupTextPrintFormatter 和 Mac Catalyst

我有一个 iPad 应用程序,我已经使用 Catalyst 成功地将它迁移到了 Mac。

虽然我可以在 iPad/iPhone 上使用 生成 PDF UIMarkupTextPrintFormatter,但它在 Mac 上无法正常工作。

事实上,我什至无法构建 Mac 二进制文件,除非我注释掉UIMarkupTextPrintFormatterusing #if !targetEnvironment(macCatalyst)as Xcode 只会显示一个错误:

体系结构 x86_64 的未定义符号:
“_OBJC_CLASS_$_UIMarkupTextPrintFormatter”,引用自:Functions.o ld 中的 objc-class-ref:未找到体系结构 x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v查看调用)

这令人困惑,因为 Apple 的文档表明它与 Mac Catalyst 13.0+ https://developer.apple.com/documentation/uikit/uimarkuptextprintformatter兼容

有没有其他人遇到过这种情况,您是否能够找到解决方案?

谢谢你。

编辑:我找到了一个很好的解决方案,它也可以在 macCatalyst 中运行而无需修改,基于 Sam Wize 的帖子:

https://samwize.com/2019/07/02/how-to-generate-pdf-with-images/

关键是使用 WKWebView 对象(但不显示它)作为加载 HTML 文件的中介,然后使用它的 viewPrintFormatter 通过其didFinish navigation:委托呈现 PDF

这是我的代码(希望注释是不言自明的)。使用以下代码创建一个名为 PDFCreator.swift 的 Swift 文件:

import WebKit

typealias PDFCompletion = (Result<NSData, Error>) -> Void

class …
Run Code Online (Sandbox Code Playgroud)

swift ios13 mac-catalyst

8
推荐指数
1
解决办法
728
查看次数

如何在 Mac Catalyst 13.0+ swift 中打开 Finder

他在那里,我正在尝试在 Mac Catalyst 13.0+ 中打开(启动)一个 Finder。并且“ NSWorkspace ”在 Mac Catalyst 中不可用

我的代码:

func openFinder(url: URL?){
    guard let url = url else { return }
    NSWorkspace.shared.activateFileViewerSelecting([url])
}
Run Code Online (Sandbox Code Playgroud)

错误:

“NSWorkspace”在 Mac Catalyst 中不可用

你知道我如何在 Mac Catalyst 中做到这一点吗?

macos catalyst swift mac-catalyst

8
推荐指数
1
解决办法
600
查看次数

在Mac版UIKit(Catalyst)中检测单个修改键更改

我正在使用Mac的UIKit(也称为Mac的iPad AppsProject Catalyst)在MacOS上移植iOS应用。

该应用使用keyCommandsfromUIKit来检测单个修饰键的按下:

UIKeyCommand(input: "", modifierFlags: .shift, action: #selector(singleShift))
Run Code Online (Sandbox Code Playgroud)

这段代码可在带有外部键盘的iPad上完美运行,我会触发每个事件吗?按。但是,这在MacOS上不起作用,尽管单个非修饰符事件和修饰符+非修饰符组合起作用。

如何实现所需的行为并获得有关单个修饰键事件的通知?

还是我应该放弃UIKeyCommand并尝试UIGestureRecognizer

macos ios swift uikitformac mac-catalyst

7
推荐指数
1
解决办法
150
查看次数

Mac Catalyst 是否支持 UITextField+UIPickerView?

在我的 iOS 应用程序中,我有一个带有选择器视图的文本字段分配给它的 inputView。在 iOS 设备上,只要用户点击文本字段,就会弹出选择器视图。但是,当我将它作为 Mac/Catalyst 应用程序运行时,相同的代码不会这样做。到目前为止,我的调试工作表明根本没有调用选择器视图方法,所以如果 Mac 需要额外的文本字段委托方法来将焦点从 Mac 的键盘上移开?知道如何在 Mac 上进行这项工作吗?准系统示例代码如下。

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {
@IBOutlet weak var myTextField: UITextField!

var myPickerView : UIPickerView!
var pickerData = ["Alpha" , "Bravo" , "Charlie" , "Delta"]

override func viewDidLoad() {
    super.viewDidLoad()

    self.myPickerView = UIPickerView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 300))
    self.myPickerView.delegate = self
    self.myPickerView.dataSource = self

    self.myTextField.delegate = self
    self.myTextField.inputView = self.myPickerView

}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(_ …
Run Code Online (Sandbox Code Playgroud)

uipickerview uitextfield mac-catalyst

7
推荐指数
1
解决办法
672
查看次数