V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
quietjosen
V2EX  ›  程序员

Mac 开发的神秘面纱:后娘养的嫡长子

  quietjosen ·
atjason · 2017-07-18 08:05:22 +08:00 · 15123 次点击
这是一个创建于 2714 天前的主题,其中的信息可能已经有所发展或是发生改变。

本来,标题是「揭开 macOS 开发的神秘面纱」,可想想,以我目前对 macOS 开发的理解,还是去掉「揭开」二字吧 😂

本文不是系统性的文章,更像是 随笔。回想自己过去 1.6 年的 macOS 开发历程,挑些有意思的来说。如果想看完就去挖 macOS 这座金矿(如果是的话),你会失望的;且作佚事来读吧

注:严格地说,应该叫作「macOS 开发」,因为去年起,苹果将 Mac 操作系统更名为 macOS ;不过,苹果电脑依旧以 Mac 命名,如 MacBookPro,故而 Mac 开发也说得过去;再加上,以小写字母开头作为文章名,总觉得怪怪的,是以本文混用「 Mac 开发」与「 macOS 开发」

----- 长文开始警戒线;不喜请绕行 -----

0) Mac 是后娘养的嫡长子

说 Mac 是嫡长子,是因为 苹果就是做电脑起家的。虽说后来 iPod、iPhone 风生水起,但嫡长子的血统还是纯正的;而 iOS 正是基于 macOS 开发的。这里的故事很多,感兴趣可以读读《乔布斯传》之类的书或文章。

可惜的是,有了 iPhone 这棵摇钱树之后,Mac 电脑靠边站了,macOS 自然也被冷落,不到万不得已,不更新;即使更新,也像挤牙膏一样。

Mac 哪里被冷落了?多了去了。

比如,我每周都会收到一款苹果给开发者的邮件,本意是告知本周 App 的活跃程度。而我每次收到的邮件内容都是这样的:

因为我尚未上架 iOS 应用、只有 macOS App ;而 在苹果看来,macOS App 岂能叫 App ?!是以,这里的数据是空的…

其它的,不胜枚举。

1) Mac 是个小市场

有多小?

先说说硬件,这是 2016 第四季度出货量对比:

设备 | 出货量 | 营收 --- | --- | --- Mac | 537 万 | 72 亿美元 iPhone | 7,830 万 | 543 亿美元

不论是出货量、还是营收,均是零头。

再来看看 App 的数量:

AppShopper 的数据来看,不足 3 万的 macOS App 数量,不到 iOS App 的 1%;对,是「百分之一」,零头的零头

当然,这里主要统计的是上架 MAS (Mac App Store) 的应用,在 MAS 之外也有很多。不过,2 个数量级的差异,没跑。

现说说操作系统占比:

MarketShare 的数据,macOS 仅占 6.12%,仅有 Windows 用户的 6.7%.

其中,macOS 版本的分散程度,虽比 Windows 好很多,但也 不如 iOS:

看到这里,是不是觉得有些心凉,觉得 Mac 好可怜有没有…

不过,Mac 电脑确实是在慢慢增加的,知名度也在变高。比如,国内现代都市剧中出现的电脑,大多都是 Mac;苹果也刚刚宣布 全球 Mac 活跃用户有 1 亿

2) Swift or Objective-C

我开发的应用 (KlibiPiciPic MoveriPasteiTimeriHosts),全部基于 Swift ;不过,即使你也打算基于 Swift,还是建议对 Objective-C 有基本的了解。因为,毕竟 Objective-C 是苹果一直以来使用的开发语言,绝大多数的文档、教程,都是基于 Objective-C 的。

虽说可以很容易地改编为 Swift、或被 Swift 调用,但这就像是:你有一本英文词典,理论上就可以直接看英文文章,因为看见不懂的单词可以查嘛;但也知道,这不现实,毕竟你总不能每个单词都查吧?

所以:

  • 如果你已经有 Objective-C 基础,就直接使用 Objective-C 开发 Mac 应用好了。要不要学 Swift ?看你自己心情,我不提供建议;
  • 如果你并没有 Objective-C 基础,建议你先学学 Objective-C 基础,然后再学 Swift,并基于 Swift 开发。

3) Mac 文档及教程

官方文档主要有这些:

实际上,由于我们一般是「面向 Google 编程」,一般遇到问题都是先搜索,不太需要记录这些网址。只是,如果你想系统性、深入地学习某个点时,可以正向地从官方文档入手。

不过,对于 苹果的开发文档,友情提醒:并不怎么好。如果套用这句话: 「为什么懂得这么多道理,却仍过不好这一生?」

便是: 「为什么我看了所有 Mac 文档,却仍无法开发 Mac 应用?

