V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
covvee
V2EX  ›  macOS

闲暇时间想学习下 mac os 开发,请问一下学习曲线是怎么样的

  •  
  •   covvee · Jan 12, 2023 · 4843 views
    This topic created in 1202 days ago, the information mentioned may be changed or developed.

    主要是在使用 mac os 的时候,我一直对 mac 的窗口管理很不爽。现在使用 ubar ,大概满足了需求,但也有一些地方用着不太舒服。

    过年了,有段闲暇时间,想学习一下 mac os 开发。我桌面应用开发的经验为 0 ,想问下需要怎么样的学习曲线?

    mac os 的资源,感觉好少。还是说我没有找对

    求带带路

    Supplement 1  ·  Jan 12, 2023
    我可能说错了,我想做的不是窗口管理这么高大上,高难度的 app

    我只是想实现一个 dock 栏
    Supplement 2  ·  Jan 13, 2023
    我找到一个项目可以用来学习学习了

    https://github.com/WilsonGramer/wwdc21-dock
    Supplement 3  ·  Jan 13, 2023

    研究了一个晚上,写了个大概。

    dock

    Supplement 4  ·  Jan 13, 2023
    ![dock]( )
    33 replies    2024-02-15 23:30:37 +08:00
    xtinput
        1
    xtinput  
       Jan 12, 2023
    我搞 iOS 的都感觉学不动 macOS 开发
    HHHans
        2
    HHHans  
       Jan 12, 2023
    资料特别少而且主要集中在英文互联网
    可以试着先从 SwiftUI 入手搭一搭 UI
    jay435990054
        3
    jay435990054  
       Jan 12, 2023
    我做了两年 mac os 开发 你想开发什么东西呢
    MakHoCheung
        4
    MakHoCheung  
       Jan 12, 2023
    我是用 SwiftUI 来开发 macOS 应用的,但是你这个需求很高级,感觉要会 Appkit 和 系统调用才能做出来
    cxtrinityy
        5
    cxtrinityy  
       Jan 12, 2023 via Android
    虽然但是,单纯窗口管理不妨写写 hammerspoon 脚本看能不能解决
    murmur
        6
    murmur  
       Jan 12, 2023
    窗口管理不爽你得换 windows ,这么底层的东西你做 app 是搞不定的
    covvee
        7
    covvee  
    OP
       Jan 12, 2023
    @jay435990054 类似 ubar
    halowang1991
        8
    halowang1991  
       Jan 12, 2023   ❤️ 1
    我最近也在学, 就疯狂的用 google 搜索 “swift macOS 你自己想要的功能”, 还真学到了一些东西.

    对于初学者来说, 我感觉 macOS dev 和 iOS dev 的一个核心区别就是多个 Window 或一个 Window
    halowang1991
        9
    halowang1991  
       Jan 12, 2023
    iOS 中我们往往在一个 UIWindow 中精耕细作, 但是 macOS 就需要面对多个 NSWindow 了. 而其他功能, 对于我来说, 更多地是基于自己之前的 iOS 开发经验, 顺藤摸瓜实现
    halowang1991
        10
    halowang1991  
       Jan 12, 2023   ❤️ 1
    不过 OP 做的东西我感觉还要和大量的系统级 API 进行交互...我感觉还是蛮难的, 很多东西只能从 apple 自己的开发者文档中摸索
    objectxiang
        11
    objectxiang  
       Jan 12, 2023
    macOS 老开发来说一句,多看文档学点 Cocoa 。毕竟以后都是 SwiftUI ,很多实现不了的还是要 Cocoa 。
    justin2018
        12
    justin2018  
       Jan 12, 2023
    比 iOS 难度大

    macOS 有的 API 连个 Demo 都没有 完全没法下手

    很佩服做 Mac 开发的老铁 高手
    paopaosa
        13
    paopaosa  
       Jan 12, 2023
    官网查查 AppKit 的文档,github 上搜索下相关的开源项目,应该能搞定吧。
    LINAICAI
        14
    LINAICAI  
       Jan 12, 2023
    macOS 不值得你学,太难了,我 iOS 快 10 年了依然学不会,其次你学来赚不到钱。
    fengleiyidao
        15
    fengleiyidao  
       Jan 12, 2023
    你说这个 app ,更主要的是摸索系统 api
    pocarisweat
        16
    pocarisweat  
       Jan 12, 2023   ❤️ 1
    分两个部分:一个是界面,一个是系统延伸功能。

    写界面可以用很多框架包括 Web ,但这里假定讨论的是原生。macOS 原生的 GUI API 就是 Cocoa ,AppKit 指 Cocoa 里面真正涉及 GUI 的那部分,通常这两个词都交替使用不作区分。放在二十年前那个年代,Cocoa 包括 Objective-C 都相当先进,但到今天程序员都习惯了 MVVM 和 Web 那一套更方便的技术,再回到 MVC 就有些难受了。而且 AppKit 因为历史较早,其 API 很多地方比 iOS 的 UIKit 难受很多,所以能 SwiftUI 就 SwiftUI 吧。

    系统功能这块,其实 macOS 系统的 API 能实现的可能不少,但想实现某个需求时很难知道自己可以用哪个 API ,这点其实连 Windows 也差不多。比如我在用一个小开源软件,它能让鼠标和触控板使用相反的滚动方向。因为系统不支持这个设置,所以我以为没法实现,看了它的源码才发现:哦,原来系统有一个可以拦截外设事件的接口。这个 API 文档里有,但没看到过就是想不起来。这个就只能靠多看开源项目和翻文档列表了。
    LINAICAI
        17
    LINAICAI  
       Jan 12, 2023
    Appkit 真一言难尽啊,也就那样摆烂了。
    covvee
        18
    covvee  
    OP
       Jan 12, 2023
    楼上朋友们快成功把我劝退了,哈哈哈
    covvee
        19
    covvee  
    OP
       Jan 13, 2023
    我找到一个项目可以用来学习学习了

    https://github.com/WilsonGramer/wwdc21-dock
    em70
        20
    em70  
       Jan 13, 2023
    delphi 11 是开发 mac 桌面程序,最简单的方案,拖拽式开发,资料也够,但需要 win 系统
    halowang1991
        21
    halowang1991  
       Jan 13, 2023
    虽然 OP 说不是 window management, 不过, 如果真的是窗口管理这种高大上的活儿,

    Quartz Window Services

    https://developer.apple.com/documentation/coregraphics/quartz_window_services

    可以一看
    netabare
        22
    netabare  
       Jan 13, 2023 via Android   ❤️ 1
    可以试试看有没有类似的,功能不相同但原理差不多的项目,fork 一下慢慢研究。

    不过如果要实现的功能需要用私有 api 的话感觉就够呛…
    jay435990054
        23
    jay435990054  
       Jan 13, 2023
    @objectxiang 能加个微吗 我也是做 mac 开发
    objectxiang
        24
    objectxiang  
       Jan 13, 2023
    @jay435990054 ODUzNjg2NTcwMTg=
    covvee
        25
    covvee  
    OP
       Jan 13, 2023
    @objectxiang 老哥,能否请教一个问题。

    ```
    let options = CGWindowListOption(arrayLiteral: .excludeDesktopElements, .optionOnScreenOnly)
    let windowsListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
    let infoList = windowsListInfo as! [[String:Any]]
    let visibleWindows = infoList.filter{ $0["kCGWindowLayer"] as! Int == 0 }

    ```

    我观察到,他们用的是同一个 Pid,但是有不同的 kCGWindowNumber


    现在我查到能用上面这样子去得到所有打开的 window 窗口,但是有什么的方法,可以指定打开某个 window 吗?

    比如说我 vscode 打开了两个窗口,一个 window 写前端,一个写后端。swift 现在有没有哪个 api 可以指定打开某个 window?

    查了一个早上,也看到很多人有相同的问题,都没有得到答案。
    songquan
        27
    songquan  
       Jan 15, 2023
    @covvee 看到这一条,我激动得很啊,因为 ubar 这个软件我确实很喜欢,不得不说 window 的任务栏确实是生产力神器,mac 的 dock 虽然优雅,但是无法通过肌肉记忆完成操作,并且窗口识别和切换逻辑混乱。可惜 ubar 已经接近停更了,期待你的作品!
    covvee
        28
    covvee  
    OP
       Jan 15, 2023
    @songquan 还在尝试,有很多难题在研究。比想像的麻烦太多
    objectxiang
        29
    objectxiang  
       Jan 16, 2023
    @covvee 据我所知,正常很难实现这个,没有现成 API
    covvee
        30
    covvee  
    OP
       Jan 17, 2023
    @objectxiang 这个我现在勉强搞定了。

    还有一个问题,比如说微信,当我点了最小化或者关闭按钮之后,我用 NSWorkspace.shared.runningApplications 就拿不到了。

    我想请问一个问题,怎么判断一个应用,是可以收缩在右上角 status bar 的?或者这么说,我可以怎么样去拿到 status bar 上面的应用列表?
    objectxiang
        31
    objectxiang  
       Jan 17, 2023   ❤️ 1
    @covvee CGWindowListCopyWindowInfo 列表的 window level = 25 就是了,正在运行的程序的话,需要更低级别的 API 才能准确获取
    covvee
        32
    covvee  
    OP
       Jan 17, 2023
    @objectxiang 非常感谢。我能不能再问最后一个问题,如何监听到有新的通知?比如说微信等应用,我希望能监听到它们来了新消息,可以显示小红点。
    squallsdjl
        33
    squallsdjl  
       Feb 15, 2024
    哈哈哈,搜 macos 搜到这里,兄弟现在开发能力如何,我最近想求 macos 开发组队,但是找不到人
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1022 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 22:02 · PVG 06:02 · LAX 15:02 · JFK 18:02
    ♥ Do have faith in what you're doing.