我在 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)
那应该可以解决它,但我仍然modalInPopover在else块中使用时收到相同的弃用警告。
奇怪的是,对应的 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) 将游戏移植到 macOS Catalyst,但窗口很小。是否可以全屏启动?
如何构建一个包含构建 Mac 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) 我在我的 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。
我正在尝试将音频输入移植到 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 的频道布局时出错
这是由于整个内容的测试状态导致的错误还是我遗漏了什么?
谢谢
我有一个 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) 他在那里,我正在尝试在 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 中做到这一点吗?
我正在使用Mac的UIKit(也称为Mac的iPad Apps或Project Catalyst)在MacOS上移植iOS应用。
该应用使用keyCommandsfromUIKit来检测单个修饰键的按下:
UIKeyCommand(input: "", modifierFlags: .shift, action: #selector(singleShift))
Run Code Online (Sandbox Code Playgroud)
这段代码可在带有外部键盘的iPad上完美运行,我会触发每个事件吗?按。但是,这在MacOS上不起作用,尽管单个非修饰符事件和修饰符+非修饰符组合起作用。
如何实现所需的行为并获得有关单个修饰键事件的通知?
还是我应该放弃UIKeyCommand并尝试UIGestureRecognizer?
在我的 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) mac-catalyst ×10
swift ×6
ios ×4
catalyst ×2
macos ×2
xcode11 ×2
frameworks ×1
fullscreen ×1
ios13 ×1
objective-c ×1
swiftui ×1
uikitformac ×1
uipickerview ×1
uitextfield ×1
uiwindow ×1
xcode ×1