文档更多是偏向对某个具体知识点的介绍,而如果想系统性地入门 macOS,最好是通过一本好的书,以及自己的练习。由于 iPhone 的热销,市面上 iOS 的书,可谓汗牛充栋。而 macOS 的书呢?呵呵

我自己是看《Cocoa Programming for Mac OS X》这本书入门 macOS 开发的,这几乎是我在 2015 年能找到的唯一一本基于 Swift 的 macOS 开发教程。另外一本是 Swift Development with Cocoa,跟这本书没法比。

其他 macOS 的书,我看的不多,也没什么好推荐的。如果你有觉得哪本书不错,欢迎留言告诉我。

4) macOS 数据结构及持久化

首先要说的是,虽说是 macOS 开发,但实际上很多基础的东西都是通用的,比如 JSON 格式、MySQL 数据库等等。

另外,macOS 和 iOS 相比,像 TouchBar 这种独有的东西,并不多;更多的是通用的,或者说是并行的两套。

使用 plist 文件存储数据:

  • 默认仅支持简单的数据结构;此方式仅适合保存少量数据,如偏好设置中的 On/Off 选项
  • 可使用 UserDefaults 管理默认的 plist 文件。注意:沙盒模式和普通模式下默认的 plist 文件的位置不同
  • 可在命令行中使用 defaults 命令来管理 plist 文件中的数据
  • 可使用 Xcode 打开 plist 文件进行管理

序列化后存储:

  • 对于自定义类型,适配 NSSecureCoding 协议后,可使用 NSKeyedArchiver 转换为 Data 格式
  • 进而,可存储在普通文件中,也可存储于 plist 文件中

Core Data:

  • Core Data 本质上是对数据访问方式的封装
  • 对于简单的数据结构,使用 Core Data 会带来额外的复杂度,并不划算。对于复杂的应用,Core Data 可以显著减少代码量
  • 持久化方面,Core Data 提供了对象-关系映射 (ORM) 的功能,不编写任何 SQL 语句,即可将数据保存在 SQLite 数据库文件中,也能还原到内存中

CloudKit:

  • 存储方面,CloudKit 本质上类似于云端的关系数据库
  • 除了存储,CloudKit 更有用的场景,是在多设备、macOS 与 iOS 间同步数据。比如,系统自带的 Notes 等应用,均是通过 CloudKit 来存储、同步数据。其中,通知机制可以最小化需要同步的数据量
  • 再有,就是提供基于 CloudKit 的共享功能

注:数据持久化存储方式有非常多,也要视具体的需求而定;这里仅提及一些常用的方式。

5) macOS 界面开发

我们所说 macOS 开发,通常默认指开发「有界面及交互的、能运行在 macOS 上的应用」,其核心,就在于界面及交互

我们也常听到 Cocoa,那 什么是 Cocoa 呢?援引《 Cocoa Programming for OS X 》中的介绍:

Cocoa is your application ’ s interface to the window server to receive events and draw to the screen. At the same time it has access to the Unix layer where it can make lower level calls.

也就是说,Cocoa 是这样一个中间环节:负责衔接你的应用与窗口系统,同时也可直接操作系统底层。

界面的开发,是个无底洞;可以是个简单的单窗口应用,也可以是 Pages、iMovie 这样复杂的应用。

对于初学者,建议从菜单栏程序入手。可以暂时绕开窗口、控件这些复杂的话题,又可以创建出能解决实际问题的一些应用。比如,iPic 主交互即位于菜单栏:

这部分,可参见我之前写的教程:Status Bar App 教程是 16 年 4 月写的,现在来看有些可能已经过时,比如当时是基于 Swift 2.2 ;不过整体还是可以参考的。

回到界面的开发。首先,要理解 App 的整体生命周期。尤其是 App 启动时,都做了哪些事、先后顺序及依赖是什么。

然后,实际的工作,就是搞定界面布局,以及熟悉一个个控件的用法,如 NSButton、NSTextField、NSTableView 等等。建议的学习步骤:

  • 先随意玩玩,能让控件跑起来;一些控件复杂,跑不起来也不用觉得沮丧
  • 如果官方有 Programming Guide,认真读一遍
  • 如果官方有示例程序,学习之,熟悉正确的用法
  • 过一遍 API Reference,了解控件所有的可能性和局限
  • 解决自己实际的问题,真正用起来

我一般的开发步骤:

  • 想清楚数据结构
  • 堆 UI
  • 完成业务逻辑

6) macOS 设计模式之解耦

随着程序变得复杂,代码变多,也很容易交织在一起。对于进一步开发和维护,是非常头痛的事。

怎么避免这样的情况呢?其中一个思路是:解耦

抽象的说,就是 把复杂的东西拆成一个个独立的模块,然后通过一些方式让这些模式有机地组合在一起

