V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
wingkai
V2EX  ›  iDev

web 开发想学苹果原生 app 的开发,有什么好的建议

  •  
  •   wingkai · 2021-06-10 23:54:13 +08:00 · 8027 次点击
    这是一个创建于 1290 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我这里说的是泛指 iOS macOS iPadOS 这种,

    感觉 web 技术局限还是太大,很多事情不好做。
    想稍微试着做点收费的小东西也不好搞。
    或者只是针对某个小需求做个小软件,上 electron 太夸张也没必要,还耗电。
    所以对开发苹果的 app 有了想法(以后可以也想做个独立开发者)

    之所以囊括三个平台一起讲,是因为我在用 telegram 的时候发现它的三端 app,ux 都很统一体验也非常棒。
    盲猜应该有不少公用的代码吧,UI 层面样式什么的,响应式开发之类?

    回到话题,所以目前开发苹果的 app,都是怎样的呢?
    css 、js 、html,这些对应到 app 上、调试、打包、发布。

    有没有什么学习路线或者教材可以推荐的。
    苹果官网倒是有个菜谱的 iOS 软件,但如果我想做另外两个平台的呢?好像没看到对应的教程。

    光是看 swift 语言的教程,好像也还没搞懂它和 app 的关系……
    第 1 条附言  ·  2021-06-11 10:30:00 +08:00
    不要说微信体系内的东西,这些在我看来都是异端,

    flutter 也不要提及。
    46 条回复    2022-07-15 06:42:05 +08:00
    charlie21
        1
    charlie21  
       2021-06-11 00:21:45 +08:00
    aptx4689
        2
    aptx4689  
       2021-06-11 00:46:55 +08:00
    推荐斯坦福大学的 iOS 公开课
    agagega
        3
    agagega  
       2021-06-11 01:33:58 +08:00 via iPhone   ❤️ 2
    > 盲猜应该有不少公用的代码吧,UI 层面样式什么的,响应式开发之类?

    iOS 和 macOS 的 UI 框架是不同的,一个叫 UIKit 一个叫 AppKit ;但底层和其他很多框架 API 是相同的,代码可以共用。苹果有一个技术叫 Mac Catalyst,是指在 macOS 上实现了 UIKit 的兼容层,可以把一部分 iPad 软件稍作修改重新编译放到 Mac 上跑(和 M1 的直接运行不一样)。

    传统 iOS/macOS 开发的逻辑是 MVC,也就是用代码 /拖控件的方式创建界面,然后设置好每个控件的 controller,每个 controller 有一些可以 override 地方法以响应 UI 事件。

    现在主推的是 SwiftUI,这个就很接近 MVVM 前端框架的玩法了。大部分代码可以在多端兼容,少部分单独适配改起来也很快。问题在于最低兼容 iOS 13/Catalina 和有些坑。今年 iOS 15 和 macOS 12 出了之后 SwiftUI 基本可以算成熟了。
    wd
        4
    wd  
       2021-06-11 07:20:18 +08:00 via iPhone
    不是应该选 react native 吗?一天就可以撸一个 app 出来。
    JoJoJoJ
        5
    JoJoJoJ  
       2021-06-11 08:04:10 +08:00 via iPhone
    当然 swiftui 了
    sanking
        6
    sanking  
       2021-06-11 08:37:16 +08:00 via iPhone
    flutter 了解一下
    holulu
        7
    holulu  
       2021-06-11 08:45:11 +08:00
    同 Web 开发,买了本 SwiftUI 的书,边开边弄。
    fumichael
        8
    fumichael  
       2021-06-11 08:59:21 +08:00
    也许可以上招聘网看看 iOS 开发的岗位招聘都要求些什么技术栈
    JoJoJoJ
        9
    JoJoJoJ  
       2021-06-11 09:01:24 +08:00 via iPhone
    @sanking 人家都说原生了
    Leonard
        10
    Leonard  
       2021-06-11 09:10:34 +08:00
    iOS 和 iPadOS 开发基本完全一样,都是 UIKit,就是少数几个 API 不一样而已。
    macOS 用的 AppKit,差别也不是太大。
    你随便弄懂一个,其他的就好说。
    SwiftUI 可以多端共用,但是基于各平台操作逻辑和页面布局习惯不一样,可能你还得根据各端来改。
    chiaf
        11
    chiaf  
       2021-06-11 10:02:37 +08:00   ❤️ 1
    https://www.hackingwithswift.com/
    可以在这个网站上面学习,上面有简单的教程,不止是 swift 语言的,还有 uikit swiftUI,还有很多文章介绍一些功能的要怎么写。
    如果你学过 type Script,就会感觉 swift 跟 ts 语法上面很像
    fqy12300
        12
    fqy12300  
       2021-06-11 10:23:11 +08:00
    直接小程序不是更香
    wingkai
        13
    wingkai  
    OP
       2021-06-11 10:40:42 +08:00
    @agagega 感谢回复,另外 swift 和 这些 swiftUI 、appkit 、uikit 的关系还是不太理解。

    回想一下我学 web,先接触 html,有个基础的界面,然后是 css,美化这个界面,最后上 js,去控制并和 ui 交互。

    但回到苹果 app,又是怎样的呢,难道这些框架是类似 jq,react 一般的存在?我不用他们也能写界面?做交互?
    agagega
        14
    agagega  
       2021-06-11 11:05:27 +08:00 via iPhone
    @wingkai
    HTML 生来就是描述式的(虽然是静态的),写「有一个表单里面有一个文本框」,然后就会生成有一个文本框的表单

    而如果你接触过传统的 Win32 API 或者 Qt Widgets 编程的话,创建一个界面的代码实际上是过程式的:「新建一个表单对象,把文本框加入到表单里面,然后把这个表单设置成当前程序的根视图」。只不过面向对象的框架利用继承-覆盖的方式让你不用去写整个这个流程的代码。

    至于说有没有更底层的方法可以写界面..Flutter 的底层实现是自己做的,算吧?
    dingwen07
        15
    dingwen07  
       2021-06-11 11:32:52 +08:00 via iPhone
    > telegram 的时候发现它的三端 app,ux 都很统一体验也非常棒

    怕不是没用过 Android 和 Telegram Desktop
    CommandZi
        16
    CommandZi  
       2021-06-11 11:51:44 +08:00
    @wingkai Swift + SwiftUI + UIKit 就足够你开发 iOS 、macOS 、tvOS 的 App 了,AppKit 先不用管。
    你说的有个基础的界面、美化这个界面、控制并和 ui 交互。苹果这里全都是 Swift 写的。Storyboard 技术除外,这个也可以先不用管。
    CommandZi
        17
    CommandZi  
       2021-06-11 11:52:45 +08:00
    @CommandZi Swift + SwiftUI + UIKit + Foundation
    okakuyang
        18
    okakuyang  
       2021-06-11 11:53:07 +08:00   ❤️ 2
    @wingkai Swift 是编程语言 ,SwiftUI,AppKit,UIKit 是 UI 框架,
    以前 AppKit 是 mac 电脑上的 Ui 框架,UIKit 是 ios 上的 UI 框架,后来苹果将 UIkit 也带到了 mac 电脑。
    SwiftUI 是苹果最新的 UI 框架,与 UIkit 有很高的兼容,。支持一套技术栈开发 IOS MAC 平台的 App,甚至是一套代码,甚至不需要 if os(iOS) 这样的判断 就可以让代码 在对应平台出现适合的 UI 。
    mcluyu
        19
    mcluyu  
       2021-06-11 12:39:52 +08:00
    打开 Xcode, 新建一个 multiplatform 项目, 你会发现只有 swift 语言,UI 用 swiftUI, 三端通用。
    但是对于初学者,我觉得要求未免有点高了,可以先学习下 iOS+iPadOS, 基本是通用的,新建一个 iOS 工程也是默认支持这两端的,语言 swift,UI 可以选用 storyboard 或者 swiftUI, 也不用着急了解他们是什么关系,新建工程,上手写就好了,搜索类似于 “如何开发一个 iOS APP” 这样的教程应该就不难理解了,直接学习基础语言是有点太乏味,也不能理解它到底如何开发成一个 APP 的。
    yazinnnn
        20
    yazinnnn  
       2021-06-11 13:01:42 +08:00
    swift 是不是和 c# kotlin 很像?
    感觉这三种语言跟哥仨一样
    cz5424
        21
    cz5424  
       2021-06-11 13:03:01 +08:00 via iPhone
    @mcluyu 我是被这样坑了,结果发现 switfui 的好多问题都找不到答案,遇到了坑要自己摸索,还不如 uikit,一找就有答案。各大论坛还有一堆 objectC 的东西,都过时了
    mcluyu
        22
    mcluyu  
       2021-06-11 13:20:30 +08:00
    @cz5424 swiftUI 太新了, 这才第二年,很多东西没稳定下来, 至于 OC, 其实也没那么旧,特别国内应该绝大部分 APP,公司依然在使用,很多三方框架也依然是 OC 写的,因为 swift 基本可以直接调用 OC 写的大多数东西,反过来则需要做更多的兼容。
    倒也确实有很多复制粘贴的文章,都是老旧的 API 过时的东西,新手不易甄别。
    Leonard
        23
    Leonard  
       2021-06-11 13:24:07 +08:00
    @cz5424 #21 我现在还在写 OC,很多公司的项目全是 OC 的
    3dwelcome
        24
    3dwelcome  
       2021-06-11 13:30:08 +08:00
    @agagega “HTML 生来就是描述式的(虽然是静态的)"

    然而 VUE 硬生生把 HTML 玩成了动态式的(手动狗头),每个节点都有属性控制 class 样式,随时随地用虚拟 DOM 来刷新页面的显示结构。

    这是传统 UI 望尘莫及的,Win32 或者 QT 都是通过传递消息来响应和修改界面。
    tutuge
        25
    tutuge  
       2021-06-11 13:53:48 +08:00
    @3dwelcome "这是传统 UI 望尘莫及的,Win32 或者 QT 都是通过传递消息来响应和修改界面。" - 再怎么虚拟 DOM 操作 HTML,都要经过浏览器渲染,都还是“原生”在默默干活。。。
    jielong
        26
    jielong  
       2021-06-11 14:17:12 +08:00
    我觉得想一步到位自己写其实很难。
    我也是个前端最近有在学习,买了 onevcat 的书,准备直接照着书本 demo 写。中间难理解的地方就先了解一下有这么个东西,然后直接跳过,之后再按自己的思路去改动 demo,加强理解。
    3dwelcome
        27
    3dwelcome  
       2021-06-11 14:22:01 +08:00
    @tutuge 可问题是用习惯了虚拟 DOM 后,就再也回不去了。有了 v-show 后,不可能再去写个函数,手动来控制 DOM 的显示和隐藏。

    对于交互式 UI 界面,不管是传统 SDK 还是现代 UI,用 VUE 理念基本能通吃 60%~ 70%。剩下的定制控件和大型数据表没办法,只能慢慢手写功能。

    尤雨溪在知乎上说过,VUE 虚拟 DOM 的 backend,可以是任何平台。不一定局限于 HTML 的。
    HongJay
        28
    HongJay  
       2021-06-11 14:25:15 +08:00
    flutter flutter flutter
    LINAICAI
        29
    LINAICAI  
       2021-06-11 14:37:20 +08:00
    swiftUI
    fffang
        30
    fffang  
       2021-06-11 14:46:26 +08:00
    native 端没有 html+css 这种标记式的 UI,用的是命令式 UI 方式,你需要在 controller 里写一个 View 添加到父 View 上去。现在有新式的声明式的 UI 方式,也就是 SwiftUI,同时它也是声明式的。SwiftUI 是用 Swift 实现的。Swift 和 app 的关系就像 js 和 webapp 的关系。
    调试的话使用 xcode 左上角的运行按钮,在 Xcode 代码区域左侧可以添加断点。打包、发布需要使用 Xcode 顶端工具栏 Product 选项里的 Archive,然后 Distribute 到 iOS 市场或 Mac 市场,略有区别。他们都需要你提供开发者证书。
    linhongye
        31
    linhongye  
       2021-06-11 14:51:26 +08:00
    想个项目出来, 上 swiftUI 直接撸, 不会就搜索, 水平突飞猛进.
    英语水平要过关, swiftUI 只有英文资料能看.
    想招 swiftUI, 职位说明得用英文写...
    HolmesYe123
        32
    HolmesYe123  
       2021-06-11 15:21:49 +08:00
    lz 的前端思维太强了吧,搞其他端转不过来吧
    Jiangzai
        33
    Jiangzai  
       2021-06-11 15:37:01 +08:00
    1. 语言的选择,iOS 目前有 Objective-C 和 Swift 两个,传统的大厂还是用 OC 的多些,打算个人开发可以直接学 Swift,未来可期,没有历史包袱。
    huangyuhua2018
        34
    huangyuhua2018  
       2021-06-11 15:44:59 +08:00
    swiftUI 还没普及,感觉还得过个一两年,还是先得学会 UIKit 那一套
    Jiangzai
        35
    Jiangzai  
       2021-06-11 15:48:47 +08:00
    0. 配置:Mac 电脑+Xcode+苹果设备(调试,也可暂无,使用模拟器) + AppleId 开发者账号,只注册不交钱的就行。
    1. 语言的选择,iOS 目前有 Objective-C 和 Swift 两个,传统的大厂还是用 OC 的多些,打算个人开发可以直接学 Swift,未来可期,没有历史包袱。
    2. 基本的语法在网上搜一下熟悉了就行。
    3. 语法熟悉之后,还要了解一些苹果 UIKit 的基本 API,这才是开发 App 主要用到的东西,例如 UIButton 、UIView 、UITableView 、UICollectionView 等等,主要是视图上的,至于其他蓝牙、多线程用到再学就可以。
    4. 掌握了这些就可以上手写一些小 demo 了,当然 SwiftUI 也可以考虑,更友好。
    5. 教材我觉得可以先不用,介绍的很全,但是有不少其实暂时用不到,等遇到了瓶颈再找专门解决就行。推荐官网的文档!!!
    6. Swift 只是一门语言,App 要运行起来,需要用到许多苹果封装的各种 Kit 才行。调试、打包这些都是 Xcode 的功能而已。
    Jiangzai
        36
    Jiangzai  
       2021-06-11 15:53:51 +08:00
    另外说一句 flutter,我们公司现在开发就用,有好有坏。的确可以提效,但是有些能力必须借助于原生,也会遇到比较奇怪的问题,调试的时候其实还是要对应的 native 开发。另外,flutter 在 iOS 上的 UI 细节感觉没有原生那么好,毕竟是 google 推出的,怎么看都有安卓的味道
    janus77
        37
    janus77  
       2021-06-12 20:54:06 +08:00
    做小东西可以直接 swift,多端统一开发好像体验更好,另外 swift 也可以用于服务端
    工具和软件基本都是苹果自己的一套,IDE+编译+发布都是 xcode,需要开发者账号,官网自带文档。
    95276
        38
    95276  
       2021-06-16 10:56:16 +08:00
    11 楼说的网站很不错.
    onevcat
        39
    onevcat  
       2021-06-30 23:08:05 +08:00
    什么!居然又有人要开始学 iOS 了?!
    ryh
        40
    ryh  
       2021-07-06 12:44:52 +08:00
    @onevcat 看见猫神,就想问 kingfisher 的缓存
    我看 macOS 里是存在独立的目录而不是各个 app 的 sandbox 里的,那么有没有这种可能
    app 某个 URL 的图片,比如说身份证 /隐私照片,是登录 /auth 后才能获取的,使用 kingfisher 缓存了,第 3 方其他的 app 知道这个 URL 的情况下,这个缓存会不会被第 3 方显示出来。
    因为只是猜测所以没发到 GitHub issue 里,twitter 没法 message,只能发到这里,抱歉
    onevcat
        41
    onevcat  
       2021-07-07 07:32:47 +08:00 via iPhone
    @ryh 可能的…这种 Kingfisher 没法帮你检测,可能需要自己实现一个 Cache Serializer 加一下密
    onevcat
        42
    onevcat  
       2021-07-07 07:35:30 +08:00 via iPhone
    @ryh 如果是涉及隐私的东西 不管是不是有沙盒保护 个人建议要存本地的话 都是加密一下比较好。或者干脆跳过 disk 缓存
    duhb
        43
    duhb  
       2021-07-09 20:25:05 +08:00
    什么?竟然看到有人说 SwiftUI 已经基本成熟了?我们 iOS 开发界目前还都在认为这个东西是苹果的实验产物,以后能不能用和普及还未可知好嘛。
    KeyboardManAnAn
        44
    KeyboardManAnAn  
       2021-08-11 17:24:48 +08:00
    @duhb 以后肯定是会普及的, 只是现在暂时可能不太敢尝试, 毕竟不太成熟, 现在新推出的主流 UI 框架都是声明式的, 这显然是一个潮流, SwiftUI, Jetpack Compose, Flutter, 包括还未正式推出的微软的 MAUI, 都是这个路数.
    Jsonz
        45
    Jsonz  
       2022-07-13 09:15:16 +08:00
    @holulu 一年了 老哥如何
    holulu
        46
    holulu  
       2022-07-15 06:42:05 +08:00
    @Jsonz 本来计划业余时间玩玩的,只是这两年基本没什么业务时间,企业都在裁员,没被裁都在卷
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2519 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:35 · PVG 12:35 · LAX 20:35 · JFK 23:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.