我正在探索 Xcode 11 和 macOS Catalina 的新可能性,以使用 UIKit 创建 iPad 应用程序的 Mac 版本。通常按预期工作。
在 macOS 上的 iOS 应用程序中自定义 NSWindow 的最佳方式是什么?
https://developer.apple.com/documentation/uikit/creating_a_mac_version_of_your_ipad_app
You can use these same approaches to include a framework and code that are available only in macOS. For a framework, select macOS for the platform setting, and enclose the code with a #if targetEnvironment(UIKitForMac) statement.
作为起点,我创建了一个基本的 macOS 框架(例如 MacMan.framework)来配置 Mac 的特定行为。
尽管我尽了最大的努力,但还是遇到了错误:
#if !targetEnvironment(UIKitForMac)
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
#endif
引用资料:
https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit
最佳答案
根据 Apple 的说法,如果您的应用程序依赖于为 macOS 构建的框架,您需要将其从任何 iOS 构建中排除,或者您需要为 iOS 和 macOS 重新构建它,以便您可以条件化仅适用于 iOS 或 macOS 的代码。为此,Apple 建议您将其转换为 xcframework。因为您所依赖的框架指向 NSApp 和 NSWindow,这些符号在 iOS 上不可用,所以您会收到您提到的错误。
因此,如果您有 MacMan.framework 的源代码,则需要通过条件化具有依赖关系的代码来将其转换为 xcframework在特定平台上,因为它们指的是在其他平台上不可用的框架。
如果您不拥有源代码,则需要与框架供应商联系,以便为您提供这样的二进制文件。如果这不可能,那么您将不得不排除专为 macOS 平台构建的 MacMan.framework。
所有这些都在名为“Introducing iPad apps for Mac”的 WWDC 2019 视频中进行了解释。
此外,我还建议您查看同一页面上的相关视频以了解该怎么做。最后,要了解如何构建 xcframework,请观看视频“Binary Frameworks in Swift”。不要被后一个视频的标题所迷惑:您也可以在 Objective-C 中构建 xcframeworks,以备不时之需。
如果你需要自定义一个窗口背景,你不能通过 NSWindow 来实现;正如我上面所解释的,此 API 不可用,但您需要使用其 iOS 对应项:UIWindow。在这种情况下,您可以像这样更改窗口背景:
self.view.window.backgroundColor = .red
自己是你的 UIViewController。
另一种可能的定制是添加工具栏,因为 NSToolbar 现在通过以下方式导出:
let toolbar = UIWindowScene.titlebar.toolbar
在 Mac 的 UIKit 应用程序中添加和自定义 NSToolbar 的更完整的解释和注意事项解释了 here .
关于ios - “NSApp”在 Mac 的 UIKit 中不可用 : How to embed Mac only framework in iOS app on macOS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828573/
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我想将我的MacSnowLeopardruby从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/
我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!
我正在使用macos,我想使用ruby驱动程序连接到sqlserver。我想使用tiny_tds,但它给出了缺少free_tds的错误,但它已经安装了。怎么能过这个?~brewinstallfreetdsWarning:freetds-0.91.112alreadyinstalled~sudogeminstalltiny_tdsBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtiny_tds:ERROR:Failedtobuildgemnativeextension.完整日志如下:/System
我一直在工作中使用seleniumIDE。现在我们决定将Seleniumwebdriver与Ruby结合使用。我完全不知道如何设置我的Mac,MacProYosemite10.10.5。在我的终端中,我运行了这些命令:$ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"$brewdoctorYoursystemisreadytobrew.$brewinstallruby==>Summary/usr/local/Cellar/openssl/1.0.2d_1:464fi