有哪些方式呢?顺着这个思路,我列出一些概念。

MVC 模式 (Model-View-Controller)

  • 这一模式在界面开发里大量使用,比如你经常看到的 XXViewController,就是其中的 Controller 部分
  • 简单的说,就是 把界面与逻辑分离。界面部分,如布局、样式等。通常,代码量最多的,都是在 Controller 中。View 与 Controller 之间,通过引用、绑定来传递数据,即将数据显示在界面中、从界面读取用户产生的数据

Delegate

  • 有两个角度来理解代理。以 NSWindowDelegate 为例,可理解为 Window 本身有丰富的可定制性,程序可选择性地实现某些功能、特性
  • 另一个角度是,同样对于 NSWindowDelegate,对事件(如窗口即将关闭)的响应,Window 本身是不知道的,或者说是具体的业务相关的。Window 自己做不到,只能委托给自己的「代理」去决定。比如,当窗口即将关闭时,程序提示用户保存未保存的数据

Callback

  • 对于非实时的操作,可以使用 Callback 回调的方式,来解耦调用者和执行者之间的等待
  • 比如,程序在从网络下载图片时,可能需要 1ms,也可能需要 2s,程序总不能傻等着。于是,程序告诉下载的模块:我去忙别的事了,你下载好了告诉我。怎么告诉?就是通过 Callback 回调机制实现
  • 与之关联的概念,如代码块

Notification

  • 对于「**如果…就…**」这样的逻辑,比较适合的是通知机制
  • 这里的通知,不止是从网络上推送下来的通知,也可以是程序内部的通知
  • 比如,用户在偏好设置的界面中完成账户升级后,在程序内发出账户类型变更的通知;程序的主窗口之前注册以监听这一通知,便可根据账户类型实时调整界面

7) 发布 macOS 应用

自己辛苦开发的程序,通常是愿意让更多人来用的。如果能赚点小钱,当然更好啦。

7.0) macOS 应用签名

对于简单的程序,可以复制到别的电脑上运行,但最好还是要对程序进行签名。尤其是使用 CloudKit 等一些苹果特性的程序,必须签名。

怎么签名呢?前提是交钱。也就是,必须每年交给苹果 $99 的人头税,才能成为苹果开发者,进而给应用签名。

7.1) MAS 与沙盒模式

在 MAS (Mac App Store) 上提交的应用,必须运行在沙盒模式中。

沙盒模式有诸多限制,比如,默认不能访问用户的任何文件、一些接口无法使用等等。和 iOS 的沙盒模式相比,macOS 的沙盒模式还是宽松很多的。以访问文件的权限为例,应用可以申请访问如 Downloads 等指定目录。向谁申请呢?苹果,而不是用户。一旦通过(虽然并不容易),便可直接访问该目录,无需用户授权。

事实上,沙盒模式确实限制了程序的发挥空间,一些应用(如屏幕取词翻译、截图工具)干脆无法上架,或者额外开通「 Accessibility 」权限才能正常工作。而据说苹果已不再放行需要此权限的应用上架。

7.2) MAS 付费方式

苹果支持多种内购方式,要想通过应用收费,最简单的方式是:设置程序必须付费才能下载。这样,程序内无需区分免费版与高级版,无需做任何功能限制,代码简单。苹果系统保证了,使用哪个 Apple ID 下载的应用,只能在使用哪个 Apple ID 上登录的电脑上使用。比如,你自己购买了某个付费应用,直接把 .app 复制到朋友的电脑上,是无法运行的

不过,这一方式也有局限:用户在付费之前,无法体验到产品的所有功能,也就很难决定是否要付费。对于这一局限,一些程序的做法时:在产品官网提供一个全功能、但仅能运行一段时间(如 7 天)的 体验版。这样,用户可以在体验所有功能后,决定是否购买。

再进一步,就是 免费版 + 内购的模式。用户可免费下载应用,但应用仅开放基础功能,需要内购才能使用高级功能。这样,既能最大化地获取用户,又能适时地收费,我的所有应用都采用此方式,相信也是未来一段时间的趋势。

对于内购,又分为一次性购买和订阅制。一次性购买容易理解;订阅制可以有按月、季度、年等不同周期。对于订阅制,又分为自动续订和手动续订。目前,苹果对于订阅制、尤其是自动续订的订阅制,审核较严。

另外,还有 消耗型内购,这种在游戏中较为常见,比如花钱买装备,或者为账户充值等。

