我在任何地方都看不到这个文档——有没有想过我们如何使用 xcodebuild 为 Mac 的 UIKIt(即 Catalyst)构建项目?
您可以指定“-sdk iphoneos”与“-sdk iphonesimulator”在这两个目标之间切换,但“-sdk uikitformac”似乎不起作用(“未找到SDK”),尽管Xcode本身使用该命名法(例如,它构建到“Debug-uikitformac”文件夹等)。我还尝试了可能有意义的不同 SDK 值(例如“-sdk macabi”),但无济于事。
建议?
我有一个可运行的原生 iPhone/iPad 应用程序,我现在正尝试将其用作 Mac Catalyst 应用程序。一切似乎都在工作,除了当我在 iOS 版本上输入某些内容时,它“破坏”了 macOS 版本——我正在使用 CloudKit 和 CloudKit 订阅来监听数据库中的变化。
我把这个记录到日志中 3 次:
2020-04-25 09:58:35.612887+0300 MyApp[2871:206093] [assertion] Error acquiring assertion: <NSError: 0x600000d4cb40; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
2020-04-25 09:58:35.613919+0300 MyApp[2871:206093] [assertion] Error acquiring assertion: <NSError: 0x600000d4d290; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
2020-04-25 09:58:35.615102+0300 MyApp[2871:206093] [assertion] Error acquiring assertion: <NSError: 0x600000d4de00; domain: RBSAssertionErrorDomain; code: 2; reason: "Specified target process does not exist">
Run Code Online (Sandbox Code Playgroud)
这种行为真的很奇怪。macOS 版本实际上并没有崩溃,但主窗口消失了,我必须在 XCode …
当使用使用 Catalyst 从 iOS 转换而来的 Mac 应用程序时,捕获 Mac 鼠标滚轮活动的常用方法,例如:
不起作用,因为在构建 Catalyst 转换的应用程序时显然不支持 NSEvent。
我需要控制的对象位于常规图像容器中,而不是滚动视图容器中。我只是想使用滚轮来更改加载的图像。触控板活动工作正常,但到目前为止捕获滚轮一直难以捉摸。
谢谢!
应用内购买对于我的 iOS 方面来说效果很好。StoreKit 中的数据已按原样填充。相同的代码不适用于该项目的 Mac Catalyst 版本。我什至在 App Store 上为我的 Mac 应用程序创建了一个列表,其中包含用于应用程序内购买的不同捆绑标识符。我有一个打印功能,可以返回 StoreKit 找到的产品,它在 iOS 上运行良好,但在使用 Mac Catalyst 时没有任何结果。
这是我所做的:
适用于 iOS 但不适用于 MacOS 的代码:
override func viewDidLoad() {
SKPaymentQueue.default().add(self)
let productIds: Set<String> = ["..."]
var request = SKProductsRequest(productIdentifiers: productIds)
request.delegate = self
request.start()
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print("Loaded")
for product in response.products {
print("What came: \(product.productIdentifier) \(product.localizedTitle) \(product.price.floatValue)")}
Run Code Online (Sandbox Code Playgroud)
iOS 应用程序将返回产品标识符、标题和价格。Mac 应用程序将一无所获。
UISceneSession当用户将焦点从应用程序(窗口)移开然后又回到应用程序(窗口)时,我想使用生命周期的委托方法来帮助通知我的 Mac Catalyst 应用程序。
当应用程序首次在 Mac 上启动sceneWillEnterForeground并sceneDidBecomeActive成功调用时,但是当我专注于另一个应用程序时,则委托诸如sceneWillEnterForeground未调用之类的方法。为什么?
我想知道 macCatalyst 版本是什么意思以及它是如何映射到 macOS 版本的?例如,可用的 APImacCatalyst 14.0意味着它需要macOS 11.0(Big Sur),macCatalyst 13.0意味着macOS 10.15.0,但是当 API 需要最小目标时,这意味着什么macCatalyst 13.4?它对应什么版本的 macOS?
与许多应用程序一样,如果某个隐私权限已被禁用,我的 iOS 应用程序为用户提供了打开应用程序设置页面的机会。
在 iOS 中,使用特殊的UIApplicationOpenSettingsURLString/ openSettingsURLStringURL 会将用户带到设置应用程序的应用程序特定页面。除了应用程序提供的 Settings.bundle 中的任何设置设置(如果有)之外,用户还可以在那里看到应用程序使用的各种隐私设置。
在 iOS 应用程序的 Mac Catalyst 端口上工作时,这并没有像预期的那样工作。特殊设置 URL 的相同用法显示用户在单击“首选项...”菜单时看到的相同首选项窗格。这只是应用程序的 Settings.bundle 提供的内容。该应用程序的隐私设置不像在 iOS 中那样显示。
我可以在 macOS 设置应用程序中查看我的应用程序的隐私设置,方法是单击“安全和隐私”,然后单击“隐私”选项卡,然后单击左侧列表中的相应项目,例如“联系人”或“照片”。但这些设置不按应用分组。
有没有办法让 iOS 应用程序的 macOS 版本在一个地方显示各种隐私设置,就像在 iOS 上运行时一样?如果没有,是否至少有一种方法可以在 macOS 中直接启动“设置”应用程序并显示“隐私”窗格?
我已经从现有的 iOS 应用程序创建了一个 macOS 应用程序。我选中了启用 macOS 支持的复选框,它添加了沙箱权利,就像文档所说的那样。
在开发人员页面中,我还看到启用了 macOS 支持。
我的 iOS 应用程序出现在 iTunes Connect 中并通过了评论。到目前为止,一切似乎都很棒。
我的 Catalyst 应用程序就没有那么幸运了。活动下没有显示任何构建。
如何让我的构建显示在 iTunes Connect 中?我是否必须以不同于 Xcode Organizer 中常规 iOS/iPad 应用程序的方式提交 macOS 应用程序?我很高兴提供任何其他信息来帮助解决这个问题。
目前,我有这个停止调整窗口大小:
#if targetEnvironment(macCatalyst)
windowScene.sizeRestrictions?.minimumSize = CGSize(width: 480, height: 900)
windowScene.sizeRestrictions?.maximumSize = CGSize(width: 480, height: 900)
#endif
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
Run Code Online (Sandbox Code Playgroud)
但是全屏按钮无论如何都会使其全屏。
是否可以在 Mac Catalyst 上限制/修复(最小/最大)弹出窗口大小?请参阅随附的视频。
mac-catalyst ×10
macos ×6
ios ×5
swift ×3
xcode ×2
cloudkit ×1
storekit ×1
swiftui ×1
xcodebuild ×1