1. iphone 的开发过程是怎样的
其实这个问题在Steve Jobs那本书里面有, Chapter 36 <The iPhone>. 下面是我个人的总结和翻译(里面还附带我读完觉得比较有感触的地方):
05年的时候,iPod销售火热.Steve已经开始思考什么竞争产品可能抢走他们的市场份额.他察觉到了手机: 首先手机几乎是每个人必须的,另外人们可以通过在手机中整合音乐播放来和iPod竞争,另外手机还可以其他更加丰富的功能:比如摄像头. 于是Jobs也决定做Apple自己的手机. 所以,总结起来,其目的就是防止其iPod产品被其他公司的手机所取代,另外因为手机几乎人人需要,这会是一个巨大无比的市场.
另外做的过程当中一些细节的事情很值得让人寻味:
1. 最开始,Jobs和Motorola合作,在他们的手机RAZR里面加入iPod功能,取名ROZR.但是Jobs用完后觉得是一坨屎,于是放弃合作,决定全部自己来做;
2. 在iPhone之前,iPad项目就在秘密进行中,原计划就想在平板电脑上面支持multi-touch.但是后来Jobs觉得这一技术可以先用于iPhone,于是将Tablet的计划暂时停掉,转战iPhone. 他们先秘密收购了 FingerWorks,拿到所有专利,并将其整合到iPhone中来.
3. 开发iPhone的过程是Apple内部两个团队互相竞争. 一队人尝试将之前的iPod转成手机,使用转轮来控制.其优点是菜单选择和音乐功能操作非常便利,但是字母输入成为重大弊端; 另一队人采用平板上面的技术,做一个用multi-touch的方式来操作的手机. 前一个项目取名P1, 后一个取名P2, 最后众所周知P2取得胜利. 最终成为2007发布的第一代iPhone. 而第一队人马成为悲剧角色.
4. iPhone开始打算采用塑料屏幕,但是Jobs觉得要打造一个够酷的手机,应该使用其他更优质更炫的材料,于是他们最后决定用玻璃. Jobs主动去联系当时著名的厂商: Corning Glass, 并详细阐述了Apple对玻璃的要求(Gorilla Glass). Apple的要求之高,使得Corning的CEO Weeks害怕他们不能按时交付产品. Jobs忽悠+鼓励, 最后Corning 6个月内就完成了交付.
5. Jobs对其Design团队要求非常苛刻. 而且有时会在产品开发到后期的时候推翻之前的design而从头再来. Jobs对iPhone的细节就达到了吹毛求疵的程度. 传记里面说:"Jobs一夜没睡,第二天召集Jony Ive说他觉得现行的iPhone太"masculine, task-driven, efficient" (传记里面的原话), 于是要求Ive的团队打翻重做." 于是他们又花了几周时间,得到iPhone一代最终的样式. 为了这个design的修改,最后电路结构,天线还有电池位置都要更改. 而里面的员工回忆说:"要是其他公司,可能就直接发布之前的版本.但是Apple不一样,我们按下reset键,从头做起".
从上面可以看到Jobs和Apple一直保持着的其他公司难以企及的风格:
1. 对产品的外形设计,硬件配置和软件技术有着强势的控制力,同时勇于创新;
2. 对产品要求非常苛刻,有一丝不达标,不惜打翻重做;即使是硬件的具体材质,他们都会严格控制.
3. iPhone的开发采用了公司内两队竞争的方式.(我不知道是不是每个产品都这样,我觉得应该不是.不过好像听说微软喜欢采用两队竞争的形式);
4. 强有力的执行力.
另外我也推荐这篇回答: http://www.quora.com/Apple-Inc-2/How-does-Apple-keep-secrets-so-well
里面说了Intel Macbook是如何被Jobs提到公司议程上面来的. 感觉很多时候,Apple (以及Steve Jobs)的办事非常迅速,经常是说干就干, 竟让我觉得有点像是一个创业期的小公司.
2. 只要一个 iPad,手把手教你给 iPhone 开发应用
科技 是一种人文素养,我认为 Swift Playgrounds App 的核心定位正是如此。
未来世界创新、创业、创造的大门,需要我们用一种有着人文温度的方式去开启。
我自己从初中开始看硅谷三大春晚——Apple WWDC 开发者大会、谷歌I/O 大会、微软Build 大会;在高中的时候,虽然身为文科生,但是开始了装「黑苹果」、自学编程的神秘炼金术之旅。Swift 因此成了我的计算机语言母语,而大学时期也很幸运地入选了 WWDC18 奖学金计划,能够带着我们团队自己开发的 App 见到了库克。我们后来休学创业,拿了几轮融资,至今还在这个波诡云谲却充满魔力的创业场拼搏。
这些过去的经历,都成了乔布斯所说的「connecting the dots」的一部分。我和一家做少儿素质与编程教育的机构也有着不少的合作,也带过几支天才少年队伍,看着他们忘我地投入,看着他们迸发着颠覆性创造力的光芒。
由 Apple 推出的编程工具 Swift Playgrounds 近期推出了 4.0 大版本,我使用它开发了一个简单的疫情数据看板 App,并以此作为一次简单的体验,将过程中的思考和体悟和大家分享。
我们为何学习编程、如何学习创造,Apple 给了我们他们的思考。虽然 Swift Playgrounds 现在还充满了各者培种瑕疵,但我们也看到了全新的可能:AR、AI、传感器、多维交互、物联网,这些前沿的技术,以及伴随其中的人文主义光辉,都能够在这个小小的设备中,经由每一个开发者的研磨,如同坩埚一般,炼就出自己的结晶。
让我们开始吧。
注:本文中所有新冠疫情数据来自 腾讯开放平台数据接口,仅用作产品功能效果演示,不具有任何防疫相关参考价值,新冠疫情准确数据,请查阅官方数据平台。
在 Swift Playgrounds 中写一个疫情数据 App,整个体验充满了惊喜与迷思,总之情绪如同一杯馥郁的咖啡,浓烈唤袜而复杂。
我一直在用一台 2017 年的 10.5 英寸玫瑰金 iPad Pro,它伴随了我的整个大学到现在创业的时光。它曾陪伴着我去过 WWDC18 面对面见过库克(没错)。然而自从升级 iOS 14 以来,我开始对其体和嫌激验心生不满,尤其是 Swift Playgrounds 在更新 4.0 大版本前的频频闪退和卡顿问题着实让我头大。
虽然我从朋友那里搞来了一台 12.9 英寸的全面屏 iPad Pro,但由于种种原因没有升级到 Swift Playgrounds 开发 App 所需的 iPadOS 15.2 的环境,于是最终还是投奔到了自己的陈年旧相识的怀抱。
好在 Swift Playgrounds 4.0 对系统兼容性与性能的优化,让我瞬间觉得「爷青回」。我尝试了直接在 iPad 上触屏、触屏 + 键盘、触屏 + 键盘 + Magic Trackpad 的体验,确实觉得如果没有一套像样的键鼠方案做配合,效率依然会大打折扣。
由于 macOS Monterey 12.1 依然没有开放 Universal Control 通用控制功能,我最终选择将 iPad 画面投屏到 Mac 的显示器上。
作为一个简单的尝试,我打算写一个实时展示疫情数据的看板 App。
SwiftUI 配合 iPad 的屏幕操作逻辑,可以说很大程度降低了 UI 部分开发的复杂度,右侧的 App 预览响应迅速,提供了所见即所得的及时反馈。
左侧的代码窗口也新增了 Xcode 样式的自动补全,在多数情况运转良好,然而也会在不少场合耍个脾气,考一考你「默写」代码的能力。当然我期待这些问题能够尽快在后续版本中得到改善。
我们也可以直接编译代码,Swift Playgrounds 则会开启一个新窗口来运行应用,日志则均可通过自带的控制台输出。
Swift Playgrounds 可以像在 Xcode 编辑 .plist 文件一样,为应用增加系统级能力支持。而同时,Swift Playgrounds 也允许开发者使用 Swift 包管理器来在线获取第三方模块的支持。
App 可以选择自带的占位符或者自定义图片作为图标,并且打包编译,发布到 App Store。Swift Playgrounds 自带的手绘风格图标颇有「Everyone Can Code」的质感。
写完的 App 也可以直接发布 App Store 审核。
iPadOS 上 Swift Playgrounds 开发 App 的 .swiftpm 工程无法在 macOS 上的 Swift Playgrounds 中打开(或许还需坐等 macOS Swift Playgrounds App 更新),但是可以在 Xcode 的 Swift Playgrounds 模块运行。
我们现在能够看到 macOS 上 Xcode App 中的 Swift Playgrounds 功能模块、macOS 独立的 Swift Playgrounds App 与 iPadOS 上的 Swift Playgrounds App 三者并存且互相有所不兼容的情况。对于初学者而言,若不加了解,这确实是一条令人有些困惑的产品线。当然我相信 Apple 会在后续解决这一问题。
此次体验下来,我认为新版的 Swift Playgrounds 也还存在以下不足:
对于想通过 Swift Playgrounds 入门编程的新手,我也在这里提出一些个人建议。
首先是设备,我手中的 2017 年款 iPad Pro(A10X 处理器)运行 Swift Playgrounds 4.0 没有出现明显的性能瓶颈,因此我姑且认为往后的新机型应该都有着不错的性能表现。
文档:前文说到,现有的 Swift Playgrounds 4.0 如果要以 IDE 的要求来看,还缺少必要的类型提示和文档内容的说明。这时候我们也可以选择手动查阅开发者文档,这是 Apple 对各类系统框架事无巨细的说明。在 Swift Playgrounds 更早版本的更新中,Apple 已经将大部分的开发者文档内置到了 Swift Playgrounds 中,我们可以在工具中找到文档的查询入口。或者,我们可以使用浏览器访问 Apple Developer 开发者网站 查询文档。
Swift 语法入门:Swift Playgrounds 在更早版本中,已经提供了 游戏 化 Swift 语言学习的各种模块,如果你是 Swift 语言的新手,可以通过学习官方提供的学习编程 1、2、3 和其他一系列的学习模块来 探索 Swift 语言。
SwiftUI 入门:SwiftUI 是 Apple 发布于 2019 年 WWDC 大会的基于 Swift 的UI框架,结合了代码 UI 编辑和 Storyboard 图形化 UI 绘制的优点。因此 Swift Playgrounds 默认将 SwiftUI 作为创建一个空白 .swiftpm 工程后的初始界面模板。
如果你对 SwiftUI 还不熟悉,网上有不少优秀的教程内容可以学习,你可以在 Swift Playgrounds 跟着教程一起学习。当然,有时候自动补全功能的失效会给学习者带来一点点困惑,我希望这个 Bug(但愿不是一个 feature)能够被尽早修复。当然,你也可以使用 UIKit 来实现界面,不过我认为现有的工作流更为 SwiftUI 量身打造。
尝试 AR 体验:如果你想在 Swift Playgrounds 开发的 App 中体验一下 AR,Apple 的 AR Quick Look 页面提供了不少开放的模型。我们可以通过创建 ARQuickLookPreview 来加载各类 USDZ 文件。
社群:现在基于 Swift Playgrounds 开发 App 的爱好者社群还在萌芽阶段,因此找一个有 iOS 等生态开发经验的朋友能够极大提高你的学习速度。当然,你也可以创建一个社群让好朋友们一起交流讨论。比如少数派本身便是这样一个不错的社群,期待各位能在其中共同学习,各显神通。
当然,瑕不掩瑜,我依然为这一次 Swift Playgrounds 的重大升级深感高兴。在 iPad 上进行「真正」地开发 App 的呼声从 iPad 推出之日起便此起彼伏。我在初中拥有第一台 iPad 2 的时候,就千方百计地尝试用它来开发点什么,而这一次的 Swift Playgrounds 升级则真正地表明了 Apple 的立场。
我一直不很在意关于 iPad 生产力的争论。然而,我和身边不少用户切身体会到的,确实是 iPad 作为一个 科技 产品,给人源源不断带来的幸福感。书桌旁、画架上、被窝里常常有着它和我形影不离。因此,和 Mac 相比,我一直觉得 iPad 是一个让人更少异化、更多自由的产品形态。
因此 Swift Playgrounds 正如其名称一般,也是一个大家能够在代码、多媒体内容与知识的 探索 与交互中自如玩耍的地方。在未来,并不会人人都做程序员,但 Everyone Can Code 能够真正让 科技 作为一种人文素养,让每个人都徜徉其间,用开放包容和智慧的心态,面向与人类走向共融共生的通用智能。
库克表示他不说元宇宙一词,Apple 看好 AR。
AR、VR、AI、物联网、区块链、数字孪生、量子计算、Web3、元宇宙…… 各种词汇总是在不经意间成为资本的宠儿,却又在悄无声息中急流勇退,大浪淘沙留下一波真正做事的人。
AR 作为在 iPad 先行的验证,并被着力主推的技术能力,或许不久就会以全新的硬件形态与大家见面。运行在 iPadOS 之上的 Swift Playgrounds,结合 Apple 软件全家桶的一系列应用,将进一步将多媒体的创造能力带给每一个人,而这次会将 3D 沉浸空间体验的创造也逐步纳入进来,Swift Playgrounds 4.0 正是起点。
往后,Swift Playgrounds 结合 Reality Composer App 和大幅升级改造的「地图」应用,使用 USDZ 格式文件,配合或将推出的穿戴式硬件设备,有可能能够拓展成为一个「3D 沉浸式体验编辑器」。它的潜力,可以是下一个时代的「Word」。当然,我们要看 Apple 将如何打这一套组合拳。
最重要的是,机遇永远不在一家公司手中。创新、创业、创造将是每个人的全新可能,而这正是 Swift Playgrounds 作为这样一个赋能人的工具,在根本上的意义:Give people wonderful tools, and they'll do wonderful things.
凡是过去,皆为序章。
3. iphone开发需要什么
开发环境的要求
硬件:
1.苹果电脑, 必须是基于Intel的Macintosh计算机。
2.iPhone或iPod Touch,主要用来测试编写好的程序。
软件:
1.苹果系统MacOS。
2.iPhone SDK(请从http://developer.apple.com/iphone/下载最新版SDK),SDK中包含苹果公司的集成开发环境Xcode,iPhone模拟器及其它一些开发工具。
开发环境的简单介绍
开发环境主要包括
Xcode (主要开发工具)
Interface Builder (界面快速设计工具)
iPhone Simulator (iPhone模拟器)
SDK(Software Development Kit,软件开发工具包)
Xcode简单介绍
开发iPhone OS及Mac OS X应用,需要在Mac OS X运行Xcode开发工具
Xcode是Apple的开发工具套件,支持项目管理、编辑代码、构建可执行程序、代码级调试、代码的版本管理、性能调优等等
Interface Builder 简单介绍
可视化地设计应用程序的用户界面。
从Interface Builder的控件库中通过拖拽创建诸如窗口,视图,菜单,按钮等
可视化的设置控件属性,建立各控件之间的连接;
保存后的nib文件包括了控件对象,控件配置,以及控件布局等信息,程序加载nib文件时根据这些信息创建对象。
Xcode 与 Interface Builder 的联系
同时使用Xcode和Interface Builder工具,简化代码,便于维护,加快开发
使用Xcode来设计程序的逻辑,使用Interface Builder 来设计程序的界面。
关键字IBOutlet和IBAction在Xcode中用来声明属性和方法,在Interface Builder中与这些声明建立连接。
iPhone模拟器
iPhone模拟器是可以在电脑上部署和测试你的应用程序的目标平台
iPhone模拟器提供了类iPhone的环境,通过菜单选项,可以模拟屏幕锁,屏幕转向,内存警告等功能
因为电脑没有提供一些必要硬件,所以iPhone模拟器也有功能限制
iPhone模拟器
功能限制:
✕ 不能使用GPS定位
✕ 不能使用加速计
✕ 不支持超过2个手指的触摸的多点触摸
✕ 不能打电话
✕ 不能使用3G网络
✕ 不能使用相机和麦克风
✕ 仅提供一些原装程序如Safari,Contact,Photos,Settings
✕ 无法测试程序对iPhone CPU和内存的消耗情况
SDK -Software Development Kit,软件开发工具包。
为iPhone平台,Mac OS X系统编写的软件开发包和软件框架。使用它提供的类和API等其它资源来快速开发针对特定硬件平台和操作系统的程序。
SDK有不同平台的版本(如iPhone平台,Mac OS X平台)和同一平台的不同版本。可以让我们开发部署不同平台和同一平台不同版本的应用程序。
开发文档的使用
Xcode带有文档浏览器,包括了类参考,API参考等。
访问苹果开发者官网(http://developer.apple.com/iPhone/),里面有示例源代码,技术指导文档,参考文档,视频指导等等丰富的资源。
Objective-C语言是为支持面向对象编程而设计的一个简单的计算机语言
Objective-C是标准的ANSI C的一个小而强大的扩展集
Objective-C对C的扩展都是基于Smalltalk语言
Objective-C给了C完全的面向对象编程能力。
Objective-C的编译器基于gcc编译器。
Objective-C语法是GNU C/C++语法的超集,
Objective-C编译器能够编译C(.c),C++(.mm)以及Objective-C(.m)的源代码。
Objective-C 类
一个类由两部分组成:
接口(Interface),声明方法,变量,指出父类和遵守的协议。文件后缀.h;
实现(Implementation),实现类,主要包括方法的实现。文件后缀.m
Objective-C 类的声明
类的声明的基本格式:
@interface ClassName : ItsSuperclass
{
instance variable declarations //实例变量声明
}
method declarations //方法声明
@end
比如:
@interface Rectangle:NSObject
{
BOOL filled; NSColor *fillColor;
@private:
float width; float height;
}
+ alloc; //类方法,[Rectangle alloc]
- (void)display; //实例方法 [rectangle display]
- (float)width; //存取器方法,和变量同名,获取变量
- (void)setWidth:(float)inWidth; //set+变量名,设置变量值
- (void)setWidth:(float)inWidth height:(float)inHeight;
@end
Objective-C 编译器对Objective-C源代码(.m)进行编译,要求方法返回值类型和参数类型都要用括号括起来。
-(void)setWidth:(float)width height:(float)height;
多参数方法,有必要表明各个参数的功能
Objective-C 头文件导入
#import "ItsSuperclass.h”
@interface ClassName : ItsSuperclass
{
instance variable declarations
}
method declarations
@end
#import关键字导入一个类的声明,和C++中#include功能一样
区别于#include,可以保证同一个类的声明只被导入一次
Objective-C 类名的引用
#import "ItsSuperclass.h”
@class Rectangle;
@interface ClassName : ItsSuperclass
{
Rectangle *rectangle;
}
@end
@class 告诉编译器Rectangle是一个类,不需要引入它的头文件;
@class 缩短编译代码,减轻编译器负担。
Objective-C 类的实现
_每个类的实现中必须导入相应头文件。如
#import "ClassName.h”
@implementation ClassName
method definitions
@end
4. 自学开发iphone app需要多久,学习规划如何
无基础文科生入门iOS的3个月(以第一个上线作为入门标准)
第一步:编程入门课
时间预计:4个星期
推荐看公开课,Udacity也行,网易公开课也行,自己找一个面对对象语言(一般是JAVA, C++, Python)的课。我是在网易公开课看的斯坦福的CS106A,学的JAVA。
如果你纯粹学iOS开发,不推荐看哈佛CS50,CS50是给CS系的学生介绍整个计算机世界的框架,讲的内容比较多,进度比较快,对iOS开发其实有点累赘了。(臣妾有点跟不上啊!!)计划安排是一天一课,看课程要求的书(至少看完一本)及大部分作业。这一阶段重点不是语法;
第二步:上手iOS!
时间预计:2星期
强烈推荐CS193P,老头子讲的超级好!我的很多东西(对象思维啥的)是在这里跟着做练习的时候才真正明白的(好啦,也可能是上一堂课练习做得少的原因)。如果等到9月应该itunes U上会开始教iOS 7了。网易公开课的是2010年iOS 5版的,前10堂课,也行。(iTunes U上有完整的课)
CS193P说有prerequisite,一开始被吓到,事实证明还是可以学下去的。头两节课一头雾水,没关系,把itunes U上的课件下载下来,把所有代码打出来,然后一个个元素对应之前学的语言匹配,再不懂先放着,继续学后边的,过几天打多点代码就懂了。
感觉学5、6堂课,一个星期左右就可以开始进入下一阶段自己做东西了。之后用啥学啥,每堂课都有主题的。速度慢点的同学们,这阶段跟我一样准备两个星期吧!
第三步:开发app!
时间预计:2星期(本人...1个半月,实在不好意思说出口)
这个时间就可长可短啦,还包括美工,交互啥的。坚持要用啥学啥的原则,其实就是知道iOS SDK都有什么组件,每个组件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有个师傅,这个阶段真的是进步神速。
好的!不出意外,你的第一个app就这么新鲜出炉了!从今天开始,成为一个冷艳逼格高尚的iOS开发者吧!