对于内购的开发,还是比较繁琐的,比如要处理展示、购买、用户购买后退款、恢复、订阅续订、订阅未续订导致过期等等逻辑。好在,我封装了 IAPHelper,可以很方便地处理这些逻辑(如下代码为购买部分);开源,可以 Pod 方式集成,已经在我的产品中应用多年,大家可放心使用。

 IAP.purchaseProduct(productIdentifier, handler: { (productIdentifier, error) in
	if let identifier = productIdentifier {
		// The product of 'productIdentifier' purchased.
	     
	} else if let error = error as? NSError {
      if error.code == SKError.Code.paymentCancelled.rawValue {
		// User cancelled
        
      } else {
		// Some error happened
      }
    }
})

7.3) 不完美的 MAS

之前苹果与微信怒怼的打赏分成事件,想必让更多朋友知道了:凡是应用从用户收到的钱,苹果均要收 30% 的拔毛费。

MAS 的诸多限制,以及不菲的拔毛费,让很多知名的 macOS App 纷纷下架,如 Sketch、Dash 等等。

不过,要在 MAS 之外发布,还是要做很多事情的,比如下载、支付、退款、激活码等等。对于小程序,还是挺繁琐的,并不划算。另外,毕竟 MAS 还能带来一些自然流量。

如果在 MAS 之外发布,还有一点需要注意:**.app 程序本质上是一个文件夹**。如果需要在网络上传送(如作为邮件的附件),最好是进行压缩,甚至是制作 .dmg 文件,我使用的是 create-dmg 这个小工具,非常方便,生成的样式也简单大方。

基于上面的原因,目前我的应用全部在 MAS 上发布,尚未在 MAS 之外发布。

尾巴

macOS 开发的话题还有非常多,比如 Storyboard、绑定、动画、并发、Undo、Pasteboard、Drag & Drop、本地化、单元测试等等,本文不可能全部提及。并且,写起来也好累,毕竟必须对这些点有完全的掌握,才可能写出来。暂且挖坑,以后再填。

对 macOS 开发感兴趣?欢迎留言交流。


原文:「自在开发」公众号

118 条回复    2017-07-20 07:25:07 +08:00
1  2  
csunny
    1
csunny  
   2017-07-18 08:14:12 +08:00
特意来支持一下。
zhs227
    2
zhs227  
   2017-07-18 08:17:31 +08:00   ❤️ 6
大早起来看到楼主码这么长的文章,给点个赞。
感谢楼主浇灭了我独立开发 App 的念头,也祝楼主早日过上理想中的独立开发者生活
quietjosen
    3
quietjosen  
OP
   2017-07-18 08:23:43 +08:00   ❤️ 1
@zhs227 「感谢楼主浇灭了我独立开发 App 的念头」…
gulangyu
    4
gulangyu  
   2017-07-18 08:26:06 +08:00 via Android
一大早又看到裹脚布——又 chou 又长

请贴链接,谢谢
crysislinux
    5
crysislinux  
   2017-07-18 08:27:12 +08:00 via Android
@gulangyu 他这又不是转载,为啥不能贴全文。
quietjosen
    6
quietjosen  
OP
   2017-07-18 08:37:32 +08:00
Chingim
    7
Chingim  
   2017-07-18 08:45:03 +08:00 via Android
我觉得投资 macOS 开发的收益好低,受众少又不跨平台
nieyujiang
    8
nieyujiang  
   2017-07-18 08:47:40 +08:00
我认为,主要还是中文资料比较少.经常看到有人问有没有中文版的文档之类的.
quietjosen
    9
quietjosen  
OP
   2017-07-18 08:55:10 +08:00
@Chingim 你说对了。
operafans
    10
operafans  
   2017-07-18 08:55:31 +08:00
@Chingim 主要是受众少。

而受众少的原因主要是因为软硬件绑定。神奇的是同一个因素反而造成 iOS 跟 macOS 的天壤之别。
quietjosen
    11
quietjosen  
OP
   2017-07-18 08:55:37 +08:00
@nieyujiang 做开发,英文还是要会的,不然总会慢外国人半拍。
Ringokun
    12
Ringokun  
   2017-07-18 09:08:20 +08:00   ❤️ 6
@quietjosen 写得真好,国内关于 Mac App 开发的资源(书籍甚至博客)真的是太少了,楼主写的这些可能可以让国内有兴趣的开发者能够更方便的上手,支持楼主。

@gulangyu 国内 Mac App 方面的资源本来就十分匮乏,楼主在自己开发之余写下这些文章,本身就是对这方面国内开发者社区的一种支持,我觉得很值得鼓励,而不应扔下一句"又 chou 又长"。你觉得有什么地方写得不好(chou),大可以在评论里面指出来,"长"这个更是没必要指责了,技术类文章重要的应该是内容,内容好的话长一点不应该更好吗(可以让人学到更多),这篇至少我觉得内容很好,让我这类对这方面开发有一点兴趣的人可以有一个初步的认识。

看了楼主的博客,感觉楼主早已过了与人争论浪费自己时间的这一阶段,我觉得挺好的。我之所以现在出来扯几句,也只是觉得 v 站不应该让这种一上来就没由来地泼冷水的声音成为主流,你 @gulangyu 要觉得写得不好,请说出你的理由。
blacklee
    13
blacklee  
   2017-07-18 09:08:25 +08:00
iOS 拥有那么多的用户,现在独立开发者想赚钱都不容易了。而 Mac 的用户量明显少太多,所以赚钱肯定是更难的事情。
majinjing3
    14
majinjing3  
   2017-07-18 09:31:56 +08:00 via Android
很好(✪▽✪)支持
quietjosen
    15
quietjosen  
OP
   2017-07-18 09:33:54 +08:00
@Ringokun 「写得真好」👍
quietjosen
    16
quietjosen  
OP
   2017-07-18 09:34:26 +08:00
@blacklee 听起来,都难 😅
yishanxin
    17
yishanxin  
   2017-07-18 09:36:16 +08:00
@quietjosen 最近刚好在玩 Spotify 类似歌词插件,感觉 mac 开发还是挺好玩的,(新手入坑)不懂的就看 apple 文档!心理倒是挺踏实的
quietjosen
    18
quietjosen  
OP
   2017-07-18 09:38:40 +08:00
@yishanxin 期待大作,完善 macOS 生态 👍
songjiaxin2008
    19
songjiaxin2008  
   2017-07-18 09:41:22 +08:00
CoreData 真的能用吗--
jfhufhf
    20
jfhufhf  
   2017-07-18 09:41:24 +08:00
很不错的文章,期待有更详尽的教程出来:)
quietjosen
    21
quietjosen  
OP
   2017-07-18 09:47:11 +08:00
@songjiaxin2008 我其实很少用,都自己堆代码;初期麻烦些,但灵活。
quietjosen
    22
quietjosen  
OP
   2017-07-18 09:47:43 +08:00
@jfhufhf 写文章很花时间,且对技术要求很高。怕是我很长一段时间,都只能写这种「随笔」类型的。
HuxleyYang
    23
HuxleyYang  
   2017-07-18 09:49:25 +08:00
楼主不错啊 我在 Mac 平台混迹 3-4 年了 自叹不如
songjiaxin2008
    24
songjiaxin2008  
   2017-07-18 09:57:18 +08:00
@quietjosen 嗯 那您现在是用 CoreDta 吗 还是 Realm 之类的
Yvette
    25
Yvette  
   2017-07-18 10:01:46 +08:00
「解耦」里的那一团黑线是在 Notes 里画的吗……笔触好独特
fyooo
    26
fyooo  
   2017-07-18 10:07:52 +08:00
写得真好,赞!
gggxxxx
    27
gggxxxx  
   2017-07-18 10:08:21 +08:00   ❤️ 1
楼主的内容不太认同。
1. mac 现在相对 ios 示弱是因为移动设备是计算机硬件发展未来形态。但 Mac 生态相对 ios 有更成熟的环境。
2. Mac app store 的优势是平台方便,一年 99 刀换来的是发布上传销售结算等省心服务,这显然是比较值的。mac app store 真正该喷的是 30%抽成。ios 大多 app 都才 0.99 售价,被苹果也就抽 0.3 刀,毛毛雨。而常规的桌面软件定价都是几十美元的,抽 30%就是大数额了。这导致很多开发者宁愿自己搭建销售平台。
3. 沙盒模式是未来趋势,这方面我是坚定支持的。你就说你愿意安装一个能后台扫描你硬盘的 qq 还是去官方商店下一个受权限约束的 qq ?
4. 关于 swift 和 oc,我觉得吧,作为工程师的日常就是每天都学习新的东西,这也是这个工作的最大乐趣,有什么好排斥的。
Shvier
    28
Shvier  
   2017-07-18 10:11:04 +08:00
iOS 和 macOS 的天壤之别应该还是经济问题,一部 iPhone 买去年或者前年的,可能就一个安卓手机的钱,但是一台 MacBook 至少是两台 Windows 笔记本或者两台 iPhone 的价格,多数人买一台一两万的笔记本还是需要下很大的决心的。

「正因为 MacBook 价格贵所以用户少,因为用户少所以 macOS App 价格高,而价格高又导致了购买量少。」感觉还是有点道理的。
plqws
    29
plqws  
   2017-07-18 10:15:04 +08:00
我觉得 Mac 开发或者相关开发,最恶心的东西就是 Xcode
quietjosen
    30
quietjosen  
OP
   2017-07-18 10:22:52 +08:00
@songjiaxin2008 下一步准备用 CloudKit
quietjosen
    31
quietjosen  
OP
   2017-07-18 10:23:33 +08:00
@HuxleyYang 客气,只是你不愿意写而已 😀
zjddp
    32
zjddp  
   2017-07-18 10:24:07 +08:00
感谢楼主浇灭了我独立开发 Mac App 的念头

我为什么不用 electron 呢?
linpf
    33
linpf  
   2017-07-18 10:24:56 +08:00
@plqws Xbug
quietjosen
    34
quietjosen  
OP
   2017-07-18 10:27:01 +08:00
@gggxxxx 我好像并没有看到矛盾之处…

关于「沙盒模式」,这不是固定的概念。沙盒模式有优势,并不意味着现在的 macOS 沙盒模式是完善的。

比如,我就想要屏幕取词工具,为什么沙盒模式不支持呢?
比如,为什么要苹果来审核权限,而非像 iOS 一样由用户决定是否放行?
Tunar
    35
Tunar  
   2017-07-18 10:27:10 +08:00 via Android
苹果这方面的文档。。。。唉。。。
quietjosen
    36
quietjosen  
OP
   2017-07-18 10:29:54 +08:00
@Shvier Mac 的价格确实太傲娇。不过,相比而言,我倒觉得 iPhone 更贵、性价比更低,尤其是容量大些的。
quietjosen
    37
quietjosen  
OP
   2017-07-18 10:31:07 +08:00
@zjddp 这是开发者和用户视角的不同。作为用户,相同功能,我愿意用 10 MB 的原生应用,而不是 100 MB 的大家伙。
quietjosen
    38
quietjosen  
OP
   2017-07-18 10:31:24 +08:00
@plqws 关键,这是唯一选择。
wozhizui
    39
wozhizui  
   2017-07-18 10:47:16 +08:00   ❤️ 1
好文,已收藏。
基于苹果的品牌效应,我觉得 macOS 用户会越来越多的。
记得去年刚用 mac 时,微信 mac 版很渣,落后微信的 windows 版本很多,没有收藏,不能语音和视频。
后来腾讯更新了 mac 的微信和 qq。现在基本没啥差别了。甚至最新的 win 版 tim 直接就是根据 mac 版的 QQ 做的。
以小见大,Mac 平台应该会越来越受重视。毕竟广大互联网专业用户还是更喜欢 Mac 的。
而这部分人,就是引领互联网的人,mac 会越来越多的。
假如哪天 mac 能和 windows 的市场份额并驾齐驱,那么早起就在 Mac 开发耕耘的人,会大展拳脚的。
taodi
    40
taodi  
   2017-07-18 10:52:18 +08:00 via iPhone
写的真不错 学习了
hekunhotmail
    41
hekunhotmail  
   2017-07-18 10:57:32 +08:00
这个必须点个赞,支持一下,难得早上能看到这样一篇好文!
oimotis
    42
oimotis  
   2017-07-18 11:00:52 +08:00
好文!不过这篇其实是吓初学者的好文。。

想入坑的朋友不要被吓到了,实际上非常简单,学会 objc 后就买一本 《 Cocoa Programming for Mac OS X 》看完就可以搞事了。其它的问题 google,另外,Swift 不学也是可以的 2333。
del1214
    43
del1214  
   2017-07-18 11:04:22 +08:00
来膜拜一下大神
quietjosen
    44
quietjosen  
OP
   2017-07-18 11:33:24 +08:00
@wozhizui 据说,国内有 500 万 Mac 活跃用户…
quietjosen
    45
quietjosen  
OP
   2017-07-18 11:34:12 +08:00
@oimotis 平易近人的大牛 😀
sobigfish
    46
sobigfish  
   2017-07-18 11:34:37 +08:00
关键是好多 API 没有文档 或者历史版本里才有
quietjosen
    47
quietjosen  
OP
   2017-07-18 11:35:16 +08:00
@sobigfish 苹果的文档,咳咳,就不说啥了…
daysv
    48
daysv  
   2017-07-18 11:39:51 +08:00
用 nwjs 搞 windows 的
顺手撸了个 mac 版, 发现还很好用
imagine243
    49
imagine243  
   2017-07-18 11:40:03 +08:00
好文! 可以简单明了的了解下 macApp 的开发.
quietjosen
    50
quietjosen  
OP
   2017-07-18 11:45:11 +08:00
@daysv 黑猫白猫,都是好猫。
quietjosen
    51
quietjosen  
OP
   2017-07-18 11:45:20 +08:00
@imagine243 乐见于此。
SNOOPY963
    52
SNOOPY963  
   2017-07-18 11:46:02 +08:00
资瓷

讲道理,现在有 windows 的用户想要迁移到 Mac 上没啥压力,
有 MED 还是可以无缝使用还没替代品的软件

无非是为啥迁移到 Mac 上

不过讲道理, 相比于 Mac 于 Windows,还是 iPhone 于 Android 更贵。
SingeeKing
    53
SingeeKing  
   2017-07-18 11:59:49 +08:00
30,000 是 1,500,000 的 2%……
quietjosen
    54
quietjosen  
OP
   2017-07-18 12:00:40 +08:00
@SNOOPY963 反而是 Mac 到 Windows,一些软件没有替代,如 Sketch、iPic 😂
ChristopherWu
    55
ChristopherWu  
   2017-07-18 12:02:30 +08:00
好文点赞。v 站比较缺这类型的文章
quietjosen
    56
quietjosen  
OP
   2017-07-18 12:08:21 +08:00
@SingeeKing 你说的对,iOS 确实不应该简单相加。

交互引用 ASO 100 的数据:(29508 / 1965166) * 100% = 1.5%

![]( )

https://aso100.com/rank/overview
n6DD1A640
    57
n6DD1A640  
   2017-07-18 12:28:03 +08:00
有个槽想吐好久:论学取名的重要性
n6DD1A640
    58
n6DD1A640  
   2017-07-18 12:28:28 +08:00
不过文章不错,感谢分享
xrr2016
    59
xrr2016  
   2017-07-18 12:56:21 +08:00
问下楼主,现在用 Electron 开发会不会更好?
gggxxxx
    60
gggxxxx  
   2017-07-18 13:02:05 +08:00 via iPhone
@quietjosen mac 和 ios 的沙盒策略是一样的思路,细节有差异而已。
沙盒不是 mac app 的唯一形式。
so898
    61
so898  
   2017-07-18 13:23:23 +08:00
楼主醒醒,该升级 Swift 4 啦,3 的语法完全不能用啦
quietjosen
    62
quietjosen  
OP
   2017-07-18 13:31:26 +08:00
@xrr2016 其实我不熟悉 Electron ;不过,感觉,对开发者友好,对用户…
quietjosen
    63
quietjosen  
OP
   2017-07-18 13:32:59 +08:00
@gggxxxx 细节差很多,比如,iOS 下用户可以授权、取消授权、授权、再取消…

并且,两个平台本身就差别很大,也无需使用相同的沙盒策略。

另外,macOS 的沙盒已经 N 年没变了,也可以说是裹足不前 N 年了。
quietjosen
    64
quietjosen  
OP
   2017-07-18 13:33:25 +08:00
@so898 我有说 Swift 3 吗?
so898
    65
so898  
   2017-07-18 13:34:53 +08:00
@quietjosen 看到你是用 Swift 来做项目的,习惯性提醒
你要是用 Swift 2 的话就当我没说好了
quietjosen
    66
quietjosen  
OP
   2017-07-18 13:37:00 +08:00
@so898 很早就升 3 了,虽然不是第 1 时间: https://atjason.com/daily/2016-10-07.html
middleware
    67
middleware  
   2017-07-18 13:42:02 +08:00
@quietjosen 你觉得 macOS 的沙盒需要怎么变呢?我觉得有了 sandbox 就可以了。就像服务器的安全其实用 9-bit 都能够用了。
quietjosen
    68
quietjosen  
OP
   2017-07-18 13:53:01 +08:00
@middleware 好,说个具体的例子。你去看 App Store 上的剪贴板应用,默认都不能粘贴历史,都要下载一个所谓的助手、插件,功能无非是安装一个 Script 脚本,以实现粘贴的功能。

需求明摆着是有的。App Store 或者说沙盒不支持自定义 Script 脚本,结果用户自己去下载一个自己不可能认证是否安全的脚本。App Store 倒是免除了安全风险,但实际上只是把皮球踢给了用户而已。
xjbeta
    69
xjbeta  
   2017-07-18 15:06:00 +08:00
macOS 开发真是 全程面向 Google 到面向 stackoverflow 再到 github gist 再摸回官方文档
(你尽管搜 搜的到算我输。。。。
quietjosen
    70
quietjosen  
OP
   2017-07-18 15:17:20 +08:00
@xjbeta 一看就是行家
marknote
    71
marknote  
   2017-07-18 15:58:01 +08:00
赞一个。很多我想说的关于 macOS 开发的话,都被楼主发了 :)
henryshen233
    72
henryshen233  
   2017-07-18 16:04:40 +08:00
我也有一本 Cocoa Programming For Mac OS X,买来没看几页就荒废了,后来用 OC 开发了个 App。听你这么说,我今天回去得好好开始看这本书了!
quietjosen
    73
quietjosen  
OP
   2017-07-18 16:08:28 +08:00
@marknote 来来来,别憋着,整篇文章瞧瞧 😀
quietjosen
    74
quietjosen  
OP
   2017-07-18 16:09:06 +08:00
@henryshen233 这书好几年没更新了,而 Swift 都到 4 了,难免有些过时,不过整体还是可看的。
kutata
    75
kutata  
   2017-07-18 16:10:58 +08:00
我就问一句,作者赚了多少钱!?
quietjosen
    76
quietjosen  
OP
   2017-07-18 16:14:19 +08:00
billzbc
    77
billzbc  
   2017-07-18 17:31:32 +08:00
用了一年楼主开发的 iPic 路过给个好评
wenhairong
    78
wenhairong  
   2017-07-18 17:41:48 +08:00
mark.........
quietjosen
    79
quietjosen  
OP
   2017-07-18 17:51:32 +08:00
@billzbc 看头像就知道是自己人 😀
so898
    80
so898  
   2017-07-18 18:29:25 +08:00
@quietjosen 马上就要升级 4 啦
建议现在就拿起 Xcode Beta 改起来
quietjosen
    81
quietjosen  
OP
   2017-07-18 18:39:42 +08:00
@so898 我等别人踩过坑了再升 😂
wolfan
    82
wolfan  
   2017-07-18 18:49:03 +08:00
话说的,分明我们的樊大姐用的就是比硬币还薄的 MiBook
Ehco1996
    83
Ehco1996  
   2017-07-18 18:51:31 +08:00 via iPhone
有那么一端时间想过开发 app
开了几十集 swift 视频..放弃了..
因为视频更新到一半..
swift 就又出了一个版本😂

现在主攻 python web
明年就毕业啦 ⛽️
quietjosen
    84
quietjosen  
OP
   2017-07-18 19:06:23 +08:00
@wolfan 硬币这个梗,还没过去呢 😂
quietjosen
    85
quietjosen  
OP
   2017-07-18 19:06:36 +08:00
@Ehco1996 这是一个悲伤的故事…
seeker
    86
seeker  
   2017-07-18 20:10:43 +08:00
YoMail Mac 下载量是 Windows 的 60% 左右,比我们想象的多不少。建议大家多关注 Mac 平台。
另外 electron 的出现让 Mac 上的 app 难度直线下降。
quietjosen
    87
quietjosen  
OP
   2017-07-18 20:38:38 +08:00
@seeker 谢分享,好消息。
blingbling55555
    88
blingbling55555  
   2017-07-18 20:54:38 +08:00
没细看……

桌面应用的话,玩玩 electron ?
so898
    89
so898  
   2017-07-18 21:07:54 +08:00
@quietjosen 踩了一天的表示,早踩早超生
quietjosen
    90
quietjosen  
OP
   2017-07-18 22:25:24 +08:00
@so898 今天 iPaste 新版在 macOS High Sierra 上测试,发现一些小问题,最严重的:无法升级 Pro 😂
rajiha
    91
rajiha  
   2017-07-18 23:43:02 +08:00 via Android
原来 iTimer 是您开发的,有幸在 V2EX 见到开发者,真是巧。
这是个简单实用的工具,多谢!
cctrv
    92
cctrv  
   2017-07-19 02:27:32 +08:00 via iPhone
這篇文章寫得很好啊。我也準備入門 iOS 開發了。
beakey
    93
beakey  
   2017-07-19 07:17:48 +08:00
同样功能的软件,macOS 的第三方依赖比 iOS 少很多。因为没什么库可依赖的。
Joee
    94
Joee  
   2017-07-19 08:03:51 +08:00
Apple 的文档……就像是个“零件使用说明书”,看完是没法拼一辆车出来的。
Unity 的文档是我看过的最好的,基本每个 feature 都有代码范例。
Mac 市场人艰不拆啊,发过两个 mac app,20 个下载量就能上分类榜 Top 5。
刚才看了下,嗯,没错,已经在排行榜上保持 2 个月了。
quietjosen
    95
quietjosen  
OP
   2017-07-19 08:16:26 +08:00
@rajiha 最开心遇到用户 😀
quietjosen
    96
quietjosen  
OP
   2017-07-19 08:16:48 +08:00
@cctrv 恩,我也要入坑 iOS 了🤝
quietjosen
    97
quietjosen  
OP
   2017-07-19 08:17:11 +08:00
@beakey 这是一个悲伤的故事。
quietjosen
    98
quietjosen  
OP
   2017-07-19 08:17:49 +08:00
@Joee 什么 App 呀,说出来也顺便推广下呗~
meepo3927
    99
meepo3927  
   2017-07-19 08:33:00 +08:00
歪个楼,媳妇总想买 MacBook,她平时主要用 office 软件( PPT,word ),

如何有效劝阻?
mr2xd
    100
mr2xd  
   2017-07-19 08:43:11 +08:00
@meepo3927 给自己买台 MacBook 用给她看
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2902 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 13:56 · PVG 21:56 · LAX 05:56 · JFK 08:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.